Home / Class/ SocksServerHandler Class — netty Architecture

SocksServerHandler Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  60ef178d_6500_8cea_0a49_90bdd5ee27ff["SocksServerHandler"]
  d540f89b_1d04_a29b_c01a_ecc4c86c52b0["SocksServerHandler.java"]
  60ef178d_6500_8cea_0a49_90bdd5ee27ff -->|defined in| d540f89b_1d04_a29b_c01a_ecc4c86c52b0
  f85e06bd_577a_8dda_0b80_9db397c25339["SocksServerHandler()"]
  60ef178d_6500_8cea_0a49_90bdd5ee27ff -->|method| f85e06bd_577a_8dda_0b80_9db397c25339
  0e191940_5264_af6c_15ae_b9ec0daab66a["channelRead0()"]
  60ef178d_6500_8cea_0a49_90bdd5ee27ff -->|method| 0e191940_5264_af6c_15ae_b9ec0daab66a
  028e9fe2_62db_e473_e48b_7242454d7cbf["channelReadComplete()"]
  60ef178d_6500_8cea_0a49_90bdd5ee27ff -->|method| 028e9fe2_62db_e473_e48b_7242454d7cbf
  42073905_4301_4661_627c_370dfb87be15["exceptionCaught()"]
  60ef178d_6500_8cea_0a49_90bdd5ee27ff -->|method| 42073905_4301_4661_627c_370dfb87be15

Relationship Graph

Source Code

example/src/main/java/io/netty/example/socksproxy/SocksServerHandler.java lines 37–99

@ChannelHandler.Sharable
public final class SocksServerHandler extends SimpleChannelInboundHandler<SocksMessage> {

    public static final SocksServerHandler INSTANCE = new SocksServerHandler();

    private SocksServerHandler() { }

    @Override
    public void channelRead0(ChannelHandlerContext ctx, SocksMessage socksRequest) throws Exception {
        switch (socksRequest.version()) {
            case SOCKS4a:
                Socks4CommandRequest socksV4CmdRequest = (Socks4CommandRequest) socksRequest;
                if (socksV4CmdRequest.type() == Socks4CommandType.CONNECT) {
                    ctx.pipeline().addLast(new SocksServerConnectHandler());
                    ctx.pipeline().remove(this);
                    ctx.fireChannelRead(socksRequest);
                } else {
                    ctx.close();
                }
                break;
            case SOCKS5:
                if (socksRequest instanceof Socks5InitialRequest) {
                    // auth support example
                    //ctx.pipeline().addFirst(new Socks5PasswordAuthRequestDecoder());
                    //ctx.write(new DefaultSocks5AuthMethodResponse(Socks5AuthMethod.PASSWORD));
                    ctx.pipeline().addFirst(new Socks5CommandRequestDecoder());
                    ctx.write(new DefaultSocks5InitialResponse(Socks5AuthMethod.NO_AUTH));
                } else if (socksRequest instanceof Socks5PasswordAuthRequest) {
                    ctx.pipeline().addFirst(new Socks5CommandRequestDecoder());
                    ctx.write(new DefaultSocks5PasswordAuthResponse(Socks5PasswordAuthStatus.SUCCESS));
                } else if (socksRequest instanceof Socks5PrivateAuthRequest) {
                    ctx.pipeline().addFirst(new Socks5CommandRequestDecoder());
                    ctx.write(new DefaultSocks5PrivateAuthResponse(Socks5PrivateAuthStatus.SUCCESS));
                } else if (socksRequest instanceof Socks5CommandRequest) {
                    Socks5CommandRequest socks5CmdRequest = (Socks5CommandRequest) socksRequest;
                    if (socks5CmdRequest.type() == Socks5CommandType.CONNECT) {
                        ctx.pipeline().addLast(new SocksServerConnectHandler());
                        ctx.pipeline().remove(this);
                        ctx.fireChannelRead(socksRequest);
                    } else {
                        ctx.close();
                    }
                } else {
                    ctx.close();
                }
                break;
            case UNKNOWN:
                ctx.close();
                break;
        }
    }

    @Override
    public void channelReadComplete(ChannelHandlerContext ctx) {
        ctx.flush();
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable throwable) {
        throwable.printStackTrace();
        SocksServerUtils.closeOnFlush(ctx.channel());
    }
}

Frequently Asked Questions

What is the SocksServerHandler class?
SocksServerHandler is a class in the netty codebase, defined in example/src/main/java/io/netty/example/socksproxy/SocksServerHandler.java.
Where is SocksServerHandler defined?
SocksServerHandler is defined in example/src/main/java/io/netty/example/socksproxy/SocksServerHandler.java at line 37.

Analyze Your Own Codebase

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

Try Supermodel Free