git » sdk » commit b280446

Don't use duplicate ICE servers

author Stephen Paul Weber
2024-10-21 18:17:06 UTC
committer Stephen Paul Weber
2024-10-21 18:17:06 UTC
parent 7595ca88083a9b5ffac06b0ee8e827604d25ac2e

Don't use duplicate ICE servers

snikket/Client.hx +10 -5

diff --git a/snikket/Client.hx b/snikket/Client.hx
index ffbd081..db58b17 100644
--- a/snikket/Client.hx
+++ b/snikket/Client.hx
@@ -1092,6 +1092,7 @@ class Client extends EventEmitter {
 	private function getIceServers(callback: (Array<IceServer>)->Void) {
 		final extDiscoGet = new ExtDiscoGet(jid.domain);
 		extDiscoGet.onFinished(() -> {
+			final didUrl: Map<String, Bool> = [];
 			final servers = [];
 			for (service in extDiscoGet.getResult() ?? []) {
 				if (!["stun", "stuns", "turn", "turns"].contains(service.attr.get("type"))) continue;
@@ -1100,11 +1101,15 @@ class Client extends EventEmitter {
 				final port = Std.parseInt(service.attr.get("port"));
 				if (port == null || port < 1 || port > 65535) continue;
 				final isTurn = ["turn", "turns"].contains(service.attr.get("type"));
-				servers.push({
-					username: service.attr.get("username"),
-					credential: service.attr.get("password"),
-					urls: [service.attr.get("type") + ":" + (host.indexOf(":") >= 0 ? "[" + host + "]" : host) + ":" + port + (isTurn ? "?transport=" + service.attr.get("transport") : "")]
-				});
+				final url = service.attr.get("type") + ":" + (host.indexOf(":") >= 0 ? "[" + host + "]" : host) + ":" + port + (isTurn ? "?transport=" + service.attr.get("transport") : "");
+				if (!didUrl.exists(url)) {
+					servers.push({
+						username: service.attr.get("username"),
+						credential: service.attr.get("password"),
+						urls: [url]
+					});
+					didUrl[url] = true;
+				}
 			}
 			callback(servers);
 		});