diff --git a/core/src/com/unciv/UncivGame.kt b/core/src/com/unciv/UncivGame.kt index 882fff5c29..d2fd717ff4 100644 --- a/core/src/com/unciv/UncivGame.kt +++ b/core/src/com/unciv/UncivGame.kt @@ -6,6 +6,8 @@ import com.badlogic.gdx.Gdx import com.badlogic.gdx.Input import com.badlogic.gdx.Screen import com.badlogic.gdx.scenes.scene2d.actions.Actions +import com.unciv.UncivGame.Companion.Current +import com.unciv.UncivGame.Companion.isCurrentInitialized import com.unciv.logic.GameInfo import com.unciv.logic.IsPartOfGameInfoSerialization import com.unciv.logic.UncivShowableException @@ -504,6 +506,11 @@ open class UncivGame(val isConsoleMode: Boolean = false) : Game(), PlatformSpeci @Readonly fun getGameInfoOrNull() = if (isCurrentInitialized()) Current.gameInfo else null @Readonly fun isCurrentGame(gameId: String): Boolean = isCurrentInitialized() && Current.gameInfo != null && Current.gameInfo!!.gameId == gameId @Readonly fun isDeepLinkedGameLoading() = isCurrentInitialized() && Current.deepLinkedMultiplayerGame != null + + @Readonly + fun getUserAgent(fallbackStr: String = "Unknown"): String = if (isCurrentInitialized()) { + "Unciv/${VERSION.toNiceString()}-GNU-Terry-Pratchett" + } else "Unciv/$fallbackStr-GNU-Terry-Pratchett" } data class Version( diff --git a/core/src/com/unciv/logic/multiplayer/apiv2/ApiV2Wrapper.kt b/core/src/com/unciv/logic/multiplayer/apiv2/ApiV2Wrapper.kt index 109eb7b8d1..82248df6c5 100644 --- a/core/src/com/unciv/logic/multiplayer/apiv2/ApiV2Wrapper.kt +++ b/core/src/com/unciv/logic/multiplayer/apiv2/ApiV2Wrapper.kt @@ -4,29 +4,17 @@ import com.unciv.UncivGame import com.unciv.logic.UncivShowableException import com.unciv.utils.Concurrency import com.unciv.utils.Log -import io.ktor.client.HttpClient -import io.ktor.client.call.body -import io.ktor.client.engine.cio.CIO -import io.ktor.client.plugins.HttpSend -import io.ktor.client.plugins.HttpTimeout -import io.ktor.client.plugins.contentnegotiation.ContentNegotiation -import io.ktor.client.plugins.defaultRequest -import io.ktor.client.plugins.plugin -import io.ktor.client.plugins.websocket.ClientWebSocketSession -import io.ktor.client.plugins.websocket.WebSockets -import io.ktor.client.plugins.websocket.cio.webSocketRawSession -import io.ktor.client.request.get -import io.ktor.http.DEFAULT_PORT -import io.ktor.http.ParametersBuilder -import io.ktor.http.URLBuilder -import io.ktor.http.URLProtocol -import io.ktor.http.Url -import io.ktor.http.appendPathSegments -import io.ktor.http.encodedPath -import io.ktor.http.isSecure -import io.ktor.http.userAgent -import io.ktor.serialization.kotlinx.KotlinxWebsocketSerializationConverter -import io.ktor.serialization.kotlinx.json.json +import io.ktor.client.* +import io.ktor.client.call.* +import io.ktor.client.engine.cio.* +import io.ktor.client.plugins.* +import io.ktor.client.plugins.contentnegotiation.* +import io.ktor.client.plugins.websocket.* +import io.ktor.client.plugins.websocket.cio.* +import io.ktor.client.request.* +import io.ktor.http.* +import io.ktor.serialization.kotlinx.* +import io.ktor.serialization.kotlinx.json.* import kotlinx.coroutines.Job import kotlinx.coroutines.coroutineScope import kotlinx.serialization.SerializationException @@ -84,7 +72,7 @@ open class ApiV2Wrapper(baseUrl: String) { init { client.plugin(HttpSend).intercept { request -> - request.userAgent("Unciv/${UncivGame.VERSION.toNiceString()}-GNU-Terry-Pratchett") + request.userAgent(UncivGame.getUserAgent("Multiplayer-v2")) val clientCall = try { execute(request) } catch (t: Throwable) { diff --git a/core/src/com/unciv/logic/multiplayer/chat/ChatWebSocket.kt b/core/src/com/unciv/logic/multiplayer/chat/ChatWebSocket.kt index 3ec2f2ac79..d4d86ef75f 100644 --- a/core/src/com/unciv/logic/multiplayer/chat/ChatWebSocket.kt +++ b/core/src/com/unciv/logic/multiplayer/chat/ChatWebSocket.kt @@ -168,6 +168,7 @@ object ChatWebSocket { session?.close() session = client.webSocketSession { url(getChatUrl()) + userAgent(UncivGame.getUserAgent("Chat")) header( HttpHeaders.Authorization, UncivGame.Current.settings.multiplayer.getAuthHeader() @@ -191,8 +192,7 @@ object ChatWebSocket { is Response.Chat -> ChatStore.relayChatMessage(response) is Response.Error -> ChatStore.relayGlobalMessage( - "Error: [${response.message}]", - "Server" + "Error: [${response.message}]", "Server" ) is Response.JoinSuccess -> Unit // TODO diff --git a/core/src/com/unciv/logic/multiplayer/storage/SimpleHttp.kt b/core/src/com/unciv/logic/multiplayer/storage/SimpleHttp.kt index 589a8ad046..66dfc97e03 100644 --- a/core/src/com/unciv/logic/multiplayer/storage/SimpleHttp.kt +++ b/core/src/com/unciv/logic/multiplayer/storage/SimpleHttp.kt @@ -4,6 +4,7 @@ import com.badlogic.gdx.Net import com.unciv.UncivGame import com.unciv.utils.Log import com.unciv.utils.debug +import io.ktor.http.* import java.io.BufferedReader import java.io.DataOutputStream import java.io.InputStreamReader @@ -12,7 +13,6 @@ import java.net.HttpURLConnection import java.net.InetAddress import java.net.URI import java.net.URL -import java.nio.charset.Charset private typealias SendRequestCallback = (success: Boolean, result: String, code: Int?)->Unit @@ -38,11 +38,8 @@ object SimpleHttp { requestMethod = method // default is GET connectTimeout = timeout instanceFollowRedirects = true - if (UncivGame.isCurrentInitialized()) - setRequestProperty("User-Agent", "Unciv/${UncivGame.VERSION.toNiceString()}-GNU-Terry-Pratchett") - else - setRequestProperty("User-Agent", "Unciv/Turn-Checker-GNU-Terry-Pratchett") - setRequestProperty("Content-Type", "text/plain") + setRequestProperty(HttpHeaders.UserAgent, UncivGame.getUserAgent("Turn-Checker")) + setRequestProperty(HttpHeaders.ContentType, "text/plain") for ((key, value) in header.orEmpty()) { setRequestProperty(key, value)