]> code.delx.au - pymsnt/commitdiff
Can receive files msnp2p with OOB now! :)
authorjamesbunton <jamesbunton@55fbd22a-6204-0410-b2f0-b6c764c7e90a>
Sun, 1 Jan 2006 11:35:48 +0000 (11:35 +0000)
committerjamesbunton <jamesbunton@55fbd22a-6204-0410-b2f0-b6c764c7e90a>
Sun, 1 Jan 2006 11:35:48 +0000 (11:35 +0000)
git-svn-id: http://delx.cjb.net/svn/pymsnt/trunk@72 55fbd22a-6204-0410-b2f0-b6c764c7e90a

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

src/ft.py
src/legacy/glue.py
src/tlib/msn/msn.py

index c7054bddb662601f5371f0537e46897dcdd23c03..f1438add701f65c70da4fecc771d7c3dcdff748d 100644 (file)
--- a/src/ft.py
+++ b/src/ft.py
@@ -30,6 +30,7 @@ class FTReceive:
                self.session = session
                self.toJID = self.session.jabberID + "/" + self.session.highestResource()
                self.senderJID = senderJID
+               self.ident = (self.toJID, self.senderJID)
                self.legacyftp = legacyftp
                LogEvent(INFO)
                self.checkSupport()
@@ -57,16 +58,37 @@ class FTReceive:
                d.addErrback(discoFail)
        
        def socksMode(self):
-               LogEvent(ERROR)
+               raise NotImplementedError
        
        def ibbMode(self):
-               LogEvent(ERROR)
+               raise NotImplementedError
        
        def oobMode(self):
-               LogEvent(ERROR)
+               def cb(el):
+                       if el.getAttribute("type") != "result":
+                               self.legacyftp.reject()
+                       del self.legacyftp
+                       self.session.pytrans.ftOOB.remFile(filename)
+
+               def ecb(ignored=None):
+                       self.legacyftp.reject()
+                       del self.legacyftp
+       
+               LogEvent(INFO, self.ident)
+               filename = self.legacyftp.filename
+               self.session.pytrans.ftOOB.putFile(self, filename)
+               iq = Element((None, "iq"))
+               iq.attributes["to"] = self.toJID
+               iq.attributes["from"] = self.senderJID
+               query = m.addElement("query")
+               query.attributes["xmlns"] = disco.IQOOB
+               query.addElement("url").addContent(config.ftOOBRoot + "/" + filename)
+               d = self.session.send(iq)
+               d.addCallbacks(cb, ecb)
 
        def messageOobMode(self):
-               filename = str(random.randint(0, sys.maxint))
+               LogEvent(INFO, self.ident)
+               filename = self.legacyftp.filename
                self.session.pytrans.ftOOB.putFile(self, filename)
                m = Element((None, "message"))
                m.attributes["to"] = self.session.jabberID
@@ -116,11 +138,15 @@ class FileTransferOOB(resource.Resource):
        def putFile(self, file, filename):
                self.files[filename] = file
        
+       def remFile(self, filename):
+               if self.files.has_key(filename):
+                       del self.files[filename]
+       
        def render_GET(self, request):
                filename = request.path[1:] # Remove the leading /
                if self.files.has_key(filename):
                        file = self.files[filename]
-                       request.setHeader("Content-Disposition", "attachment; filename=\"%s\"" % file.legacyftp.filename)
+                       request.setHeader("Content-Disposition", "attachment; filename=\"%s\"" % file.legacyftp.filename.encode("utf-8"))
                        Connector(file, request)
                        del self.files[filename]
                        return server.NOT_DONE_YET
index 1a0d3204f8e2c9cf969d141a8d71763d33082a51..afd80385999ca80692b638169ab3dd0eff3992bc 100644 (file)
@@ -438,7 +438,8 @@ class LegacyConnection(msn.MSNConnection):
        
        def gotFileReceive(self, fileReceive):
                LogEvent(INFO, self.session.jabberID)
-               pass # FIXME
+               # FIXME
+               ft.FTReceive(self.session, msn2jid(fileReceive.userHandle), fileReceive)
        
        def contactAddedMe(self, userHandle):
                LogEvent(INFO, self.session.jabberID)
index 0970c8da15eec1afc7738b53d07b103cb34e91ae..3c1bf27f588f6977e2b7d88a59adf67544efb88b 100644 (file)
@@ -2493,7 +2493,7 @@ class FileContext:
         data = data[:-1] # Uck, weird, but it works
         data += utf16net(self.filename)
         data = ljust(data, 570, '\0')
-        data += struct.pack("<L", 0xFFFFFFFF)
+        data += struct.pack("<L", 0xFFFFFFFFL)
         data = ljust(data, 638, '\0')
         return data
 
@@ -2928,7 +2928,7 @@ class SLPLink_Receive(SLPLink):
         
         self.pos += length
 
-        self.consumer.write(data)
+        self.consumer.write(str(data))
 
         if self.pos == total:
             self.sendP2PACK(binaryFields)