Example usage for org.apache.http.conn.scheme SocketFactory connectSocket

List of usage examples for org.apache.http.conn.scheme SocketFactory connectSocket

Introduction

In this page you can find the example usage for org.apache.http.conn.scheme SocketFactory connectSocket.

Prototype

Socket connectSocket(Socket sock, String host, int port, InetAddress localAddress, int localPort,
        HttpParams params) throws IOException, UnknownHostException, ConnectTimeoutException;

Source Link

Document

Connects a socket to the given host.

Usage

From source file:com.android.mms.service.http.NetworkAwareClientConnectionOperator.java

/**
 * This method is mostly copied from the overridden one in parent. The only change
 * is how we resolve host name.//from  ww  w.  j  a v  a2  s.  c  om
 */
@Override
public void openConnection(OperatedClientConnection conn, HttpHost target, InetAddress local,
        HttpContext context, HttpParams params) throws IOException {
    if (conn == null) {
        throw new IllegalArgumentException("Connection must not be null.");
    }
    if (target == null) {
        throw new IllegalArgumentException("Target host must not be null.");
    }
    // local address may be null
    //@@@ is context allowed to be null?
    if (params == null) {
        throw new IllegalArgumentException("Parameters must not be null.");
    }
    if (conn.isOpen()) {
        throw new IllegalArgumentException("Connection must not be open.");
    }

    final Scheme schm = schemeRegistry.getScheme(target.getSchemeName());
    final SocketFactory sf = schm.getSocketFactory();
    final SocketFactory plain_sf;
    final LayeredSocketFactory layered_sf;
    if (sf instanceof LayeredSocketFactory) {
        plain_sf = staticPlainSocketFactory;
        layered_sf = (LayeredSocketFactory) sf;
    } else {
        plain_sf = sf;
        layered_sf = null;
    }
    // CHANGE FOR MmsService
    ArrayList<InetAddress> addresses = resolveHostName(target.getHostName());

    for (int i = 0; i < addresses.size(); ++i) {
        Log.d(TAG, "NetworkAwareClientConnectionOperator: connecting " + addresses.get(i));
        Socket sock = plain_sf.createSocket();
        conn.opening(sock, target);

        try {
            Socket connsock = plain_sf.connectSocket(sock, addresses.get(i).getHostAddress(),
                    schm.resolvePort(target.getPort()), local, 0, params);
            if (sock != connsock) {
                sock = connsock;
                conn.opening(sock, target);
            }
            /*
             * prepareSocket is called on the just connected
             * socket before the creation of the layered socket to
             * ensure that desired socket options such as
             * TCP_NODELAY, SO_RCVTIMEO, SO_LINGER will be set
             * before any I/O is performed on the socket. This
             * happens in the common case as
             * SSLSocketFactory.createSocket performs hostname
             * verification which requires that SSL handshaking be
             * performed.
             */
            prepareSocket(sock, context, params);
            if (layered_sf != null) {
                Socket layeredsock = layered_sf.createSocket(sock, target.getHostName(),
                        schm.resolvePort(target.getPort()), true);
                if (layeredsock != sock) {
                    conn.opening(layeredsock, target);
                }
                conn.openCompleted(sf.isSecure(layeredsock), params);
            } else {
                conn.openCompleted(sf.isSecure(sock), params);
            }
            break;
            // BEGIN android-changed
            //       catch SocketException to cover any kind of connect failure
        } catch (SocketException ex) {
            if (i == addresses.size() - 1) {
                ConnectException cause = ex instanceof ConnectException ? (ConnectException) ex
                        : (ConnectException) new ConnectException(ex.getMessage()).initCause(ex);
                throw new HttpHostConnectException(target, cause);
            }
            // END android-changed
        } catch (ConnectTimeoutException ex) {
            if (i == addresses.size() - 1) {
                throw ex;
            }
        }
    }
}

From source file:com.qiniu.android.http.ClientConnectionOperator.java

public void openConnection(final OperatedClientConnection conn, final HttpHost target, final InetAddress local,
        final HttpContext context, final HttpParams params) throws IOException {
    if (conn == null) {
        throw new IllegalArgumentException("Connection must not be null.");
    }//from   ww w. ja  va 2  s  .c  om
    if (target == null) {
        throw new IllegalArgumentException("Target host must not be null.");
    }
    // local address may be null
    //@@@ is context allowed to be null?
    if (params == null) {
        throw new IllegalArgumentException("Parameters must not be null.");
    }
    if (conn.isOpen()) {
        throw new IllegalArgumentException("Connection must not be open.");
    }

    final Scheme schm = schemeRegistry.getScheme(target.getSchemeName());
    final SocketFactory sf = schm.getSocketFactory();
    String host = target.getHostName();
    String[] ips;
    if (validIP(host)) {
        ips = new String[] { host };
    } else {
        ips = systemResolv(host);
        if (ips == null || ips.length == 0) {
            throw new UnknownHostException("no ip for " + host);
        }
    }

    final int port = schm.resolvePort(target.getPort());
    for (int i = 0; i < ips.length; i++) {
        final String ip = ips[i];
        final boolean last = i == ips.length - 1;

        Socket sock = sf.createSocket();
        conn.opening(sock, target);

        try {
            Socket connsock = sf.connectSocket(sock, ip, port, local, 0, params);
            if (sock != connsock) {
                sock = connsock;
                conn.opening(sock, target);
            }
            prepareSocket(sock, context, params);
            conn.openCompleted(sf.isSecure(sock), params);
            AsyncHttpClientMod.ip.set(ip);
            return;
        } catch (ConnectException ex) {
            if (last) {
                throw new HttpHostConnectException(target, ex);
            }
        }
    }
}