    001package net.minecraft.util;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005import java.io.BufferedReader;
    006import java.io.DataOutputStream;
    007import java.io.File;
    008import java.io.IOException;
    009import java.io.InputStreamReader;
    010import java.io.UnsupportedEncodingException;
    011import java.net.HttpURLConnection;
    012import java.net.MalformedURLException;
    013import java.net.ServerSocket;
    014import java.net.URL;
    015import java.net.URLEncoder;
    016import java.util.HashMap;
    017import java.util.Iterator;
    018import java.util.Map;
    019import java.util.Map.Entry;
    020import java.util.logging.Level;
    021import java.util.logging.Logger;
    022
    023public 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}