[OpenSER-Users] Giving more power to CPL language: Addressbook Categories feature
Bogdan-Andrei Iancu
bogdan at voice-system.ro
Tue Jan 15 18:13:16 CET 2008
Hi Iñaki,
the cpl module follows the IETF standard on this (RFC3880). There are
some reasons why the language is a bit tight, mainly:
1) not to be dependent of the SIP server implementation
2) not to allow any security hole
(see the RFC comments, as they do a better job then me here ;) )
As much as possible, the cpl interpretor in openser should stick to the
standard version. But trying to do a openser specific extension is a
different story ;)
Regards,
Bogdan
Iñaki Baz Castillo wrote:
> Hi, in my opinion CPL language is not enough powerful, the absence of regular
> expression or any header reading makes it poor (IMHO). It would become really
> cool if it could match AVP's but it can :(
>
>
> I'm trying to give some power to CPL logic. I want to implement "addressbook
> categories" for each user, this is: each user has its own addressbook in which
> he can set a category for each contact:
> - Work
> - Friend
> - Family
> - Custom
>
> And of course what I need it a way to match that category **inside** the CPL logic.
> This is impossible with CPL itself so I'm thinking in a very very dirty trick:
>
>
> ** Addressbook Categories **
>
>
> - In an incoming call for "bob at domain.org" OpenSer will match the callerid against
> Bob's addressbook. This will return a variable or AVP:
> $avp(s:caller_category)
>
>
> - CPL module just can match "Organization", "Subject", and "User-Agent", so
> OpenSer will do:
>
> append_hf("Bak_Organization: $hdr(Organization)\r\n"); # To preserve original Organization
> remove_hf("Organization"); # Remove original Organization
> append_hf("Organization: $avp(s:caller_category)\r\n"); # Set category as Organization
>
>
> - But since OpenSer appends/removes headers when the message leaves the proxy I
> can't run CPL now (it will not read the new "Organization" header), so I need to do a
> dirty loop in order to append the header.
>
>
> - When the message comes back into OpenSer the headers are updated so I do:
>
> remove_hf("Organization"); # Remove current Organization (that is a hack)
> append_hf("Organization: $hdr(Backup_Organization)\r\n"); # Restore original Organization
>
> (those changes will be applied again when message leaves OpenSer, not now).
>
> - And I run CPL:
>
> cpl_run_script("incoming","FORCE_STATEFUL");
>
>
> - Into CPL I match "Organization" header by:
>
> <string-switch field="Organization">
> <string is="Friends">
> <reject status="reject" reason="I have no friends" />
> </string>
> </string-switch>
>
>
>
>
> Is it enough dirty or could I make it more?
> Any suggestion? how do you people implement things like this?
>
> Thank a lot.
>
>
>
>
>
>
>
More information about the Users
mailing list