// Decompiled by Jad v1.5.7f. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) braces deadcode fieldsfirst 
// Source File Name:   HTTPUtils.java
// Class Version:      45.3

package org.apache.soap.util.net;

import java.io.*;
import java.lang.reflect.Method;
import java.net.Socket;
import java.net.URL;
import java.util.*;
import javax.mail.MessagingException;
import org.apache.soap.Constants;
import org.apache.soap.SOAPException;
import org.apache.soap.rpc.SOAPContext;
import org.apache.soap.transport.TransportMessage;
import org.apache.soap.util.mime.ByteArrayDataSource;

// flag ACC_SUPER is set
public class HTTPUtils
{
    // Constants:          311
    // Interfaces:         0
    // Fields:             5
    // Methods:            6
    // Class Attributes:   1


    private static final String HTTP_VERSION = "1.0";
    private static final int HTTP_DEFAULT_PORT = 80;
    private static final int HTTPS_DEFAULT_PORT = 443;
    public static final int DEFAULT_OUTPUT_BUFFER_SIZE = 512;
    static Class class$java$lang$String; /* synthetic field */

    // Decompiling method: <init>  Signature: ()V
    // Max stack: 1, #locals: 1, #params: 1
    // Code length: 5 bytes, Code offset: 3957
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Lorg/apache/soap/util/net/HTTPUtils; At 0 5 Range 0 4 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type V At 0 5 Range 0 4 Init 0 fixed
    public HTTPUtils()
    {
        super();
        return;
    }

    // Decompiling method: buildSocket  Signature: (Ljava/net/URL;ILjava/lang/String;I)Ljava/net/Socket;
    // Max stack: 6, #locals: 11, #params: 4
    // Code length: 149 bytes, Code offset: 4000
    // Line Number Table found: 20 entries
    // Parameter  0 added: Name url Type Ljava/net/URL; At 0 149 Range 0 148 Init 0
    // Parameter  1 added: Name i Type I At 0 149 Range 0 148 Init 0
    // Parameter  2 added: Name s Type Ljava/lang/String; At 0 149 Range 0 148 Init 0
    // Parameter  3 added: Name j Type I At 0 149 Range 0 148 Init 0
    // RetValue  11 added: Name <returnValue> Type Ljava/net/Socket; At 0 149 Range 0 148 Init 0 fixed
    // LocalVar   4 added: Name obj Type A At 1 2 Range 1 2 Init 1
    // LocalVar   5 added: Name obj1 Type A At 4 2 Range 4 5 Init 4
    // LocalVar   5 added: Name s1 Type Ljava/lang/String; At 14 125 Range 14 138 Init 14
    // LocalVar   6 added: Name k Type I At 17 124 Range 17 140 Init 17
    // LocalVar   7 added: Name class1 Type Ljava/lang/Class; At 45 40 Range 45 84 Init 45
    // LocalVar   8 added: Name aclass Type [Ljava/lang/Class; At 81 8 Range 81 88 Init 81
    // LocalVar   9 added: Name method Type Ljava/lang/reflect/Method; At 92 27 Range 92 118 Init 92
    // LocalVar  10 added: Name aobj Type [Ljava/lang/Object; At 115 7 Range 115 121 Init 115
    // LocalVar   4 added: Name socket Type Ljava/net/Socket; At 128 20 Range 128 147 Init 128
    // LocalVar   4 chged: Name socket1 Oname obj Type Ljava/net/Socket; At 1 2 Range 1 2 Init 1
    // LocalVar   4 name socket(Ljava/net/Socket;) merged out into socket1(Ljava/net/Socket;)
    // LocalVar   5 chged: Name s2 Oname obj1 Type Ljava/lang/String; At 4 2 Range 4 5 Init 4
    // LocalVar   5 name s1(Ljava/lang/String;) merged out into s2(Ljava/lang/String;)
    private static Socket buildSocket(URL url, int i, String s, int j)
        throws Exception
    {
        Socket socket = null;
        String s1 = null;
        int k;
        if(s == null)
        {
            s1 = url.getHost();
            k = i;
        } else
        {
            s1 = s;
            k = j;
        }
        if(url.getProtocol().equalsIgnoreCase("HTTPS"))
        {
            Class class1 = Class.forName("org.apache.soap.util.net.SSLUtils");
            Class aclass[] = {
                class$java$lang$String == null ? (class$java$lang$String = class$("java.lang.String")) : class$java$lang$String, Integer.TYPE
            };
            Method method = class1.getMethod("buildSSLSocket", aclass);
            Object aobj[] = {
                s1, new Integer(k)
            };
            socket = (Socket)method.invoke(null, aobj);
        } else
        {
            socket = new Socket(s1, k);
        }
        return socket;
    }

    // Decompiling method: class$  Signature: (Ljava/lang/String;)Ljava/lang/Class;
    // Max stack: 3, #locals: 2, #params: 1
    // Code length: 18 bytes, Code offset: 4273
    // Exception table: 1 entries
    //           start  0 end 5 handler 5 type ClassNotFoundException
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name s Type Ljava/lang/String; At 0 18 Range 0 17 Init 0
    // RetValue   2 added: Name <returnValue> Type Ljava/lang/Class; At 0 18 Range 0 17 Init 0 fixed
    // LocalVar   1 added: Name classnotfoundexception Type Ljava/lang/ClassNotFoundException; At 5 6 Range 5 10 Init 5
    static Class class$(String s)
    {
        try
        {
            return Class.forName(s);
        }
        catch(ClassNotFoundException classnotfoundexception)
        {
            throw new NoClassDefFoundError(classnotfoundexception.getMessage());
        }
    }

    // Decompiling method: getPort  Signature: (Ljava/net/URL;)I
    // Max stack: 2, #locals: 2, #params: 1
    // Code length: 33 bytes, Code offset: 4343
    // Line Number Table found: 7 entries
    // Parameter  0 added: Name url Type Ljava/net/URL; At 0 33 Range 0 32 Init 0
    // RetValue   2 added: Name <returnValue> Type I At 0 33 Range 0 32 Init 0 fixed
    // LocalVar   1 added: Name i Type I At 4 28 Range 4 31 Init 4
    private static int getPort(URL url)
        throws IOException
    {
        int i = url.getPort();
        if(i < 0)
        {
            if(url.getProtocol().equalsIgnoreCase("HTTPS"))
            {
                i = 443;
            } else
            {
                i = 80;
            }
        }
        return i;
    }

    // Decompiling method: post  Signature: (Ljava/net/URL;Lorg/apache/soap/transport/TransportMessage;ILjava/lang/String;I)Lorg/apache/soap/transport/TransportMessage;
    // Max stack: 6, #locals: 5, #params: 5
    // Code length: 13 bytes, Code offset: 4448
    // Line Number Table found: 7 entries
    // Parameter  0 added: Name url Type Ljava/net/URL; At 0 13 Range 0 12 Init 0
    // Parameter  1 added: Name transportmessage Type Lorg/apache/soap/transport/TransportMessage; At 0 13 Range 0 12 Init 0
    // Parameter  2 added: Name i Type I At 0 13 Range 0 12 Init 0
    // Parameter  3 added: Name s Type Ljava/lang/String; At 0 13 Range 0 12 Init 0
    // Parameter  4 added: Name j Type I At 0 13 Range 0 12 Init 0
    // RetValue   5 added: Name <returnValue> Type Lorg/apache/soap/transport/TransportMessage; At 0 13 Range 0 12 Init 0 fixed
    public static TransportMessage post(URL url, TransportMessage transportmessage, int i, String s, int j)
        throws IllegalArgumentException, IOException, SOAPException
    {
        return post(url, transportmessage, i, s, j, 512);
    }

    // Decompiling method: post  Signature: (Ljava/net/URL;Lorg/apache/soap/transport/TransportMessage;ILjava/lang/String;II)Lorg/apache/soap/transport/TransportMessage;
    // Max stack: 7, #locals: 33, #params: 6
    // Code length: 939 bytes, Code offset: 4537
    // Exception table: 3 entries
    //           start  9 end 50 handler 53 type Exception
    //           start  402 end 483 handler 486 type Exception
    //           start  847 end 881 handler 884 type MessagingException
    // Line Number Table found: 124 entries
    // Parameter  0 added: Name url Type Ljava/net/URL; At 0 939 Range 0 938 Init 0
    // Parameter  1 added: Name transportmessage Type Lorg/apache/soap/transport/TransportMessage; At 0 939 Range 0 938 Init 0
    // Parameter  2 added: Name i Type I At 0 939 Range 0 938 Init 0
    // Parameter  3 added: Name s Type Ljava/lang/String; At 0 939 Range 0 938 Init 0
    // Parameter  4 added: Name j Type I At 0 939 Range 0 938 Init 0
    // Parameter  5 added: Name k Type I At 0 939 Range 0 938 Init 0
    // RetValue  33 added: Name <returnValue> Type Lorg/apache/soap/transport/TransportMessage; At 0 939 Range 0 938 Init 0 fixed
    // LocalVar   6 added: Name obj Type A At 1 2 Range 1 2 Init 1
    // LocalVar   7 added: Name obj1 Type A At 4 2 Range 4 5 Init 4
    // LocalVar   8 added: Name obj2 Type A At 7 2 Range 7 8 Init 7
    // LocalVar   9 added: Name l Type I At 13 5 Range 13 17 Init 13
    // LocalVar  10 added: Name socket Type Ljava/net/Socket; At 24 909 Range 24 932 Init 24
    // LocalVar   6 added: Name outputstream Type Ljava/io/OutputStream; At 41 877 Range 41 917 Init 41
    // LocalVar   7 added: Name inputstream Type Ljava/io/InputStream; At 48 880 Range 48 927 Init 48
    // LocalVar  11 added: Name stringbuffer Type Ljava/lang/StringBuffer; At 90 197 Range 90 286 Init 90
    // LocalVar  12 added: Name enumeration Type Ljava/util/Enumeration; At 208 46 Range 208 253 Init 208
    // LocalVar  13 added: Name bufferedoutputstream Type Ljava/io/BufferedOutputStream; At 281 632 Range 281 912 Init 281
    // LocalVar  14 added: Name bufferedinputstream Type Ljava/io/BufferedInputStream; At 323 600 Range 323 922 Init 323
    // LocalVar  15 added: Name flag Type Z At 326 2 Range 326 327 Init 326
    // LocalVar  16 added: Name obj3 Type A At 329 2 Range 329 330 Init 329
    // LocalVar  17 added: Name stringbuffer1 Type Ljava/lang/StringBuffer; At 338 59 Range 338 396 Init 338
    // LocalVar  18 added: Name flag1 Type Z At 341 50 Range 341 390 Init 341
    // LocalVar  18 chged: Name i1 Oname flag1 Type I At 382 2 Range 341 390 Init 341
    // LocalVar  19 added: Name s1 Type Ljava/lang/String; At 400 103 Range 400 502 Init 400
    // LocalVar  20 added: Name stringtokenizer Type Ljava/util/StringTokenizer; At 411 59 Range 411 469 Init 411
    // LocalVar  15 added: Name j1 Type I At 427 2 Range 427 428 Init 427
    // LocalVar  21 added: Name stringbuffer2 Type Ljava/lang/StringBuffer; At 436 42 Range 436 477 Init 436
    // LocalVar  16 added: Name s2 Type Ljava/lang/String; At 481 2 Range 481 482 Init 481
    // LocalVar  20 added: Name bytearraydatasource Type Lorg/apache/soap/util/mime/ByteArrayDataSource; At 534 303 Range 534 836 Init 534
    // LocalVar  21 added: Name abyte0 Type [B At 541 267 Range 541 807 Init 541
    // LocalVar  22 added: Name hashtable Type Ljava/util/Hashtable; At 550 320 Range 550 869 Init 550
    // LocalVar  23 added: Name byte0 Type B At 553 311 Range 553 863 Init 553
    // LocalVar  24 added: Name obj4 Type A At 556 310 Range 556 865 Init 556
    // LocalVar  25 added: Name stringbuffer3 Type Ljava/lang/StringBuffer; At 565 211 Range 565 775 Init 565
    // LocalVar  26 added: Name stringbuffer4 Type Ljava/lang/StringBuffer; At 574 217 Range 574 790 Init 574
    // LocalVar  27 added: Name flag1 Type Z At 577 153 Range 577 729 Init 577
    // LocalVar  28 added: Name flag2 Type Z At 580 262 Range 580 841 Init 580
    // LocalVar  28 chged: Name k1 Oname flag2 Type I At 804 2 Range 580 841 Init 580
    // LocalVar  29 added: Name inputstream1 Type Ljava/io/InputStream; At 817 45 Range 817 861 Init 817
    // LocalVar  23 chged: Name l1 Oname byte0 Type I At 845 19 Range 553 863 Init 553
    // LocalVar  30 added: Name soapcontext Type Lorg/apache/soap/rpc/SOAPContext; At 854 14 Range 854 867 Init 854
    // LocalVar  24 chged: Name s3 Oname obj4 Type Ljava/lang/String; At 864 2 Range 556 865 Init 556
    // LocalVar  31 added: Name transportmessage1 Type Lorg/apache/soap/transport/TransportMessage; At 873 65 Range 873 937 Init 873
    // LocalVar  13 added: Name obj4 Type Ljava/lang/Object; At 220 17 Range 220 236 Init 220
    // LocalVar  29 added: Name s4 Type Ljava/lang/String; At 608 80 Range 608 687 Init 608
    // LocalVar  30 added: Name s5 Type Ljava/lang/String; At 645 45 Range 645 689 Init 645
    // LocalVar  11 added: Name exception Type Ljava/lang/Exception; At 53 17 Range 53 69 Init 53
    // LocalVar  20 added: Name exception1 Type Ljava/lang/Exception; At 486 27 Range 486 512 Init 486
    // LocalVar  32 added: Name messagingexception Type Ljavax/mail/MessagingException; At 884 17 Range 884 900 Init 884
    // LocalVar   6 chged: Name outputstream1 Oname obj Type Ljava/io/OutputStream; At 1 2 Range 1 2 Init 1
    // LocalVar   6 name outputstream(Ljava/io/OutputStream;) merged out into outputstream1(Ljava/io/OutputStream;)
    // LocalVar   7 chged: Name inputstream2 Oname obj1 Type Ljava/io/InputStream; At 4 2 Range 4 5 Init 4
    // LocalVar   7 name inputstream(Ljava/io/InputStream;) merged out into inputstream2(Ljava/io/InputStream;)
    public static TransportMessage post(URL url, TransportMessage transportmessage, int i, String s, int j, int k)
        throws IllegalArgumentException, IOException, SOAPException
    {
        OutputStream outputstream = null;
        InputStream inputstream = null;
        Object obj = null;
        Socket socket;
        try
        {
            int l = getPort(url);
            socket = buildSocket(url, l, s, j);
            if(i > 0)
            {
                socket.setSoTimeout(i);
            }
            outputstream = socket.getOutputStream();
            inputstream = socket.getInputStream();
        }
        catch(Exception exception)
        {
            throw new IllegalArgumentException("Error opening socket: " + exception.getMessage());
        }
        StringBuffer stringbuffer = new StringBuffer();
        stringbuffer.append("POST").append(' ').append(s != null ? url.toString() : url.getFile()).append(" HTTP/").append("1.0").append("\r\n").append("Host").append(": ").append(url.getHost()).append("\r\n").append("Content-Type").append(": ").append(transportmessage.getContentType()).append("\r\n").append("Content-Length").append(": ").append(transportmessage.getContentLength()).append("\r\n");
        Object obj1;
        for(Enumeration enumeration = transportmessage.getHeaderNames(); enumeration.hasMoreElements(); stringbuffer.append(obj1).append(": ").append(transportmessage.getHeader((String)obj1)).append("\r\n"))
        {
            obj1 = enumeration.nextElement();
        }

        stringbuffer.append("\r\n");
        BufferedOutputStream bufferedoutputstream = new BufferedOutputStream(outputstream, k);
        bufferedoutputstream.write(stringbuffer.toString().getBytes("iso-8859-1"));
        transportmessage.writeTo(bufferedoutputstream);
        bufferedoutputstream.flush();
        outputstream.flush();
        BufferedInputStream bufferedinputstream = new BufferedInputStream(inputstream);
        boolean flag = false;
        Object obj2 = null;
        StringBuffer stringbuffer1 = new StringBuffer();
        for(int j1 = 0; j1 != 10 && j1 != -1;)
        {
            j1 = bufferedinputstream.read();
            if(j1 != 10 && j1 != 13 && j1 != -1)
            {
                stringbuffer1.append((char)j1);
            }
        }

        String s2 = stringbuffer1.toString();
        try
        {
            StringTokenizer stringtokenizer = new StringTokenizer(s2);
            stringtokenizer.nextToken();
            int i1 = Integer.parseInt(stringtokenizer.nextToken());
            StringBuffer stringbuffer2 = new StringBuffer();
            while(stringtokenizer.hasMoreTokens()) 
            {
                stringbuffer2.append(stringtokenizer.nextToken());
                if(stringtokenizer.hasMoreTokens())
                {
                    stringbuffer2.append(" ");
                }
            }
            String s1 = stringbuffer2.toString();
        }
        catch(Exception exception1)
        {
            throw new IllegalArgumentException("Error parsing HTTP status line \"" + s2 + "\": " + exception1);
        }
        ByteArrayDataSource bytearraydatasource = new ByteArrayDataSource(bufferedinputstream, "iso-8859-1");
        byte abyte0[] = bytearraydatasource.toByteArray();
        Hashtable hashtable = new Hashtable();
        int k1 = -1;
        String s3 = null;
        StringBuffer stringbuffer3 = new StringBuffer();
        StringBuffer stringbuffer4 = new StringBuffer();
        boolean flag1 = true;
        int l1;
        for(l1 = 0; l1 < abyte0.length; l1++)
        {
            if(abyte0[l1] == 10)
            {
                if(stringbuffer3.length() == 0)
                {
                    break;
                }
                String s4 = stringbuffer3.toString();
                if(stringbuffer4.charAt(stringbuffer4.length() - 1) == ';')
                {
                    stringbuffer4.deleteCharAt(stringbuffer4.length() - 1);
                }
                String s5 = stringbuffer4.toString();
                if(s4.equalsIgnoreCase("Content-Length"))
                {
                    k1 = Integer.parseInt(s5);
                } else
                if(s4.equalsIgnoreCase("Content-Type"))
                {
                    s3 = s5;
                } else
                {
                    hashtable.put(s4, s5);
                }
                stringbuffer3 = new StringBuffer();
                stringbuffer4 = new StringBuffer();
                flag1 = true;
            } else
            if(abyte0[l1] != 13)
            {
                if(flag1)
                {
                    if(abyte0[l1] == 58)
                    {
                        flag1 = false;
                        if(l1 != abyte0.length - 1 && abyte0[l1 + 1] == 32)
                        {
                            l1++;
                        }
                    } else
                    {
                        stringbuffer3.append((char)abyte0[l1]);
                    }
                } else
                {
                    stringbuffer4.append((char)abyte0[l1]);
                }
            }
        }

        InputStream inputstream1 = bytearraydatasource.getInputStream();
        inputstream1.skip(l1 + 1);
        if(k1 < 0)
        {
            k1 = bytearraydatasource.getSize() - l1 - 1;
        }
        TransportMessage transportmessage1;
        try
        {
            SOAPContext soapcontext = new SOAPContext();
            transportmessage1 = new TransportMessage(inputstream1, k1, s3, soapcontext, hashtable);
            transportmessage1.read();
        }
        catch(MessagingException messagingexception)
        {
            throw new IllegalArgumentException("Error parsing response: " + messagingexception);
        }
        bufferedoutputstream.close();
        outputstream.close();
        bufferedinputstream.close();
        inputstream.close();
        socket.close();
        return transportmessage1;
    }
}
