Home / Class/ Socks4ProxyHandler Class — netty Architecture

Socks4ProxyHandler Class — netty Architecture

Architecture documentation for the Socks4ProxyHandler class in Socks4ProxyHandler.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  ca809e55_f724_dc71_a437_a2136b99321a["Socks4ProxyHandler"]
  11cd5ef0_30b2_9280_f594_629fb7a10b1e["Socks4ProxyHandler.java"]
  ca809e55_f724_dc71_a437_a2136b99321a -->|defined in| 11cd5ef0_30b2_9280_f594_629fb7a10b1e
  9694ec5a_ba37_00d0_cdb7_4d6686f34e88["Socks4ProxyHandler()"]
  ca809e55_f724_dc71_a437_a2136b99321a -->|method| 9694ec5a_ba37_00d0_cdb7_4d6686f34e88
  d67543cd_1017_0f68_bcad_5683540e130c["String()"]
  ca809e55_f724_dc71_a437_a2136b99321a -->|method| d67543cd_1017_0f68_bcad_5683540e130c
  3284c26f_1c61_3d1e_b607_bc7eabc45294["addCodec()"]
  ca809e55_f724_dc71_a437_a2136b99321a -->|method| 3284c26f_1c61_3d1e_b607_bc7eabc45294
  c38f9364_6b66_1ba8_e8bc_c95ae3255af8["removeEncoder()"]
  ca809e55_f724_dc71_a437_a2136b99321a -->|method| c38f9364_6b66_1ba8_e8bc_c95ae3255af8
  27ac3dcf_9e50_b503_3804_5ad12f1f89bc["removeDecoder()"]
  ca809e55_f724_dc71_a437_a2136b99321a -->|method| 27ac3dcf_9e50_b503_3804_5ad12f1f89bc
  f391bafb_a867_e9ff_cb06_e190f967345a["Object()"]
  ca809e55_f724_dc71_a437_a2136b99321a -->|method| f391bafb_a867_e9ff_cb06_e190f967345a
  c63f8d91_1302_3761_375a_82375b26d9a8["handleResponse()"]
  ca809e55_f724_dc71_a437_a2136b99321a -->|method| c63f8d91_1302_3761_375a_82375b26d9a8

Relationship Graph

Source Code

handler-proxy/src/main/java/io/netty/handler/proxy/Socks4ProxyHandler.java lines 35–120

public final class Socks4ProxyHandler extends ProxyHandler {

    private static final String PROTOCOL = "socks4";
    private static final String AUTH_USERNAME = "username";

    private final String username;

    private String decoderName;
    private String encoderName;

    public Socks4ProxyHandler(SocketAddress proxyAddress) {
        this(proxyAddress, null);
    }

    public Socks4ProxyHandler(SocketAddress proxyAddress, String username) {
        super(proxyAddress);
        if (username != null && username.isEmpty()) {
            username = null;
        }
        this.username = username;
    }

    @Override
    public String protocol() {
        return PROTOCOL;
    }

    @Override
    public String authScheme() {
        return username != null? AUTH_USERNAME : AUTH_NONE;
    }

    public String username() {
        return username;
    }

    @Override
    protected void addCodec(ChannelHandlerContext ctx) throws Exception {
        ChannelPipeline p = ctx.pipeline();
        String name = ctx.name();

        Socks4ClientDecoder decoder = new Socks4ClientDecoder();
        p.addBefore(name, null, decoder);

        decoderName = p.context(decoder).name();
        encoderName = decoderName + ".encoder";

        p.addBefore(name, encoderName, Socks4ClientEncoder.INSTANCE);
    }

    @Override
    protected void removeEncoder(ChannelHandlerContext ctx) throws Exception {
        ChannelPipeline p = ctx.pipeline();
        p.remove(encoderName);
    }

    @Override
    protected void removeDecoder(ChannelHandlerContext ctx) throws Exception {
        ChannelPipeline p = ctx.pipeline();
        p.remove(decoderName);
    }

    @Override
    protected Object newInitialMessage(ChannelHandlerContext ctx) throws Exception {
        InetSocketAddress raddr = destinationAddress();
        String rhost;
        if (raddr.isUnresolved()) {
            rhost = raddr.getHostString();
        } else {
            rhost = raddr.getAddress().getHostAddress();
        }
        return new DefaultSocks4CommandRequest(
                Socks4CommandType.CONNECT, rhost, raddr.getPort(), username != null? username : "");
    }

    @Override
    protected boolean handleResponse(ChannelHandlerContext ctx, Object response) throws Exception {
        final Socks4CommandResponse res = (Socks4CommandResponse) response;
        final Socks4CommandStatus status = res.status();
        if (status == Socks4CommandStatus.SUCCESS) {
            return true;

Frequently Asked Questions

What is the Socks4ProxyHandler class?
Socks4ProxyHandler is a class in the netty codebase, defined in handler-proxy/src/main/java/io/netty/handler/proxy/Socks4ProxyHandler.java.
Where is Socks4ProxyHandler defined?
Socks4ProxyHandler is defined in handler-proxy/src/main/java/io/netty/handler/proxy/Socks4ProxyHandler.java at line 35.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free