def prepare(self): events = self.q.expect_many( EventPattern('stream-iq', query_ns=ns.GOOGLE_JINGLE_INFO), EventPattern('stream-iq', to=None, query_ns='vcard-temp', query_name='vCard'), EventPattern('stream-iq', query_ns=ns.ROSTER), ) CallTest.prepare(self, events=events) ji_event = events[0] listen_port = listen_http(self.q, 0) jingleinfo = make_result_iq(self.stream, ji_event.stanza) stun = jingleinfo.firstChildElement().addElement('stun') server = stun.addElement('server') server['host'] = 'resolves-to-1.2.3.4' server['udp'] = '12345' self.expected_stun_server = '1.2.3.4' self.expected_stun_port = 12345 # This bit is undocumented... but it has the same format as what we get # from Google Talk servers: # <iq to="censored" from="censored" id="73930208084" type="result"> # <query xmlns="google:jingleinfo"> # <stun> # <server host="stun.l.google.com" udp="19302"/> # <server host="stun4.l.google.com" udp="19302"/> # <server host="stun3.l.google.com" udp="19302"/> # <server host="stun1.l.google.com" udp="19302"/> # <server host="stun2.l.google.com" udp="19302"/> # </stun> # <relay> # <token>censored</token> # <server host="relay.google.com" udp="19295" tcp="19294" # tcpssl="443"/> # </relay> # </query> # </iq> relay = jingleinfo.firstChildElement().addElement('relay') relay.addElement('token', content='jingle all the way') server = relay.addElement('server') server['host'] = '127.0.0.1' server['udp'] = '11111' server['tcp'] = '22222' server['tcpssl'] = '443' # The special regression-test build of Gabble parses this attribute, # because we can't listen on port 80 server['gabble-test-http-port'] = str(listen_port.getHost().port) self.stream.send(jingleinfo) jingleinfo = None # Spoof some jingle info. This is a regression test for # <https://bugs.freedesktop.org/show_bug.cgi?id=34048>. We assert that # Gabble has ignored this stuff later. iq = IQ(self.stream, 'set') iq['from'] = "*****@*****.**" query = iq.addElement((ns.GOOGLE_JINGLE_INFO, "query")) stun = query.addElement('stun') server = stun.addElement('server') server['host'] = '6.6.6.6' server['udp'] = '6666' relay = query.addElement('relay') relay.addElement('token', content='mwohahahahaha') server = relay.addElement('server') server['host'] = '127.0.0.1' server['udp'] = '666' server['tcp'] = '999' server['tcpssl'] = '666' self.stream.send(iq) # Force Gabble to process the capabilities sync_stream(self.q, self.stream)