]> code.delx.au - pymsnt/commitdiff
File transfer nearly working...
authorjamesbunton <jamesbunton@55fbd22a-6204-0410-b2f0-b6c764c7e90a>
Tue, 1 Nov 2005 02:36:04 +0000 (02:36 +0000)
committerjamesbunton <jamesbunton@55fbd22a-6204-0410-b2f0-b6c764c7e90a>
Tue, 1 Nov 2005 02:36:04 +0000 (02:36 +0000)
git-svn-id: http://delx.cjb.net/svn/pymsnt/trunk@12 55fbd22a-6204-0410-b2f0-b6c764c7e90a

committer: jamesbunton <jamesbunton@55fbd22a-6204-0410-b2f0-b6c764c7e90a>

src/disco.py
src/ft.py
src/legacy/glue.py
src/legacy/msnw.py
src/tlib/msn.py
src/tlib/msnft.py

index fd8a0b986912c54158cb4a66ce8f2f1c66ca3a8b..c2431e2369acea7ac37508566269a1a9e32f6c50 100644 (file)
@@ -235,12 +235,12 @@ class ServerDiscovery:
 class DiscoRequest:
        def __init__(self, pytrans, jid):
                LogEvent(INFO)
-               self.doDisco()
+               self.pytrans, self.jid = pytrans, jid
        
        def doDisco(self):
                ID = self.pytrans.makeMessageID()
-               iq = Eleemnt((None, "iq"))
-               iq.attributes["to"] = jid
+               iq = Element((None, "iq"))
+               iq.attributes["to"] = self.jid
                iq.attributes["from"] = config.jid
                iq.attributes["type"] = "get"
                query = iq.addElement("query")
index c9faf03491e9950a9a510f8c6514caf4c2fe9ee1..b0fd50ee10d0f812270b43001ae262dfce714bb7 100644 (file)
--- a/src/ft.py
+++ b/src/ft.py
@@ -3,7 +3,8 @@
 
 import disco
 from debug import LogEvent, INFO, WARN, ERROR
-
+import config
+import utils
 if utils.checkTwisted():
        from twisted.xish.domish import Element
 else:
@@ -30,6 +31,7 @@ class FTReceive:
 
        def __init__(self, session, senderJID, legacyftp):
                self.session = session
+               self.toJID = self.session.jabberID + "/" + self.session.highestResource
                self.senderJID = senderJID
                self.legacyftp = legacyftp
                LogEvent(INFO)
@@ -42,18 +44,18 @@ class FTReceive:
                        c3 = features.count(disco.IBB)
                        c4 = features.count(disco.IQOOB)
                        #if c1 > 0 and c2 > 0:
-                       #       socksMode()
+                       #       self.socksMode()
                        #elif c1 > 0 and c3 > 0:
-                       #       ibbMode()
+                       #       self.ibbMode()
                        if c4 > 0:
-                               oobMode()
+                               self.oobMode()
                        else:
-                               messageOobMode()
+                               self.messageOobMode()
 
                def discoFail(ignored=None):
-                       oobMode()
+                       self.messageOobMode()
                
-               d = disco.DiscoRequest(self.session.pytrans, self.session.jabberID)
+               d = disco.DiscoRequest(self.session.pytrans, self.toJID).doDisco()
                d.addCallback(discoDone)
                d.addErrback(discoFail)
        
@@ -70,7 +72,7 @@ class FTReceive:
                global oobSite
                self.legacyftp.accept()
                filename = str(random.randint(0, sys.maxint))
-               oobSite.putFile(self, filename)
+               oobSite.resource.putFile(self, filename)
                m = Element((None, "message"))
                m.attributes["to"] = self.session.jabberID
                m.attributes["from"] = self.senderJID
@@ -82,6 +84,7 @@ class FTReceive:
        
        def error(self):
                #FIXME
+               pass
                
 
 
@@ -117,16 +120,17 @@ class FileTransfer(resource.Resource):
                self.files[filename] = file
        
        def render_GET(self, request):
-               filename = "/" + request.path
+               filename = request.path[1:] # Remove the leading /
                if self.files.has_key(filename):
                        file = self.files[filename]
                        Connector(file, request)
                        del self.files[filename]
+                       return server.NOT_DONE_YET
                else:
                        page = error.NoResource(message="404 File Not Found")
                        return page.render(request)
 
 oobSite = server.Site(FileTransfer())
-reactor.listenTCP(8080, site)
+reactor.listenTCP(int(config.ftOOBPort), oobSite)
 
 
index b93e0110e403045216ec0489e3895a6864dfd38d..5319442ed15a23a429213432d1434b064ed0273b 100644 (file)
@@ -342,7 +342,7 @@ class LegacyConnection(msnw.MSNConnection):
        def gotSendRequest(self, fileReceive):
                if not self.session: return
                LogEvent(INFO, self.session.jabberID)
-               ft.FTReceive(self.session, msn2jid(fileReceive).userHandle, fileReceive)
+               ft.FTReceive(self.session, msn2jid(fileReceive.userHandle), fileReceive)
        
        def loggedIn(self):
                if not self.session: return
index a72f3ce777a6faeb3c3957de9a16b984534b3d6d..01be0d77c3fbc704f8e0496ad2f2a3b187902603 100644 (file)
@@ -826,6 +826,7 @@ class Switchboard(msn.SwitchboardClient):
                if self.badConditions():
                        fileReceive.accept(False)
                        return
+               LogEvent(INFO, self.switchboardSession.ident)
                self.switchboardSession.gotSendRequest(fileReceive)
 
  
index 56f615f7206f42f3b65502ee34ec3f89daa8ab17..d1250bee5b149a7c03f05ac6a9db419e89e31fcf 100644 (file)
@@ -119,6 +119,7 @@ MSN_PORT             = 1863               # default dispatch server port
 MSN_MAX_MESSAGE      = 1664               # max message length
 MSN_CVR_STR          = "0x040c winnt 5.1 i386 MSNMSGR 7.0.0777 msmsgs"
 MSN_AVATAR_GUID      = "{A4268EEC-FEC5-49E5-95C3-F126696BDBF6}"
+MSN_MSNFTP_GUID      = "{5D3E02AB-6190-11D3-BBBB-00C04F795683}"
 
 # auth constants
 LOGIN_SUCCESS  = 1
@@ -1934,7 +1935,7 @@ class SwitchboardClient(MSNEventBase):
 
     def _checkFileInvitation(self, message, info):
         """ helper method for checkMessage """
-        if not info.get('Application-GUID', '').lower() == '{5D3E02AB-6190-11d3-BBBB-00C04F795683}': return 0
+        if not info.get('Application-GUID', '').upper() == MSN_MSNFTP_GUID: return 0
         try:
             cookie = info['Invitation-Cookie']
             fileName = info['Application-File']
@@ -1942,7 +1943,7 @@ class SwitchboardClient(MSNEventBase):
         except KeyError:
             log.msg('Received munged file transfer request ... ignoring.')
             return 0
-        self.gotSendRequest(msnft.MSNFTP_Receive(fileName, fileSize, message, message.userHandle, cookie, self))
+        self.gotSendRequest(msnft.MSNFTP_Receive(fileName, fileSize, message.userHandle, cookie, self))
         return 1
 
     def _checkP2PMessage(self, message, ctypes):
@@ -2202,7 +2203,7 @@ class SwitchboardClient(MSNEventBase):
         m = MSNMessage()
         m.setHeader('Content-Type', 'text/x-msmsgsinvite; charset=UTF-8')
         m.message += 'Application-Name: File Transfer\r\n'
-        m.message += 'Application-GUID: {5D3E02AB-6190-11d3-BBBB-00C04F795683}\r\n'
+        m.message += 'Application-GUID: %s\r\n' % MSN_MSNFTP_GUID
         m.message += 'Invitation-Command: INVITE\r\n'
         m.message += 'Invitation-Cookie: %s\r\n' % str(cookie)
         m.message += 'Application-File: %s\r\n' % fileName
index da3af4dd7721368fb53241d952a12097e2edb567..37da03367762afd8d3c7e410e84d3e2638c95c58 100644 (file)
@@ -5,7 +5,7 @@ from twisted.internet import reactor
 from twisted.protocols.basic import LineReceiver
 from twisted.internet.protocol import ClientFactory
 
-from msn import MSNMessage, MSNEventBase
+#from msn import MSNMessage
 
 from debug import LogEvent, INFO, WARN, ERROR
 import config
@@ -16,12 +16,12 @@ import sys
 
 class MSNFTReceive_Base:
        # Public
-       def __init__(self, filename, filesize, message, userHandle):
+       def __init__(self, filename, filesize, userHandle):
                self.connector = None
                self.finished = False
                self.error = False
                self.buffer = []
-               self.filename, self.filesize, self.message, self.userHandle = filename, filesize, message, userHandle
+               self.filename, self.filesize, self.userHandle = filename, filesize, userHandle
        
        def removeMe(self):
                self.connector = None
@@ -87,9 +87,9 @@ class MSNFTP_Ports:
 
 msnports = MSNFTP_Ports()
 
-class MSNFTP_Receive(ClientFactory):
-       def __init__(self. filename, filesize, userHandle, message, iCookie, switchboard):
-               MSNFTReceive_Base(filename, filesize, message, userHandle)
+class MSNFTP_Receive(ClientFactory, MSNFTReceive_Base):
+       def __init__(self, filename, filesize, userHandle, iCookie, switchboard):
+               MSNFTReceive_Base.__init__(self, filename, filesize, userHandle)
                self.iCookie = iCookie
                self.switchboard = switchboard
                self.serverSocket = None
@@ -112,6 +112,7 @@ class MSNFTP_Receive(ClientFactory):
                        yes = False
                        self.gotError()
        
+               from msn import MSNMessage
                m = MSNMessage()
                m.setHeader('Content-Type', 'text/x-msmsgsinvite; charset=UTF-8')
                if yes: