Hi,

To be honest I'm not good on perl, but if you can do it directly at script level, it it cleaner and more efficient.

Also, check this https://github.com/OpenSIPS/opensips/commit/d509aa63698bc26fde390a4b707dbf2be31f5de5

Thanks and Regards,

Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com

On 01/18/2017 04:09 PM, xaled wrote:

Hi Bogdan,

works like a charm, thanks!

As an additional bonus now I know how to work with the perl module ;)

$rb(mime)[idx] is even more flexible.

*From:*Bogdan-Andrei Iancu [mailto:[email protected]]
*Sent:* Dienstag, 17. Januar 2017 15:12
*To:* xaled <[email protected]>; 'OpenSIPS users mailling list' <[email protected]>
*Subject:* Re: [OpenSIPS-Users] How to parse XML Body?

Hi,

There was a small typo in my regexp. The correct one is:

$var(reg) = "/(.*)gml:Coordinates>(.*)<\/gml:Coordinates(.*)/\2/s";
xlog("Position is $(rb[1]{re.subst,$var(reg)})\n");

I tried it and it does the job.

Regarding the usability of the $rb variable, yes you have a point. I was thinking of something like $rb(mime)[idx] to access also per mime.

Best regards,


Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com

On 01/13/2017 12:04 PM, xaled wrote:

    Hi Bogdan,

    thank you for looking at this issue. This regex does not work. I
    tried different combinations of the idea but it just not getting
    there.

    2017-01-13T11:02:42.287766+01:00 ivr01
    /usr/local/sbin/opensips[24845]: DBG:core:tr_eval_re: we must
    compile the regexp

    2017-01-13T11:02:42.288116+01:00 ivr01
    /usr/local/sbin/opensips[24845]: WARNING:core:parse_repl: \/
    unknown escape in (.*)<\/gml:Coordinates(.*)/\2/s

    2017-01-13T11:02:42.288464+01:00 ivr01
    /usr/local/sbin/opensips[24845]: ERROR:core:subst_parser: unknown
    flag . in (.*)/gml:Coordinates>(.*)<\/gml:Coordin

    ates(.*)/\2/s

    2017-01-13T11:02:42.288787+01:00 ivr01
    /usr/local/sbin/opensips[24845]: ERROR:core:tr_eval_re: Can't
    compile regexp

    I managed to get it running with perl:

    use OpenSIPS qw ( log );

    use OpenSIPS::Constants;

    use OpenSIPS::Message;

    sub parsePIDFLO {

    my $m = shift;

    my $body = $m->getBody();

    ($coord) = $body =~ /Coordinates>(.*)</;

    my ($long, $lat) = split( /\s+/, $coord );

    Btw it would be great to be able to address the xml body by
    something like this:

    rb[application/pidf+xml] or rb["application/pidf+xml"] otherwise
    if bodies come in different order rb[1] would not work.

    Thanks

    *From:*Bogdan-Andrei Iancu [mailto:[email protected]]
    *Sent:* Mittwoch, 11. Januar 2017 11:05
    *To:* OpenSIPS users mailling list <[email protected]>
    <mailto:[email protected]>; asd asd <[email protected]>
    <mailto:[email protected]>
    *Subject:* Re: [OpenSIPS-Users] How to parse XML Body?

    Hi,

    Please try

    $var(reg) = "(.*)/gml:Coordinates>(.*)<\/gml:Coordinates(.*)/\2/s";
    xlog("Position is $(rb[1]{re.subst,$var(reg)})\n");

    Regards,


    Bogdan-Andrei Iancu

    OpenSIPS Founder and Developer

    http://www.opensips-solutions.com

    On 01/06/2017 05:44 PM, xaled wrote:

        Hi Bogdan,

        can you give any hints on how to get the Coordinates values
        and not the whole xml body from the regex subst?

        Sorry for being not clever enough to figure it out myself.

        Thanks

        Hi Bogdan,

        $var(reg) = "/gml:Coordinates>(.*)<\/gml:Coordinates/\1/";

        xlog("Position is $(rb[1]{re.subst,$var(reg)})\n");

        DBG:core:subst_run:matched shows the needed XML element with
        value, but not the value alone. The xlog output shows the
        whole XML body without gml:Coordinates.

        2017-01-05T13:23:23.104982+01:00 ivr01
        /usr/local/sbin/opensips[2227]: DBG:core:tr_eval_re: Trying to
        apply reg

        exp [/gml:Coordinates>(.*)<\/gml:Coordinates/\1/] on : [<?xml
        version="1.0" encoding="UTF-8"?>#015#012<presence xml

        ns="urn:ietf:params:xml:ns:pidf"
        xmlns:gp="urn:ietf:params:xml:ns:pidf:geopriv10"
        xmlns:gml="urn:opengis:specificat

        ion:gml:schema-xsd:feature:v3.0"
        entity="pres:sip:[email protected]"
        <mailto:pres:sip:[email protected]>>#015#012 <tuple
        id="PDT">#015#012  <s

        tatus>#015#012 <gp:geopriv>#015#012 <gp:location-info>#015#012
        <gml:location>#015#012      <gml:Point gml:

        id="point1" srsName="epsg:4346">#015#012
<gml:Coordinates>12.32 34.24</gml:Coordinates>#015#012 </gml:P

        oint>#015#012 </gml:location>#015#012
</gp:location-info>#015#012 <gp:usage-rules>#015#012 <gp:retran

        smission-allowed>no</gp:retransmission-allowed>#015#012
        <gp:retention-expiry />#015#012 </gp:usage-rules>#01

        5#012   </gp:geopriv>#015#012 </status>#015#012
        <timestamp>2016-8-02T04:13:23Z</timestamp>#015#012 </tuple>#015#0

        12</presence>#015#012#015#012]

        2017-01-05T13:23:23.107376+01:00 ivr01
        /usr/local/sbin/opensips[2227]: DBG:core:tr_eval_re: we must
        compile the

        regexp

        2017-01-05T13:23:23.107903+01:00 ivr01
        /usr/local/sbin/opensips[2227]: DBG:core:subst_parser: ok, se
        is 0x7f39a

        5d0a1f0

        2017-01-05T13:23:23.108241+01:00 ivr01
        /usr/local/sbin/opensips[2227]: DBG:core:subst_run: running. r=0

        2017-01-05T13:23:23.111918+01:00 ivr01
        /usr/local/sbin/opensips[2227]: DBG:core:subst_run: matched
        (404, 45): [

        gml:Coordinates>12.32 34.24</gml:Coordinates]

        2017-01-05T13:23:23.112380+01:00 ivr01
        /usr/local/sbin/opensips[2227]: DBG:core:buf_init: initializing...

        2017-01-05T13:23:23.112730+01:00 ivr01
        /usr/local/sbin/opensips[2227]: Position is <?xml
        version="1.0" encoding

        ="UTF-8"?>#015#012<presence
        xmlns="urn:ietf:params:xml:ns:pidf"
        xmlns:gp="urn:ietf:params:xml:ns:pidf:geopriv10" xm

        lns:gml="urn:opengis:specification:gml:schema-xsd:feature:v3.0"
        entity="pres:sip:[email protected]"
        <mailto:pres:sip:[email protected]>>#015#0

12 <tuple id="PDT">#015#012 <status>#015#012 <gp:geopriv>#015#012 <gp:location-info>#015#012 <gml:locatio

        n>#015#012      <gml:Point gml:id="point1"
        srsName="epsg:4346">#015#012 <12.32 34.24>#015#012      </gml:Poi

        nt>#015#012 </gml:location>#015#012
</gp:location-info>#015#012 <gp:usage-rules>#015#012 <gp:retransm

        ission-allowed>no</gp:retransmission-allowed>#015#012
        <gp:retention-expiry />#015#012 </gp:usage-rules>#015#

        012   </gp:geopriv>#015#012 </status>#015#012
        <timestamp>2016-8-02T04:13:23Z</timestamp>#015#012
        </tuple>#015#012

        </presence>

        Thanks

        *From:*Bogdan-Andrei Iancu [mailto:[email protected]]
        *Sent:* Donnerstag, 5. Januar 2017 13:12
        *To:* OpenSIPS users mailling list <[email protected]
        <mailto:[email protected]>>; xaled <[email protected]
        <mailto:[email protected]>>
        *Subject:* Re: [OpenSIPS-Users] How to parse XML Body?

        Try $var(reg) = "/gml:Coordinates>(.*)<\/gml:Coordinates/\1/";







        _______________________________________________

        Users mailing list

        [email protected] <mailto:[email protected]>

        http://lists.opensips.org/cgi-bin/mailman/listinfo/users


_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to