[asterisk-dev] SIP Multiple endpoints with same id

Luigi Rizzo rizzo at icir.org
Wed Nov 8 12:14:27 MST 2006


On Wed, Nov 08, 2006 at 11:13:47AM -0600, Kevin P. Fleming wrote:
> Luigi Rizzo wrote:
> > The not-so-easy part (to me at least) is how to make this dynamic
> > - e.g. buy a new _device_, configure with appropriate credentials,
> > and have it dynamically (i.e. as it registers/unregisters)
> > linked to a certain extension together with
> > the other devices in the group without having to modify the dialplan.
> 
> I have never understood this at all... if you need to modify the SIP
> configuration to provide an entity with credentials for this device,
> what is so hard about also modifying the dialplan?

the example is the following.

I buy service from a provider who gives me one account,
say luigi443 (such a popular name!), and a phone number,
say 4105552233 (i use two different strings, though in practice they
tend to coincide and this is a huge source of confusion).
 
I configure my ATA at home to register with the provider, 
which sees me as SIP/luigi443 (and in the dialplan, at
4105552233).
 
Anyways - say i move to some other place and want to register e.g.
the softphone on my laptop on the provider (still as luigi443)
while still keeping the phone at home registere, and
have calls delivered to both places - this is key, because
sometimes i don't have a chance to turn off the device
i left on at home.
Then i turn off the PC, and when the registration
expires the provider doesn't ring me anymore, but the
phone at home still keeps working.

As asterisk works now, the new registration overwrites
the old one, and if 2+ devices are active at
the same time, there is going to be a fight between them.

I am not expecting to have more than a handful of
devices linked to the same extension, but surely don't
want to remember many sets of credentials, nor,
my provider wants to give me multiple accounts for free.

As for implementing this:
at the moment, as i understand it in chan_sip,
 there is only one slot per peer (i.e. per credentials)
to record the info.
The dialplan has an entry so 4105552233 causes Dial(SIP/luigi443)
to be called.

If we could dynamically create multiple "registered-peer" entries for SIP/luigi443
(that would be done in chan_sip), and introduce a new function func_howmanypeers()
which could interrogate chan_sip (or any technology) returning the full
list of entries matching SIP/luigi443 e.g. formatted as
SIP/luigi443-0x332455&SIP/luigi443-0x3666&SIP/luigi443
(which is good to be fed to Dial()), we could set a dialplan variable
with that string and then call Dial().

I think the changes required would be a new API call in the tech API,
a minuscule function to run the call, and individual modifications
to those technologies who support multiple peers (in the case of sip,
i don't see huge changes).

On the other hand, i don't see how to implement this with out
a bit of help on the channel driver (unless we use different
credentials for each phone, and have some function to do
things like "sip show peers" from the dialplan).

	cheers
	luigi


More information about the asterisk-dev mailing list