package com.mojang.realmsclient.client; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.InputStreamReader; import java.io.InputStream; import java.net.Proxy; import java.io.IOException; import java.net.MalformedURLException; import com.mojang.realmsclient.exception.RealmsHttpException; import java.net.URL; import java.net.HttpURLConnection; public abstract class Request> { protected HttpURLConnection connection; private boolean connected; protected String url; public Request(final String string, final int integer2, final int integer3) { try { this.url = string; final Proxy proxy5 = RealmsClientConfig.getProxy(); if (proxy5 != null) { this.connection = (HttpURLConnection)new URL(string).openConnection(proxy5); } else { this.connection = (HttpURLConnection)new URL(string).openConnection(); } this.connection.setConnectTimeout(integer2); this.connection.setReadTimeout(integer3); } catch (MalformedURLException malformedURLException5) { throw new RealmsHttpException(malformedURLException5.getMessage(), malformedURLException5); } catch (IOException iOException5) { throw new RealmsHttpException(iOException5.getMessage(), iOException5); } } public void cookie(final String string1, final String string2) { cookie(this.connection, string1, string2); } public static void cookie(final HttpURLConnection httpURLConnection, final String string2, final String string3) { final String string4 = httpURLConnection.getRequestProperty("Cookie"); if (string4 == null) { httpURLConnection.setRequestProperty("Cookie", string2 + "=" + string3); } else { httpURLConnection.setRequestProperty("Cookie", string4 + ";" + string2 + "=" + string3); } } public int getRetryAfterHeader() { return getRetryAfterHeader(this.connection); } public static int getRetryAfterHeader(final HttpURLConnection httpURLConnection) { final String string2 = httpURLConnection.getHeaderField("Retry-After"); try { return Integer.valueOf(string2); } catch (Exception exception3) { return 5; } } public int responseCode() { try { this.connect(); return this.connection.getResponseCode(); } catch (Exception exception2) { throw new RealmsHttpException(exception2.getMessage(), exception2); } } public String text() { try { this.connect(); String string2 = null; if (this.responseCode() >= 400) { string2 = this.read(this.connection.getErrorStream()); } else { string2 = this.read(this.connection.getInputStream()); } this.dispose(); return string2; } catch (IOException iOException2) { throw new RealmsHttpException(iOException2.getMessage(), iOException2); } } private String read(final InputStream inputStream) throws IOException { if (inputStream == null) { return ""; } final InputStreamReader inputStreamReader3 = new InputStreamReader(inputStream, "UTF-8"); final StringBuilder stringBuilder4 = new StringBuilder(); for (int integer5 = inputStreamReader3.read(); integer5 != -1; integer5 = inputStreamReader3.read()) { stringBuilder4.append((char)integer5); } return stringBuilder4.toString(); } private void dispose() { final byte[] arr2 = new byte[1024]; try { final InputStream inputStream3 = this.connection.getInputStream(); while (inputStream3.read(arr2) > 0) {} inputStream3.close(); } catch (Exception exception3) { try { final InputStream inputStream4 = this.connection.getErrorStream(); if (inputStream4 == null) { return; } while (inputStream4.read(arr2) > 0) {} inputStream4.close(); } catch (IOException ex) {} } finally { if (this.connection != null) { this.connection.disconnect(); } } } protected T connect() { if (this.connected) { return (T)this; } final T did2 = this.doConnect(); this.connected = true; return did2; } protected abstract T doConnect(); public static Request get(final String string) { return new Get(string, 5000, 60000); } public static Request get(final String string, final int integer2, final int integer3) { return new Get(string, integer2, integer3); } public static Request post(final String string1, final String string2) { return new Post(string1, string2, 5000, 60000); } public static Request post(final String string1, final String string2, final int integer3, final int integer4) { return new Post(string1, string2, integer3, integer4); } public static Request delete(final String string) { return new Delete(string, 5000, 60000); } public static Request put(final String string1, final String string2) { return new Put(string1, string2, 5000, 60000); } public static Request put(final String string1, final String string2, final int integer3, final int integer4) { return new Put(string1, string2, integer3, integer4); } public String getHeader(final String string) { return getHeader(this.connection, string); } public static String getHeader(final HttpURLConnection httpURLConnection, final String string) { try { return httpURLConnection.getHeaderField(string); } catch (Exception exception3) { return ""; } } public static class Delete extends Request { public Delete(final String string, final int integer2, final int integer3) { super(string, integer2, integer3); } public Delete doConnect() { try { this.connection.setDoOutput(true); this.connection.setRequestMethod("DELETE"); this.connection.connect(); return this; } catch (Exception exception2) { throw new RealmsHttpException(exception2.getMessage(), exception2); } } } public static class Get extends Request { public Get(final String string, final int integer2, final int integer3) { super(string, integer2, integer3); } public Get doConnect() { try { this.connection.setDoInput(true); this.connection.setDoOutput(true); this.connection.setUseCaches(false); this.connection.setRequestMethod("GET"); return this; } catch (Exception exception2) { throw new RealmsHttpException(exception2.getMessage(), exception2); } } } public static class Put extends Request { private final String content; public Put(final String string1, final String string2, final int integer3, final int integer4) { super(string1, integer3, integer4); this.content = string2; } public Put doConnect() { try { if (this.content != null) { this.connection.setRequestProperty("Content-Type", "application/json; charset=utf-8"); } this.connection.setDoOutput(true); this.connection.setDoInput(true); this.connection.setRequestMethod("PUT"); final OutputStream outputStream2 = this.connection.getOutputStream(); final OutputStreamWriter outputStreamWriter3 = new OutputStreamWriter(outputStream2, "UTF-8"); outputStreamWriter3.write(this.content); outputStreamWriter3.close(); outputStream2.flush(); return this; } catch (Exception exception2) { throw new RealmsHttpException(exception2.getMessage(), exception2); } } } public static class Post extends Request { private final String content; public Post(final String string1, final String string2, final int integer3, final int integer4) { super(string1, integer3, integer4); this.content = string2; } public Post doConnect() { try { if (this.content != null) { this.connection.setRequestProperty("Content-Type", "application/json; charset=utf-8"); } this.connection.setDoInput(true); this.connection.setDoOutput(true); this.connection.setUseCaches(false); this.connection.setRequestMethod("POST"); final OutputStream outputStream2 = this.connection.getOutputStream(); final OutputStreamWriter outputStreamWriter3 = new OutputStreamWriter(outputStream2, "UTF-8"); outputStreamWriter3.write(this.content); outputStreamWriter3.close(); outputStream2.flush(); return this; } catch (Exception exception2) { throw new RealmsHttpException(exception2.getMessage(), exception2); } } } }