001    package net.minecraft.util;
002    
003    import cpw.mods.fml.relauncher.Side;
004    import cpw.mods.fml.relauncher.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.MalformedURLException;
013    import java.net.ServerSocket;
014    import java.net.URL;
015    import java.net.URLEncoder;
016    import java.util.HashMap;
017    import java.util.Iterator;
018    import java.util.Map;
019    import java.util.Map.Entry;
020    import java.util.logging.Level;
021    import java.util.logging.Logger;
022    
023    public class HttpUtil
024    {
025        /**
026         * Builds an encoded HTTP POST content string from a string map
027         */
028        public static String buildPostString(Map par0Map)
029        {
030            StringBuilder var1 = new StringBuilder();
031            Iterator var2 = par0Map.entrySet().iterator();
032    
033            while (var2.hasNext())
034            {
035                Entry var3 = (Entry)var2.next();
036    
037                if (var1.length() > 0)
038                {
039                    var1.append('&');
040                }
041    
042                try
043                {
044                    var1.append(URLEncoder.encode((String)var3.getKey(), "UTF-8"));
045                }
046                catch (UnsupportedEncodingException var6)
047                {
048                    var6.printStackTrace();
049                }
050    
051                if (var3.getValue() != null)
052                {
053                    var1.append('=');
054    
055                    try
056                    {
057                        var1.append(URLEncoder.encode(var3.getValue().toString(), "UTF-8"));
058                    }
059                    catch (UnsupportedEncodingException var5)
060                    {
061                        var5.printStackTrace();
062                    }
063                }
064            }
065    
066            return var1.toString();
067        }
068    
069        /**
070         * Sends a HTTP POST request to the given URL with data from a map
071         */
072        public static String sendPost(URL par0URL, Map par1Map, boolean par2)
073        {
074            return sendPost(par0URL, buildPostString(par1Map), par2);
075        }
076    
077        /**
078         * Sends a HTTP POST request to the given URL with data from a string
079         */
080        public static String sendPost(URL par0URL, String par1Str, boolean par2)
081        {
082            try
083            {
084                HttpURLConnection var3 = (HttpURLConnection)par0URL.openConnection();
085                var3.setRequestMethod("POST");
086                var3.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
087                var3.setRequestProperty("Content-Length", "" + par1Str.getBytes().length);
088                var3.setRequestProperty("Content-Language", "en-US");
089                var3.setUseCaches(false);
090                var3.setDoInput(true);
091                var3.setDoOutput(true);
092                DataOutputStream var4 = new DataOutputStream(var3.getOutputStream());
093                var4.writeBytes(par1Str);
094                var4.flush();
095                var4.close();
096                BufferedReader var5 = new BufferedReader(new InputStreamReader(var3.getInputStream()));
097                StringBuffer var7 = new StringBuffer();
098                String var6;
099    
100                while ((var6 = var5.readLine()) != null)
101                {
102                    var7.append(var6);
103                    var7.append('\r');
104                }
105    
106                var5.close();
107                return var7.toString();
108            }
109            catch (Exception var8)
110            {
111                if (!par2)
112                {
113                    Logger.getLogger("Minecraft").log(Level.SEVERE, "Could not post to " + par0URL, var8);
114                }
115    
116                return "";
117            }
118        }
119    
120        @SideOnly(Side.CLIENT)
121    
122        /**
123         * The downloader for texturepacks stored in the server.
124         */
125        public static void downloadTexturePack(File par0File, String par1Str, IDownloadSuccess par2IDownloadSuccess, Map par3Map, int par4, IProgressUpdate par5IProgressUpdate)
126        {
127            Thread var6 = new Thread(new HttpUtilRunnable(par5IProgressUpdate, par1Str, par3Map, par0File, par2IDownloadSuccess, par4));
128            var6.setDaemon(true);
129            var6.start();
130        }
131    
132        @SideOnly(Side.CLIENT)
133        public static int func_76181_a() throws IOException
134        {
135            ServerSocket var0 = null;
136            boolean var1 = true;
137            int var10;
138    
139            try
140            {
141                var0 = new ServerSocket(0);
142                var10 = var0.getLocalPort();
143            }
144            finally
145            {
146                try
147                {
148                    if (var0 != null)
149                    {
150                        var0.close();
151                    }
152                }
153                catch (IOException var8)
154                {
155                    ;
156                }
157            }
158    
159            return var10;
160        }
161    
162        @SideOnly(Side.CLIENT)
163        public static String[] func_82718_a(String par0Str, String par1Str)
164        {
165            HashMap var2 = new HashMap();
166            var2.put("user", par0Str);
167            var2.put("password", par1Str);
168            var2.put("version", Integer.valueOf(13));
169            String var3;
170    
171            try
172            {
173                var3 = sendPost(new URL("http://login.minecraft.net/"), var2, false);
174            }
175            catch (MalformedURLException var5)
176            {
177                var5.printStackTrace();
178                return null;
179            }
180    
181            if (var3 != null && var3.length() != 0)
182            {
183                if (!var3.contains(":"))
184                {
185                    if (var3.trim().equals("Bad login"))
186                    {
187                        System.out.println("Login failed");
188                    }
189                    else if (var3.trim().equals("Old version"))
190                    {
191                        System.out.println("Outdated launcher");
192                    }
193                    else if (var3.trim().equals("User not premium"))
194                    {
195                        System.out.println(var3);
196                    }
197                    else
198                    {
199                        System.out.println(var3);
200                    }
201    
202                    return null;
203                }
204                else
205                {
206                    String[] var4 = var3.split(":");
207                    return new String[] {var4[2], var4[3]};
208                }
209            }
210            else
211            {
212                System.out.println("Can\'t connect to minecraft.net");
213                return null;
214            }
215        }
216    }