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()
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
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
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
self.pos += length
- self.consumer.write(data)
+ self.consumer.write(str(data))
if self.pos == total:
self.sendP2PACK(binaryFields)