<div>If you write your own parser you will be writing your own implementation of the xmlrpc decoder which I believe could be very complicated not even mentioning that it's close to reinventing the wheel. <div><br></div>
<div>I think Carsten's solution is the best right now. I'll try his approach myself.</div><div><br></div><div>Best Regards.</div></div><div><br></div>-- <br>Carlos<div><a href="http://caruizdiaz.com/" target="_blank">http://caruizdiaz.com</a></div>
<div>+595981146623</div><br><div class="gmail_quote">On Tue, Nov 13, 2012 at 8:24 AM, Kristofer Signer <span dir="ltr"><<a href="mailto:kristofer.signer@gmail.com" target="_blank">kristofer.signer@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<div class="im"><br>
<br>
On Tue, Nov 13, 2012 at 5:03 AM, Carlos Ruiz Díaz<br>
<<a href="mailto:carlos.ruizdiaz@gmail.com">carlos.ruizdiaz@gmail.com</a>> wrote:<br>
> Hello,<br>
><br>
> I've been through this problem a few weeks ago with my module that exports<br>
> nested structures through xmlrpc. Apparently, there's a limitation in the<br>
> technology itself that makes the nested structures to be overwritten<br>
> everytime the response XML is parsed, if you look closely, you will notice<br>
> that this makes sense since the structures are indexed by the name of the<br>
> field, which is the same for every record. That's the reason of only one row<br>
> being displayed even though the whole recordset was sent out.<br>
<br>
</div>Yes, I have noticed this. And the problem is that a struct is just a<br>
key-value-pair datatype which in normal situation does not support<br>
multiple key with the same name.<br>
<br>
A more correct implementation would be to represent the AoRs in an array.<br>
<br>
I think I will also write a work around for this. just parsing the return xml.<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
><br>
> I tried with three different php libraries, even with xmlrpc_decode() that<br>
> is the official function for decoding xmlrpc responses in php.<br>
><br>
> I didn't find a solution but I ended up using a workaround sending the<br>
> values using CSV format which was later parsed by the PHP in charge of<br>
> displaying the data.<br>
><br>
> Regards.<br>
><br>
> Carlos.<br>
><br>
> On Mon, Nov 12, 2012 at 11:43 PM, Daniel-Constantin Mierla<br>
> <<a href="mailto:miconda@gmail.com">miconda@gmail.com</a>> wrote:<br>
>><br>
>> Hello,<br>
>><br>
>> I am not a python parameter, but seems a limitation of the xmlrpc_test2.py<br>
>> tool, the tcp dump shows that the records are sent back in the xmlrpc<br>
>> response.<br>
>><br>
>> You will have to look inside/troubleshoot the xmlrpc_test2.py and see why<br>
>> it fails.<br>
>><br>
>> Cheers,<br>
>> Daniel<br>
>><br>
>><br>
>> On 11/12/12 9:58 AM, Kristofer Signer wrote:<br>
>><br>
>> Hello,<br>
>><br>
>> running kamailio 3.3.2.<br>
>><br>
>> On Mon, Nov 12, 2012 at 1:48 PM, Daniel-Constantin Mierla<br>
>> <<a href="mailto:miconda@gmail.com">miconda@gmail.com</a>> wrote:<br>
>>><br>
>>> Hello,<br>
>>><br>
>>><br>
>>> On 11/12/12 10:02 AM, Kristofer Signer wrote:<br>
>>>><br>
>>>> Hello,<br>
>>>><br>
>>>> I'm trying to dig in to the kamailio XMLRPC interfaces and the<br>
>>>> limitations I read in<br>
>>>> <a href="http://www.kamailio.org/docs/modules/stable/modules/xmlrpc.html#xmlrpc.implementation.limitations" target="_blank">http://www.kamailio.org/docs/modules/stable/modules/xmlrpc.html#xmlrpc.implementation.limitations</a><br>
>>>><br>
>>>> is really a no go for us.<br>
>>><br>
>>> which one is a 'no go'? Nested structures are supported in the last<br>
>>> version, iirc, the readme does not seem to be updated for this case.<br>
>><br>
>> the 'no go' is the structure {AoR, HashID, Contact, AoR, HashID, Contacts,<br>
>> ...}<br>
>>><br>
>>><br>
>>><br>
>>>><br>
>>>> For example, when to retrieve user locations and list of dialogs we get<br>
>>>> a xml document which is not so well formatted and we can not successfully<br>
>>>> parse it in an xmlrpc-parser.<br>
>>>><br>
>>>> Is there other options for xmlrpc module?<br>
>>><br>
>>><br>
>>> If the body is not successfully parsed, it is a bug. The limitation is<br>
>>> about not supporting all the data types, but when a reply is xmlrpc sent, it<br>
>>> should be valid. Can you test it with 1-2 location records that fail and<br>
>>> post the xmrpc here as well as the log error messages from the xml parser?<br>
>><br>
>><br>
>> Actually, I don't get any errors. I'm using the python example provided in<br>
>> kamailio src and that example will only parse out one record.<br>
>><br>
>><br>
>> [krsi@vera examples]$ python xmlrpc_test2.py ul.dump foo<br>
>> {'Domain': 'location', 'Stats': {'Records': 2, 'Max-Slots': 1}, 'AoRs':<br>
>> {'HashID': 1731621673, 'AoR': 'jkp-01', 'Contacts': {'Contact': {'Ruid':<br>
>> 'uloc-50a0ea3c-124bf-1', 'Received': '[not set]', 'Path': '[not set]',<br>
>> 'Reg-Id': 0, 'Expires': 99, 'Flags': 0, 'User-Agent': 'Jitsi1.0-Linux', 'Q':<br>
>> 0.0, 'Instance': '[not set]', 'State': 'CS_SYNC', 'CSeq': 11, 'Methods':<br>
>> 18446744073709551615L, 'CFlags': 0, 'Address':<br>
>> 'sip:jkp-01@192.168.0.214:25060;transport=udp;registering_acc=foo_bar_com',<br>
>> 'Call-ID': '61ac73a44826f3887a5db2371b044275@0:0:0:0:0:0:0:0', 'Socket':<br>
>> 'udp:192.168.0.82:5060'}}}, 'Size': 512}<br>
>><br>
>> As you can see,. there should be two records but only one is parsed.<br>
>><br>
>><br>
>> Here is the response body from tcpdump<br>
>><br>
>> <?xml version="1.0"?><br>
>> <methodResponse><br>
>> <params><br>
>> <param><br>
>> <value><struct><br>
>><br>
>> <member><name>Domain</name><value><string>location</string></value></member><br>
>> <member><name>Size</name><value><int>512</int></value></member><br>
>> <member><br>
>> <name>AoRs</name><br>
>> <value><struct><br>
>><br>
>> <member><name>AoR</name><value><string>jkp-02</string></value></member><br>
>><br>
>> <member><name>HashID</name><value><int>1731621670</int></value></member><br>
>> <member><br>
>> <name>Contacts</name><br>
>> <value><struct><br>
>> <member><br>
>> <name>Contact</name><br>
>> <value><struct><br>
>><br>
>> <member><name>Address</name><value><string><a href="http://sip:jkp-02@192.168.0.214:35060" target="_blank">sip:jkp-02@192.168.0.214:35060</a></string></value></member><br>
>><br>
>> <member><name>Expires</name><value><int>768</int></value></member><br>
>><br>
>> <member><name>Q</name><value><double>0.000000</double></value></member><br>
>><br>
>> <member><name>Call-ID</name><value><string><a href="mailto:rcilzqsjfpnuihl@vera.foo.com">rcilzqsjfpnuihl@vera.foo.com</a></string></value></member><br>
>><br>
>> <member><name>CSeq</name><value><int>383</int></value></member><br>
>><br>
>> <member><name>User-Agent</name><value><string>Twinkle/1.4.2</string></value></member><br>
>> <member><name>Received</name><value><string>[not<br>
>> set]</string></value></member><br>
>> <member><name>Path</name><value><string>[not<br>
>> set]</string></value></member><br>
>><br>
>> <member><name>State</name><value><string>CS_SYNC</string></value></member><br>
>><br>
>> <member><name>Flags</name><value><int>0</int></value></member><br>
>><br>
>> <member><name>CFlags</name><value><int>0</int></value></member><br>
>><br>
>> <member><name>Socket</name><value><string>udp:<a href="http://192.168.0.82:5060" target="_blank">192.168.0.82:5060</a></string></value></member><br>
>><br>
>> <member><name>Methods</name><value><int>6111</int></value></member><br>
>><br>
>> <member><name>Ruid</name><value><string>uloc-50a0ea3c-124c0-1</string></value></member><br>
>> <member><name>Instance</name><value><string>[not<br>
>> set]</string></value></member><br>
>><br>
>> <member><name>Reg-Id</name><value><int>0</int></value></member><br>
>> </struct></value><br>
>> </member><br>
>> </struct></value><br>
>> </member><br>
>> <member><br>
>> <name>AoR</name><value><string>jkp-01</string></value></member><br>
>><br>
>> <member><name>HashID</name><value><int>1731621673</int></value></member><br>
>> <member><br>
>> <name>Contacts</name><br>
>> <value><struct><br>
>> <member><br>
>> <name>Contact</name><br>
>> <value><struct><br>
>><br>
>> <member><name>Address</name><value><string><a href="http://sip:jkp-01@192.168.0.214:25060" target="_blank">sip:jkp-01@192.168.0.214:25060</a></string></value></member><br>
>><br>
>> <member><name>Expires</name><value><int>185</int></value></member><br>
>><br>
>> <member><name>Q</name><value><double>0.000000</double></value></member><br>
>><br>
>> <member><name>Call-ID</name><value><string>61ac73a44826f3887a5db2371b044275@0:0:0:0:0:0:0:0</string></value></member><br>
>><br>
>> <member><name>CSeq</name><value><int>12</int></value></member><br>
>><br>
>> <member><name>User-Agent</name><value><string>Jitsi1.0-Linux</string></value></member><br>
>> <member><name>Received</name><value><string>[not<br>
>> set]</string></value></member><br>
>> <member><name>Path</name><value><string>[not<br>
>> set]</string></value></member><br>
>><br>
>> <member><name>State</name><value><string>CS_SYNC</string></value></member><br>
>><br>
>> <member><name>Flags</name><value><int>0</int></value></member><br>
>><br>
>> <member><name>CFlags</name><value><int>0</int></value></member><br>
>><br>
>> <member><name>Socket</name><value><string>udp:<a href="http://192.168.0.82:5060" target="_blank">192.168.0.82:5060</a></string></value></member><br>
>><br>
>> <member><name>Methods</name><value><int>18446744073709551615</int></value></member><br>
>><br>
>> <member><name>Ruid</name><value><string>uloc-50a0ea3c-124bf-1</string></value></member><br>
>> <member><name>Instance</name><value><string>[not<br>
>> set]</string></value></member><br>
>><br>
>> <member><name>Reg-Id</name><value><int>0</int></value></member><br>
>> </struct></value><br>
>> </member><br>
>> </struct></value><br>
>> </member><br>
>> </struct></value><br>
>> </member><br>
>> <member><br>
>> <name>Stats</name><br>
>> <value><struct><br>
>> <member><name>Records</name><value><int>2</int></value></member><br>
>> <member><name>Max-Slots</name><value><int>1</int></value></member><br>
>> </struct></value><br>
>> </member><br>
>> </struct></value><br>
>> </param><br>
>> </params><br>
>> </methodResponse><br>
>><br>
>><br>
>><br>
>> and for reference, the same command from kamctl:<br>
>><br>
>> [krsi@sipproxy1 ~]$ kamctl mi ul_dump<br>
>> Domain:: location table=512 records=2 max_slot=1<br>
>> AOR:: jkp-02<br>
>> Contact:: <a href="http://sip:jkp-02@192.168.0.214:35060" target="_blank">sip:jkp-02@192.168.0.214:35060</a> Q=<br>
>> Expires:: 1961<br>
>> Callid:: <a href="mailto:rcilzqsjfpnuihl@vera.foo.se">rcilzqsjfpnuihl@vera.foo.se</a><br>
>> Cseq:: 383<br>
>> User-agent:: Twinkle/1.4.2<br>
>> State:: CS_SYNC<br>
>> Flags:: 0<br>
>> Cflag:: 0<br>
>> Socket:: udp:<a href="http://192.168.0.82:5060" target="_blank">192.168.0.82:5060</a><br>
>> Methods:: 6111<br>
>> Ruid:: uloc-50a0ea3c-124c0-1<br>
>> Reg-Id:: 0<br>
>> AOR:: jkp-01<br>
>> Contact:: <a href="http://sip:jkp-01@192.168.0.214:25060" target="_blank">sip:jkp-01@192.168.0.214:25060</a> Q=<br>
>> Expires:: 298<br>
>> Callid::<br>
>> 61ac73a44826f3887a5db2371b044275@0:0:0:0:0:0:0:0<br>
>> Cseq:: 10<br>
>> User-agent:: Jitsi1.0-Linux<br>
>> State:: CS_SYNC<br>
>> Flags:: 0<br>
>> Cflag:: 0<br>
>> Socket:: udp:<a href="http://192.168.0.82:5060" target="_blank">192.168.0.82:5060</a><br>
>> Methods:: 4294967295<br>
>> Ruid:: uloc-50a0ea3c-124bf-1<br>
>> Reg-Id:: 0<br>
>><br>
>><br>
>> Thanks<br>
>> ./Kristofer<br>
>><br>
>>><br>
>>> For example, siremis uses the xmlrpc interface and all is ok with<br>
>>> handling the replies. It uses a library from php pear.<br>
>>><br>
>>> Cheers,<br>
>>> Daniel<br>
>>><br>
>>> --<br>
>>> Daniel-Constantin Mierla - <a href="http://www.asipto.com" target="_blank">http://www.asipto.com</a><br>
>>> <a href="http://twitter.com/#!/miconda" target="_blank">http://twitter.com/#!/miconda</a> - <a href="http://www.linkedin.com/in/miconda" target="_blank">http://www.linkedin.com/in/miconda</a><br>
>>><br>
>><br>
>><br>
>> --<br>
>> Daniel-Constantin Mierla - <a href="http://www.asipto.com" target="_blank">http://www.asipto.com</a><br>
>> <a href="http://twitter.com/#!/miconda" target="_blank">http://twitter.com/#!/miconda</a> - <a href="http://www.linkedin.com/in/miconda" target="_blank">http://www.linkedin.com/in/miconda</a><br>
>><br>
>><br>
>> _______________________________________________<br>
>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list<br>
>> <a href="mailto:sr-users@lists.sip-router.org">sr-users@lists.sip-router.org</a><br>
>> <a href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users" target="_blank">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users</a><br>
>><br>
><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Carlos<div><a href="http://caruizdiaz.com" target="_blank">http://caruizdiaz.com</a></div><div>+595981146623</div><br>