[pjsip] Can PJSIP register with hundreds of VoIP providers at one time?
Klaus Darilion
klaus.mailinglists at pernau.at
Thu Oct 8 03:35:17 CDT 2009
Eric Chamberlain schrieb:
>
> On Oct 7, 2009, at 8:59 AM, Klaus Darilion wrote:
>
>>
>>
>> Eric Chamberlain schrieb:
>>> On Oct 7, 2009, at 12:09 AM, Klaus Darilion wrote:
>>>>
>>>>
>>>> Eric Chamberlain schrieb:
>>>>> Hello,
>>>>> We'd like to move registration to upstream VoIP providers off of
>>>>> Asterisk and on to something that can be updated dynamically and
>>>>> maintained in a database. Could the python pjsip module be used to
>>>>> perform registrations on behalf of the Asterisk server (contact
>>>>> info would point to the Asterisk server)? If so, can it scale up
>>>>> and handle hundreds or thousands of registrations at a time?
>>>>
>>>> Of course this only works if your upstream VoIP provider accepts the
>>>> value in the contact header. Many providers (me too) do ignore
>>>> Contact completely and use IP:port from where the request was
>>>> received instead.
>>>>
>>> Klaus,
>>> Interesting point. How does your or other providers' configurations
>>> handle multiple registrations from the same IP:port? Multiple users
>>> behind a firewall for example? If you ignore the contact, how does
>>> the registering device know where to route an inbound call?
>>
>> Hi Eric!
>>
>> I was bit too less verbose. The provided contact will be stored by the
>> proxy, and during in incoming call, the RURI of the INVITE will be set
>> to the provided contact. However, the INVITE will not be sent to the
>> URI in the RURI, but to the IP:port from which the registration was
>> performed.
>>
>> For example in Kamailio (Openser) this is done by storing both data
>> during registration.
>>
>> location table (which holds the registered clients):
>>
>> AoR | Contact | received_from
>> -------------+-------------------------+----------------
>> aaa at domain | sip:192.168.0.1;line=1 | 1.2.3.4:5060
>> bbb at domain | sip:192.168.0.1;line=2 | 1.2.3.4:5060
>>
>>
>> Thus, an incoming call to aaa at domain will be sent to 1.2.3.4:5060,
>> with request line containing: INVITE sip:192.168.0.1;line=1
>>
>> In Kamailio, this can be activated by using fix_nated_register()
>> before calling save("location").
>>
>> If you do not sending back symmetrically, but instead using the
>> provided contact for routing, you have to validate the contact before
>> - for example a malicious user could send a REGISTER with
>> Contact: sip:0900666666 at ip.address.ofyour.gateway
>> and the proxy will forward the request to its own PSTN gateway instead
>> of sending it to the user.
>>
>> regards
>> klaus
>>
>
> Klaus,
>
> Thanks for the clarification. It sounds like the most compatible
> solution would be to run our pjsip code on the Asterisk box, so that the
> port and IP addresses would match and Asterisk could answer the inbound
> INVITEs.
I would just ask the provider if he allows third-pary registration, or
just test it (e.g. using sipsak) - of course providers can change the
setup and then it wont work anymore.
You could also try Joegen's approach, routing all the traffic via a SIP
proxy, which acts like some kind of egress/ingress proxy (some call it
SBC), e.g:
Asterisk--
\
-------Kamailio -------- Provider
-------SIP Proxy
/
pjsip----
reg-clien
As registration-contact you provide the IP:port of the Kamailio proxy.
Then, the provider will route all requests back to Kamailio and then you
can forward the request to Asterisk.
regards
klaus
More information about the pjsip
mailing list