[Telepathy-commits] [telepathy-gabble/master] add BytestreamSIFallback
Guillaume Desmottes
guillaume.desmottes at collabora.co.uk
Mon Mar 2 02:32:56 PST 2009
---
tests/twisted/bytestream.py | 76 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 76 insertions(+), 0 deletions(-)
diff --git a/tests/twisted/bytestream.py b/tests/twisted/bytestream.py
index bd3b62e..8f02b61 100644
--- a/tests/twisted/bytestream.py
+++ b/tests/twisted/bytestream.py
@@ -399,3 +399,79 @@ def parse_ibb_msg_data(message):
binary = base64.b64decode(str(ibb_data))
return ibb_data['sid'], binary
+
+##### SI Fallback (Gabble specific extension) #####
+
+class BytestreamSIFallback(Bytestream):
+ def __init__(self, stream, q, sid, initiator, target, initiated):
+ Bytestream.__init__(self, stream, q, sid, initiator, target, initiated)
+
+ self.socks5 = BytestreamS5B(stream, q, sid, initiator, target,
+ initiated)
+
+ self.ibb = BytestreamIBB(stream, q, sid, initiator, target,
+ initiated)
+
+ self.active = None
+
+ def create_si_offer(self, profile):
+ assert self.initiated
+
+ # TODO: share this with other classes
+ iq = IQ(self.stream, 'set')
+ iq['from'] = self.initiator
+ iq['to'] = self.target
+ si = iq.addElement((ns.SI, 'si'))
+ si['id'] = self.stream_id
+ si['profile'] = profile
+ feature = si.addElement((ns.FEATURE_NEG, 'feature'))
+ x = feature.addElement((ns.X_DATA, 'x'))
+ x['type'] = 'form'
+ field = x.addElement((None, 'field'))
+ field['var'] = 'stream-method'
+ field['type'] = 'list-single'
+ # add SOCKS5
+ option = field.addElement((None, 'option'))
+ value = option.addElement((None, 'value'))
+ value.addContent(self.socks5.get_ns())
+ # add IBB
+ option = field.addElement((None, 'option'))
+ value = option.addElement((None, 'value'))
+ value.addContent(self.ibb.get_ns())
+
+ si_multiple = si.addElement((ns.SI_MULTIPLE, 'si-multiple'))
+
+ return iq, si
+
+ def check_si_reply(self, iq):
+ value = xpath.queryForNodes(
+ '/iq/si[@xmlns="%s"]/si-multiple[@xmlns="%s"]/value' %
+ (ns.SI, ns.SI_MULTIPLE), iq)
+ assert len(value) == 2
+ assert str(value[0]) == self.socks5.get_ns()
+ assert str(value[1]) == self.ibb.get_ns()
+
+ def open_bytestream(self, expected=None):
+ self.active = self.socks5
+ # first propose to peer to connect using SOCKS5
+ # We set an invalid IP so that won't work
+ self.socks5._send_socks5_init([
+ # Not working streamhost
+ (self.initiator, 'invalid.invalid', 12345),
+ ])
+
+ e = self.q.expect('stream-iq', iq_type='error', to=self.initiator)
+ error = xpath.queryForNodes('/iq/error', e.stanza)[0]
+ assert error['code'] == '404'
+ assert error['type'] == 'cancel'
+
+ # socks5 failed, let's try IBB
+ self.active = self.ibb
+
+ return self.ibb.open_bytestream(expected)
+
+ def send_data(self, data):
+ self.active.send_data(data)
+
+ def get_data(self):
+ return self.active.get_data()
--
1.5.6.5
More information about the telepathy-commits
mailing list