Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,22 @@
import com.mojang.util.UUIDTypeAdapter;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import net.minecraft.util.Util;
import org.jetbrains.annotations.Nullable;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Type;
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.channels.UnresolvedAddressException;
import java.nio.charset.StandardCharsets;
import java.util.Optional;
import java.util.UUID;
import java.util.function.Function;
import java.util.function.Supplier;

/**
Expand All @@ -27,20 +30,32 @@
@FunctionalInterface
public interface MoreHttpResponses {
int SC_MULTIPLE_CHOICES = 300;
HttpClient CLIENT = HttpClient.newHttpClient();
Gson GSON = new GsonBuilder()
.registerTypeAdapter(UUID.class, new UUIDTypeAdapter())
.registerTypeHierarchyAdapter(SkinType.class, SkinType.adapter())
.create();

Function<URI, HttpClient> HTTP_CLIENTS = Util.memoize((hostname) -> {
var builder = HttpClient.newBuilder();
// The java.net.http client defaults to using http/2 for all requests.
// Some servers don't behave with http/2 on an insecure local connection.
// So set the http version to 1.1 for those servers.
if ("http".equalsIgnoreCase(hostname.getScheme())) {
builder.version(HttpClient.Version.HTTP_1_1);
}
return builder.build();
});

static MoreHttpResponses execute(HttpRequest.Builder request) throws IOException {
return execute(request.build());
}

static MoreHttpResponses execute(HttpRequest request) throws IOException {
HDSkinsServer.LOGGER.debug("Executing web request to {}", request::uri);
// Get a client from the url resolved to its root
var httpClient = HTTP_CLIENTS.apply(request.uri().resolve("/"));
Comment thread
Sollace marked this conversation as resolved.
Resolved
try {
HttpResponse<InputStream> response = CLIENT.send(request, BodyHandlers.ofInputStream());
HttpResponse<InputStream> response = httpClient.send(request, BodyHandlers.ofInputStream());
return () -> response;
} catch (InterruptedException | UnresolvedAddressException e) {
throw new IOException(e);
Expand Down
Loading