mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-03-22 00:59:08 +01:00
fixed #2004. Check supported crypto
This commit is contained in:
parent
3b97feb89f
commit
8bc58daa5a
2 changed files with 37 additions and 25 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2023, The PurpleI2P Project
|
* Copyright (c) 2013-2024, The PurpleI2P Project
|
||||||
*
|
*
|
||||||
* This file is part of Purple i2pd project and licensed under BSD3
|
* This file is part of Purple i2pd project and licensed under BSD3
|
||||||
*
|
*
|
||||||
|
@ -550,17 +550,22 @@ namespace client
|
||||||
if (!session) session = m_Owner.FindSession(m_ID);
|
if (!session) session = m_Owner.FindSession(m_ID);
|
||||||
if (session)
|
if (session)
|
||||||
{
|
{
|
||||||
m_SocketType = eSAMSocketTypeStream;
|
if (session->GetLocalDestination ()->SupportsEncryptionType (remote->GetEncryptionType ()))
|
||||||
m_Stream = session->GetLocalDestination ()->CreateStream (remote);
|
{
|
||||||
if (m_Stream)
|
m_SocketType = eSAMSocketTypeStream;
|
||||||
{
|
m_Stream = session->GetLocalDestination ()->CreateStream (remote);
|
||||||
m_Stream->Send ((uint8_t *)m_Buffer, m_BufferOffset); // connect and send
|
if (m_Stream)
|
||||||
m_BufferOffset = 0;
|
{
|
||||||
I2PReceive ();
|
m_Stream->Send ((uint8_t *)m_Buffer, m_BufferOffset); // connect and send
|
||||||
SendMessageReply (SAM_STREAM_STATUS_OK, strlen(SAM_STREAM_STATUS_OK), false);
|
m_BufferOffset = 0;
|
||||||
|
I2PReceive ();
|
||||||
|
SendMessageReply (SAM_STREAM_STATUS_OK, strlen(SAM_STREAM_STATUS_OK), false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
SendMessageReply (SAM_STREAM_STATUS_INVALID_ID, strlen(SAM_STREAM_STATUS_INVALID_ID), true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
SendMessageReply (SAM_STREAM_STATUS_INVALID_ID, strlen(SAM_STREAM_STATUS_INVALID_ID), true);
|
SendStreamCantReachPeer ("Incompatible crypto");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
SendMessageReply (SAM_STREAM_STATUS_INVALID_ID, strlen(SAM_STREAM_STATUS_INVALID_ID), true);
|
SendMessageReply (SAM_STREAM_STATUS_INVALID_ID, strlen(SAM_STREAM_STATUS_INVALID_ID), true);
|
||||||
|
@ -573,7 +578,7 @@ namespace client
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LogPrint (eLogError, "SAM: Destination to connect not found");
|
LogPrint (eLogError, "SAM: Destination to connect not found");
|
||||||
SendMessageReply (SAM_STREAM_STATUS_CANT_REACH_PEER, strlen(SAM_STREAM_STATUS_CANT_REACH_PEER), true);
|
SendStreamCantReachPeer ("LeaseSet not found");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -857,27 +862,32 @@ namespace client
|
||||||
SendSessionI2PError ("Wrong session type");
|
SendSessionI2PError ("Wrong session type");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SAMSocket::SendReplyWithMessage (const char * reply, const std::string & msg)
|
||||||
|
{
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
size_t len = sprintf_s (m_Buffer, SAM_SOCKET_BUFFER_SIZE, reply, msg.c_str());
|
||||||
|
#else
|
||||||
|
size_t len = snprintf (m_Buffer, SAM_SOCKET_BUFFER_SIZE, reply, msg.c_str());
|
||||||
|
#endif
|
||||||
|
SendMessageReply (m_Buffer, len, true);
|
||||||
|
}
|
||||||
|
|
||||||
void SAMSocket::SendSessionI2PError(const std::string & msg)
|
void SAMSocket::SendSessionI2PError(const std::string & msg)
|
||||||
{
|
{
|
||||||
LogPrint (eLogError, "SAM: Session I2P error: ", msg);
|
LogPrint (eLogError, "SAM: Session I2P error: ", msg);
|
||||||
#ifdef _MSC_VER
|
SendReplyWithMessage (SAM_SESSION_STATUS_I2P_ERROR, msg);
|
||||||
size_t len = sprintf_s (m_Buffer, SAM_SOCKET_BUFFER_SIZE, SAM_SESSION_STATUS_I2P_ERROR, msg.c_str());
|
|
||||||
#else
|
|
||||||
size_t len = snprintf (m_Buffer, SAM_SOCKET_BUFFER_SIZE, SAM_SESSION_STATUS_I2P_ERROR, msg.c_str());
|
|
||||||
#endif
|
|
||||||
SendMessageReply (m_Buffer, len, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SAMSocket::SendStreamI2PError(const std::string & msg)
|
void SAMSocket::SendStreamI2PError(const std::string & msg)
|
||||||
{
|
{
|
||||||
LogPrint (eLogError, "SAM: Stream I2P error: ", msg);
|
LogPrint (eLogError, "SAM: Stream I2P error: ", msg);
|
||||||
#ifdef _MSC_VER
|
SendReplyWithMessage (SAM_STREAM_STATUS_I2P_ERROR, msg);
|
||||||
size_t len = sprintf_s (m_Buffer, SAM_SOCKET_BUFFER_SIZE, SAM_STREAM_STATUS_I2P_ERROR, msg.c_str());
|
|
||||||
#else
|
|
||||||
size_t len = snprintf (m_Buffer, SAM_SOCKET_BUFFER_SIZE, SAM_STREAM_STATUS_I2P_ERROR, msg.c_str());
|
|
||||||
#endif
|
|
||||||
SendMessageReply (m_Buffer, len, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SAMSocket::SendStreamCantReachPeer(const std::string & msg)
|
||||||
|
{
|
||||||
|
SendReplyWithMessage (SAM_STREAM_STATUS_CANT_REACH_PEER, msg);
|
||||||
|
}
|
||||||
|
|
||||||
void SAMSocket::HandleNamingLookupLeaseSetRequestComplete (std::shared_ptr<i2p::data::LeaseSet> leaseSet, std::string name)
|
void SAMSocket::HandleNamingLookupLeaseSetRequestComplete (std::shared_ptr<i2p::data::LeaseSet> leaseSet, std::string name)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2023, The PurpleI2P Project
|
* Copyright (c) 2013-2024, The PurpleI2P Project
|
||||||
*
|
*
|
||||||
* This file is part of Purple i2pd project and licensed under BSD3
|
* This file is part of Purple i2pd project and licensed under BSD3
|
||||||
*
|
*
|
||||||
|
@ -51,7 +51,7 @@ namespace client
|
||||||
const char SAM_STREAM_STATUS_OK[] = "STREAM STATUS RESULT=OK\n";
|
const char SAM_STREAM_STATUS_OK[] = "STREAM STATUS RESULT=OK\n";
|
||||||
const char SAM_STREAM_STATUS_INVALID_ID[] = "STREAM STATUS RESULT=INVALID_ID\n";
|
const char SAM_STREAM_STATUS_INVALID_ID[] = "STREAM STATUS RESULT=INVALID_ID\n";
|
||||||
const char SAM_STREAM_STATUS_INVALID_KEY[] = "STREAM STATUS RESULT=INVALID_KEY\n";
|
const char SAM_STREAM_STATUS_INVALID_KEY[] = "STREAM STATUS RESULT=INVALID_KEY\n";
|
||||||
const char SAM_STREAM_STATUS_CANT_REACH_PEER[] = "STREAM STATUS RESULT=CANT_REACH_PEER\n";
|
const char SAM_STREAM_STATUS_CANT_REACH_PEER[] = "STREAM STATUS RESULT=CANT_REACH_PEER MESSAGE=\"%s\"\n";
|
||||||
const char SAM_STREAM_STATUS_I2P_ERROR[] = "STREAM STATUS RESULT=I2P_ERROR MESSAGE=\"%s\"\n";
|
const char SAM_STREAM_STATUS_I2P_ERROR[] = "STREAM STATUS RESULT=I2P_ERROR MESSAGE=\"%s\"\n";
|
||||||
const char SAM_STREAM_ACCEPT[] = "STREAM ACCEPT";
|
const char SAM_STREAM_ACCEPT[] = "STREAM ACCEPT";
|
||||||
const char SAM_STREAM_FORWARD[] = "STREAM FORWARD";
|
const char SAM_STREAM_FORWARD[] = "STREAM FORWARD";
|
||||||
|
@ -144,8 +144,10 @@ namespace client
|
||||||
void ProcessNamingLookup (char * buf, size_t len);
|
void ProcessNamingLookup (char * buf, size_t len);
|
||||||
void ProcessSessionAdd (char * buf, size_t len);
|
void ProcessSessionAdd (char * buf, size_t len);
|
||||||
void ProcessSessionRemove (char * buf, size_t len);
|
void ProcessSessionRemove (char * buf, size_t len);
|
||||||
|
void SendReplyWithMessage (const char * reply, const std::string & msg);
|
||||||
void SendSessionI2PError(const std::string & msg);
|
void SendSessionI2PError(const std::string & msg);
|
||||||
void SendStreamI2PError(const std::string & msg);
|
void SendStreamI2PError(const std::string & msg);
|
||||||
|
void SendStreamCantReachPeer(const std::string & msg);
|
||||||
size_t ProcessDatagramSend (char * buf, size_t len, const char * data); // from SAM 1.0
|
size_t ProcessDatagramSend (char * buf, size_t len, const char * data); // from SAM 1.0
|
||||||
void ExtractParams (char * buf, std::map<std::string, std::string>& params);
|
void ExtractParams (char * buf, std::map<std::string, std::string>& params);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue