Top Description Methods
io.grpc

public Interface ProxyDetector

Imports
java.io.IOException, java.net.SocketAddress, javax.annotation.Nullable

A utility class to detect which proxy, if any, should be used for a given java.net.SocketAddress. This class performs network requests to resolve address names, and should only be used in places that are expected to do IO such as the io.grpc.NameResolver.

How Proxies work in gRPC

In order for gRPC to use a proxy, NameResolver, ProxyDetector and the underlying transport need to work together.

The NameResolver should invoke the ProxyDetector retrieved from the NameResolver.Args#getProxyDetector, and pass the returned ProxiedSocketAddress to NameResolver.Listener#onAddresses. The DNS name resolver shipped with gRPC is already doing so.

The default ProxyDetector uses Java's standard java.net.ProxySelector and java.net.Authenticator to detect proxies and authentication credentials and produce HttpConnectProxiedSocketAddress, which is for using an HTTP CONNECT proxy. A custom ProxyDetector can be passed to ManagedChannelBuilder#proxyDetector.

The ProxiedSocketAddress is then handled by the transport. The transport needs to support whatever type of ProxiedSocketAddress returned by ProxyDetector. The Netty transport and the OkHttp transport currently only support HttpConnectProxiedSocketAddress which is returned by the default ProxyDetector.

Method Summary

Modifier and TypeMethod and Description
public ProxiedSocketAddress
proxyFor(SocketAddress
the target address, which is generally unresolved, because the proxy will resolve it.
targetServerAddress
)

Given a target address, returns a proxied address if a proxy should be used.

Method Detail

proxyForback to summary
public ProxiedSocketAddress proxyFor(SocketAddress targetServerAddress) throws IOException

Given a target address, returns a proxied address if a proxy should be used. If no proxy should be used, then return value will be null.

If the returned ProxiedSocketAddress contains any address that needs to be resolved locally, it should be resolved before it's returned, and this method throws if unable to resolve it.

Parameters
targetServerAddress:SocketAddress

the target address, which is generally unresolved, because the proxy will resolve it.

Annotations
@Nullable