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 }