UniEvent-Socks

 view release on metacpan or  search on metacpan

clib/src/panda/unievent/socks/SocksFilter.cc  view on Meta::CPAN

}

void SocksFilter::listen () { throw ERROR_SERVER_USE; }

void SocksFilter::tcp_connect (const TcpConnectRequestSP& req) {
    panda_log_debug("tcp_connect: " << req << " state:" << state);
    if (state == State::terminal) return NextFilter::tcp_connect(req);

    if (req->addr) {
        addr = req->addr;
        if (!addr.is_inet4() && !addr.is_inet6()) throw Error("Unknown address family");
    } else {
        host  = req->host;
        port  = req->port;
        hints = req->hints;
    }

    connect_request = req;

    auto subreq = (new TcpConnectRequest())->to(socks->host, socks->port);
    state = State::connecting_proxy;

clib/src/panda/unievent/socks/SocksFilter.cc  view on Meta::CPAN


void SocksFilter::do_connect () {
    panda_log_debug("do_connect");
    state = State::connect_reply;
    string data;
    if (addr) {
        if (addr.is_inet4()) {
            auto& sa4 = addr.as_inet4();
            data = string("\x05\x01\x00\x01") + string_view((char*)&sa4.addr(), 4) + string_view((char*)&sa4.get()->sin_port, 2);
        } else {
            auto& sa6 = addr.as_inet6();
            data = string("\x05\x01\x00\x04") + string((char*)&sa6.addr(), 16) + string((char*)&sa6.get()->sin6_port, 2);
        }
    } else {
        uint16_t nport = htons(port);
        data = string("\x05\x01\x00\x03") + (char)host.length() + host + string((char*)&nport, 2);
    }
    subreq_write(connect_request, new WriteRequest(data));
}

void SocksFilter::do_connected () {



( run in 0.225 second using v1.01-cache-2.11-cpan-87723dcf8b7 )