[Kamailio-Users] [sr-dev] new feature: fine access to xml documents
Daniel-Constantin Mierla
miconda at gmail.com
Thu Jun 25 12:55:33 CEST 2009
On 06/25/2009 11:31 AM, Iñaki Baz Castillo wrote:
> El Jueves, 25 de Junio de 2009, Daniel-Constantin Mierla escribió:
>
>> Hello,
>>
>> several days ago I committed support for accessing components of xml
>> documents using pseudo-variables based on XPath syntax. The new
>> $xml(...) PV is implemented in the presence_xml module as it works with
>> xml docs and links libxml2.
>>
>> Short description in the cookbook:
>> https://sip-router.org/wiki/cookbooks/pseudo-variables/devel#presence_xml_p
>> seudo-variables
>>
>> As an example:
>> - publish has the body:
>>
>> <?xml version='1.0' encoding='UTF-8'?>
>> <presence xmlns='urn:ietf:params:xml:ns:pidf'
>> xmlns:dm='urn:ietf:params:xml:ns:pidf:data-model'
>> xmlns:rpid='urn:ietf:params:xml:ns:pidf:rpid'
>> xmlns:c='urn:ietf:params:xml:ns:pidf:cipid' entity='sip:daniel at asipto.com'>
>> <tuple id='t8b484917'>
>> <status><basic>open</basic></status>
>> </tuple>
>> <dm:person
>> id='p7562ef60'><rpid:activities><rpid:unknown/></rpid:activities></dm:perso
>> n> </presence>
>>
>> Getting the presence status:
>>
>> # this is needed because libxml2 cannot work with default no-prefix ns,
>> so we alias the "p" prefix.
>> modparam("presence_xml", "xml_ns", "p=urn:ietf:params:xml:ns:pidf")
>>
>> $xml(a=>doc) = $rb;
>> $xml(a=>xpath:/p:presence/p:tuple/p:status/p:basic)
>>
>> Next is to update the presence modules to be able to work with the
>> documents that have been updated in the config.
>>
>> Comments, opinions and improvements are welcome!
>>
>
> This is more than great!
>
> It would make possible exotic routing decissions based on presence status...
>
... or based on other content of the xml doc -- you may have there geo
positions and send it to the appropriate server.
> or perhaps not yet? I understand that this makes possible to extract XML nodes
> when processing a request, but would it be possible to extract them from the
> "presentity" table?
>
Yes, if you load it you can do it. For example, next piece of config is
valid as well:
$xml(a=>doc) = '<?xml version="1.0" encoding="UTF-8"?><presence
entity="abc"><mynode>abc</mynode></presence>';
xlog("$xml(a=>xpath:/presence/mynode)\n");
Probably not very clear in my first email, but you can change the xml
content:
$xml(a=>xpath:/presence/mynode) = "123";
Note that if you assigned the sip message body to $xml(name=>doc), body
does not get changed, the operations are done on a replica.
Cheers,
Daniel
> A simpler approach for what I mean would be having a mini API to get presence
> basic status (some module that connects to DB with "presentity" table):
>
> if ( is_presence_basic_status_open($ru) ) {
> ...route the MESSAGE...
> }
>
> XD
>
>
>
--
Daniel-Constantin Mierla
http://www.asipto.com/
More information about the Users
mailing list