from twisted.internet import reactor, task, protocol, error
from tlib.xmlw import Element, jid
from debug import LogEvent, INFO, WARN, ERROR
+import svninfo
import jabw
import legacy
import disco
node = None
for child in el.elements():
- xmlns = child.defaultUri
+ xmlns = child.uri
node = child.getAttribute("node")
handled = False
fro = el.getAttribute("from")
froj = jid.intern(fro)
to = el.getAttribute("to")
+ toj = jid.intern(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
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
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)
fro = el.getAttribute("from")
froj = jid.intern(fro)
to = el.getAttribute("to")
+ toj = jid.intern(to)
ID = el.getAttribute("id")
if(itype != "get" and itype != "error"):
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
self.pytrans = pytrans
self.pytrans.discovery.addFeature(disco.IQVERSION, self.incomingIq, config.jid)
self.pytrans.discovery.addFeature(disco.IQVERSION, self.incomingIq, "USER")
+ try:
+ self.version = "%s - SVN r%s" % (legacy.version, svninfo.getSVNVersion())
+ except:
+ 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")
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)
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"]
# 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"):
froj = jid.intern(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)
except error.NotConnectingError:
pass
+ if factory.streamHostTimeout:
+ factory.streamHostTimeout.cancel()
+ factory.streamHostTimeout = None
+
iq = Element((None, "iq"))
iq["type"] = "result"
iq["from"] = toj.full()
# 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))