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