Search in sources :

Example 1 with ConnectMethod

use of org.apache.commons.httpclient.ConnectMethod in project java-apns by notnoop.

the class TlsTunnelBuilder method makeTunnel.

@SuppressFBWarnings(value = "VA_FORMAT_STRING_USES_NEWLINE", justification = "use <CR><LF> as according to RFC, not platform-linefeed")
Socket makeTunnel(String host, int port, String proxyUsername, String proxyPassword, InetSocketAddress proxyAddress) throws IOException {
    if (host == null || port < 0 || host.isEmpty() || proxyAddress == null) {
        throw new ProtocolException("Incorrect parameters to build tunnel.");
    }
    logger.debug("Creating socket for Proxy : " + proxyAddress.getAddress() + ":" + proxyAddress.getPort());
    Socket socket;
    try {
        ProxyClient client = new ProxyClient();
        client.getParams().setParameter("http.useragent", "java-apns");
        client.getHostConfiguration().setHost(host, port);
        String proxyHost = proxyAddress.getAddress().toString().substring(0, proxyAddress.getAddress().toString().indexOf("/"));
        client.getHostConfiguration().setProxy(proxyHost, proxyAddress.getPort());
        ProxyClient.ConnectResponse response = client.connect();
        socket = response.getSocket();
        if (socket == null) {
            ConnectMethod method = response.getConnectMethod();
            // Read the proxy's HTTP response.
            if (method.getStatusLine().getStatusCode() == 407) {
                // Proxy server returned 407. We will now try to connect with auth Header
                if (proxyUsername != null && proxyPassword != null) {
                    socket = AuthenticateProxy(method, client, proxyHost, proxyAddress.getPort(), proxyUsername, proxyPassword);
                } else {
                    throw new ProtocolException("Socket not created: " + method.getStatusLine());
                }
            }
        }
    } catch (Exception e) {
        throw new ProtocolException("Error occurred while creating proxy socket : " + e.toString());
    }
    if (socket != null) {
        logger.debug("Socket for proxy created successfully : " + socket.getRemoteSocketAddress().toString());
    }
    return socket;
}
Also used : ProtocolException(java.net.ProtocolException) ProxyClient(org.apache.commons.httpclient.ProxyClient) ConnectMethod(org.apache.commons.httpclient.ConnectMethod) Socket(java.net.Socket) IOException(java.io.IOException) ProtocolException(java.net.ProtocolException) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings)

Aggregations

SuppressFBWarnings (edu.umd.cs.findbugs.annotations.SuppressFBWarnings)1 IOException (java.io.IOException)1 ProtocolException (java.net.ProtocolException)1 Socket (java.net.Socket)1 ConnectMethod (org.apache.commons.httpclient.ConnectMethod)1 ProxyClient (org.apache.commons.httpclient.ProxyClient)1