public bool openConnection(capex.http.HTTPClientRequest request, capex.http.HTTPClientListener listener)
 {
     if (request == null)
     {
         if (listener != null)
         {
             listener.onError("No request");
         }
         return(false);
     }
     return(openConnection(request.getProtocol(), request.getServerAddress(), request.getServerPort(), listener));
 }
 public override void executeRequest(capex.http.HTTPClientRequest request, capex.http.HTTPClientListener listener)
 {
     if (!sendRequest(request, listener))
     {
         return;
     }
     if (!readResponse(listener, 30000))
     {
         return;
     }
     if (object.Equals(request.getHeader("connection"), "close"))
     {
         closeConnection(listener);
     }
 }
 public void closeConnection(capex.http.HTTPClientListener listener)
 {
     if (!(openSocket != null))
     {
         return;
     }
     if (listener != null)
     {
         listener.onStatus("Closing connection");
     }
     openSocket.close();
     openSocket         = null;
     openSocketProtocol = null;
     openSocketAddress  = null;
     openSocketPort     = 0;
     parser             = null;
     if (listener != null)
     {
         listener.onStatus(null);
     }
 }
        public bool readResponse(capex.http.HTTPClientListener listener, int timeout)
        {
            if (openSocket == null)
            {
                if (listener != null)
                {
                    listener.onError("No open socket");
                }
                return(false);
            }
            if (listener != null)
            {
                listener.onStatus("Receiving response ..");
            }
            var rv = true;

            parser.setListener(listener);
            while (true)
            {
                var r = 0;
                if (openSocket is capex.net.SSLSocket)
                {
                    r = ((capex.net.SSLSocket)openSocket).readWithTimeout(receiveBuffer, timeout);
                }
                else
                {
                    r = ((capex.net.TCPSocket)openSocket).readWithTimeout(receiveBuffer, timeout);
                }
                if (r == 0)
                {
                    rv = false;
                    break;
                }
                if (r < 1)
                {
                    closeConnection(listener);
                    if (listener != null)
                    {
                        listener.onAborted();
                    }
                    rv = false;
                    break;
                }
                parser.onDataReceived(receiveBuffer, (long)r);
                if (parser.getAborted())
                {
                    closeConnection(listener);
                    rv = false;
                    break;
                }
                if (parser.getEndOfResponse())
                {
                    parser.reset();
                    rv = true;
                    break;
                }
            }
            if (parser != null)
            {
                parser.setListener(null);
            }
            if (listener != null)
            {
                listener.onStatus(null);
                if (listener.onEndRequest() == false)
                {
                    rv = false;
                }
            }
            return(rv);
        }
        public bool sendRequest(capex.http.HTTPClientRequest request, capex.http.HTTPClientListener listener)
        {
            if (request == null)
            {
                if (listener != null)
                {
                    listener.onError("No request");
                }
                return(false);
            }
            if (listener != null && listener.onStartRequest(request) == false)
            {
                return(false);
            }
            if (openSocket != null)
            {
                if (!(object.Equals(request.getServerAddress(), openSocketAddress)) || !(object.Equals(request.getProtocol(), openSocketProtocol)) || request.getServerPort() != openSocketPort)
                {
                    closeConnection(listener);
                }
            }
            if (openSocket == null)
            {
                openConnection(request, listener);
                if (!(openSocket != null))
                {
                    return(false);
                }
            }
            if (listener != null)
            {
                listener.onStatus("Sending request headers ..");
            }
            var rqs = request.toString(defaultUserAgent);
            var pww = cape.PrintWriterWrapper.forWriter((cape.Writer)openSocket);
            var whr = pww.print(rqs);

            if (listener != null)
            {
                listener.onStatus(null);
            }
            if (whr == false)
            {
                if (listener != null)
                {
                    listener.onError("Failed to send HTTP request headers");
                }
                closeConnection(listener);
                return(false);
            }
            var body = request.getBody();

            if (body != null)
            {
                if (listener != null)
                {
                    listener.onStatus("Sending request body ..");
                }
                var rv = true;
                var bf = new byte[4096 * 4];
                while (true)
                {
                    var r = body.read(bf);
                    if (r < 1)
                    {
                        break;
                    }
                    if (openSocket.write(bf, r) < r)
                    {
                        if (listener != null)
                        {
                            listener.onError("Failed to send request body");
                        }
                        closeConnection(listener);
                        rv = false;
                        break;
                    }
                }
                if (listener != null)
                {
                    listener.onStatus(null);
                }
                if (rv == false)
                {
                    return(false);
                }
            }
            return(true);
        }
        public bool openConnection(string protocol, string address, int aport, capex.http.HTTPClientListener listener)
        {
            closeConnection(listener);
            if (cape.String.isEmpty(address))
            {
                if (listener != null)
                {
                    listener.onError("No server address");
                }
                return(false);
            }
            if (!(object.Equals(protocol, "http")) && !(object.Equals(protocol, "https")))
            {
                if (listener != null)
                {
                    listener.onError("Protocol must be http or https");
                }
                return(false);
            }
            var port = aport;

            if (port < 1)
            {
                if (object.Equals(protocol, "https"))
                {
                    port = 443;
                }
                else
                {
                    port = 80;
                }
            }
            if (listener != null)
            {
                listener.onStatus("Connecting to server `" + address + ":" + cape.String.forInteger(port) + "' ..");
            }
            openSocket = (capex.net.ConnectedSocket)capex.net.TCPSocket.createAndConnect(address, port);
            if (listener != null)
            {
                listener.onStatus(null);
            }
            if (openSocket == null)
            {
                if (listener != null)
                {
                    listener.onError("Connection failed: `" + address + ":" + cape.String.forInteger(port) + "'");
                }
                return(false);
            }
            if (object.Equals(protocol, "https"))
            {
                openSocket = (capex.net.ConnectedSocket)capex.net.SSLSocket.forClient(openSocket, address, null, acceptInvalidCertificate);
                if (openSocket == null && listener != null)
                {
                    listener.onError("FAILED to create SSL socket for HTTPS");
                    closeConnection(listener);
                    return(false);
                }
            }
            openSocketProtocol = protocol;
            openSocketAddress  = address;
            openSocketPort     = port;
            parser             = new capex.http.HTTPClientOperation.MyResponseParser();
            return(true);
        }
 public capex.http.HTTPClientOperation.MyResponseParser setListener(capex.http.HTTPClientListener v)
 {
     listener = v;
     return(this);
 }
Example #8
0
 public static void execute(capex.http.HTTPClient client, capex.http.HTTPClientRequest request, capex.http.HTTPClientListener listener)
 {
     if (!(client != null))
     {
         return;
     }
     client.executeRequest(request, listener);
 }
Example #9
0
 public abstract void executeRequest(capex.http.HTTPClientRequest request, capex.http.HTTPClientListener listener);