]> code.delx.au - pymsnt/blobdiff - src/misciq.py
Fixed bug with version number.
[pymsnt] / src / misciq.py
index 078208aa0efa7486c0c8a920c166ff6c8ae6f0d3..f66dc63e9ada36c2e4d2c4d1561fd88b33af3d1a 100644 (file)
@@ -3,7 +3,8 @@
 
 import utils
 from twisted.internet import reactor, task, protocol, error
-from tlib.xmlw import Element, jid
+from twisted.words.xish.domish import Element
+from twisted.words.protocols.jabber.jid import internJID
 from debug import LogEvent, INFO, WARN, ERROR
 import jabw
 import legacy
@@ -29,7 +30,7 @@ class ConnectUsers:
                ID = el.getAttribute("id")
                ulang = utils.getLang(el)
 
-               if config.admins.count(jid.intern(to).userhost()) == 0:
+               if config.admins.count(internJID(to).userhost()) == 0:
                        self.pytrans.discovery.sendIqError(to=to, fro=config.jid, ID=ID, xmlns=disco.COMMANDS, etype="cancel", condition="not-authorized")
                        return
 
@@ -130,7 +131,7 @@ class AdHocCommands:
        def incomingIq(self, el):
                itype = el.getAttribute("type")
                fro = el.getAttribute("from")
-               froj = jid.intern(fro)
+               froj = internJID(fro)
                to = el.getAttribute("to")
                ID = el.getAttribute("id")
 
@@ -138,7 +139,7 @@ class AdHocCommands:
 
                node = None
                for child in el.elements():
-                       xmlns = child.defaultUri
+                       xmlns = child.uri
                        node = child.getAttribute("node")
 
                        handled = False
@@ -218,10 +219,11 @@ class VCardFactory:
        def incomingIq(self, el):
                itype = el.getAttribute("type")
                fro = el.getAttribute("from")
-               froj = jid.intern(fro)
+               froj = internJID(fro)
                to = el.getAttribute("to")
+               toj = internJID(to)
                ID = el.getAttribute("id")
-               if(itype != "get" and itype != "error"):
+               if itype != "get" and itype != "error":
                        self.pytrans.discovery.sendIqError(to=fro, fro=config.jid, ID=ID, xmlns="vcard-temp", etype="cancel", condition="feature-not-implemented")
                        return
 
@@ -229,17 +231,17 @@ class VCardFactory:
 
                toGateway = not (to.find('@') > 0)
 
-               if(not toGateway):
-                       if(not self.pytrans.sessions.has_key(froj.userhost())):
+               if not toGateway:
+                       if not self.pytrans.sessions.has_key(froj.userhost()):
                                self.pytrans.discovery.sendIqError(to=fro, fro=config.jid, ID=ID, xmlns="vcard-temp", etype="auth", condition="not-authorized")
                                return
                        s = self.pytrans.sessions[froj.userhost()]
-                       if(not s.ready):
+                       if not s.ready:
                                self.pytrans.discovery.sendIqError(to=fro, fro=config.jid, ID=ID, xmlns="vcard-temp", etype="auth", condition="not-authorized")
                                return
                
-                       c = s.contactList.findContact(to)
-                       if(not c):
+                       c = s.contactList.findContact(toj.userhost())
+                       if not c:
                                self.pytrans.discovery.sendIqError(to=fro, fro=config.jid, ID=ID, xmlns="vcard-temp", etype="cancel", condition="recipient-unavailable")
                                return
 
@@ -252,18 +254,18 @@ class VCardFactory:
                iq.attributes["type"] = "result"
                vCard = iq.addElement("vCard")
                vCard.attributes["xmlns"] = "vcard-temp"
-               if(toGateway):
+               if toGateway:
                        FN = vCard.addElement("FN")
-                       FN.addContent(legacy.name)
+                       FN.addContent(config.discoName)
                        DESC = vCard.addElement("DESC")
-                       DESC.addContent(legacy.name)
+                       DESC.addContent(config.discoName)
                        URL = vCard.addElement("URL")
                        URL.addContent(legacy.url)
                else:
-                       if(c.nickname):
+                       if c.nickname:
                                NICKNAME = vCard.addElement("NICKNAME")
                                NICKNAME.addContent(c.nickname)
-                       if(c.avatar):
+                       if c.avatar:
                                PHOTO = c.avatar.makePhotoElement()
                                vCard.addChild(PHOTO)
 
@@ -278,8 +280,9 @@ class IqAvatarFactory:
        def incomingIq(self, el):
                itype = el.getAttribute("type")
                fro = el.getAttribute("from")
-               froj = jid.intern(fro)
+               froj = internJID(fro)
                to = el.getAttribute("to")
+               toj = internJID(to)
                ID = el.getAttribute("id")
 
                if(itype != "get" and itype != "error"):
@@ -296,7 +299,7 @@ class IqAvatarFactory:
                        self.pytrans.discovery.sendIqError(to=fro, fro=config.jid, ID=ID, xmlns=disco.IQAVATAR, etype="auth", condition="not-authorized")
                        return
 
-               c = s.contactList.findContact(to)
+               c = s.contactList.findContact(toj.userhost())
                if(not c):
                        self.pytrans.discovery.sendIqError(to=fro, fro=config.jid, ID=ID, xmlns=disco.IQAVATAR, etype="cancel", condition="recipient-unavailable")
                        return
@@ -429,6 +432,8 @@ class VersionTeller:
                self.pytrans = pytrans
                self.pytrans.discovery.addFeature(disco.IQVERSION, self.incomingIq, config.jid)
                self.pytrans.discovery.addFeature(disco.IQVERSION, self.incomingIq, "USER")
+               self.version = legacy.version
+               self.os = "Python" + ".".join([str(x) for x in sys.version_info[0:3]]) + " - " + sys.platform
        
        def incomingIq(self, el):
                eltype = el.getAttribute("type")
@@ -447,11 +452,11 @@ class VersionTeller:
                query = iq.addElement("query")
                query.attributes["xmlns"] = disco.IQVERSION
                name = query.addElement("name")
-               name.addContent(legacy.name)
+               name.addContent(config.discoName)
                version = query.addElement("version")
-               version.addContent(legacy.version)
+               version.addContent(self.version)
                os = query.addElement("os")
-               os.addContent("Python" + ".".join([str(x) for x in sys.version_info[0:3]]) + " - " + sys.platform)
+               os.addContent(self.os)
                
                self.pytrans.send(iq)
 
@@ -481,8 +486,8 @@ class FileTransferOOBSend:
                else:
                        return errOut()
 
-               froj = jid.intern(el.getAttribute("from"))
-               toj = jid.intern(el.getAttribute("to"))
+               froj = internJID(el.getAttribute("from"))
+               toj = internJID(el.getAttribute("to"))
                session = self.pytrans.sessions.get(froj.userhost(), None)
                if not session:
                        return errOut()
@@ -514,7 +519,7 @@ class FileTransferOOBSend:
                        reactor.connectTCP(host, port, factory)
 
                def doSendFile(length):
-                       session.legacycon.sendFile(toj.userhost(), ft.FTSend(startTransfer, errOut, filename, length))
+                       ft.FTSend(session, toj.userhost(), startTransfer, errOut, filename, length)
 
                # Make a HEAD request to grab the length of data first
                factory = protocol.ClientFactory()
@@ -540,8 +545,8 @@ class Socks5FileTransfer:
                def errOut():
                        self.pytrans.discovery.sendIqError(to=el.getAttribute("from"), fro=el.getAttribute("to"), ID=ID, xmlns=disco.SI, etype="cancel", condition="bad-request")
 
-               toj = jid.intern(el.getAttribute("to"))
-               froj = jid.intern(el.getAttribute("from"))
+               toj = internJID(el.getAttribute("to"))
+               froj = internJID(el.getAttribute("from"))
                session = self.pytrans.sessions.get(froj.userhost(), None)
                if not session:
                        return errOut()
@@ -550,7 +555,7 @@ class Socks5FileTransfer:
                if not (si and si.getAttribute("profile") == disco.FT):
                        return errOut()
                file = si.file
-               if not (file and file.defaultUri == disco.FT):
+               if not (file and file.uri == disco.FT):
                        return errOut()
                try:
                        sid = si["id"]
@@ -563,10 +568,10 @@ class Socks5FileTransfer:
 
                # Check that we can use socks5 bytestreams
                feature = si.feature
-               if not (feature and feature.defaultUri == disco.FEATURE_NEG):
+               if not (feature and feature.uri == disco.FEATURE_NEG):
                        return errOut()
                x = feature.x
-               if not (x and x.defaultUri == disco.XDATA):
+               if not (x and x.uri == disco.XDATA):
                        return errOut()
                field = x.field
                if not (field and field.getAttribute("var") == "stream-method"):
@@ -602,7 +607,7 @@ class Socks5FileTransfer:
                        self.pytrans.send(iq)
                        self.sessions[(froj.full(), sid)] = consumer
 
-               session.legacycon.sendFile(toj.userhost(), ft.FTSend(startTransfer, errOut, filename, filesize))
+               ft.FTSend(session, toj.userhost(), startTransfer, errOut, filename, filesize)
        
        def incomingS5B(self, el):
                ID = el.getAttribute("id")
@@ -612,11 +617,11 @@ class Socks5FileTransfer:
                if el.getAttribute("type") != "set":
                        return errOut()
 
-               toj = jid.intern(el.getAttribute("to"))
-               froj = jid.intern(el.getAttribute("from"))
+               toj = internJID(el.getAttribute("to"))
+               froj = internJID(el.getAttribute("from"))
 
                query = el.query
-               if not (query and query.getAttribute("mode") == "tcp"):
+               if not (query and query.getAttribute("mode", "tcp") == "tcp"):
                        return errOut()
                sid = query.getAttribute("sid")
                consumer = self.sessions.pop((froj.full(), sid), None)
@@ -652,6 +657,10 @@ class Socks5FileTransfer:
                                except error.NotConnectingError:
                                        pass
 
+                       if factory.streamHostTimeout:
+                               factory.streamHostTimeout.cancel()
+                               factory.streamHostTimeout = None
+
                        iq = Element((None, "iq"))
                        iq["type"] = "result"
                        iq["from"] = toj.full()
@@ -665,12 +674,15 @@ class Socks5FileTransfer:
 
 
                # Try the streamhosts
+               LogEvent(INFO)
                factory = protocol.ClientFactory()
                factory.protocol = ft.JEP65ConnectionSend
                factory.consumer = consumer
                factory.hash = utils.socks5Hash(sid, froj.full(), toj.full())
                factory.madeConnection = gotStreamhost
                factory.connectors = []
+               factory.streamHostTimeout = reactor.callLater(120, consumer.error)
+
                for streamhost in streamhosts:
                        factory.connectors.append(reactor.connectTCP(streamhost[1], streamhost[2], factory))