Initial work for supporting sam v3.1

This commit is contained in:
Mikal Villa
2019-02-09 05:19:53 +01:00
parent a9e6a6a962
commit 850a876e67
2 changed files with 15 additions and 10 deletions

View File

@ -241,7 +241,8 @@ StreamSession::StreamSession(
const std::string& SAMHost /*= SAM_DEFAULT_ADDRESS*/,
uint16_t SAMPort /*= SAM_DEFAULT_PORT*/,
const std::string& destination /*= SAM_GENERATE_MY_DESTINATION*/,
const std::string& i2pOptions /*= SAM_DEFAULT_I2P_OPTIONS*/)
const std::string& i2pOptions /*= SAM_DEFAULT_I2P_OPTIONS*/,
const std::string& signatureType /*= SAM_SIGNATURE_TYPE */ )
: socket_(SAMHost, SAMPort)
, nickname_(nickname)
, sessionID_(generateSessionID())
@ -419,7 +420,7 @@ FullDestination StreamSession::createStreamSession(const std::string& destinatio
{
typedef Message::Answer<const std::string> AnswerType;
const AnswerType answer = createStreamSession(socket_, sessionID_, nickname_, destination, i2pOptions_);
const AnswerType answer = createStreamSession(socket_, sessionID_, nickname_, destination, i2pOptions_, SAM_SIGNATURE_TYPE);
if (answer.status != Message::OK)
{
fallSick();
@ -486,9 +487,9 @@ Message::eStatus StreamSession::request(I2pSocket& socket, const std::string& re
}
/*static*/
Message::Answer<const std::string> StreamSession::createStreamSession(I2pSocket& socket, const std::string& sessionID, const std::string& nickname, const std::string& destination, const std::string& options)
Message::Answer<const std::string> StreamSession::createStreamSession(I2pSocket& socket, const std::string& sessionID, const std::string& nickname, const std::string& destination, const std::string& options, const std::string& signatureType)
{
return request(socket, Message::sessionCreate(Message::sssStream, sessionID, nickname, destination, options), "DESTINATION");
return request(socket, Message::sessionCreate(Message::sssStream, sessionID, nickname, destination, options, signatureType), "DESTINATION");
}
/*static*/
@ -649,7 +650,7 @@ std::string Message::hello(const std::string &minVer, const std::string &maxVer)
return createSAMRequest(helloFormat, minVer.c_str(), maxVer.c_str());
}
std::string Message::sessionCreate(SessionStyle style, const std::string& sessionID, const std::string& nickname, const std::string& destination /*= SAM_GENERATE_MY_DESTINATION*/, const std::string& options /*= ""*/)
std::string Message::sessionCreate(SessionStyle style, const std::string& sessionID, const std::string& nickname, const std::string& destination /*= SAM_GENERATE_MY_DESTINATION*/, const std::string& options /*= ""*/, const std::string& signatureType /*= SAM_SIGNATURE_TYPE*/)
{
///////////////////////////////////////////////////////////
//
@ -673,8 +674,8 @@ std::string Message::sessionCreate(SessionStyle style, const std::string& sessio
case sssRaw: sessionStyle = "RAW"; break;
}
static const char* sessionCreateFormat = "SESSION CREATE STYLE=%s ID=%s DESTINATION=%s inbound.nickname=%s %s\n"; // we add inbound.nickname option
return createSAMRequest(sessionCreateFormat, sessionStyle.c_str(), sessionID.c_str(), destination.c_str(), nickname.c_str(), options.c_str());
static const char* sessionCreateFormat = "SESSION CREATE STYLE=%s ID=%s DESTINATION=%s SIGNATURE_TYPE=%s inbound.nickname=%s %s\n"; // we add inbound.nickname option
return createSAMRequest(sessionCreateFormat, sessionStyle.c_str(), sessionID.c_str(), destination.c_str(), signatureType.c_str(), nickname.c_str(), options.c_str());
}
std::string Message::streamAccept(const std::string& sessionID, bool silent /*= false*/)

View File

@ -21,6 +21,7 @@
#define SAM_GENERATE_MY_DESTINATION "TRANSIENT"
#define SAM_MY_NAME "ME"
#define SAM_DEFAULT_I2P_OPTIONS ""
#define SAM_SIGNATURE_TYPE "ECDSA_SHA256_P256"
#define SAM_NAME_INBOUND_QUANTITY "inbound.quantity"
#define SAM_DEFAULT_INBOUND_QUANTITY 3 // Three tunnels is default now
@ -182,7 +183,9 @@ public:
};
static std::string hello(const std::string& minVer, const std::string& maxVer);
static std::string sessionCreate(SessionStyle style, const std::string& sessionID, const std::string& nickname, const std::string& destination = SAM_GENERATE_MY_DESTINATION, const std::string& options = "");
static std::string sessionCreate(SessionStyle style, const std::string& sessionID,
const std::string& nickname, const std::string& destination = SAM_GENERATE_MY_DESTINATION,
const std::string& options = "", const std::string& signatureType = SAM_SIGNATURE_TYPE);
static std::string streamAccept(const std::string& sessionID, bool silent = false);
static std::string streamConnect(const std::string& sessionID, const std::string& destination, bool silent = false);
static std::string streamForward(const std::string& sessionID, const std::string& host, uint16_t port, bool silent = false);
@ -328,7 +331,8 @@ public:
const std::string& SAMHost = SAM_DEFAULT_ADDRESS,
uint16_t SAMPort = SAM_DEFAULT_PORT,
const std::string& destination = SAM_GENERATE_MY_DESTINATION,
const std::string& i2pOptions = SAM_DEFAULT_I2P_OPTIONS);
const std::string& i2pOptions = SAM_DEFAULT_I2P_OPTIONS,
const std::string& signatureType = SAM_SIGNATURE_TYPE);
explicit StreamSession(StreamSession& rhs);
~StreamSession();
@ -389,7 +393,7 @@ private:
static Message::Answer<const std::string> request(I2pSocket& socket, const std::string& requestStr, const std::string& keyOnSuccess);
static Message::eStatus request(I2pSocket& socket, const std::string& requestStr);
// commands
static Message::Answer<const std::string> createStreamSession(I2pSocket& socket, const std::string& sessionID, const std::string& nickname, const std::string& destination, const std::string& options);
static Message::Answer<const std::string> createStreamSession(I2pSocket& socket, const std::string& sessionID, const std::string& nickname, const std::string& destination, const std::string& options, const std::string& signatureType);
static Message::Answer<const std::string> namingLookup(I2pSocket& socket, const std::string& name);
static Message::Answer<const FullDestination> destGenerate(I2pSocket& socket);