|
|
@ -1,6 +1,5 @@ |
|
|
|
#include <algorithm> |
|
|
|
#include <algorithm> |
|
|
|
#include <cassert> |
|
|
|
#include <cassert> |
|
|
|
#include <boost/lexical_cast.hpp> |
|
|
|
|
|
|
|
#include "Crypto.h" |
|
|
|
#include "Crypto.h" |
|
|
|
#include "Log.h" |
|
|
|
#include "Log.h" |
|
|
|
#include "FS.h" |
|
|
|
#include "FS.h" |
|
|
@ -18,66 +17,30 @@ namespace client |
|
|
|
m_PublishReplyToken (0), m_PublishConfirmationTimer (m_Service), |
|
|
|
m_PublishReplyToken (0), m_PublishConfirmationTimer (m_Service), |
|
|
|
m_PublishVerificationTimer (m_Service), m_CleanupTimer (m_Service) |
|
|
|
m_PublishVerificationTimer (m_Service), m_CleanupTimer (m_Service) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int inboundTunnelLen = DEFAULT_INBOUND_TUNNEL_LENGTH; |
|
|
|
int inLen = DEFAULT_INBOUND_TUNNEL_LENGTH; |
|
|
|
int outboundTunnelLen = DEFAULT_OUTBOUND_TUNNEL_LENGTH; |
|
|
|
int inQty = DEFAULT_INBOUND_TUNNELS_QUANTITY; |
|
|
|
int inboundTunnelsQuantity = DEFAULT_INBOUND_TUNNELS_QUANTITY; |
|
|
|
int outLen = DEFAULT_OUTBOUND_TUNNEL_LENGTH; |
|
|
|
int outboundTunnelsQuantity = DEFAULT_OUTBOUND_TUNNELS_QUANTITY; |
|
|
|
int outQty = DEFAULT_OUTBOUND_TUNNELS_QUANTITY; |
|
|
|
int numTags = DEFAULT_TAGS_TO_SEND; |
|
|
|
int numTags = DEFAULT_TAGS_TO_SEND; |
|
|
|
std::shared_ptr<std::vector<i2p::data::IdentHash> > explicitPeers; |
|
|
|
std::shared_ptr<std::vector<i2p::data::IdentHash> > explicitPeers; |
|
|
|
if (params) |
|
|
|
try { |
|
|
|
{ |
|
|
|
if (params) { |
|
|
|
auto it = params->find (I2CP_PARAM_INBOUND_TUNNEL_LENGTH); |
|
|
|
auto it = params->find (I2CP_PARAM_INBOUND_TUNNEL_LENGTH); |
|
|
|
if (it != params->end ()) |
|
|
|
if (it != params->end ()) |
|
|
|
{ |
|
|
|
inLen = std::stoi(it->second); |
|
|
|
|
|
|
|
|
|
|
|
int len = i2p::util::lexical_cast<int>(it->second, inboundTunnelLen); |
|
|
|
|
|
|
|
if (len >= 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
inboundTunnelLen = len; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
LogPrint (eLogInfo, "Destination: Inbound tunnel length set to ", inboundTunnelLen); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
it = params->find (I2CP_PARAM_OUTBOUND_TUNNEL_LENGTH); |
|
|
|
it = params->find (I2CP_PARAM_OUTBOUND_TUNNEL_LENGTH); |
|
|
|
if (it != params->end ()) |
|
|
|
if (it != params->end ()) |
|
|
|
{ |
|
|
|
outLen = std::stoi(it->second); |
|
|
|
|
|
|
|
|
|
|
|
int len = i2p::util::lexical_cast<int>(it->second, outboundTunnelLen); |
|
|
|
|
|
|
|
if (len >= 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
outboundTunnelLen = len; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
LogPrint (eLogInfo, "Destination: Outbound tunnel length set to ", outboundTunnelLen); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
it = params->find (I2CP_PARAM_INBOUND_TUNNELS_QUANTITY); |
|
|
|
it = params->find (I2CP_PARAM_INBOUND_TUNNELS_QUANTITY); |
|
|
|
if (it != params->end ()) |
|
|
|
if (it != params->end ()) |
|
|
|
{ |
|
|
|
inQty = std::stoi(it->second); |
|
|
|
int quantity = i2p::util::lexical_cast<int>(it->second, inboundTunnelsQuantity); |
|
|
|
|
|
|
|
if (quantity > 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
inboundTunnelsQuantity = quantity; |
|
|
|
|
|
|
|
LogPrint (eLogInfo, "Destination: Inbound tunnels quantity set to ", quantity); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
it = params->find (I2CP_PARAM_OUTBOUND_TUNNELS_QUANTITY); |
|
|
|
it = params->find (I2CP_PARAM_OUTBOUND_TUNNELS_QUANTITY); |
|
|
|
if (it != params->end ()) |
|
|
|
if (it != params->end ()) |
|
|
|
{ |
|
|
|
outQty = std::stoi(it->second); |
|
|
|
int quantity = i2p::util::lexical_cast<int>(it->second, outboundTunnelsQuantity); |
|
|
|
|
|
|
|
if (quantity > 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
outboundTunnelsQuantity = quantity; |
|
|
|
|
|
|
|
LogPrint (eLogInfo, "Destination: Outbound tunnels quantity set to ", quantity); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
it = params->find (I2CP_PARAM_TAGS_TO_SEND); |
|
|
|
it = params->find (I2CP_PARAM_TAGS_TO_SEND); |
|
|
|
if (it != params->end ()) |
|
|
|
if (it != params->end ()) |
|
|
|
{ |
|
|
|
numTags = std::stoi(it->second); |
|
|
|
int tagsToSend = i2p::util::lexical_cast<int>(it->second, numTags); |
|
|
|
LogPrint (eLogInfo, "Destination: parameters for tunnel set to: ", inQty, " inbound (", inLen, " hops), ", outQty, " outbound (", outLen, " hops), ", numTags, " tags"); |
|
|
|
if (tagsToSend > 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
numTags = tagsToSend; |
|
|
|
|
|
|
|
LogPrint (eLogInfo, "Destination: Tags to send set to ", tagsToSend); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
it = params->find (I2CP_PARAM_EXPLICIT_PEERS); |
|
|
|
it = params->find (I2CP_PARAM_EXPLICIT_PEERS); |
|
|
|
if (it != params->end ()) |
|
|
|
if (it != params->end ()) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -89,12 +52,15 @@ namespace client |
|
|
|
i2p::data::IdentHash ident; |
|
|
|
i2p::data::IdentHash ident; |
|
|
|
ident.FromBase64 (b64); |
|
|
|
ident.FromBase64 (b64); |
|
|
|
explicitPeers->push_back (ident); |
|
|
|
explicitPeers->push_back (ident); |
|
|
|
|
|
|
|
LogPrint (eLogInfo, "Destination: Added to explicit peers list: ", b64); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
LogPrint (eLogInfo, "Destination: Explicit peers set to ", it->second); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} catch (std::exception & ex) { |
|
|
|
|
|
|
|
LogPrint(eLogError, "Destination: unable to parse parameters for destination: ", ex.what()); |
|
|
|
} |
|
|
|
} |
|
|
|
SetNumTags (numTags); |
|
|
|
SetNumTags (numTags); |
|
|
|
m_Pool = i2p::tunnel::tunnels.CreateTunnelPool (inboundTunnelLen, outboundTunnelLen, inboundTunnelsQuantity, outboundTunnelsQuantity); |
|
|
|
m_Pool = i2p::tunnel::tunnels.CreateTunnelPool (inLen, outLen, inQty, outQty); |
|
|
|
if (explicitPeers) |
|
|
|
if (explicitPeers) |
|
|
|
m_Pool->SetExplicitPeers (explicitPeers); |
|
|
|
m_Pool->SetExplicitPeers (explicitPeers); |
|
|
|
} |
|
|
|
} |
|
|
|