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.236 second using v1.01-cache-2.11-cpan-87723dcf8b7 )