Hello,<div><br></div><div>I&#39;ve been through this problem a few weeks ago with my module that exports nested structures through xmlrpc. Apparently, there&#39;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&#39;s the reason of only one row being displayed even though the whole recordset was sent out. </div>
<div><br></div><div>I tried with three different php libraries, even with xmlrpc_decode() that is the official function for decoding xmlrpc responses in php.</div><div><br></div><div>I didn&#39;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.</div>
<div><br></div><div>Regards.</div><div><br></div><div>Carlos.</div><div><br><div class="gmail_quote">On Mon, Nov 12, 2012 at 11:43 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:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    Hello,<br>
    <br>
    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.<br>
    <br>
    You will have to look inside/troubleshoot the xmlrpc_test2.py and
    see why it fails.<br>
    <br>
    Cheers,<br>
    Daniel<div><div class="h5"><br>
    <br>
    <div>On 11/12/12 9:58 AM, Kristofer Signer
      wrote:<br>
    </div>
    <blockquote type="cite">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><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/modules/stable/modules/xmlrpc.html#xmlrpc.implementation.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><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;<a>sip:jkp-01@192.168.0.214:25060;transport=udp;registering_acc=foo_bar_com</a>&#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" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">sip:jkp-02@192.168.0.214:35060</a>
            Q=</div>
          <div>                        Expires:: 1961</div>
          <div>                        Callid:: <a href="mailto:rcilzqsjfpnuihl@vera.foo.se" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">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><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/#%21/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>
              </font></span></blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
    <pre cols="72">-- 
Daniel-Constantin Mierla - <a href="http://www.asipto.com" target="_blank">http://www.asipto.com</a>
<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></pre>
  </div></div></div>

<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></blockquote></div><br></div>