properly wrap IPv6 addresses

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/utils/IP.java                        | 8 
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleRtpConnection.java | 4 
2 files changed, 10 insertions(+), 2 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/utils/IP.java 🔗

@@ -19,4 +19,12 @@ public class IP {
                         || PATTERN_IPV6_HEXCOMPRESSED.matcher(server).matches());
     }
 
+    public static String wrapIPv6(final String host) {
+        if (matches(host)) {
+            return String.format("[%s]", host);
+        } else {
+            return host;
+        }
+    }
+
 }

src/main/java/eu/siacs/conversations/xmpp/jingle/JingleRtpConnection.java 🔗

@@ -36,6 +36,7 @@ import eu.siacs.conversations.entities.Conversational;
 import eu.siacs.conversations.entities.Message;
 import eu.siacs.conversations.entities.RtpSessionStatus;
 import eu.siacs.conversations.services.AppRTCAudioManager;
+import eu.siacs.conversations.utils.IP;
 import eu.siacs.conversations.xml.Element;
 import eu.siacs.conversations.xml.Namespace;
 import eu.siacs.conversations.xmpp.jingle.stanzas.Group;
@@ -1109,9 +1110,8 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
                                     Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": skipping invalid combination of udp/tls in external services");
                                     continue;
                                 }
-                                //TODO wrap ipv6 addresses
                                 final PeerConnection.IceServer.Builder iceServerBuilder = PeerConnection.IceServer
-                                        .builder(String.format("%s:%s:%s?transport=%s", type, host, port, transport));
+                                        .builder(String.format("%s:%s:%s?transport=%s", type, IP.wrapIPv6(host), port, transport));
                                 iceServerBuilder.setTlsCertPolicy(PeerConnection.TlsCertPolicy.TLS_CERT_POLICY_INSECURE_NO_CHECK);
                                 if (username != null && password != null) {
                                     iceServerBuilder.setUsername(username);