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 }