Exemplo n.º 1
0
    def test_amoralRPort(self):
        """
        rport is allowed without a value, apparently because server
        implementors might be too stupid to check the received port
        against 5060 and see if they're equal, and because client
        implementors might be too stupid to bind to port 5060, or set a
        value on the rport parameter they send if they bind to another
        port.
        """
        p = self.clientPort.getHost().port
        r = sip.Request("REGISTER", "sip:bell.example.com")
        r.addHeader("to", "sip:[email protected]")
        r.addHeader("contact", "sip:[email protected]:%d" % p)
        r.addHeader("via", sip.Via("127.0.0.1", port=p, rport=True).toString())
        warnings = self.flushWarnings(
            offendingFunctions=[self.test_amoralRPort])
        self.assertEqual(len(warnings), 1)
        self.assertEqual(warnings[0]['message'],
                         'rport=True is deprecated since Twisted 9.0.')
        self.assertEqual(warnings[0]['category'], DeprecationWarning)
        self.client.sendMessage(
            sip.URL(host="127.0.0.1", port=self.serverAddress[1]), r)
        d = self.client.deferred

        def check(received):
            self.assertEqual(len(received), 1)
            r = received[0]
            self.assertEqual(r.code, 200)

        d.addCallback(check)
        return d
Exemplo n.º 2
0
    def deliverResponse(self, responseMessage):
        """Deliver response.
        Destination is based on topmost Via header."""
        destVia = sip.parseViaHeader(responseMessage.headers["via"][0])
        # XXX we don't do multicast yet
        host = destVia.received or destVia.host
        port = destVia.rport or destVia.port or self.PORT

        destAddr = sip.URL(host=host, port=port)
        print str(datetime.now()), responseMessage.toString()
        self.sendMessage(destAddr, responseMessage)
Exemplo n.º 3
0
 def testRegister(self):
     p = self.clientPort.getHost().port
     r = sip.Request("REGISTER", "sip:bell.example.com")
     r.addHeader("to", "sip:[email protected]")
     r.addHeader("contact", "sip:[email protected]:%d" % p)
     r.addHeader("via", sip.Via("127.0.0.1", port=p).toString())
     self.client.sendMessage(
         sip.URL(host="127.0.0.1", port=self.serverAddress[1]), r)
     spinUntil(lambda: len(self.client.received))
     self.assertEquals(len(self.client.received), 1)
     r = self.client.received[0]
     self.assertEquals(r.code, 200)
Exemplo n.º 4
0
 def testRegister(self):
     p = self.clientPort.getHost().port
     r = sip.Request("REGISTER", "sip:bell.example.com")
     r.addHeader("to", "sip:[email protected]")
     r.addHeader("contact", "sip:[email protected]:%d" % p)
     r.addHeader("via", sip.Via("127.0.0.1", port=p).toString())
     self.client.sendMessage(
         sip.URL(host="127.0.0.1", port=self.serverAddress[1]), r)
     d = self.client.deferred
     def check(received):
         self.assertEqual(len(received), 1)
         r = received[0]
         self.assertEqual(r.code, 200)
     d.addCallback(check)
     return d
Exemplo n.º 5
0
 def testRegister(self):
     self.register()
     dest, m = self.sent[0]
     self.assertEquals((dest.host, dest.port), ("client.com", 5060))
     self.assertEquals(m.code, 200)
     self.assertEquals(m.headers["via"], ["SIP/2.0/UDP client.com:5060"])
     self.assertEquals(m.headers["to"], ["sip:[email protected]"])
     self.assertEquals(m.headers["contact"], ["sip:[email protected]:5060"])
     self.failUnless(int(m.headers["expires"][0]) in (3600, 3601, 3599, 3598))
     self.assertEquals(len(self.registry.users), 1)
     dc, uri = self.registry.users["joe"]
     self.assertEquals(uri.toString(), "sip:[email protected]:5060")
     d = self.proxy.locator.getAddress(sip.URL(username="******",
                                               host="bell.example.com"))
     d.addCallback(lambda desturl : (desturl.host, desturl.port))
     d.addCallback(self.assertEquals, ('client.com', 5060))
     return d
Exemplo n.º 6
0
 def handle_response(self, rsp, addr):
     print "Received SIP response from %s:%d:" % addr
     print rsp.toString()
     # Strip the top via
     rsp.headers["via"].pop(0)
     # Determine the next hop from the next via
     via = sip.parseViaHeader(rsp.headers["via"][0])
     # rport handling is a bit mysterious - rport should be filled
     # in by Twisted, but apparently it's not. This seems to work
     # for now, though, presumably by defaulting to port 5060.
     uri = sip.URL(host=via.received or via.host,
                   port=via.rportValue if via.rportRequested else self.PORT)
     print "Sending SIP response to %s:" % uri
     print rsp.toString()
     print "==============================================================================="
     # Send the message on
     self.sendMessage(uri, rsp)
Exemplo n.º 7
0
 def testAmoralRPort(self):
     # rport is allowed without a value, apparently because server
     # implementors might be too stupid to check the received port
     # against 5060 and see if they're equal, and because client
     # implementors might be too stupid to bind to port 5060, or set a
     # value on the rport parameter they send if they bind to another
     # port.
     p = self.clientPort.getHost().port
     r = sip.Request("REGISTER", "sip:bell.example.com")
     r.addHeader("to", "sip:[email protected]")
     r.addHeader("contact", "sip:[email protected]:%d" % p)
     r.addHeader("via", sip.Via("127.0.0.1", port=p, rport=True).toString())
     self.client.sendMessage(
         sip.URL(host="127.0.0.1", port=self.serverAddress[1]), r)
     spinUntil(lambda: len(self.client.received))
     self.assertEquals(len(self.client.received), 1)
     r = self.client.received[0]
     self.assertEquals(r.code, 200)
Exemplo n.º 8
0
    def startProtocol(self):
        """On startup, send a REGISTER message to sipauthserve.

        Explicitly use less fields than OpenBTS: want to enforce the right to:
        field.
        """
        r = Request("REGISTER",
                    "sip:%s@%s:%s" % (self.user, self.other_ip, SIP_REG_PORT))
        r.addHeader(
            "Via", "SIP/2.0/UDP %s:%s;branch=%s;received=%s;rport=%s" %
            (self.self_ip, self.port, genTag(22), self.self_ip, self.port))
        r.addHeader(
            "From", "<sip:%s@%s:%s>;tag=%s" %
            (self.user, self.self_ip, self.port, genTag(13)))
        r.addHeader("To",
                    "<sip:%s@%s:%s>" % (self.user, self.other_ip, self.port))
        r.addHeader("Contact", "<sip:%s:%s>" % (self.self_ip, self.port))
        r.addHeader("User-Agent", "Endaga-test")
        self.sendMessage(sip.URL(host=self.other_ip, port=SIP_REG_PORT), r)
Exemplo n.º 9
0
 def sendSMS(self, dest, content):
     content = sms_utilities.SMS_Submit.gen_msg(str(dest), content, False)
     r = Request("MESSAGE", "sip:smsc@%s:%s" % (self.other_ip, SIP_PORT))
     r.addHeader(
         "Via", "SIP/2.0/UDP %s:%s;branch=%s;received=%s;rport=%s" %
         (self.self_ip, self.port, genTag(22), self.self_ip, self.port))
     r.addHeader("Max-Forwards", "70")
     r.addHeader(
         "From", "<sip:%s@%s:%s>;tag=%s" %
         (self.user, self.self_ip, self.port, genTag(13)))
     r.addHeader("To", "<sip:smsc@%s:%s>" % (self.other_ip, self.port))
     r.addHeader("Call-ID", genCallId())
     r.addHeader("CSeq", "1 MESSAGE")
     r.addHeader("Contact", "<sip:%s:%s>" % (self.self_ip, SIP_PORT))
     r.addHeader("User-Agent", "Endaga-test")
     r.addHeader("Content-Type", "application/vnd.3gpp.sms")
     r.addHeader("Content-Length", str(len(content)))
     r.body = content
     self.sendMessage(sip.URL(host=self.other_ip, port=SIP_PORT), r)
Exemplo n.º 10
0
 def testRegister(self):
     self.register()
     dest, m = self.sent[0]
     self.assertEqual((dest.host, dest.port), ("client.com", 5060))
     self.assertEqual(m.code, 200)
     self.assertEqual(m.headers["via"], ["SIP/2.0/UDP client.com:5060"])
     self.assertEqual(m.headers["to"], ["sip:[email protected]"])
     self.assertEqual(m.headers["contact"], ["sip:[email protected]:5060"])
     #
     # XX: See http://tm.tl/8886
     #
     if type(reactor) != AsyncioSelectorReactor:
         self.assertTrue(
             int(m.headers["expires"][0]) in (3600, 3601, 3599, 3598))
     self.assertEqual(len(self.registry.users), 1)
     dc, uri = self.registry.users["joe"]
     self.assertEqual(uri.toString(), "sip:[email protected]:5060")
     d = self.proxy.locator.getAddress(
         sip.URL(username="******", host="bell.example.com"))
     d.addCallback(lambda desturl: (desturl.host, desturl.port))
     d.addCallback(self.assertEqual, ('client.com', 5060))
     return d
Exemplo n.º 11
0
 def handle_request(self, req, addr):
     print "Received SIP request from %s:%d:" % addr
     print req.toString()
     # Add a via header for us
     via = self.getVia()
     if not via.branch:
         # Twisted SIP is still not compliant with RFC3261 s16.11.
         # Work around this, assuming our caller *is* compliant.
         topVia = sip.parseViaHeader(req.headers["via"][0])
         via.branch = topVia.branch + "-AS-059"  # chosen by fair random.org. guaranteed to be random.
     req.headers["via"].insert(0, via.toString())
     # Determine the next hop - use the route headers if present, else the request URI
     uri = req.uri
     if "route" in req.headers:
         # If we're the first route header, strip it
         _, route, _ = sip.parseAddress(req.headers["route"][0])
         if route.host == self.host:
             req.headers["route"].pop(0)
         # Now find the next hop
         if len(req.headers["route"]) > 0:
             _, uri, _ = sip.parseAddress(req.headers["route"][0])
     # Insert a record-route header to keep us in the path
     req.headers.setdefault("record-route", []).insert(
         0,
         sip.URL(host=self.host,
                 port=self.port,
                 other=["transport=UDP", "lr"]))
     # Assert that we're authorized. Workaround pending sto131 completion.
     if "authorization" not in req.headers:
         req.addHeader(
             "authorization",
             'Digest username="******", realm="cw-ngv.com", nonce="0000000000000000", uri="sip:cw-ngv.com", response="00000000000000000000000000000000", algorithm=md5, opaque="0000000000000000",integrity-protected="yes"'
         )
     print "Sending SIP request to %s:" % uri
     print req.toString()
     print "==============================================================================="
     # Send the message on
     self.sendMessage(uri, req)
Exemplo n.º 12
0
 def testNoContactLookup(self):
     self.register()
     url = sip.URL(username="******", host="bell.example.com")
     d = self.proxy.locator.getAddress(url)
     self.assertFailure(d, LookupError)
     return d
Exemplo n.º 13
0
 def testWrongDomainLookup(self):
     self.register()
     url = sip.URL(username="******", host="foo.com")
     d = self.proxy.locator.getAddress(url)
     self.assertFailure(d, LookupError)
     return d
Exemplo n.º 14
0
 def getAddress(self, logicalURL):
     return defer.succeed(sip.URL("server.com", port=5060))