[asterisk-dev] Working in useful examples... and freenum/e.164 dialing in extensions.conf.example

John Todd jtodd at digium.com
Thu Dec 17 14:31:47 CST 2009

On Dec 16, 2009, at 8:22 AM, Klaus Darilion wrote:

> Philip A. Prindeville schrieb:
>> I've recently decided to spend idle cycles while waiting for various
>> Astlinux platform builds to complete on making the contents of
>> asterisk/config a little more complete, a little more useful, a
>> little more real-world...
>> I started looking at the possibility of taking JTodd's ISN Freenum
>> cookbook example and updating it:
>> http://freenum.org/cookbook/#ASTERISK_CONFIG
>> but ran into some problems having to do with the following:  we use
>> SIP handsets in house, and those operate in the redfish-solutions.com
>> domain... but anonymous SIP (freenum) calls coming in off the
>> internet would also be in the same domain.  I can't figure out how to
>> separate calls in the same domain (but from different endpoints) in
>> two different contexts.
> Are you using different contexts? Usually, for your local attached SIP
> handsets, you have in sip.conf one peer/friend definition per SIP
> device, and use the context= option to handle calls from these  
> devices.
> Further, the sip.conf has a context defined in the general section -
> this one will be used for the unauthenticated incoming ENUM calls:
> e.g. sip.conf:
> [general]
> context=fromInternet
> ...
> [ext001]
> type=peer
> context=fromLocalSipPhone
> ...
> [ext002]
> type=peer
> context=fromLocalSipPhone
> ...
> then in extensions.conf you have (pseudo-code):
> [toPstn]
> exten => 00........Dial(DAHDI.....)
> [toLocalSipPhones]
> exten => 001,1,Dial(SIP/ext001)
> exten => 002,1,Dial(SIP/ext002)
> [fromLocalSipPhone]
> include => toPstn
> include => toLocalSipPhones
> [fromInternet]
> include => toLocalSipPhones
> regards
> klaus
>> And unfortunately, doc/ doesn't cover sip.conf, nor does the Asterisk
>> Reference Manual cover it in much detail... except for a couple of
>> related topics (shared line appearances and dahdi integration, I
>> think).
>> So if anyone can contact me and work off-line on getting a reasonably
>> useful and real-world applicable example working, I'll file a
>> documentation defect and push for getting this checked in (as I did
>> for a few other examples).
>> Thanks,
>> -Philip

Philip, Klaus -
   Bringing in "anonymous" SIP calls into the dialplan is somewhat  
challenging if you need to know from where they're originating.  One  
solution I have seen for this is to differentiate based on the SIP  
identity that is dialed.  The beauty of the ISN (aka: Freenum) dialing  
method is that it uses the basics of ENUM, which include the ability  
to create a regular expression that ultimately is what is passed to  
the far-end receiver of a call request.

   For instance, if your ISN is 1234*256, and you have this regular  
expression as the wildcard for your ITAD 256 in the freenum.org tables:

   !^\\+*([^\\*]*)!sip:\\1 at loligo.com!

   ....then the final resulting URI that the REMOTE server would use  
would be sip:1234 at loligo.com.

Now, I've seen some people who have modified their regular expressions  
a bit so that they put a "prefix" in front of all of the SIP URIs that  
are formed by remote servers in the case of Freenum/ISN lookups, in  
order to differentiate where their calls are coming from.  They create  
something like this for their NAPTR regular expression in the  
Freenum.org wildcard table for their ITAD, or in their own DNS if  
they're delegating the zone to themselves:

   !^\\+*([^\\*]*)!sip:\\1-freenum at loligo.com!

...which for the ISN of 1234*256 would create a SIP URI of sip:1234-freenum at loligo.com 
.  At that point, all of the anonymous SIP calls are received by the  
loligo.com server (for both Freenum/ISN as well as normal SIP URI  
calls) and _all_ of those calls go to a single context.   Within that  
context, string-matching is trivially used to chop up the ${EXTEN} and  
then perform actions and re-route the calls to different places within  
the dialplan.  Here's an example:

; Do something with the full strings that contain "-freenum" as a  
suffix with
; four-digit numeric prefixes.
exten => _XXXX-freenum,1,Echo(Freenum.org call received!)
; Now, take only the first four digits of the ${EXTEN}, stripping off
; the "-freenum" suffix, and pass the call to my main context.
exten => _XXXX-freenum,n,Goto(my-main-context,1,${EXTEN:0:4})
exten => _XXXX,1,Echo(Normal four-digit call received!)
exten => _XXXX,n,Goto(my-main-context,1,${EXTEN})
; end

Also, see ITADs 674 and 260 for slightly different further examples.  
(dig @anyns.pch.net NAPTR

Now, to kind of swing this back around to a -dev question instead of  
just a -users question (or even a question more appropriate for the  
Freenum/ISN mailing list (isn-discuss-request at freenum.org)) let's see  
what we should do for examples.   Should a more full-fledged Freenum  
example set exist in the sip.conf file and in extensions.conf?  I'm  
uncertain that most people actually want to differentiate between  
normal inbound numeric SIP URI dialing and Freenum.org-originated  
dialing, so this doesn't seem like much of a win in either place.   
There is a strong disincentive to turn OFF anonymous SIP dialing as  
the default, since apparently that is too sharp a knife to offer to  
new users who may not quite know the implications if including  
contexts into their anonymous inbound SIP contexts.  So is a better  
example warranted on the Asterisk configurations, or is this really  
something I should put on my freenum.org hat for and get off my  
comfortable chair and get better examples on the dusty freenum.org site?


John Todd                       email:jtodd at digium.com
Digium, Inc. | Asterisk Open Source Community Director
445 Jan Davis Drive NW -  Huntsville AL 35806  -   USA
direct: +1-256-428-6083         http://www.digium.com/

More information about the asterisk-dev mailing list