Fix OkHttp connection leaks on connection error
When request fails, entire response needs to be wrapped in try with resources in order to close the connection properly and not only response body. Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
@@ -33,7 +33,6 @@ import net.runelite.http.api.RuneliteAPI;
|
||||
import okhttp3.HttpUrl;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -65,11 +64,9 @@ public class AccountClient
|
||||
.url(url)
|
||||
.build();
|
||||
|
||||
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
|
||||
|
||||
try (ResponseBody body = response.body())
|
||||
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
|
||||
{
|
||||
InputStream in = body.byteStream();
|
||||
InputStream in = response.body().byteStream();
|
||||
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), OAuthResponse.class);
|
||||
}
|
||||
catch (JsonParseException ex)
|
||||
@@ -92,9 +89,7 @@ public class AccountClient
|
||||
.url(url)
|
||||
.build();
|
||||
|
||||
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
|
||||
|
||||
try (ResponseBody body = response.body())
|
||||
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
|
||||
{
|
||||
logger.debug("Sent logout request");
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ import okhttp3.MediaType;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.RequestBody;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -65,11 +64,9 @@ public class ConfigClient
|
||||
.url(url)
|
||||
.build();
|
||||
|
||||
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
|
||||
|
||||
try (ResponseBody body = response.body())
|
||||
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
|
||||
{
|
||||
InputStream in = body.byteStream();
|
||||
InputStream in = response.body().byteStream();
|
||||
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), Configuration.class);
|
||||
}
|
||||
catch (JsonParseException ex)
|
||||
|
||||
@@ -32,7 +32,6 @@ import net.runelite.http.api.RuneliteAPI;
|
||||
import okhttp3.HttpUrl;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -55,11 +54,9 @@ public class HiscoreClient
|
||||
.url(url)
|
||||
.build();
|
||||
|
||||
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
|
||||
|
||||
try (ResponseBody body = response.body())
|
||||
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
|
||||
{
|
||||
InputStream in = body.byteStream();
|
||||
InputStream in = response.body().byteStream();
|
||||
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), HiscoreResult.class);
|
||||
}
|
||||
catch (JsonParseException ex)
|
||||
@@ -89,11 +86,9 @@ public class HiscoreClient
|
||||
.url(url)
|
||||
.build();
|
||||
|
||||
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
|
||||
|
||||
try (ResponseBody body = response.body())
|
||||
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
|
||||
{
|
||||
InputStream in = body.byteStream();
|
||||
InputStream in = response.body().byteStream();
|
||||
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), SingleHiscoreSkillResult.class);
|
||||
}
|
||||
catch (JsonParseException ex)
|
||||
|
||||
@@ -32,7 +32,6 @@ import net.runelite.http.api.RuneliteAPI;
|
||||
import okhttp3.HttpUrl;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -54,17 +53,15 @@ public class ItemClient
|
||||
.url(url)
|
||||
.build();
|
||||
|
||||
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
|
||||
|
||||
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
|
||||
{
|
||||
if (!response.isSuccessful())
|
||||
{
|
||||
logger.debug("Error looking up item {}: {}", itemId, response.message());
|
||||
return null;
|
||||
}
|
||||
|
||||
try (ResponseBody body = response.body())
|
||||
{
|
||||
InputStream in = body.byteStream();
|
||||
InputStream in = response.body().byteStream();
|
||||
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), ItemPrice.class);
|
||||
}
|
||||
catch (JsonParseException ex)
|
||||
@@ -87,17 +84,15 @@ public class ItemClient
|
||||
.url(url)
|
||||
.build();
|
||||
|
||||
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
|
||||
|
||||
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
|
||||
{
|
||||
if (!response.isSuccessful())
|
||||
{
|
||||
logger.debug("Error looking up item {}: {}", itemName, response.message());
|
||||
return null;
|
||||
}
|
||||
|
||||
try (ResponseBody body = response.body())
|
||||
{
|
||||
InputStream in = body.byteStream();
|
||||
InputStream in = response.body().byteStream();
|
||||
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), SearchResult.class);
|
||||
}
|
||||
catch (JsonParseException ex)
|
||||
|
||||
@@ -36,7 +36,6 @@ import okhttp3.MediaType;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.RequestBody;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -83,11 +82,9 @@ public class XteaClient
|
||||
.url(url)
|
||||
.build();
|
||||
|
||||
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
|
||||
|
||||
try (ResponseBody body = response.body())
|
||||
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
|
||||
{
|
||||
InputStream in = body.byteStream();
|
||||
InputStream in = response.body().byteStream();
|
||||
// CHECKSTYLE:OFF
|
||||
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), new TypeToken<List<XteaKey>>() { }.getType());
|
||||
// CHECKSTYLE:ON
|
||||
@@ -109,11 +106,9 @@ public class XteaClient
|
||||
.url(url)
|
||||
.build();
|
||||
|
||||
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
|
||||
|
||||
try (ResponseBody body = response.body())
|
||||
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
|
||||
{
|
||||
InputStream in = body.byteStream();
|
||||
InputStream in = response.body().byteStream();
|
||||
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), XteaKey.class);
|
||||
}
|
||||
catch (JsonParseException ex)
|
||||
|
||||
@@ -26,14 +26,17 @@ package net.runelite.http.service.hiscore;
|
||||
|
||||
import java.io.IOException;
|
||||
import net.runelite.http.api.RuneliteAPI;
|
||||
import net.runelite.http.api.hiscore.*;
|
||||
import net.runelite.http.api.hiscore.HiscoreEndpoint;
|
||||
import net.runelite.http.api.hiscore.HiscoreResult;
|
||||
import net.runelite.http.api.hiscore.HiscoreSkill;
|
||||
import net.runelite.http.api.hiscore.SingleHiscoreSkillResult;
|
||||
import net.runelite.http.api.hiscore.Skill;
|
||||
import net.runelite.http.service.util.HiscoreEndpointEditor;
|
||||
import net.runelite.http.service.util.exception.InternalServerErrorException;
|
||||
import net.runelite.http.service.util.exception.NotFoundException;
|
||||
import okhttp3.HttpUrl;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
import org.apache.commons.csv.CSVFormat;
|
||||
import org.apache.commons.csv.CSVParser;
|
||||
import org.apache.commons.csv.CSVRecord;
|
||||
@@ -41,7 +44,11 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.web.bind.WebDataBinder;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.bind.annotation.InitBinder;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/hiscore")
|
||||
@@ -66,8 +73,10 @@ public class HiscoreService
|
||||
.url(url)
|
||||
.build();
|
||||
|
||||
Response okresponse = RuneliteAPI.CLIENT.newCall(okrequest).execute();
|
||||
String responseStr;
|
||||
|
||||
try (Response okresponse = RuneliteAPI.CLIENT.newCall(okrequest).execute())
|
||||
{
|
||||
if (!okresponse.isSuccessful())
|
||||
{
|
||||
switch (HttpStatus.valueOf(okresponse.code()))
|
||||
@@ -79,11 +88,7 @@ public class HiscoreService
|
||||
}
|
||||
}
|
||||
|
||||
String responseStr;
|
||||
|
||||
try (ResponseBody body = okresponse.body())
|
||||
{
|
||||
responseStr = body.string();
|
||||
responseStr = okresponse.body().string();
|
||||
}
|
||||
|
||||
CSVParser parser = CSVParser.parse(responseStr, CSVFormat.DEFAULT);
|
||||
|
||||
@@ -45,7 +45,6 @@ import net.runelite.http.api.item.SearchResult;
|
||||
import okhttp3.HttpUrl;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -487,16 +486,14 @@ public class ItemService
|
||||
|
||||
private <T> T fetchJson(Request request, Class<T> clazz) throws IOException
|
||||
{
|
||||
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
|
||||
|
||||
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
|
||||
{
|
||||
if (!response.isSuccessful())
|
||||
{
|
||||
throw new IOException("Unsuccessful http response: " + response.message());
|
||||
}
|
||||
|
||||
try (ResponseBody body = response.body())
|
||||
{
|
||||
InputStream in = body.byteStream();
|
||||
InputStream in = response.body().byteStream();
|
||||
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), clazz);
|
||||
}
|
||||
catch (JsonParseException ex)
|
||||
@@ -513,16 +510,14 @@ public class ItemService
|
||||
.url(httpUrl)
|
||||
.build();
|
||||
|
||||
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
|
||||
|
||||
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
|
||||
{
|
||||
if (!response.isSuccessful())
|
||||
{
|
||||
throw new IOException("Unsuccessful http response: " + response.message());
|
||||
}
|
||||
|
||||
try (ResponseBody body = response.body())
|
||||
{
|
||||
return body.bytes();
|
||||
return response.body().bytes();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,7 +34,6 @@ import net.runelite.http.api.worlds.WorldResult;
|
||||
import okhttp3.HttpUrl;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@@ -53,12 +52,11 @@ public class WorldsService
|
||||
.url(url)
|
||||
.build();
|
||||
|
||||
Response okresponse = RuneliteAPI.CLIENT.newCall(okrequest).execute();
|
||||
byte[] b;
|
||||
|
||||
try (ResponseBody body = okresponse.body())
|
||||
try (Response okresponse = RuneliteAPI.CLIENT.newCall(okrequest).execute())
|
||||
{
|
||||
b = body.bytes();
|
||||
b = okresponse.body().bytes();
|
||||
}
|
||||
|
||||
List<World> worlds = new ArrayList<>();
|
||||
|
||||
@@ -31,13 +31,11 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.runelite.http.api.RuneliteAPI;
|
||||
import okhttp3.HttpUrl;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
|
||||
public class ConfigLoader
|
||||
{
|
||||
private static final OkHttpClient CLIENT = RuneliteAPI.CLIENT;
|
||||
private static final HttpUrl CONFIG_URL = HttpUrl.parse("http://oldschool.runescape.com/jav_config.ws"); // https redirects us to rs3
|
||||
|
||||
public static final String CODEBASE = "codebase";
|
||||
@@ -53,7 +51,7 @@ public class ConfigLoader
|
||||
.url(CONFIG_URL)
|
||||
.build();
|
||||
|
||||
try (Response response = CLIENT.newCall(request).execute();
|
||||
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute();
|
||||
BufferedReader in = new BufferedReader(new InputStreamReader(response.body().byteStream())))
|
||||
{
|
||||
String str;
|
||||
|
||||
Reference in New Issue
Block a user