mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 08:00:38 +03:00
fixes
This commit is contained in:
parent
aa3723d2bd
commit
e8f9ecc7d9
@ -404,6 +404,9 @@ namespace client
|
|||||||
if(destinationPort == 0) {
|
if(destinationPort == 0) {
|
||||||
destinationPort = port;
|
destinationPort = port;
|
||||||
}
|
}
|
||||||
|
if (!localDestination) {
|
||||||
|
localDestination = m_SharedLocalDestination;
|
||||||
|
}
|
||||||
auto clientTunnel = new I2PUDPClientTunnel(name, dest, end, localDestination, destinationPort, m_Service);
|
auto clientTunnel = new I2PUDPClientTunnel(name, dest, end, localDestination, destinationPort, m_Service);
|
||||||
if(m_ClientForwards.insert(std::make_pair(end, std::unique_ptr<I2PUDPClientTunnel>(clientTunnel))).second) {
|
if(m_ClientForwards.insert(std::make_pair(end, std::unique_ptr<I2PUDPClientTunnel>(clientTunnel))).second) {
|
||||||
clientTunnel->Start();
|
clientTunnel->Start();
|
||||||
@ -411,6 +414,7 @@ namespace client
|
|||||||
LogPrint(eLogError, "Clients: I2P Client forward for endpoint ", end, " already exists");
|
LogPrint(eLogError, "Clients: I2P Client forward for endpoint ", end, " already exists");
|
||||||
delete clientTunnel;
|
delete clientTunnel;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// tcp client
|
// tcp client
|
||||||
auto clientTunnel = new I2PClientTunnel (name, dest, address, port, localDestination, destinationPort);
|
auto clientTunnel = new I2PClientTunnel (name, dest, address, port, localDestination, destinationPort);
|
||||||
|
@ -539,19 +539,20 @@ namespace client
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/** create new */
|
/** create new */
|
||||||
m_Sessions.push_back(UDPSession(m_Service, m_Destination, m_Endpoint, ih, localPort, remotePort));
|
m_Sessions.push_back(UDPSession(m_Service, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), 0), m_Destination, m_Endpoint, ih, localPort, remotePort));
|
||||||
return m_Sessions.back();
|
return m_Sessions.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
UDPSession::UDPSession(boost::asio::io_service & ios, std::shared_ptr<i2p::client::ClientDestination> localDestination, boost::asio::ip::udp::endpoint endpoint, const i2p::data::IdentHash from, uint16_t ourPort, uint16_t theirPort) :
|
UDPSession::UDPSession(boost::asio::io_service & ios, boost::asio::ip::udp::endpoint localEndpoint, std::shared_ptr<i2p::client::ClientDestination> localDestination, boost::asio::ip::udp::endpoint endpoint, const i2p::data::IdentHash from, uint16_t ourPort, uint16_t theirPort) :
|
||||||
Destination(localDestination),
|
Destination(localDestination),
|
||||||
IPSocket(ios, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), 0)),
|
IPSocket(ios, localEndpoint),
|
||||||
Identity(from),
|
Identity(from),
|
||||||
ExpectedEndpoint(endpoint),
|
ExpectedEndpoint(endpoint),
|
||||||
LocalPort(ourPort),
|
LocalPort(ourPort),
|
||||||
RemotePort(theirPort)
|
RemotePort(theirPort)
|
||||||
{
|
{
|
||||||
Receive();
|
Receive();
|
||||||
|
LogPrint(eLogDebug, "UDPSession: bound to", IPSocket.local_endpoint());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -624,10 +625,11 @@ namespace client
|
|||||||
LogPrint(eLogError, "UDP Tunnel: lookup of ", m_RemoteDest, " was cancelled");
|
LogPrint(eLogError, "UDP Tunnel: lookup of ", m_RemoteDest, " was cancelled");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
LogPrint(eLogInfo, "UDP Tunnel: resolved ", m_RemoteDest, " to ", m_RemoteIdent->ToBase32());
|
||||||
|
auto dgram = m_LocalDest->CreateDatagramDestination();
|
||||||
// delete existing session
|
// delete existing session
|
||||||
if(m_Session) delete m_Session;
|
if(m_Session) delete m_Session;
|
||||||
m_Session = new UDPSession(m_Service, m_LocalDest, m_LocalEndpoint, *m_RemoteIdent, LocalPort, RemotePort);
|
m_Session = new UDPSession(m_Service, m_LocalEndpoint, m_LocalDest, m_LocalEndpoint, *m_RemoteIdent, LocalPort, RemotePort);
|
||||||
auto dgram = m_LocalDest->CreateDatagramDestination();
|
|
||||||
dgram->SetReceiver(std::bind(&I2PUDPClientTunnel::HandleRecvFromI2P, this,
|
dgram->SetReceiver(std::bind(&I2PUDPClientTunnel::HandleRecvFromI2P, this,
|
||||||
std::placeholders::_1, std::placeholders::_2,
|
std::placeholders::_1, std::placeholders::_2,
|
||||||
std::placeholders::_3, std::placeholders::_4,
|
std::placeholders::_3, std::placeholders::_4,
|
||||||
|
@ -152,7 +152,7 @@ namespace client
|
|||||||
|
|
||||||
uint8_t m_Buffer[I2P_UDP_MAX_MTU];
|
uint8_t m_Buffer[I2P_UDP_MAX_MTU];
|
||||||
|
|
||||||
UDPSession(boost::asio::io_service & ios, std::shared_ptr<i2p::client::ClientDestination> localDestination, boost::asio::ip::udp::endpoint remote, const i2p::data::IdentHash ident, uint16_t ourPort, uint16_t theirPort);
|
UDPSession(boost::asio::io_service & ios, boost::asio::ip::udp::endpoint localEndpoint, std::shared_ptr<i2p::client::ClientDestination> localDestination, boost::asio::ip::udp::endpoint remote, const i2p::data::IdentHash ident, uint16_t ourPort, uint16_t theirPort);
|
||||||
|
|
||||||
void HandleReceived(const boost::system::error_code & ecode, std::size_t len);
|
void HandleReceived(const boost::system::error_code & ecode, std::size_t len);
|
||||||
void Receive();
|
void Receive();
|
||||||
|
Loading…
Reference in New Issue
Block a user