Home / Class/ Socks5ServerEncoder Class — netty Architecture

Socks5ServerEncoder Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  1cdfa3cc_d2e9_1ff0_108d_c82ab4a96f74["Socks5ServerEncoder"]
  512b1a27_2a7d_d489_98de_f247deca9d8a["Socks5ServerEncoder.java"]
  1cdfa3cc_d2e9_1ff0_108d_c82ab4a96f74 -->|defined in| 512b1a27_2a7d_d489_98de_f247deca9d8a
  a0008b68_ca0f_9b1c_227d_72ed644ccdc3["Socks5ServerEncoder()"]
  1cdfa3cc_d2e9_1ff0_108d_c82ab4a96f74 -->|method| a0008b68_ca0f_9b1c_227d_72ed644ccdc3
  3c5f7779_e1bc_22f1_0206_ef73debff4d1["Socks5AddressEncoder()"]
  1cdfa3cc_d2e9_1ff0_108d_c82ab4a96f74 -->|method| 3c5f7779_e1bc_22f1_0206_ef73debff4d1
  33d88147_b1e4_e0c2_2929_cc0fe97a48dc["encode()"]
  1cdfa3cc_d2e9_1ff0_108d_c82ab4a96f74 -->|method| 33d88147_b1e4_e0c2_2929_cc0fe97a48dc
  c93bc27f_3a91_4a91_6fb4_7f17b7e2a769["encodeAuthMethodResponse()"]
  1cdfa3cc_d2e9_1ff0_108d_c82ab4a96f74 -->|method| c93bc27f_3a91_4a91_6fb4_7f17b7e2a769
  6ebf1fd7_dcfa_594e_6d20_e59b3e8ee4c6["encodePasswordAuthResponse()"]
  1cdfa3cc_d2e9_1ff0_108d_c82ab4a96f74 -->|method| 6ebf1fd7_dcfa_594e_6d20_e59b3e8ee4c6
  58b88a50_86b0_34d7_83c1_b26d1a4c42f9["encodePrivateAuthResponse()"]
  1cdfa3cc_d2e9_1ff0_108d_c82ab4a96f74 -->|method| 58b88a50_86b0_34d7_83c1_b26d1a4c42f9
  37a3e5d0_c2c0_6dc4_b582_562f19a2f1b2["encodeCommandResponse()"]
  1cdfa3cc_d2e9_1ff0_108d_c82ab4a96f74 -->|method| 37a3e5d0_c2c0_6dc4_b582_562f19a2f1b2

Relationship Graph

Source Code

codec-socks/src/main/java/io/netty/handler/codec/socksx/v5/Socks5ServerEncoder.java lines 31–101

@Sharable
public class Socks5ServerEncoder extends MessageToByteEncoder<Socks5Message> {

    public static final Socks5ServerEncoder DEFAULT = new Socks5ServerEncoder(Socks5AddressEncoder.DEFAULT);

    private final Socks5AddressEncoder addressEncoder;

    /**
     * Creates a new instance with the default {@link Socks5AddressEncoder}.
     */
    protected Socks5ServerEncoder() {
        this(Socks5AddressEncoder.DEFAULT);
    }

    /**
     * Creates a new instance with the specified {@link Socks5AddressEncoder}.
     */
    public Socks5ServerEncoder(Socks5AddressEncoder addressEncoder) {
        super(Socks5Message.class);
        this.addressEncoder = ObjectUtil.checkNotNull(addressEncoder, "addressEncoder");
    }

    /**
     * Returns the {@link Socks5AddressEncoder} of this encoder.
     */
    protected final Socks5AddressEncoder addressEncoder() {
        return addressEncoder;
    }

    @Override
    protected void encode(ChannelHandlerContext ctx, Socks5Message msg, ByteBuf out) throws Exception {
        if (msg instanceof Socks5InitialResponse) {
            encodeAuthMethodResponse((Socks5InitialResponse) msg, out);
        } else if (msg instanceof Socks5PasswordAuthResponse) {
            encodePasswordAuthResponse((Socks5PasswordAuthResponse) msg, out);
        } else if (msg instanceof Socks5CommandResponse) {
            encodeCommandResponse((Socks5CommandResponse) msg, out);
        } else if (msg instanceof Socks5PrivateAuthResponse) {
            encodePrivateAuthResponse((Socks5PrivateAuthResponse) msg, out);
        } else {
            throw new EncoderException("unsupported message type: " + StringUtil.simpleClassName(msg));
        }
    }

    private static void encodeAuthMethodResponse(Socks5InitialResponse msg, ByteBuf out) {
        out.writeByte(msg.version().byteValue());
        out.writeByte(msg.authMethod().byteValue());
    }

    private static void encodePasswordAuthResponse(Socks5PasswordAuthResponse msg, ByteBuf out) {
        out.writeByte(0x01);
        out.writeByte(msg.status().byteValue());
    }

    private static void encodePrivateAuthResponse(Socks5PrivateAuthResponse msg, ByteBuf out) {
        out.writeByte(0x01);
        out.writeByte(msg.status().byteValue());
    }

    private void encodeCommandResponse(Socks5CommandResponse msg, ByteBuf out) throws Exception {
        out.writeByte(msg.version().byteValue());
        out.writeByte(msg.status().byteValue());
        out.writeByte(0x00);

        final Socks5AddressType bndAddrType = msg.bndAddrType();
        out.writeByte(bndAddrType.byteValue());
        addressEncoder.encodeAddress(bndAddrType, msg.bndAddr(), out);

        ByteBufUtil.writeShortBE(out, msg.bndPort());
    }
}

Frequently Asked Questions

What is the Socks5ServerEncoder class?
Socks5ServerEncoder is a class in the netty codebase, defined in codec-socks/src/main/java/io/netty/handler/codec/socksx/v5/Socks5ServerEncoder.java.
Where is Socks5ServerEncoder defined?
Socks5ServerEncoder is defined in codec-socks/src/main/java/io/netty/handler/codec/socksx/v5/Socks5ServerEncoder.java at line 31.

Analyze Your Own Codebase

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

Try Supermodel Free