类 io.netty.handler.codec.socksx.v5.Socks5AddressType 源码实例Demo

下面列出了怎么用 io.netty.handler.codec.socksx.v5.Socks5AddressType 的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: netty-4.1.22   文件: Socks5ProxyHandler.java

private void sendConnectCommand(ChannelHandlerContext ctx) throws Exception {
    InetSocketAddress raddr = destinationAddress();
    Socks5AddressType addrType;
    String rhost;
    if (raddr.isUnresolved()) {
        addrType = Socks5AddressType.DOMAIN;
        rhost = raddr.getHostString();
    } else {
        rhost = raddr.getAddress().getHostAddress();
        if (NetUtil.isValidIpV4Address(rhost)) {
            addrType = Socks5AddressType.IPv4;
        } else if (NetUtil.isValidIpV6Address(rhost)) {
            addrType = Socks5AddressType.IPv6;
        } else {
            throw new ProxyConnectException(
                    exceptionMessage("unknown address type: " + StringUtil.simpleClassName(rhost)));
        }
    }

    ctx.pipeline().replace(decoderName, decoderName, new Socks5CommandResponseDecoder());
    sendToProxyServer(new DefaultSocks5CommandRequest(Socks5CommandType.CONNECT, addrType, rhost, raddr.getPort()));
}
 
源代码2 项目: netty-4.1.22   文件: Socks5ProxyServer.java

@Override
protected boolean handleProxyProtocol(ChannelHandlerContext ctx, Object msg) throws Exception {
    if (!authenticated) {
        authenticated = authenticate(ctx, msg);
        return false;
    }

    Socks5CommandRequest req = (Socks5CommandRequest) msg;
    assertThat(req.type(), is(Socks5CommandType.CONNECT));

    Socks5CommandResponse res =
            new DefaultSocks5CommandResponse(Socks5CommandStatus.SUCCESS, Socks5AddressType.IPv4);
    intermediaryDestination = SocketUtils.socketAddress(req.dstAddr(), req.dstPort());

    ctx.write(res);

    ctx.pipeline().remove(ENCODER);
    ctx.pipeline().remove(DECODER);

    return true;
}
 

@Override
protected void channelRead0(ChannelHandlerContext ctx, Socks5Message msg) throws Exception {
    if (msg instanceof DefaultSocks5InitialRequest) {
        ctx.pipeline().addBefore(ctx.name(), Socks5CommandRequestDecoder.class.getName(),
                                 new Socks5CommandRequestDecoder());
        ctx.writeAndFlush(new DefaultSocks5InitialResponse(Socks5AuthMethod.NO_AUTH));
    } else if (msg instanceof DefaultSocks5CommandRequest) {
        final DefaultSocks5CommandRequest req = (DefaultSocks5CommandRequest) msg;
        ctx.pipeline().remove(Socks5CommandRequestDecoder.class);
        ctx.fireUserEventTriggered(new ProxySuccessEvent(
                new InetSocketAddress(req.dstAddr(), req.dstPort()),
                new DefaultSocks5CommandResponse(Socks5CommandStatus.SUCCESS,
                                                 Socks5AddressType.IPv4)));
    } else {
        throw new IllegalStateException("unexpected msg: " + msg);
    }
}
 

@Override
protected Future<?> execute() {
    InetSocketAddress destinationAddress = unresolvedAddressFor(serverHostAndPort);
    DefaultSocks5CommandRequest connectRequest = new DefaultSocks5CommandRequest(
            Socks5CommandType.CONNECT, Socks5AddressType.DOMAIN, destinationAddress.getHostString(), destinationAddress.getPort());

    addFirstOrReplaceHandler(SOCKS_DECODER_NAME, new Socks5CommandResponseDecoder());
    return writeToChannel(connectRequest);
}
 
 类所在包
 类方法
 同包方法