package net.minecraft.util;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ServerSocket;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.minecraft.logging.ILogAgent;
public class HttpUtil
{
/**
* Builds an encoded HTTP POST content string from a string map
*/
public static String buildPostString(Map par0Map)
{
StringBuilder stringbuilder = new StringBuilder();
Iterator iterator = par0Map.entrySet().iterator();
while (iterator.hasNext())
{
Entry entry = (Entry)iterator.next();
if (stringbuilder.length() > 0)
{
stringbuilder.append('&');
}
try
{
stringbuilder.append(URLEncoder.encode((String)entry.getKey(), "UTF-8"));
}
catch (UnsupportedEncodingException unsupportedencodingexception)
{
unsupportedencodingexception.printStackTrace();
}
if (entry.getValue() != null)
{
stringbuilder.append('=');
try
{
stringbuilder.append(URLEncoder.encode(entry.getValue().toString(), "UTF-8"));
}
catch (UnsupportedEncodingException unsupportedencodingexception1)
{
unsupportedencodingexception1.printStackTrace();
}
}
}
return stringbuilder.toString();
}
/**
* Sends a HTTP POST request to the given URL with data from a map
*/
public static String sendPost(ILogAgent par0ILogAgent, URL par1URL, Map par2Map, boolean par3)
{
return sendPost(par0ILogAgent, par1URL, buildPostString(par2Map), par3);
}
/**
* Sends a HTTP POST request to the given URL with data from a string
*/
public static String sendPost(ILogAgent par0ILogAgent, URL par1URL, String par2Str, boolean par3)
{
try
{
HttpURLConnection httpurlconnection = (HttpURLConnection)par1URL.openConnection();
httpurlconnection.setRequestMethod("POST");
httpurlconnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpurlconnection.setRequestProperty("Content-Length", "" + par2Str.getBytes().length);
httpurlconnection.setRequestProperty("Content-Language", "en-US");
httpurlconnection.setUseCaches(false);
httpurlconnection.setDoInput(true);
httpurlconnection.setDoOutput(true);
DataOutputStream dataoutputstream = new DataOutputStream(httpurlconnection.getOutputStream());
dataoutputstream.writeBytes(par2Str);
dataoutputstream.flush();
dataoutputstream.close();
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(httpurlconnection.getInputStream()));
StringBuffer stringbuffer = new StringBuffer();
String s1;
while ((s1 = bufferedreader.readLine()) != null)
{
stringbuffer.append(s1);
stringbuffer.append('\r');
}
bufferedreader.close();
return stringbuffer.toString();
}
catch (Exception exception)
{
if (!par3)
{
if (par0ILogAgent != null)
{
par0ILogAgent.logSevereException("Could not post to " + par1URL, exception);
}
else
{
Logger.getAnonymousLogger().log(Level.SEVERE, "Could not post to " + par1URL, exception);
}
}
return "";
}
}
@SideOnly(Side.CLIENT)
/**
* The downloader for texturepacks stored in the server.
*/
public static void downloadTexturePack(File par0File, String par1Str, IDownloadSuccess par2IDownloadSuccess, Map par3Map, int par4, IProgressUpdate par5IProgressUpdate)
{
Thread thread = new Thread(new HttpUtilRunnable(par5IProgressUpdate, par1Str, par3Map, par0File, par2IDownloadSuccess, par4));
thread.setDaemon(true);
thread.start();
}
@SideOnly(Side.CLIENT)
public static int func_76181_a() throws IOException
{
ServerSocket serversocket = null;
boolean flag = true;
int i;
try
{
serversocket = new ServerSocket(0);
i = serversocket.getLocalPort();
}
finally
{
try
{
if (serversocket != null)
{
serversocket.close();
}
}
catch (IOException ioexception)
{
;
}
}
return i;
}
@SideOnly(Side.CLIENT)
public static String[] loginToMinecraft(ILogAgent par0ILogAgent, String par1Str, String par2Str)
{
HashMap hashmap = new HashMap();
hashmap.put("user", par1Str);
hashmap.put("password", par2Str);
hashmap.put("version", Integer.valueOf(13));
String s2;
try
{
s2 = sendPost(par0ILogAgent, new URL("http://login.minecraft.net/"), hashmap, false);
}
catch (MalformedURLException malformedurlexception)
{
malformedurlexception.printStackTrace();
return null;
}
if (s2 != null && s2.length() != 0)
{
if (!s2.contains(":"))
{
if (par0ILogAgent == null)
{
System.out.println("Failed to authenticate: " + s2);
}
else
{
par0ILogAgent.logWarning("Failed to authenticae: " + s2);
}
return null;
}
else
{
String[] astring = s2.split(":");
return new String[] {astring[2], astring[3]};
}
}
else
{
if (par0ILogAgent == null)
{
System.out.println("Failed to authenticate: Can\'t connect to minecraft.net");
}
else
{
par0ILogAgent.logWarning("Failed to authenticate: Can\'t connect to minecraft.net");
}
return null;
}
}
@SideOnly(Side.CLIENT)
public static String func_104145_a(URL par0URL) throws IOException
{
HttpURLConnection httpurlconnection = (HttpURLConnection)par0URL.openConnection();
httpurlconnection.setRequestMethod("GET");
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(httpurlconnection.getInputStream()));
StringBuilder stringbuilder = new StringBuilder();
String s;
while ((s = bufferedreader.readLine()) != null)
{
stringbuilder.append(s);
stringbuilder.append('\r');
}
bufferedreader.close();
return stringbuilder.toString();
}
}