From 619d1ac58bc67335a1cede6bc9b538dcdefbb405 Mon Sep 17 00:00:00 2001 From: Brutus5000 Date: Tue, 31 Oct 2023 22:56:53 +0100 Subject: [PATCH] Replace Xirsys' local region urls with the global (recommended) one --- .../service/xirsys/XirsysSessionHandler.kt | 7 ++++++- .../service/xirsys/XirsysSessionHandlerTest.kt | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/test/kotlin/com/faforever/icebreaker/service/xirsys/XirsysSessionHandlerTest.kt diff --git a/src/main/kotlin/com/faforever/icebreaker/service/xirsys/XirsysSessionHandler.kt b/src/main/kotlin/com/faforever/icebreaker/service/xirsys/XirsysSessionHandler.kt index f772546..799c5b8 100644 --- a/src/main/kotlin/com/faforever/icebreaker/service/xirsys/XirsysSessionHandler.kt +++ b/src/main/kotlin/com/faforever/icebreaker/service/xirsys/XirsysSessionHandler.kt @@ -19,6 +19,11 @@ class XirsysSessionHandler( ) : SessionHandler { companion object { const val SERVER_NAME = "xirsys.com" + + private val regionalUriRegex = Regex(pattern = "(?\\w+):[\\w-]+\\.xirsys\\.com(?.*)") + private val regionalUriReplace = "\${protocol}://global.xirsys.net\${query}" + fun normalizeAndReplaceUriWithGlobal(regionalUri: String) = + regionalUriRegex.replace(input = regionalUri, replacement = regionalUriReplace) } private val xirsysClient: XirsysClient = RestClientBuilder.newBuilder() @@ -103,7 +108,7 @@ class XirsysSessionHandler( // A sample response looks like "stun:fr-turn1.xirsys.com" // The java URI class fails to read host and port due to the missing // after the : // Thus we "normalize" the uri, even though it is technically valid - url.replaceFirst(":", "://") + normalizeAndReplaceUriWithGlobal(url) }, ), ) diff --git a/src/test/kotlin/com/faforever/icebreaker/service/xirsys/XirsysSessionHandlerTest.kt b/src/test/kotlin/com/faforever/icebreaker/service/xirsys/XirsysSessionHandlerTest.kt new file mode 100644 index 0000000..18ddbeb --- /dev/null +++ b/src/test/kotlin/com/faforever/icebreaker/service/xirsys/XirsysSessionHandlerTest.kt @@ -0,0 +1,15 @@ +package com.faforever.icebreaker.service.xirsys + +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class XirsysSessionHandlerTest { + @Test + fun `it should replace xirsys urls with global one and normalize the protocol`() { + val input = "stun:fr-turn1.xirsys.com" + + val result = XirsysSessionHandler.normalizeAndReplaceUriWithGlobal(input) + + assertEquals("stun://global.xirsys.net", result) + } +}