001 package net.minecraft.src;
002
003 import cpw.mods.fml.common.Side;
004 import cpw.mods.fml.common.asm.SideOnly;
005 import java.io.BufferedReader;
006 import java.io.DataOutputStream;
007 import java.io.File;
008 import java.io.IOException;
009 import java.io.InputStreamReader;
010 import java.io.UnsupportedEncodingException;
011 import java.net.HttpURLConnection;
012 import java.net.ServerSocket;
013 import java.net.URL;
014 import java.net.URLEncoder;
015 import java.util.Iterator;
016 import java.util.Map;
017 import java.util.Map.Entry;
018 import java.util.logging.Level;
019 import java.util.logging.Logger;
020
021 public class HttpUtil
022 {
023 /**
024 * Builds an encoded HTTP POST content string from a string map
025 */
026 public static String buildPostString(Map par0Map)
027 {
028 StringBuilder var1 = new StringBuilder();
029 Iterator var2 = par0Map.entrySet().iterator();
030
031 while (var2.hasNext())
032 {
033 Entry var3 = (Entry)var2.next();
034
035 if (var1.length() > 0)
036 {
037 var1.append('&');
038 }
039
040 try
041 {
042 var1.append(URLEncoder.encode((String)var3.getKey(), "UTF-8"));
043 }
044 catch (UnsupportedEncodingException var6)
045 {
046 var6.printStackTrace();
047 }
048
049 if (var3.getValue() != null)
050 {
051 var1.append('=');
052
053 try
054 {
055 var1.append(URLEncoder.encode(var3.getValue().toString(), "UTF-8"));
056 }
057 catch (UnsupportedEncodingException var5)
058 {
059 var5.printStackTrace();
060 }
061 }
062 }
063
064 return var1.toString();
065 }
066
067 /**
068 * Sends a HTTP POST request to the given URL with data from a map
069 */
070 public static String sendPost(URL par0URL, Map par1Map, boolean par2)
071 {
072 return sendPost(par0URL, buildPostString(par1Map), par2);
073 }
074
075 /**
076 * Sends a HTTP POST request to the given URL with data from a string
077 */
078 public static String sendPost(URL par0URL, String par1Str, boolean par2)
079 {
080 try
081 {
082 HttpURLConnection var3 = (HttpURLConnection)par0URL.openConnection();
083 var3.setRequestMethod("POST");
084 var3.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
085 var3.setRequestProperty("Content-Length", "" + par1Str.getBytes().length);
086 var3.setRequestProperty("Content-Language", "en-US");
087 var3.setUseCaches(false);
088 var3.setDoInput(true);
089 var3.setDoOutput(true);
090 DataOutputStream var4 = new DataOutputStream(var3.getOutputStream());
091 var4.writeBytes(par1Str);
092 var4.flush();
093 var4.close();
094 BufferedReader var5 = new BufferedReader(new InputStreamReader(var3.getInputStream()));
095 StringBuffer var7 = new StringBuffer();
096 String var6;
097
098 while ((var6 = var5.readLine()) != null)
099 {
100 var7.append(var6);
101 var7.append('\r');
102 }
103
104 var5.close();
105 return var7.toString();
106 }
107 catch (Exception var8)
108 {
109 if (!par2)
110 {
111 Logger.getLogger("Minecraft").log(Level.SEVERE, "Could not post to " + par0URL, var8);
112 }
113
114 return "";
115 }
116 }
117
118 @SideOnly(Side.CLIENT)
119
120 /**
121 * The downloader for texturepacks stored in the server.
122 */
123 public static void downloadTexturePack(File par0File, String par1Str, IDownloadSuccess par2IDownloadSuccess, Map par3Map, int par4, IProgressUpdate par5IProgressUpdate)
124 {
125 Thread var6 = new Thread(new HttpUtilRunnable(par5IProgressUpdate, par1Str, par3Map, par0File, par2IDownloadSuccess, par4));
126 var6.setDaemon(true);
127 var6.start();
128 }
129
130 @SideOnly(Side.CLIENT)
131 public static int func_76181_a() throws IOException
132 {
133 ServerSocket var0 = null;
134 boolean var1 = true;
135 int var10;
136
137 try
138 {
139 var0 = new ServerSocket(0);
140 var10 = var0.getLocalPort();
141 }
142 finally
143 {
144 try
145 {
146 if (var0 != null)
147 {
148 var0.close();
149 }
150 }
151 catch (IOException var8)
152 {
153 ;
154 }
155 }
156
157 return var10;
158 }
159 }