[Asterisk-Users] sip call using name in sip.conf
John Todd
jtodd at loligo.com
Sat May 22 22:19:35 MST 2004
At 7:31 PM -0700 on 5/22/04, Randy Bush wrote:
> >> [foo]
>>> type=friend
>>
>> I do not beleive that will work for type=friend. If you use separate
>> type=peer and type=user blocks in sip.conf it may work. Expecially
>> if you also specify a port in the Dial().
>>
>> Else, use the hostname (or a const).
>
>hmmm. then, how do i let it be dynamic if it has two
>blocks in sip.conf, one for inbound and one for out?
>i.e, how does it register its ip address in both?
>
>randy
Short answer: you can't.
Long answer: there might be other ways around this, but I haven't
really sat down and tried to do it the "right" way.
Longer answer: Yes, you can, but boyyyy is it ugly.
It appears that you have a situation where you have two Asterisk
servers. One * (we'll call it #1) is on a static IP address, while
the other (#2) "moves around" and is dynamically allocated by DHCP or
some other method.
You have a group of numbers that you'd like to always route from #2
to #1 when dialed. This isn't a problem, since #1 has a static IP
address, and you can just reference it with the "host=1.2.3.4" entry
in your peer statement in sip.conf.
Now, going the other way around is more difficult. #1 doesn't know
the IP address of #2. There is the concept of "register=>" in
sip.conf, but that only registers _individual user-agents_ and does
not allow one server to know that another server is at a particular
IP address. REGISTER typically is not used for server-to-server
notification of layer 3 presence (though maybe it is - it's possible
that is supported in the RFC, but I'm too lazy right now to go
digging. It's not supported in Asterisk, so that's the point here.)
So, you're out of luck I think.
There is one way to do this the way you want, and to even talk about
it makes my hair stand on end. You _could_ put the "real" called
number into the caller ID name (SetCIDName) and then send it to a
single registered extension. That registered extension would take the
call in on the other side, parse out the $CALLERIDNAME value and then
set an ${EXTEN} based on the results and proceed with the dial path.
Errrrrrgh - I need to go take a shower now.
NOTE: You'd of course have to route all of your RTP through #1 in
order for it to get to #2, and re-invites and all that neat stuff
will fail, because you're "tunnelling" SIP over SIP.
Last note: you might be able to write a hack that pulled this data
out of the SIP database, kind of like a very strange adaptation of
"default-network" in IOS - beacon routes. Here's another one of my
hypothetical program descriptions for this mythical application:
app1*CLI> show application GetHostIP
-= Info about application 'GetHostIP' =-
[Synopsis]:
Terrible kludge to get IP address of remote Asterisk servers.
[Description]:
GetHostIP(proto/username): Looks up the given name in the protocol
username list and returns the IP address of where that username is
currently registered in variable ${DYNAMICADDR}. Useful for setting
up "beacon" accounts that register from dynamically-addressed
Asterisk hosts so one can trunk calls to them. Currently supports
IAX/IAX2/SIP protocols.
app1*CLI>
I just come up with the ideas, I don't program 'em.
JT
More information about the asterisk-users
mailing list