org.eclipse.ecf.internal.provider.filetransfer.httpclient.ECFHttpClientProtocolSocketFactory.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.ecf.internal.provider.filetransfer.httpclient.ECFHttpClientProtocolSocketFactory.java

Source

/*******************************************************************************
 * Copyright (c) 2009 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.ecf.internal.provider.filetransfer.httpclient;

import java.io.IOException;
import java.net.*;
import javax.net.SocketFactory;
import org.apache.commons.httpclient.params.HttpConnectionParams;
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
import org.eclipse.core.runtime.Assert;
import org.eclipse.ecf.filetransfer.events.socket.*;
import org.eclipse.ecf.filetransfer.events.socketfactory.INonconnectedSocketFactory;
import org.eclipse.ecf.provider.filetransfer.events.socket.SocketEventCreateUtil;

public class ECFHttpClientProtocolSocketFactory implements ProtocolSocketFactory {

    protected ISocketEventSource source;
    private INonconnectedSocketFactory unconnectedFactory;
    private ISocketListener socketConnectListener;

    private static final ISocketListener NULL_SOCKET_EVENT_LISTENER = new ISocketListener() {
        public void handleSocketEvent(ISocketEvent event) {
            //empty
        }

    };

    public ECFHttpClientProtocolSocketFactory(INonconnectedSocketFactory unconnectedFactory,
            ISocketEventSource source, ISocketListener socketConnectListener) {
        super();
        Assert.isNotNull(unconnectedFactory);
        Assert.isNotNull(source);
        this.unconnectedFactory = unconnectedFactory;
        this.source = source;
        this.socketConnectListener = socketConnectListener != null ? socketConnectListener
                : NULL_SOCKET_EVENT_LISTENER;
    }

    public ECFHttpClientProtocolSocketFactory(final SocketFactory socketFactory, ISocketEventSource source,
            ISocketListener socketConnectListener) {
        this(new INonconnectedSocketFactory() {
            public Socket createSocket() throws IOException {
                return socketFactory.createSocket();
            }

        }, source, socketConnectListener);
    }

    public Socket createSocket(String host, int port, InetAddress clientHost, int clientPort)
            throws IOException, UnknownHostException {

        InetSocketAddress remoteInetAddress = new InetSocketAddress(host, port);
        InetSocketAddress localInetAddress = new InetSocketAddress(clientHost, clientPort);
        return createSocket(remoteInetAddress, localInetAddress, 0);

    }

    public Socket createSocket(final String host, final int port, final InetAddress localAddress,
            final int localPort, final HttpConnectionParams params)
            throws IOException, UnknownHostException, SocketTimeoutException {
        InetSocketAddress remoteInetAddress = new InetSocketAddress(host, port);
        InetSocketAddress localInetAddress = new InetSocketAddress(localAddress, localPort);
        return createSocket(remoteInetAddress, localInetAddress, params);
    }

    private Socket createSocket(final InetSocketAddress remoteInetAddress, final InetSocketAddress localInetAddress,
            final HttpConnectionParams params) throws IOException, UnknownHostException, SocketTimeoutException {
        if (params == null) {
            throw new IllegalArgumentException("Parameters may not be null"); //$NON-NLS-1$
        }
        int timeout = params.getConnectionTimeout();
        return createSocket(remoteInetAddress, localInetAddress, timeout);
    }

    protected Socket createSocket() throws IOException {
        return unconnectedFactory.createSocket();
    }

    private Socket createSocket(final InetSocketAddress remoteInetAddress, final InetSocketAddress localInetAddress,
            int timeout) throws IOException {
        return SocketEventCreateUtil.createSocket(socketConnectListener, source, unconnectedFactory,
                remoteInetAddress, localInetAddress, timeout);
    }

    public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
        InetSocketAddress remoteInetAddress = host != null ? new InetSocketAddress(host, port)
                : new InetSocketAddress(InetAddress.getByName(null), port);
        InetSocketAddress localInetAddress = new InetSocketAddress(0);
        return createSocket(remoteInetAddress, localInetAddress, 0);
    }

    public boolean equals(Object obj) {
        return ((obj != null) && obj.getClass().equals(ECFHttpClientProtocolSocketFactory.class));
    }

    public int hashCode() {
        return ECFHttpClientProtocolSocketFactory.class.hashCode();
    }
}