Chitrang
Chitrang

Reputation: 5097

Smack version 4.2.0-rc1 XMPPTCPConnectionConfiguration setHostAddress() throws StringIndexOutOfBoundsException

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);

//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, is there an alternative? Original question is here.

Upvotes: 1

Views: 573

Answers (1)

Flow
Flow

Reputation: 24053

That's an bug which should be fixed in 4.2.0-rc2. Try 4.2.0-rc2-SNAPSHOT until it is released.

Upvotes: 1

Related Questions