AnsweredAssumed Answered

Smack version 4.2.0-rc1 XMPPTCPConnectionConfiguration setHostAddress() throws StringIndexOutOfBoundsException.

Question asked by Bosleo on Jan 4, 2017
Latest reply on Jan 5, 2017 by Bosleo

We're working with Openfire 4.1.1 and trying to connect with smack, with previous smack version 4.1.9 it was working perfectly.

But in order to achieve XEP-0313(MAP), has to update with smack version 4.2.0-rc1.

 

 

Here is XMPPTCPConnectionConfiguration,

 

 

            InetAddress inetAddress = InetAddress.getByName(mServiceName);

  or

            InetAddress inetAddress = InetAddress.getLocalHost();

 

 

            XMPPTCPConnectionConfiguration xmpptcpConnectionConfiguration =

                    XMPPTCPConnectionConfiguration.builder()

                            .setXmppDomain(mServiceName)

                            .setUsernameAndPassword(mUsername, mPassword)

                            .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)

                            .setHostAddress(inetAddress)

                            .setPort(5222)

                            .setDebuggerEnabled(true)

                            .setSendPresence(true)

                            .setDebuggerEnabled(true)

                            .setCompressionEnabled(true)

                            .build();

 

 

Here mServiceName is local ip address ""192.168.X.X".

 

 

And exception,

 

W/System.err: java.lang.StringIndexOutOfBoundsException: length=0; index=-1

W/System.err:     at java.lang.String.charAt(Native Method)

W/System.err:     at org.jivesoftware.smack.util.dns.HostAddress.<init>(HostAddress.java:48)

W/System.err:     at org.jivesoftware.smack.util.dns.HostAddress.<init>(HostAddress.java:62)

W/System.err:     at org.jivesoftware.smack.AbstractXMPPConnection.populateHostAddresses(AbstractXMP PConnection.java:607)

W/System.err:     at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectUsingConfiguration(XMPPTCPC onnection.java:555)

W/System.err:     at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection. java:885)

W/System.err:     at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.ja va:374)

W/System.err:     at com.example.bosleo.chatapp.ChatConnection.connect(ChatConnection.java:141)

W/System.err:     at com.example.bosleo.chatapp.ChatConnectionService.initConnection(ChatConnectionS ervice.java:82)

W/System.err:     at com.example.bosleo.chatapp.ChatConnectionService.access$100(ChatConnectionServi ce.java:20)

W/System.err:     at com.example.bosleo.chatapp.ChatConnectionService$1.run(ChatConnectionService.ja va:105)

W/System.err:     at java.lang.Thread.run(Thread.java:818)

 

 

Please check with HostAddress class constructors. May be it's because fdqn value is "".

 

 

    public HostAddress(int port, InetAddress hostAddress) {

        this("", port, Collections.singletonList(hostAddress));

    }

 

 

   public HostAddress(String fqdn, int port, List<InetAddress> inetAddresses) {

        Objects.requireNonNull(fqdn, "FQDN is null");

        if (port < 0 || port > 65535)

            throw new IllegalArgumentException(

                    "Port must be a 16-bit unsiged integer (i.e. between 0-65535. Port was: " + port);

        if (fqdn.charAt(fqdn.length() - 1) == '.') {

            this.fqdn = fqdn.substring(0, fqdn.length() - 1);

        }

        else {

            this.fqdn = fqdn;

        }

        this.port = port;

        if (inetAddresses.isEmpty()) {

            throw new IllegalArgumentException("Must provide at least one InetAddress");

        }

        this.inetAddresses = inetAddresses;

    }

 

 

Or in case I'm doing something wrong, request smack team to provide alternative asap. Many thanks in advance.

Outcomes