diff --git a/i2psam.cpp b/i2psam.cpp index 3eaca17cd323288f864a4d093ef00274b55aad21..1d068e94c72b6f1c2d68d13c022d90980af80625 100644 --- a/i2psam.cpp +++ b/i2psam.cpp @@ -259,13 +259,14 @@ StreamSession::StreamSession( const std::string& SAMHost /*= SAM_DEFAULT_ADDRESS*/, uint16_t SAMPort /*= SAM_DEFAULT_PORT*/, const std::string& myDestination /*= SAM_GENERATE_MY_DESTINATION*/, + const std::string& i2pOptions /*= SAM_DEFAULT_I2P_OPTIONS*/, const std::string& minVer /*= SAM_DEFAULT_MIN_VER*/, const std::string& maxVer /*= SAM_DEFAULT_MAX_VER*/) : socket_(new Socket(SAMHost, SAMPort, minVer, maxVer))/*, reconnects_(0)*/ { - (void)createStreamSession(socket_, nickname, myDestination); + (void)createStreamSession(socket_, nickname, myDestination, i2pOptions); } StreamSession::~StreamSession() @@ -285,9 +286,9 @@ Message::Result StreamSession::request(Socket& socket, const std::string& reques return Message::Result(status, (status == Message::OK) ? Message::getValue(answer, keyOnSuccess) : answer); } -Message::Result StreamSession::createStreamSession(Socket& socket, const std::string& sessionID, const std::string& nickname, const std::string& destination) +Message::Result StreamSession::createStreamSession(Socket& socket, const std::string& sessionID, const std::string& nickname, const std::string& destination, const std::string& options) { - return request(socket, Message::sessionCreate(Message::sssStream, sessionID, nickname, destination), "DESTINATION"); + return request(socket, Message::sessionCreate(Message::sssStream, sessionID, nickname, destination, options), "DESTINATION"); } Message::Result StreamSession::namingLookup(Socket& socket, const std::string& name) @@ -326,10 +327,14 @@ Message::Result StreamSession::forward(Socket& socket, const std::string& sessio return request(socket, Message::streamForward(sessionID, host, port, silent), ""); } -bool StreamSession::createStreamSession(std::auto_ptr<Socket>& newSocket, const std::string& nickname, const std::string& myDestination /*= SAM_GENERATE_MY_DESTINATION*/) +bool StreamSession::createStreamSession( + std::auto_ptr<Socket>& newSocket, + const std::string& nickname, + const std::string& myDestination /*= SAM_GENERATE_MY_DESTINATION*/, + const std::string& i2pOptions /*= SAM_DEFAULT_I2P_OPTIONS*/) { const std::string newSessionID = generateSessionID(); - const Message::Result result = createStreamSession(*newSocket, newSessionID, nickname, myDestination); + const Message::Result result = createStreamSession(*newSocket, newSessionID, nickname, myDestination, i2pOptions); switch(result.first) { case Message::OK: @@ -342,6 +347,7 @@ bool StreamSession::createStreamSession(std::auto_ptr<Socket>& newSocket, const myDestination_ = result.second; sessionID_ = newSessionID; socket_ = newSocket; // release and copy + i2pOptions_ = i2pOptions; if (!reforwardAll()) return false; @@ -354,17 +360,17 @@ bool StreamSession::createStreamSession( const std::string& SAMHost /*= SAM_DEFAULT_ADDRESS*/, uint16_t SAMPort /*= SAM_DEFAULT_PORT*/, const std::string& myDestination /*= SAM_GENERATE_MY_DESTINATION*/, - const std::string& minVer /*= SAM_DEFAULT_MIN_VER*/, - const std::string& maxVer /*= SAM_DEFAULT_MAX_VER*/) + const std::string& i2pOptions /*= SAM_DEFAULT_I2P_OPTIONS*/, + const std::string& minVer, const std::string &maxVer /*= SAM_DEFAULT_MAX_VER*/) { std::auto_ptr<Socket> newSocket(new Socket(SAMHost, SAMPort, minVer, maxVer)); - return createStreamSession(newSocket, nickname, myDestination); + return createStreamSession(newSocket, nickname, myDestination, i2pOptions); } bool StreamSession::createStreamSession() { std::auto_ptr<Socket> newSocket(new Socket(*socket_)); - return createStreamSession(newSocket, nickname_, myDestination_); + return createStreamSession(newSocket, nickname_, myDestination_, i2pOptions_); } bool StreamSession::reforwardAll() diff --git a/i2psam.h b/i2psam.h index 4bfb0c88d78f4f80637ec594c16708ba1f3bd1fa..62cfa7feeca5d5a142d6c3807ceb6adfdb0723c7 100644 --- a/i2psam.h +++ b/i2psam.h @@ -31,6 +31,36 @@ #define SAM_DEFAULT_MAX_VER "3.0" #define SAM_GENERATE_MY_DESTINATION "TRANSIENT" #define SAM_MY_NAME "ME" +#define SAM_DEFAULT_I2P_OPTIONS "" + +#define SAM_NAME_INBOUND_QUANTITY "inbound.quantity" +#define SAM_DEFAULT_INBOUND_QUANTITY 2 +#define SAM_NAME_INBOUND_LENGTH "inbound.length" +#define SAM_DEFAULT_INBOUND_LENGTH 2 +#define SAM_NAME_INBOUND_LENGTHVARIANCE "inbound.lengthVariance" +#define SAM_DEFAULT_INBOUND_LENGTHVARIANCE 0 +#define SAM_NAME_INBOUND_BACKUPQUANTITY "inbound.backupquantity" +#define SAM_DEFAULT_INBOUND_BACKUPQUANTITY 0 +#define SAM_NAME_INBOUND_ALLOWZEROHOP "inbound.allowzerohop" +#define SAM_DEFAULT_INBOUND_ALLOWZEROHOP true +#define SAM_NAME_INBOUND_IPRESTRICTION "inbound.iprestriction" +#define SAM_DEFAULT_INBOUND_IPRESTRICTION 2 +#define SAM_NAME_OUTBOUND_QUANTITY "outbound.quantity" +#define SAM_DEFAULT_OUTBOUND_QUANTITY 2 +#define SAM_NAME_OUTBOUND_LENGTH "outbound.length" +#define SAM_DEFAULT_OUTBOUND_LENGTH 2 +#define SAM_NAME_OUTBOUND_LENGTHVARIANCE "outbound.lengthvariance" +#define SAM_DEFAULT_OUTBOUND_LENGTHVARIANCE 0 +#define SAM_NAME_OUTBOUND_BACKUPQUANTITY "outbound.backupquantity" +#define SAM_DEFAULT_OUTBOUND_BACKUPQUANTITY 0 +#define SAM_NAME_OUTBOUND_ALLOWZEROHOP "outbound.allowzerohop" +#define SAM_DEFAULT_OUTBOUND_ALLOWZEROHOP true +#define SAM_NAME_OUTBOUND_IPRESTRICTION "outbound.iprestriction" +#define SAM_DEFAULT_OUTBOUND_IPRESTRICTION 2 +#define SAM_NAME_OUTBOUND_PRIORITY "outbound.priority" +#define SAM_DEFAULT_OUTBOUND_PRIORITY 0 + + namespace SAM { @@ -219,6 +249,7 @@ private: std::string nickname_; std::string sessionID_; std::string myDestination_; + std::string i2pOptions_; struct ForwardedStream { @@ -231,13 +262,17 @@ private: typedef std::list<ForwardedStream> ForwardedStreamsContainer; ForwardedStreamsContainer forwardedStreams_; - bool createStreamSession(std::auto_ptr<Socket>& newSocket, const std::string& nickname, const std::string& myDestination = SAM_GENERATE_MY_DESTINATION); + bool createStreamSession( + std::auto_ptr<Socket>& newSocket, + const std::string& nickname, + const std::string& myDestination = SAM_GENERATE_MY_DESTINATION, + const std::string& i2pOptions = SAM_DEFAULT_I2P_OPTIONS); bool reforwardAll(); static Message::Result request(Socket& socket, const std::string& requestStr, const std::string& keyOnSuccess); // commands - static Message::Result createStreamSession(Socket& socket, const std::string& sessionID, const std::string& nickname, const std::string& destination); + static Message::Result createStreamSession(Socket& socket, const std::string& sessionID, const std::string& nickname, const std::string& destination, const std::string& options); static Message::Result namingLookup(Socket& socket, const std::string& name); static std::pair<const Message::eStatus, std::pair<const std::string, const std::string> > destGenerate(Socket& socket); static Message::Result accept(Socket& socket, const std::string& sessionID, bool silent); @@ -247,20 +282,22 @@ private: public: StreamSession( const std::string& nickname, - const std::string& SAMHost = SAM_DEFAULT_ADDRESS, - uint16_t SAMPort = SAM_DEFAULT_PORT, + const std::string& SAMHost = SAM_DEFAULT_ADDRESS, + uint16_t SAMPort = SAM_DEFAULT_PORT, const std::string& myDestination = SAM_GENERATE_MY_DESTINATION, - const std::string& minVer = SAM_DEFAULT_MIN_VER, - const std::string& maxVer = SAM_DEFAULT_MAX_VER); + const std::string& i2pOptions = SAM_DEFAULT_I2P_OPTIONS, + const std::string& minVer = SAM_DEFAULT_MIN_VER, + const std::string& maxVer = SAM_DEFAULT_MAX_VER); ~StreamSession(); bool createStreamSession( const std::string& nickname, - const std::string& SAMHost = SAM_DEFAULT_ADDRESS, - uint16_t SAMPort = SAM_DEFAULT_PORT, + const std::string& SAMHost = SAM_DEFAULT_ADDRESS, + uint16_t SAMPort = SAM_DEFAULT_PORT, const std::string& myDestination = SAM_GENERATE_MY_DESTINATION, - const std::string& minVer = SAM_DEFAULT_MIN_VER, - const std::string& maxVer = SAM_DEFAULT_MAX_VER); // recreates with new parameters + const std::string& i2pOptions = SAM_DEFAULT_I2P_OPTIONS, + const std::string& minVer = SAM_DEFAULT_MIN_VER, + const std::string& maxVer = SAM_DEFAULT_MAX_VER); // recreates with new parameters bool createStreamSession(); // recreates with current parameters