Beispiel #1
0
    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)