Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,13 @@ public BlockingWebClientRequestPreparation responseTimeoutMode(ResponseTimeoutMo
return this;
}

@Override
@UnstableApi
public BlockingWebClientRequestPreparation clientTlsSpec(ClientTlsSpec clientTlsSpec) {
delegate.clientTlsSpec(clientTlsSpec);
return this;
}

@Override
public BlockingWebClientRequestPreparation requestOptions(RequestOptions requestOptions) {
delegate.requestOptions(requestOptions);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -619,6 +619,18 @@ default boolean isTimedOut() {
@UnstableApi
ResponseTimeoutMode responseTimeoutMode();

/**
* Returns the request-specific TLS configuration.
*/
@UnstableApi
@Nullable
ClientTlsSpec clientTlsSpec();

/**
* Sets the request-specific TLS configuration.
*/
void setClientTlsSpec(ClientTlsSpec clientTlsSpec);
Comment thread
coderabbitai[bot] marked this conversation as resolved.

@Override
default ClientRequestContext unwrap() {
return (ClientRequestContext) RequestContext.super.unwrap();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.linecorp.armeria.common.RequestId;
import com.linecorp.armeria.common.RpcRequest;
import com.linecorp.armeria.common.annotation.Nullable;
import com.linecorp.armeria.common.annotation.UnstableApi;
import com.linecorp.armeria.common.util.TimeoutMode;

/**
Expand Down Expand Up @@ -171,6 +172,17 @@ public ResponseTimeoutMode responseTimeoutMode() {
return unwrap().responseTimeoutMode();
}

@Override
@UnstableApi
public @Nullable ClientTlsSpec clientTlsSpec() {
return unwrap().clientTlsSpec();
}

@Override
public void setClientTlsSpec(ClientTlsSpec clientTlsSpec) {
unwrap().setClientTlsSpec(clientTlsSpec);
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.

@Override
public void hook(Supplier<? extends AutoCloseable> contextHook) {
unwrap().hook(contextHook);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,14 @@

import com.linecorp.armeria.common.ExchangeType;
import com.linecorp.armeria.common.annotation.Nullable;
import com.linecorp.armeria.common.annotation.UnstableApi;

import io.netty.util.AttributeKey;

final class DefaultRequestOptions implements RequestOptions {

static final DefaultRequestOptions EMPTY = new DefaultRequestOptions(-1, -1, -1, null,
ImmutableMap.of(), null, null);
ImmutableMap.of(), null, null, null);

private final long responseTimeoutMillis;
private final long writeTimeoutMillis;
Expand All @@ -42,19 +43,23 @@ final class DefaultRequestOptions implements RequestOptions {
private final ExchangeType exchangeType;
@Nullable
private final ResponseTimeoutMode responseTimeoutMode;
@Nullable
private final ClientTlsSpec clientTlsSpec;

DefaultRequestOptions(long responseTimeoutMillis, long writeTimeoutMillis,
long maxResponseLength, @Nullable Long requestAutoAbortDelayMillis,
Map<AttributeKey<?>, Object> attributeMap,
@Nullable ExchangeType exchangeType,
@Nullable ResponseTimeoutMode responseTimeoutMode) {
@Nullable ResponseTimeoutMode responseTimeoutMode,
@Nullable ClientTlsSpec clientTlsSpec) {
this.responseTimeoutMillis = responseTimeoutMillis;
this.writeTimeoutMillis = writeTimeoutMillis;
this.maxResponseLength = maxResponseLength;
this.requestAutoAbortDelayMillis = requestAutoAbortDelayMillis;
this.attributeMap = attributeMap;
this.exchangeType = exchangeType;
this.responseTimeoutMode = responseTimeoutMode;
this.clientTlsSpec = clientTlsSpec;
}

@Override
Expand Down Expand Up @@ -95,6 +100,12 @@ public ResponseTimeoutMode responseTimeoutMode() {
return responseTimeoutMode;
}

@Override
@UnstableApi
public @Nullable ClientTlsSpec clientTlsSpec() {
return clientTlsSpec;
}

@Override
public boolean equals(Object o) {
if (this == o) {
Expand All @@ -112,13 +123,14 @@ public boolean equals(Object o) {
maxResponseLength == that.maxResponseLength &&
attributeMap.equals(that.attributeMap) &&
exchangeType == that.exchangeType &&
responseTimeoutMode == that.responseTimeoutMode;
responseTimeoutMode == that.responseTimeoutMode &&
Objects.equals(clientTlsSpec, that.clientTlsSpec);
}

@Override
public int hashCode() {
return Objects.hash(responseTimeoutMillis, writeTimeoutMillis, maxResponseLength,
attributeMap, exchangeType, responseTimeoutMode);
attributeMap, exchangeType, responseTimeoutMode, clientTlsSpec);
}

@Override
Expand All @@ -131,6 +143,7 @@ public String toString() {
.add("attributeMap", attributeMap)
.add("exchangeType", exchangeType)
.add("responseTimeoutMode", responseTimeoutMode)
.add("clientTlsSpec", clientTlsSpec)
.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -423,4 +423,11 @@ public FutureTransformingRequestPreparation<T> responseTimeoutMode(
delegate.responseTimeoutMode(responseTimeoutMode);
return this;
}

@Override
@UnstableApi
public FutureTransformingRequestPreparation clientTlsSpec(ClientTlsSpec clientTlsSpec) {
delegate.clientTlsSpec(clientTlsSpec);
return this;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ private void acquireConnectionAndExecute0(ClientRequestContext ctx, Endpoint end
endpoint = endpoint.withoutTrailingDot();

final TlsProvider tlsProvider = factory.options().tlsProvider();
final ClientTlsSpec tlsSpec = determineTlsSpec(endpoint, protocol, tlsProvider);
final ClientTlsSpec tlsSpec = determineTlsSpec(endpoint, protocol, tlsProvider, ctx);

final PoolKey key = new PoolKey(endpoint, proxyConfig, tlsSpec);
final HttpChannelPool pool;
Expand Down Expand Up @@ -266,7 +266,11 @@ private void acquireConnectionAndExecute0(ClientRequestContext ctx, Endpoint end
}

private ClientTlsSpec determineTlsSpec(Endpoint endpoint, SessionProtocol sessionProtocol,
TlsProvider tlsProvider) {
TlsProvider tlsProvider, ClientRequestContext ctx) {
final ClientTlsSpec reqTlsSpec = ctx.clientTlsSpec();
if (reqTlsSpec != null) {
return reqTlsSpec.toBuilder().alpnProtocols(sessionProtocol).build();
}
if (tlsProvider != NullTlsProvider.INSTANCE) {
TlsKeyPair keyPair = null;
final String hostname = endpoint.toSocketAddress(-1).getHostString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,4 +122,11 @@ default RequestOptionsBuilder toBuilder() {
@Nullable
@UnstableApi
ResponseTimeoutMode responseTimeoutMode();

/**
* Returns the request-specific TLS configuration for this request.
*/
@UnstableApi
@Nullable
ClientTlsSpec clientTlsSpec();
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ public final class RequestOptionsBuilder implements RequestOptionsSetters {
private Map<AttributeKey<?>, Object> attributes;
@Nullable
private ExchangeType exchangeType;
@Nullable
private ClientTlsSpec clientTlsSpec;

RequestOptionsBuilder(@Nullable RequestOptions options) {
if (options != null) {
Expand Down Expand Up @@ -146,13 +148,20 @@ public RequestOptionsBuilder responseTimeoutMode(ResponseTimeoutMode responseTim
return this;
}

@Override
@UnstableApi
public RequestOptionsBuilder clientTlsSpec(ClientTlsSpec clientTlsSpec) {
this.clientTlsSpec = requireNonNull(clientTlsSpec, "clientTlsSpec");
return this;
}

/**
* Returns a newly created {@link RequestOptions} with the properties specified so far.
*/
public RequestOptions build() {
if (responseTimeoutMillis < 0 && writeTimeoutMillis < 0 &&
maxResponseLength < 0 && requestAutoAbortDelayMillis == null && attributes == null &&
exchangeType == null && responseTimeoutMode == null) {
exchangeType == null && responseTimeoutMode == null && clientTlsSpec == null) {
return EMPTY;
} else {
final Map<AttributeKey<?>, Object> attributes;
Expand All @@ -163,7 +172,8 @@ public RequestOptions build() {
}
return new DefaultRequestOptions(responseTimeoutMillis, writeTimeoutMillis,
maxResponseLength, requestAutoAbortDelayMillis,
attributes, exchangeType, responseTimeoutMode);
attributes, exchangeType, responseTimeoutMode,
clientTlsSpec);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -165,4 +165,11 @@ public interface RequestOptionsSetters {
* @see ResponseTimeoutMode
*/
RequestOptionsSetters responseTimeoutMode(ResponseTimeoutMode responseTimeoutMode);

/**
* Sets the request-specific TLS configuration for this request.
* If not set, the {@link ClientFactory} default TLS configurations will be used.
*/
@UnstableApi
RequestOptionsSetters clientTlsSpec(ClientTlsSpec clientTlsSpec);
}
Original file line number Diff line number Diff line change
Expand Up @@ -319,4 +319,11 @@ public RestClientPreparation responseTimeoutMode(ResponseTimeoutMode responseTim
delegate.responseTimeoutMode(responseTimeoutMode);
return this;
}

@Override
@UnstableApi
public RestClientPreparation clientTlsSpec(ClientTlsSpec clientTlsSpec) {
delegate.clientTlsSpec(clientTlsSpec);
return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,13 @@ public TransformingRequestPreparation<T, R> responseTimeoutMode(ResponseTimeoutM
return this;
}

@Override
@UnstableApi
public TransformingRequestPreparation clientTlsSpec(ClientTlsSpec clientTlsSpec) {
delegate.clientTlsSpec(clientTlsSpec);
return this;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.

@Override
public TransformingRequestPreparation<T, R> requestOptions(RequestOptions requestOptions) {
delegate.requestOptions(requestOptions);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,13 @@ public WebClientRequestPreparation responseTimeoutMode(ResponseTimeoutMode respo
return this;
}

@Override
@UnstableApi
public WebClientRequestPreparation clientTlsSpec(ClientTlsSpec clientTlsSpec) {
requestOptionsBuilder().clientTlsSpec(clientTlsSpec);
return this;
}

private RequestOptionsBuilder requestOptionsBuilder() {
if (requestOptionsBuilder == null) {
requestOptionsBuilder = RequestOptions.builder();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@

import com.linecorp.armeria.client.ClientOptions;
import com.linecorp.armeria.client.ClientRequestContext;
import com.linecorp.armeria.client.ClientTlsSpec;
import com.linecorp.armeria.client.Endpoint;
import com.linecorp.armeria.client.HttpClient;
import com.linecorp.armeria.client.PreClientRequestContext;
Expand Down Expand Up @@ -181,6 +182,8 @@ private static SessionProtocol desiredSessionProtocol(SessionProtocol protocol,
private final ResponseTimeoutMode responseTimeoutMode;
private Function<HttpClient, HttpClient> httpClientCustomizer = Function.identity();
private Function<RpcClient, RpcClient> rpcClientCustomizer = Function.identity();
@Nullable
private ClientTlsSpec clientTlsSpec;

public DefaultClientRequestContext(SessionProtocol sessionProtocol, HttpRequest httpRequest,
@Nullable RpcRequest rpcRequest, RequestTarget requestTarget,
Expand Down Expand Up @@ -281,6 +284,7 @@ private DefaultClientRequestContext(
this.options = requireNonNull(options, "options");
this.root = root;
this.endpointGroup = endpointGroup;
clientTlsSpec = requestOptions.clientTlsSpec();

log = RequestLog.builder(this);
log.startRequest(requestStartTimeNanos, requestStartTimeMicros);
Expand Down Expand Up @@ -1088,6 +1092,19 @@ public CompletableFuture<Void> whenResponseTimedOut() {
return whenResponseCancelled().handle((v, e) -> null);
}

/**
* The request-specific TLS configuration for this request.
*/
@Override
public @Nullable ClientTlsSpec clientTlsSpec() {
return clientTlsSpec;
}

@Override
public void setClientTlsSpec(ClientTlsSpec clientTlsSpec) {
this.clientTlsSpec = requireNonNull(clientTlsSpec, "clientTlsSpec");
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.

@Override
public String toString() {
final Channel ch = channel();
Expand Down
Loading
Loading