Sorry, and a 'import urllib' is required! On 12/25/06, Lei Wang <[EMAIL PROTECTED]> wrote:
I changed the 'class FileContext' in src/legacy/msn.py as follows: class FileContext: """ Represents the Context field for P2P file transfers """ def __init__(self, data=""): if data: self.parse(data) else: self.filename = "" self.filesize = 0 def pack(self): if MSNP2PDEBUG: log.msg("FileContext packing:", self.filename, self.filesize) data = struct.pack("<LLQL", 638, 0x03, self.filesize, 0x01) data = data[:-1] # Uck, weird, but it works data += utf16net(self.filename) data = ljust(data, 570, '\0') data += struct.pack("<L", 0xFFFFFFFFL) data = ljust(data, 638, '\0') return data def parse(self, packet): self.filesize = struct.unpack("<Q", packet[8:16])[0] chunk = packet[20:540] chunk = chunk[:chunk.find('\x00\x00')+1] self.filename = unicode((codecs. BOM_UTF16_LE + chunk).decode("utf-16")) if MSNP2PDEBUG: log.msg("FileContext parsed:", self.filesize, self.filename) And Methods in 'class FTReceive' in src/ft.py: def oobMode(self): def cb(el): if el.getAttribute("type") != "result": self.legacyftp.reject() del self.legacyftp self.session.pytrans.ftOOBReceive.remFile (filename) def ecb(ignored=None): self.legacyftp.reject() del self.legacyftp LogEvent(INFO, self.ident) filename = self.session.pytrans.ftOOBReceive.putFile(self, self.legacyftp.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 + "/" + urllib.quote(filename.encode('utf-8'))) d = self.session.send (iq) d.addCallbacks(cb, ecb) def messageOobMode(self): LogEvent(INFO, self.ident) filename = self.session.pytrans.ftOOBReceive.putFile(self, self.legacyftp.filename ) m = Element((None, "message")) m.attributes["to"] = self.session.jabberID m.attributes["from"] = self.senderJID m.addElement ("body").addContent(config.ftOOBRoot + "/" + urllib.quote(filename.encode('utf-8'))) x = m.addElement("x") x.attributes["xmlns"] = disco.XOOB x.addElement("url").addContent(config.ftOOBRoot + "/" + urllib.quote(filename.encode('utf-8'))) self.session.pytrans.send(m) And 'class FileTransferOOBReceive' in src/ft.py: class FileTransferOOBReceive(resource.Resource): def __init__(self, port): LogEvent(INFO) self.isLeaf = True self.files = {} self.oobSite = server.Site(self) reactor.listenTCP(port, self.oobSite) def putFile(self, file, filename): path = str(random.randint(100000000, 999999999)) filename = (path + "/" + filename).replace("//", "/") self.files[filename] = file return filename 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 not self.files.has_key(filename): filename = unicode(urllib.unquote(filename).decode('utf-8')) if self.files.has_key(filename): file = self.files[filename] low_lever_browser = False try: if request.getHeader('User-Agent').find('MSIE') != -1: low_lever_browser = True except: pass request.setHeader("Content-Length", str( file.legacyftp.filesize)) if low_lever_browser: request.setHeader("Content-Disposition", "attachment; filename=\"%s\"" % urllib.quote( file.legacyftp.filename.encode("utf-8"))) else: request.setHeader("Content-Disposition", "attachment; filename*=\"%s\"" % urllib.quote( file.legacyftp.filename.encode("utf-8"))) OOBReceiveConnector(file, request) del self.files[filename] return server.NOT_DONE_YET else: page = error.NoResource(message="404 File Not Found") return page.render(request) def render_HEAD(self, request): filename = request.path[1:] # Remove the leading / if not self.files.has_key(filename): filename = unicode(urllib.unquote(filename).decode('utf-8')) if self.files.has_key(filename): file = self.files[filename] low_lever_browser = False try: if request.getHeader('User-Agent').find('MSIE') != -1: low_lever_browser = True except: pass request.setHeader("Content-Length", str( file.legacyftp.filesize)) if low_lever_browser: request.setHeader("Content-Disposition", "attachment; filename=\"%s\"" % urllib.quote( file.legacyftp.filename.encode("utf-8"))) else: request.setHeader("Content-Disposition", "attachment; filename*=\"%s\"" % urllib.quote( file.legacyftp.filename.encode("utf-8"))) return "" else: page = error.NoResource(message="404 File Not Found") return page.render(request) And it works now.
_______________________________________________ py-transports mailing list py-transports@blathersource.org http://www.modevia.com/cgi-bin/mailman/listinfo/py-transports