MCPcopy Create free account
hub / github.com/PurpleI2P/i2pd / SendUpstreamRequest

Method SendUpstreamRequest

libi2pd_client/SOCKS.cpp:812–852  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

810
811 template<typename Socket>
812 void SOCKSHandler::SendUpstreamRequest(std::shared_ptr<Socket>& upstreamSock)
813 {
814 LogPrint(eLogInfo, "SOCKS: Negotiating with upstream proxy");
815 EnterState(UPSTREAM_HANDSHAKE);
816 if (upstreamSock)
817 {
818 auto s = shared_from_this ();
819 auto onHandshake = [s, &upstreamSock](const boost::system::error_code& ec)
820 {
821 if (!ec)
822 s->SocksUpstreamSuccess(upstreamSock);
823 else
824 {
825 s->SocksRequestFailed(SOCKS5_NET_UNREACH);
826 LogPrint(eLogError, "SOCKS: Upstream proxy failure: ", ec.message ());
827 }
828 };
829 switch (m_addrtype)
830 {
831 case ADDR_DNS:
832 i2p::transport::Socks5Handshake (*upstreamSock, std::make_pair(m_address.dns.ToString (), m_port), onHandshake);
833 break;
834 case ADDR_IPV4:
835 i2p::transport::Socks5Handshake (*upstreamSock, boost::asio::ip::tcp::endpoint (
836 boost::asio::ip::address_v4(m_address.ip), m_port), onHandshake);
837 break;
838 case ADDR_IPV6:
839 {
840 boost::asio::ip::address_v6::bytes_type bytes;
841 memcpy (bytes.data (), m_address.ipv6, 16);
842 i2p::transport::Socks5Handshake (*upstreamSock, boost::asio::ip::tcp::endpoint (
843 boost::asio::ip::address_v6(bytes), m_port), onHandshake);
844 break;
845 }
846 default:
847 LogPrint(eLogError, "SOCKS: Upstream proxy unknown address type: ", m_addrtype);
848 }
849 }
850 else
851 LogPrint(eLogError, "SOCKS: No upstream socket to send handshake to");
852 }
853
854 void SOCKSHandler::HandleUpstreamConnected(const boost::system::error_code & ecode,
855 const boost::asio::ip::tcp::endpoint& ep)

Callers 1

ForwardSOCKSMethod · 0.80

Calls 5

LogPrintFunction · 0.85
Socks5HandshakeFunction · 0.85
SocksUpstreamSuccessMethod · 0.80
SocksRequestFailedMethod · 0.80
ToStringMethod · 0.80

Tested by

no test coverage detected