コード例 #1
0
ファイル: test_sip.py プロジェクト: PeterLUYP/2016YCProject
    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
コード例 #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)
コード例 #3
0
ファイル: test_sip.py プロジェクト: UstadMobile/eXePUB
 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)
コード例 #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
コード例 #5
0
ファイル: test_sip.py プロジェクト: swift1911/twisted
 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
コード例 #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)
コード例 #7
0
ファイル: test_sip.py プロジェクト: UstadMobile/eXePUB
 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)
コード例 #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)
コード例 #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)
コード例 #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
コード例 #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)
コード例 #12
0
ファイル: test_sip.py プロジェクト: PeterLUYP/2016YCProject
 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
コード例 #13
0
ファイル: test_sip.py プロジェクト: PeterLUYP/2016YCProject
 def testWrongDomainLookup(self):
     self.register()
     url = sip.URL(username="******", host="foo.com")
     d = self.proxy.locator.getAddress(url)
     self.assertFailure(d, LookupError)
     return d
コード例 #14
0
ファイル: test_sip.py プロジェクト: PeterLUYP/2016YCProject
 def getAddress(self, logicalURL):
     return defer.succeed(sip.URL("server.com", port=5060))