001    /*
002     * $HeadURL: http://juliusdavies.ca/svn/not-yet-commons-ssl/tags/commons-ssl-0.3.11/src/java/org/apache/commons/ssl/HttpSecureProtocol.java $
003     * $Revision: 121 $
004     * $Date: 2007-11-13 21:26:57 -0800 (Tue, 13 Nov 2007) $
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    
032    package org.apache.commons.ssl;
033    
034    import org.apache.commons.httpclient.params.HttpConnectionParams;
035    import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory;
036    
037    import java.io.IOException;
038    import java.net.InetAddress;
039    import java.net.Socket;
040    import 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     */
050    public 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    }