mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-31 00:34:20 +00:00
handle DEST GENERATE
This commit is contained in:
parent
34cb17afb1
commit
ba96288438
44
SAM.cpp
44
SAM.cpp
@ -1,4 +1,5 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include "base64.h"
|
#include "base64.h"
|
||||||
#include "Identity.h"
|
#include "Identity.h"
|
||||||
@ -160,31 +161,36 @@ namespace stream
|
|||||||
*eol = 0;
|
*eol = 0;
|
||||||
char * separator = strchr (m_Buffer, ' ');
|
char * separator = strchr (m_Buffer, ' ');
|
||||||
if (separator)
|
if (separator)
|
||||||
separator = strchr (separator + 1, ' ');
|
{
|
||||||
if (separator)
|
separator = strchr (separator + 1, ' ');
|
||||||
{
|
if (separator)
|
||||||
*separator = 0;
|
*separator = 0;
|
||||||
|
else
|
||||||
|
separator = eol;
|
||||||
|
|
||||||
if (!strcmp (m_Buffer, SAM_SESSION_CREATE))
|
if (!strcmp (m_Buffer, SAM_SESSION_CREATE))
|
||||||
ProcessSessionCreate (separator + 1, bytes_transferred - (separator - m_Buffer) - 1);
|
ProcessSessionCreate (separator + 1, bytes_transferred - (separator - m_Buffer) - 1);
|
||||||
else if (!strcmp (m_Buffer, SAM_STREAM_CONNECT))
|
else if (!strcmp (m_Buffer, SAM_STREAM_CONNECT))
|
||||||
ProcessStreamConnect (separator + 1, bytes_transferred - (separator - m_Buffer) - 1);
|
ProcessStreamConnect (separator + 1, bytes_transferred - (separator - m_Buffer) - 1);
|
||||||
else if (!strcmp (m_Buffer, SAM_STREAM_ACCEPT))
|
else if (!strcmp (m_Buffer, SAM_STREAM_ACCEPT))
|
||||||
ProcessStreamAccept (separator + 1, bytes_transferred - (separator - m_Buffer) - 1);
|
ProcessStreamAccept (separator + 1, bytes_transferred - (separator - m_Buffer) - 1);
|
||||||
|
else if (!strcmp (m_Buffer, SAM_DEST_GENERATE))
|
||||||
|
ProcessDestGenerate ();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LogPrint ("SAM unexpected message ", m_Buffer);
|
LogPrint ("SAM unexpected message ", m_Buffer);
|
||||||
Terminate ();
|
Terminate ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LogPrint ("SAM malformed message");
|
LogPrint ("SAM malformed message ", m_Buffer);
|
||||||
Terminate ();
|
Terminate ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LogPrint ("SAM malformed message");
|
LogPrint ("SAM malformed message ", m_Buffer);
|
||||||
Terminate ();
|
Terminate ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -277,6 +283,28 @@ namespace stream
|
|||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SAMSocket::ProcessDestGenerate ()
|
||||||
|
{
|
||||||
|
LogPrint ("SAM dest generate");
|
||||||
|
auto localDestination = CreateNewLocalDestination ();
|
||||||
|
if (localDestination)
|
||||||
|
{
|
||||||
|
uint8_t buf[1024];
|
||||||
|
char priv[1024], pub[1024];
|
||||||
|
size_t l = localDestination->GetPrivateKeys ().ToBuffer (buf, 1024);
|
||||||
|
size_t l1 = i2p::data::ByteStreamToBase64 (buf, l, priv, 1024);
|
||||||
|
priv[l1] = 0;
|
||||||
|
|
||||||
|
l = localDestination->GetIdentity ().ToBuffer (buf, 1024);
|
||||||
|
l1 = i2p::data::ByteStreamToBase64 (buf, l, pub, 1024);
|
||||||
|
pub[l1] = 0;
|
||||||
|
size_t len = snprintf (m_Buffer, SAM_SOCKET_BUFFER_SIZE, SAM_DEST_REPLY, pub, priv);
|
||||||
|
SendMessageReply (m_Buffer, len, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
SendMessageReply (SAM_DEST_REPLY_I2P_ERROR, strlen(SAM_DEST_REPLY_I2P_ERROR), true);
|
||||||
|
}
|
||||||
|
|
||||||
void SAMSocket::ExtractParams (char * buf, size_t len, std::map<std::string, std::string>& params)
|
void SAMSocket::ExtractParams (char * buf, size_t len, std::map<std::string, std::string>& params)
|
||||||
{
|
{
|
||||||
while (char * separator = strchr (buf, ' '))
|
while (char * separator = strchr (buf, ' '))
|
||||||
|
4
SAM.h
4
SAM.h
@ -26,6 +26,9 @@ namespace stream
|
|||||||
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\n";
|
||||||
const char SAM_STREAM_STATUS_I2P_ERROR[] = "STREAM STATUS RESULT=I2P_ERROR\n";
|
const char SAM_STREAM_STATUS_I2P_ERROR[] = "STREAM STATUS RESULT=I2P_ERROR\n";
|
||||||
const char SAM_STREAM_ACCEPT[] = "STREAM ACCEPT";
|
const char SAM_STREAM_ACCEPT[] = "STREAM ACCEPT";
|
||||||
|
const char SAM_DEST_GENERATE[] = "DEST GENERATE";
|
||||||
|
const char SAM_DEST_REPLY[] = "DEST REPLY PUB=%s PRIV=%s\n";
|
||||||
|
const char SAM_DEST_REPLY_I2P_ERROR[] = "DEST REPLY RESULT=I2P_ERROR\n";
|
||||||
const char SAM_PARAM_STYLE[] = "STYLE";
|
const char SAM_PARAM_STYLE[] = "STYLE";
|
||||||
const char SAM_PARAM_ID[] = "ID";
|
const char SAM_PARAM_ID[] = "ID";
|
||||||
const char SAM_PARAM_SILENT[] = "SILENT";
|
const char SAM_PARAM_SILENT[] = "SILENT";
|
||||||
@ -72,6 +75,7 @@ namespace stream
|
|||||||
void ProcessSessionCreate (char * buf, size_t len);
|
void ProcessSessionCreate (char * buf, size_t len);
|
||||||
void ProcessStreamConnect (char * buf, size_t len);
|
void ProcessStreamConnect (char * buf, size_t len);
|
||||||
void ProcessStreamAccept (char * buf, size_t len);
|
void ProcessStreamAccept (char * buf, size_t len);
|
||||||
|
void ProcessDestGenerate ();
|
||||||
void ExtractParams (char * buf, size_t len, std::map<std::string, std::string>& params);
|
void ExtractParams (char * buf, size_t len, std::map<std::string, std::string>& params);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -742,7 +742,10 @@ namespace stream
|
|||||||
{
|
{
|
||||||
auto it = m_Destinations.find (keys.GetPublic ().GetIdentHash ());
|
auto it = m_Destinations.find (keys.GetPublic ().GetIdentHash ());
|
||||||
if (it != m_Destinations.end ())
|
if (it != m_Destinations.end ())
|
||||||
|
{
|
||||||
|
LogPrint ("Local destination ", keys.GetPublic ().GetIdentHash ().ToBase32 (), ".b32.i2p exists");
|
||||||
return it->second;
|
return it->second;
|
||||||
|
}
|
||||||
auto localDestination = new StreamingDestination (m_Service, keys, isPublic);
|
auto localDestination = new StreamingDestination (m_Service, keys, isPublic);
|
||||||
m_Destinations[keys.GetPublic ().GetIdentHash ()] = localDestination;
|
m_Destinations[keys.GetPublic ().GetIdentHash ()] = localDestination;
|
||||||
return localDestination;
|
return localDestination;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user