Hello,<br><div class="gmail_extra"><br></div><div class="gmail_extra">running kamailio 3.3.2.<br><br><div class="gmail_quote">On Mon, Nov 12, 2012 at 1:48 PM, Daniel-Constantin Mierla <span dir="ltr">&lt;<a href="mailto:miconda@gmail.com" target="_blank">miconda@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hello,<div class="im"><br>
<br>
On 11/12/12 10:02 AM, Kristofer Signer wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Hello,<br>
<br>
I&#39;m trying to dig in to the kamailio XMLRPC interfaces and the limitations I read in <a href="http://www.kamailio.org/docs/modules/stable/modules/xmlrpc.html#xmlrpc.implementation.limitations" target="_blank">http://www.kamailio.org/docs/<u></u>modules/stable/modules/xmlrpc.<u></u>html#xmlrpc.implementation.<u></u>limitations</a><br>

<br>
is really a no go for us.<br>
</blockquote></div>
which one is a &#39;no go&#39;? Nested structures are supported in the last version, iirc, the readme does not seem to be updated for this case.</blockquote><div>the &#39;no go&#39; is the structure {AoR, HashID, Contact, AoR, HashID, Contacts, ...}</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="im"><br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
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.<br>
<br>
Is there other options for xmlrpc module?<br>
</blockquote>
<br></div>
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?<br>
</blockquote><div><br></div><div>Actually, I don&#39;t get any errors. I&#39;m using the python example provided in kamailio src and that example will only parse out one record. </div><div><br></div><div><br></div><div><div>
[krsi@vera examples]$ python xmlrpc_test2.py ul.dump foo</div><div>{&#39;Domain&#39;: &#39;location&#39;, &#39;Stats&#39;: {&#39;Records&#39;: 2, &#39;Max-Slots&#39;: 1}, &#39;AoRs&#39;: {&#39;HashID&#39;: 1731621673, &#39;AoR&#39;: &#39;jkp-01&#39;, &#39;Contacts&#39;: {&#39;Contact&#39;: {&#39;Ruid&#39;: &#39;uloc-50a0ea3c-124bf-1&#39;, &#39;Received&#39;: &#39;[not set]&#39;, &#39;Path&#39;: &#39;[not set]&#39;, &#39;Reg-Id&#39;: 0, &#39;Expires&#39;: 99, &#39;Flags&#39;: 0, &#39;User-Agent&#39;: &#39;Jitsi1.0-Linux&#39;, &#39;Q&#39;: 0.0, &#39;Instance&#39;: &#39;[not set]&#39;, &#39;State&#39;: &#39;CS_SYNC&#39;, &#39;CSeq&#39;: 11, &#39;Methods&#39;: 18446744073709551615L, &#39;CFlags&#39;: 0, &#39;Address&#39;: &#39;sip:jkp-01@192.168.0.214:25060;transport=udp;registering_acc=foo_bar_com&#39;, &#39;Call-ID&#39;: &#39;61ac73a44826f3887a5db2371b044275@0:0:0:0:0:0:0:0&#39;, &#39;Socket&#39;: &#39;udp:192.168.0.82:5060&#39;}}}, &#39;Size&#39;: 512}</div>
</div><div><br></div><div>As you can see,. there should be two records but only one is parsed.</div><div><br></div><div><br></div><div>Here is the response body from tcpdump</div><div><br></div><div><div>&lt;?xml version=&quot;1.0&quot;?&gt;</div>
<div>&lt;methodResponse&gt;</div><div>&lt;params&gt;</div><div>&lt;param&gt;</div><div>&lt;value&gt;&lt;struct&gt;</div><div>  &lt;member&gt;&lt;name&gt;Domain&lt;/name&gt;&lt;value&gt;&lt;string&gt;location&lt;/string&gt;&lt;/value&gt;&lt;/member&gt; </div>
<div>  &lt;member&gt;&lt;name&gt;Size&lt;/name&gt;&lt;value&gt;&lt;int&gt;512&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div><div>  &lt;member&gt;</div><div>    &lt;name&gt;AoRs&lt;/name&gt;</div><div>    &lt;value&gt;&lt;struct&gt;</div>
<div>      &lt;member&gt;&lt;name&gt;AoR&lt;/name&gt;&lt;value&gt;&lt;string&gt;jkp-02&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div><div>      &lt;member&gt;&lt;name&gt;HashID&lt;/name&gt;&lt;value&gt;&lt;int&gt;1731621670&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>      &lt;member&gt;</div><div>        &lt;name&gt;Contacts&lt;/name&gt;</div><div>        &lt;value&gt;&lt;struct&gt;</div><div>          &lt;member&gt;</div><div>            &lt;name&gt;Contact&lt;/name&gt;</div><div>
            &lt;value&gt;&lt;struct&gt;</div><div>              &lt;member&gt;&lt;name&gt;Address&lt;/name&gt;&lt;value&gt;&lt;string&gt;<a href="http://sip:jkp-02@192.168.0.214:35060">sip:jkp-02@192.168.0.214:35060</a>&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>              &lt;member&gt;&lt;name&gt;Expires&lt;/name&gt;&lt;value&gt;&lt;int&gt;768&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div><div>              &lt;member&gt;&lt;name&gt;Q&lt;/name&gt;&lt;value&gt;&lt;double&gt;0.000000&lt;/double&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>              &lt;member&gt;&lt;name&gt;Call-ID&lt;/name&gt;&lt;value&gt;&lt;string&gt;<a href="mailto:rcilzqsjfpnuihl@vera.foo.com">rcilzqsjfpnuihl@vera.foo.com</a>&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div><div>
              &lt;member&gt;&lt;name&gt;CSeq&lt;/name&gt;&lt;value&gt;&lt;int&gt;383&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div><div>              &lt;member&gt;&lt;name&gt;User-Agent&lt;/name&gt;&lt;value&gt;&lt;string&gt;Twinkle/1.4.2&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>              &lt;member&gt;&lt;name&gt;Received&lt;/name&gt;&lt;value&gt;&lt;string&gt;[not set]&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div><div>              &lt;member&gt;&lt;name&gt;Path&lt;/name&gt;&lt;value&gt;&lt;string&gt;[not set]&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>              &lt;member&gt;&lt;name&gt;State&lt;/name&gt;&lt;value&gt;&lt;string&gt;CS_SYNC&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div><div>              &lt;member&gt;&lt;name&gt;Flags&lt;/name&gt;&lt;value&gt;&lt;int&gt;0&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>              &lt;member&gt;&lt;name&gt;CFlags&lt;/name&gt;&lt;value&gt;&lt;int&gt;0&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div><div>              &lt;member&gt;&lt;name&gt;Socket&lt;/name&gt;&lt;value&gt;&lt;string&gt;udp:<a href="http://192.168.0.82:5060">192.168.0.82:5060</a>&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>              &lt;member&gt;&lt;name&gt;Methods&lt;/name&gt;&lt;value&gt;&lt;int&gt;6111&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div><div>              &lt;member&gt;&lt;name&gt;Ruid&lt;/name&gt;&lt;value&gt;&lt;string&gt;uloc-50a0ea3c-124c0-1&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>              &lt;member&gt;&lt;name&gt;Instance&lt;/name&gt;&lt;value&gt;&lt;string&gt;[not set]&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div><div>              &lt;member&gt;&lt;name&gt;Reg-Id&lt;/name&gt;&lt;value&gt;&lt;int&gt;0&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>            &lt;/struct&gt;&lt;/value&gt;</div><div>          &lt;/member&gt;</div><div>        &lt;/struct&gt;&lt;/value&gt;</div><div>      &lt;/member&gt;</div><div>      &lt;member&gt;</div><div>        &lt;name&gt;AoR&lt;/name&gt;&lt;value&gt;&lt;string&gt;jkp-01&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>        &lt;member&gt;&lt;name&gt;HashID&lt;/name&gt;&lt;value&gt;&lt;int&gt;1731621673&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div><div>        &lt;member&gt;</div><div>          &lt;name&gt;Contacts&lt;/name&gt;</div>
<div>          &lt;value&gt;&lt;struct&gt;</div><div>            &lt;member&gt;</div><div>              &lt;name&gt;Contact&lt;/name&gt;</div><div>              &lt;value&gt;&lt;struct&gt;</div><div>                &lt;member&gt;&lt;name&gt;Address&lt;/name&gt;&lt;value&gt;&lt;string&gt;<a href="http://sip:jkp-01@192.168.0.214:25060">sip:jkp-01@192.168.0.214:25060</a>&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>                &lt;member&gt;&lt;name&gt;Expires&lt;/name&gt;&lt;value&gt;&lt;int&gt;185&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div><div>                &lt;member&gt;&lt;name&gt;Q&lt;/name&gt;&lt;value&gt;&lt;double&gt;0.000000&lt;/double&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>                &lt;member&gt;&lt;name&gt;Call-ID&lt;/name&gt;&lt;value&gt;&lt;string&gt;61ac73a44826f3887a5db2371b044275@0:0:0:0:0:0:0:0&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div><div>                &lt;member&gt;&lt;name&gt;CSeq&lt;/name&gt;&lt;value&gt;&lt;int&gt;12&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>                &lt;member&gt;&lt;name&gt;User-Agent&lt;/name&gt;&lt;value&gt;&lt;string&gt;Jitsi1.0-Linux&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div><div>                &lt;member&gt;&lt;name&gt;Received&lt;/name&gt;&lt;value&gt;&lt;string&gt;[not set]&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>                &lt;member&gt;&lt;name&gt;Path&lt;/name&gt;&lt;value&gt;&lt;string&gt;[not set]&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div><div>                &lt;member&gt;&lt;name&gt;State&lt;/name&gt;&lt;value&gt;&lt;string&gt;CS_SYNC&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>                &lt;member&gt;&lt;name&gt;Flags&lt;/name&gt;&lt;value&gt;&lt;int&gt;0&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div><div>                &lt;member&gt;&lt;name&gt;CFlags&lt;/name&gt;&lt;value&gt;&lt;int&gt;0&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>                &lt;member&gt;&lt;name&gt;Socket&lt;/name&gt;&lt;value&gt;&lt;string&gt;udp:<a href="http://192.168.0.82:5060">192.168.0.82:5060</a>&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div><div>                &lt;member&gt;&lt;name&gt;Methods&lt;/name&gt;&lt;value&gt;&lt;int&gt;18446744073709551615&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>                &lt;member&gt;&lt;name&gt;Ruid&lt;/name&gt;&lt;value&gt;&lt;string&gt;uloc-50a0ea3c-124bf-1&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div><div>                &lt;member&gt;&lt;name&gt;Instance&lt;/name&gt;&lt;value&gt;&lt;string&gt;[not set]&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>                &lt;member&gt;&lt;name&gt;Reg-Id&lt;/name&gt;&lt;value&gt;&lt;int&gt;0&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div><div>              &lt;/struct&gt;&lt;/value&gt;</div><div>            &lt;/member&gt;</div>
<div>          &lt;/struct&gt;&lt;/value&gt;</div><div>        &lt;/member&gt;</div><div>      &lt;/struct&gt;&lt;/value&gt;</div><div>    &lt;/member&gt;</div><div>    &lt;member&gt;</div><div>      &lt;name&gt;Stats&lt;/name&gt;</div>
<div>      &lt;value&gt;&lt;struct&gt;</div><div>        &lt;member&gt;&lt;name&gt;Records&lt;/name&gt;&lt;value&gt;&lt;int&gt;2&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div><div>        &lt;member&gt;&lt;name&gt;Max-Slots&lt;/name&gt;&lt;value&gt;&lt;int&gt;1&lt;/int&gt;&lt;/value&gt;&lt;/member&gt;</div>
<div>      &lt;/struct&gt;&lt;/value&gt;</div><div>    &lt;/member&gt;</div><div>  &lt;/struct&gt;&lt;/value&gt;</div><div>&lt;/param&gt;</div><div>&lt;/params&gt;</div><div>&lt;/methodResponse&gt;</div></div><div><br></div>
<div><br></div><div><br></div><div>and for reference, the same command from kamctl: </div><div><br></div><div> [krsi@sipproxy1 ~]$  kamctl mi ul_dump</div><div>Domain:: location table=512 records=2 max_slot=1</div><div>        AOR:: jkp-02</div>
<div>                Contact:: <a href="http://sip:jkp-02@192.168.0.214:35060">sip:jkp-02@192.168.0.214:35060</a> Q=</div><div>                        Expires:: 1961</div><div>                        Callid:: <a href="mailto:rcilzqsjfpnuihl@vera.foo.se">rcilzqsjfpnuihl@vera.foo.se</a></div>
<div>                        Cseq:: 383</div><div>                        User-agent:: Twinkle/1.4.2</div><div>                        State:: CS_SYNC</div><div>                        Flags:: 0</div><div>                        Cflag:: 0</div>
<div>                        Socket:: udp:<a href="http://192.168.0.82:5060">192.168.0.82:5060</a></div><div>                        Methods:: 6111</div><div>                        Ruid:: uloc-50a0ea3c-124c0-1</div><div>
                        Reg-Id:: 0</div><div>        AOR:: jkp-01</div><div>                Contact:: <a href="http://sip:jkp-01@192.168.0.214:25060">sip:jkp-01@192.168.0.214:25060</a> Q=</div><div>                        Expires:: 298</div>
<div>                        Callid:: 61ac73a44826f3887a5db2371b044275@0:0:0:0:0:0:0:0</div><div>                        Cseq:: 10</div><div>                        User-agent:: Jitsi1.0-Linux</div><div>                        State:: CS_SYNC</div>
<div>                        Flags:: 0</div><div>                        Cflag:: 0</div><div>                        Socket:: udp:<a href="http://192.168.0.82:5060">192.168.0.82:5060</a></div><div>                        Methods:: 4294967295</div>
<div>                        Ruid:: uloc-50a0ea3c-124bf-1</div><div>                        Reg-Id:: 0</div><div><br></div><div><br></div><div>Thanks</div><div>./Kristofer</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<br>
For example, siremis uses the xmlrpc interface and all is ok with handling the replies. It uses a library from php pear.<br>
<br>
Cheers,<br>
Daniel<span class=""><font color="#888888"><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/<u></u>miconda</a><br>
<br>
</font></span></blockquote></div><br></div>