001/*
002 * $HeadURL: file:///opt/dev/not-yet-commons-ssl-SVN-repo/tags/commons-ssl-0.3.17/src/java/org/apache/commons/ssl/HttpSecureProtocol.java $
003 * $Revision: 165 $
004 * $Date: 2014-04-24 16:48:09 -0700 (Thu, 24 Apr 2014) $
005 *
006 * ====================================================================
007 * Licensed to the Apache Software Foundation (ASF) under one
008 * or more contributor license agreements.  See the NOTICE file
009 * distributed with this work for additional information
010 * regarding copyright ownership.  The ASF licenses this file
011 * to you under the Apache License, Version 2.0 (the
012 * "License"); you may not use this file except in compliance
013 * with the License.  You may obtain a copy of the License at
014 *
015 *   http://www.apache.org/licenses/LICENSE-2.0
016 *
017 * Unless required by applicable law or agreed to in writing,
018 * software distributed under the License is distributed on an
019 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
020 * KIND, either express or implied.  See the License for the
021 * specific language governing permissions and limitations
022 * under the License.
023 * ====================================================================
024 *
025 * This software consists of voluntary contributions made by many
026 * individuals on behalf of the Apache Software Foundation.  For more
027 * information on the Apache Software Foundation, please see
028 * <http://www.apache.org/>.
029 *
030 */
031
032package org.apache.commons.ssl;
033
034import org.apache.commons.httpclient.params.HttpConnectionParams;
035import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory;
036
037import java.io.IOException;
038import java.net.InetAddress;
039import java.net.Socket;
040import java.security.GeneralSecurityException;
041
042/**
043 * Hook into HttpClient.
044 *
045 * @author Credit Union Central of British Columbia
046 * @author <a href="http://www.cucbc.com/">www.cucbc.com</a>
047 * @author <a href="mailto:juliusdavies@cucbc.com">juliusdavies@cucbc.com</a>
048 * @since 5-May-2006
049 */
050public class HttpSecureProtocol extends SSLClient
051    implements SecureProtocolSocketFactory {
052
053    public HttpSecureProtocol()
054        throws GeneralSecurityException, IOException {
055        super();
056    }
057
058    /**
059     * Attempts to get a new socket connection to the given host within the
060     * given time limit.
061     * <p/>
062     * To circumvent the limitations of older JREs that do not support connect
063     * timeout a controller thread is executed. The controller thread attempts
064     * to create a new socket within the given limit of time. If socket
065     * constructor does not return until the timeout expires, the controller
066     * terminates and throws an
067     * {@link org.apache.commons.httpclient.ConnectTimeoutException}
068     * </p>
069     *
070     * @param host         the host name/IP
071     * @param port         the port on the host
072     * @param localAddress the local host name/IP to bind the socket to
073     * @param localPort    the port on the local machine
074     * @param params       {@link org.apache.commons.httpclient.params.HttpConnectionParams Http connection parameters}
075     * @return Socket a new socket
076     * @throws java.io.IOException           if an I/O error occurs while creating the socket
077     * @throws java.net.UnknownHostException if the IP address of the host cannot be
078     *                                       determined
079     */
080    public Socket createSocket(final String host,
081                               final int port,
082                               final InetAddress localAddress,
083                               final int localPort,
084                               final HttpConnectionParams params)
085        throws IOException {
086        if (params == null) {
087            throw new IllegalArgumentException("Parameters may not be null");
088        }
089        int timeout = params.getConnectionTimeout();
090        return super.createSocket(host, port, localAddress, localPort, timeout);
091    }
092
093}