1 /* 2 * ==================================================================== 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * ==================================================================== 20 * 21 * This software consists of voluntary contributions made by many 22 * individuals on behalf of the Apache Software Foundation. For more 23 * information on the Apache Software Foundation, please see 24 * <http://www.apache.org/>. 25 * 26 */ 27 28 package org.apache.hc.client5.http.io; 29 30 import java.io.IOException; 31 import java.net.InetSocketAddress; 32 33 import org.apache.hc.core5.annotation.Contract; 34 import org.apache.hc.core5.annotation.Internal; 35 import org.apache.hc.core5.annotation.ThreadingBehavior; 36 import org.apache.hc.core5.http.HttpHost; 37 import org.apache.hc.core5.http.io.SocketConfig; 38 import org.apache.hc.core5.http.protocol.HttpContext; 39 import org.apache.hc.core5.net.NamedEndpoint; 40 import org.apache.hc.core5.util.TimeValue; 41 import org.apache.hc.core5.util.Timeout; 42 43 /** 44 * Connection operator that performs connection connect and upgrade operations. 45 * 46 * @since 4.4 47 */ 48 @Contract(threading = ThreadingBehavior.STATELESS) 49 @Internal 50 public interface HttpClientConnectionOperator { 51 52 /** 53 * Connect the given managed connection to the remote endpoint. 54 * 55 * @param conn the managed connection. 56 * @param host the address of the opposite endpoint. 57 * @param localAddress the address of the local endpoint. 58 * @param connectTimeout the timeout of the connect operation. 59 * @param socketConfig the socket configuration. 60 * @param context the execution context. 61 */ 62 void connect( 63 ManagedHttpClientConnection conn, 64 HttpHost host, 65 InetSocketAddress localAddress, 66 TimeValue connectTimeout, 67 SocketConfig socketConfig, 68 HttpContext context) throws IOException; 69 70 /** 71 * Connect the given managed connection to the remote endpoint. 72 * 73 * @param conn the managed connection. 74 * @param endpointHost the address of the remote endpoint. 75 * @param endpointName the name of the remote endpoint, if different from the endpoint host name, 76 * {@code null} otherwise. Usually taken from the request URU authority. 77 * @param localAddress the address of the local endpoint. 78 * @param connectTimeout the timeout of the connect operation. 79 * @param socketConfig the socket configuration. 80 * @param attachment connect request attachment. 81 * @param context the execution context. 82 * 83 * @since 5.4 84 */ 85 default void connect( 86 ManagedHttpClientConnection conn, 87 HttpHost endpointHost, 88 NamedEndpoint endpointName, 89 InetSocketAddress localAddress, 90 Timeout connectTimeout, 91 SocketConfig socketConfig, 92 Object attachment, 93 HttpContext context) throws IOException { 94 connect(conn, endpointHost, localAddress, connectTimeout, socketConfig, context); 95 } 96 97 /** 98 * Upgrades transport security of the given managed connection 99 * by using the TLS security protocol. 100 * 101 * @param conn the managed connection. 102 * @param host the address of the opposite endpoint with TLS security. 103 * @param context the execution context. 104 */ 105 void upgrade( 106 ManagedHttpClientConnection conn, 107 HttpHost host, 108 HttpContext context) throws IOException; 109 110 /** 111 * Upgrades transport security of the given managed connection 112 * by using the TLS security protocol. 113 * 114 * @param conn the managed connection. 115 * @param endpointHost the address of the remote endpoint. 116 * @param endpointName the name of the remote endpoint, if different from the endpoint host name, 117 * {@code null} otherwise. Usually taken from the request URU authority. 118 * @param attachment connect request attachment. 119 * @param context the execution context. 120 * 121 * @since 5.2 122 */ 123 default void upgrade( 124 ManagedHttpClientConnection conn, 125 HttpHost endpointHost, 126 NamedEndpoint endpointName, 127 Object attachment, 128 HttpContext context) throws IOException { 129 upgrade(conn, endpointHost, context); 130 } 131 132 }