Search code examples
androidxmppippublicsmack

How to get my public IP from XMPP bind message?


I'm writing Android app and need to know my public IP. In my app i'm using Smack library for conversation with XMPP server (that needed not only to know my IP)

Bind message, received from server looks like:

<iq id="_xmpp_bind1" type="result">
   <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
      <jid>[email protected]/Smack</jid>
   </bind>
</iq>

But I'm waiting it looks like:

<iq id="_xmpp_bind1" type="result">
    <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
       <jid>[email protected]/11.22.33.44:12345</jid
    </bind>
</iq>

Where instead of 11.22.33.44 should be my public IP.


Solution

  • I found the cause of problem. My Smack library itself provokes server to send such bind response.

    It sends such bind request:

    <iq id="Um486-7" type="set">
       <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
          <resource>Smack</resource>
       </bind>
    </iq>
    

    So resource is specified explicitly by Smack's bind request. That situation is arises when using method:

    public void login (String username, String password)
    

    To avoid such behavior next method should be used:

    public void login (String username, String password, String resource)
    

    and resource should be set to null