Search in sources :

Example 1 with Socks5ProxyHandler

use of org.rx.net.socks.upstream.Socks5ProxyHandler in project rxlib by RockyLOMO.

the class Socks5CommandRequestHandler method connect.

private void connect(Channel inbound, Socks5AddressType dstAddrType, RouteEventArgs e) {
    SocksProxyServer server = SocksContext.server(inbound);
    UnresolvedEndpoint realEp = SocksContext.realDestination(inbound);
    Sockets.bootstrap(inbound.eventLoop(), server.getConfig(), outbound -> {
        SocksContext.server(outbound, server);
        e.getValue().initChannel(outbound);
    }).connect(e.getValue().getDestination().socketAddress()).addListener((ChannelFutureListener) f -> {
        UnresolvedEndpoint dstEp = e.getValue().getDestination();
        if (!f.isSuccess()) {
            if (server.onReconnecting != null) {
                server.raiseEvent(server.onReconnecting, e);
                if (!e.isCancel() && e.isUpstreamChanged()) {
                    e.reset();
                    connect(inbound, dstAddrType, e);
                    return;
                }
            }
            ExceptionHandler.INSTANCE.log("socks5[{}] connect {}[{}] fail", server.getConfig().getListenPort(), dstEp, realEp, f.cause());
            inbound.writeAndFlush(new DefaultSocks5CommandResponse(Socks5CommandStatus.FAILURE, dstAddrType)).addListener(ChannelFutureListener.CLOSE);
            return;
        }
        Channel outbound = f.channel();
        StringBuilder aesMsg = new StringBuilder();
        Socks5ProxyHandler proxyHandler;
        SocksConfig config = server.getConfig();
        if (server.aesRouter(realEp) && (proxyHandler = outbound.pipeline().get(Socks5ProxyHandler.class)) != null) {
            proxyHandler.setHandshakeCallback(() -> {
                if (config.getTransportFlags().has(TransportFlags.BACKEND_COMPRESS)) {
                    ChannelHandler[] handlers = new AESCodec(config.getAesKey()).channelHandlers();
                    for (int i = handlers.length - 1; i > -1; i--) {
                        ChannelHandler handler = handlers[i];
                        outbound.pipeline().addAfter(TransportUtil.ZIP_DECODER, handler.getClass().getSimpleName(), handler);
                    }
                    aesMsg.append("[BACKEND_AES]");
                }
                relay(inbound, outbound, dstAddrType, dstEp, aesMsg);
            });
            return;
        }
        relay(inbound, outbound, dstAddrType, dstEp, aesMsg);
    });
}
Also used : TransportUtil(org.rx.net.TransportUtil) Socks5ProxyHandler(org.rx.net.socks.upstream.Socks5ProxyHandler) SneakyThrows(lombok.SneakyThrows) UnresolvedEndpoint(org.rx.net.support.UnresolvedEndpoint) SocksSupport(org.rx.net.support.SocksSupport) AESCodec(org.rx.net.AESCodec) InetSocketAddress(java.net.InetSocketAddress) ExceptionHandler(org.rx.exception.ExceptionHandler) StringBuilder(org.rx.core.StringBuilder) Inet6Address(java.net.Inet6Address) Slf4j(lombok.extern.slf4j.Slf4j) TransportFlags(org.rx.net.TransportFlags) io.netty.handler.codec.socksx.v5(io.netty.handler.codec.socksx.v5) Sockets(org.rx.net.Sockets) io.netty.channel(io.netty.channel) SUID(org.rx.bean.SUID) ConcurrentLinkedQueue(java.util.concurrent.ConcurrentLinkedQueue) UnresolvedEndpoint(org.rx.net.support.UnresolvedEndpoint) StringBuilder(org.rx.core.StringBuilder) AESCodec(org.rx.net.AESCodec) Socks5ProxyHandler(org.rx.net.socks.upstream.Socks5ProxyHandler)

Aggregations

io.netty.channel (io.netty.channel)1 io.netty.handler.codec.socksx.v5 (io.netty.handler.codec.socksx.v5)1 Inet6Address (java.net.Inet6Address)1 InetSocketAddress (java.net.InetSocketAddress)1 ConcurrentLinkedQueue (java.util.concurrent.ConcurrentLinkedQueue)1 SneakyThrows (lombok.SneakyThrows)1 Slf4j (lombok.extern.slf4j.Slf4j)1 SUID (org.rx.bean.SUID)1 StringBuilder (org.rx.core.StringBuilder)1 ExceptionHandler (org.rx.exception.ExceptionHandler)1 AESCodec (org.rx.net.AESCodec)1 Sockets (org.rx.net.Sockets)1 TransportFlags (org.rx.net.TransportFlags)1 TransportUtil (org.rx.net.TransportUtil)1 Socks5ProxyHandler (org.rx.net.socks.upstream.Socks5ProxyHandler)1 SocksSupport (org.rx.net.support.SocksSupport)1 UnresolvedEndpoint (org.rx.net.support.UnresolvedEndpoint)1