mirror of
https://github.com/GOSTSec/gostcoin
synced 2025-03-13 05:41:11 +00:00
built-in I2P
This commit is contained in:
parent
adbeeb89e6
commit
ea8190feec
55
src/net.cpp
55
src/net.cpp
@ -10,6 +10,7 @@
|
|||||||
#include "ui_interface.h"
|
#include "ui_interface.h"
|
||||||
#include "script.h"
|
#include "script.h"
|
||||||
#include "irc.h"
|
#include "irc.h"
|
||||||
|
#include "Log.h"
|
||||||
#include "i2p.h"
|
#include "i2p.h"
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@ -689,6 +690,36 @@ bool CNode::ReceiveMsgBytes(const char *pch, unsigned int nBytes)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CNode::I2PStreamReceive ()
|
||||||
|
{
|
||||||
|
if (i2pStream)
|
||||||
|
{
|
||||||
|
auto buf = std::make_shared<I2PCNodeBuffer>();
|
||||||
|
i2pStream->AsyncReceive (boost::asio::buffer (*buf),
|
||||||
|
std::bind (&CNode::HandleI2PStreamReceive, this,
|
||||||
|
std::placeholders::_1, std::placeholders::_2, buf), 600); // idle time is 10 minutes
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CNode::HandleI2PStreamReceive (const boost::system::error_code& ecode, size_t bytes_transferred, std::shared_ptr<I2PCNodeBuffer> buf)
|
||||||
|
{
|
||||||
|
LOCK(cs_vRecvMsg);
|
||||||
|
if (ecode)
|
||||||
|
{
|
||||||
|
LogPrint (eLogInfo, "I2P stream receive error: ", ecode.message ());
|
||||||
|
CloseSocketDisconnect();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!ReceiveMsgBytes((const char *)buf->data (), bytes_transferred))
|
||||||
|
CloseSocketDisconnect();
|
||||||
|
nLastRecv = GetTime();
|
||||||
|
nRecvBytes += bytes_transferred;
|
||||||
|
}
|
||||||
|
if (!fDisconnect)
|
||||||
|
I2PStreamReceive ();
|
||||||
|
}
|
||||||
|
|
||||||
void AddIncomingConnection(SOCKET hSocket, const CAddress& addr)
|
void AddIncomingConnection(SOCKET hSocket, const CAddress& addr)
|
||||||
{
|
{
|
||||||
int nInbound = 0;
|
int nInbound = 0;
|
||||||
@ -732,6 +763,30 @@ void AddIncomingConnection(SOCKET hSocket, const CAddress& addr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AddIncomingI2PStream (std::shared_ptr<i2p::stream::Stream> stream)
|
||||||
|
{
|
||||||
|
if (!stream) return;
|
||||||
|
CAddress addr;
|
||||||
|
addr.SetSpecial (stream->GetRemoteIdentity ()->ToBase64 ());
|
||||||
|
int nInbound = 0;
|
||||||
|
{
|
||||||
|
LOCK(cs_vNodes);
|
||||||
|
BOOST_FOREACH(CNode* pnode, vNodes)
|
||||||
|
if (pnode->fInbound)
|
||||||
|
nInbound++;
|
||||||
|
}
|
||||||
|
printf("accepted connection %s\n", addr.ToString().c_str());
|
||||||
|
CNode* pnode = new CNode(INVALID_SOCKET, addr, "", true);
|
||||||
|
pnode->SetI2PStream (stream);
|
||||||
|
pnode->I2PStreamReceive ();
|
||||||
|
pnode->AddRef();
|
||||||
|
{
|
||||||
|
LOCK(cs_vNodes);
|
||||||
|
vNodes.push_back(pnode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int CNetMessage::readHeader(const char *pch, unsigned int nBytes)
|
int CNetMessage::readHeader(const char *pch, unsigned int nBytes)
|
||||||
{
|
{
|
||||||
// copy data to temporary parsing buffer
|
// copy data to temporary parsing buffer
|
||||||
|
19
src/net.h
19
src/net.h
@ -21,6 +21,7 @@
|
|||||||
#include "addrman.h"
|
#include "addrman.h"
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
#include "bloom.h"
|
#include "bloom.h"
|
||||||
|
#include "api.h" // i2pd
|
||||||
|
|
||||||
class CNode;
|
class CNode;
|
||||||
class CBlockIndex;
|
class CBlockIndex;
|
||||||
@ -50,6 +51,7 @@ bool BindListenNativeI2P(SOCKET& hSocket);
|
|||||||
bool IsI2POnly();
|
bool IsI2POnly();
|
||||||
bool IsI2PEnabled();
|
bool IsI2PEnabled();
|
||||||
|
|
||||||
|
void AddIncomingI2PStream (std::shared_ptr<i2p::stream::Stream> stream);
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -155,8 +157,8 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const size_t I2P_CNODE_BUFFER_SIZE = 0x10000; // 64k
|
||||||
|
typedef std::array<uint8_t, I2P_CNODE_BUFFER_SIZE> I2PCNodeBuffer;
|
||||||
|
|
||||||
/** Information about a peer */
|
/** Information about a peer */
|
||||||
class CNode
|
class CNode
|
||||||
@ -165,6 +167,8 @@ public:
|
|||||||
// socket
|
// socket
|
||||||
uint64 nServices;
|
uint64 nServices;
|
||||||
SOCKET hSocket;
|
SOCKET hSocket;
|
||||||
|
std::shared_ptr<i2p::stream::Stream> i2pStream; // non-null means built-in I2P
|
||||||
|
|
||||||
CDataStream ssSend;
|
CDataStream ssSend;
|
||||||
size_t nSendSize; // total size of all vSendMsg entries
|
size_t nSendSize; // total size of all vSendMsg entries
|
||||||
size_t nSendOffset; // offset inside the first vSendMsg already sent
|
size_t nSendOffset; // offset inside the first vSendMsg already sent
|
||||||
@ -291,6 +295,14 @@ private:
|
|||||||
int nSendStreamType;
|
int nSendStreamType;
|
||||||
int nRecvStreamType;
|
int nRecvStreamType;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
void SetI2PStream (std::shared_ptr<i2p::stream::Stream> s)
|
||||||
|
{
|
||||||
|
i2pStream = s;
|
||||||
|
if (i2pStream && !fInbound)
|
||||||
|
PushVersion();
|
||||||
|
}
|
||||||
|
|
||||||
void SetSendStreamType(int nType)
|
void SetSendStreamType(int nType)
|
||||||
{
|
{
|
||||||
nSendStreamType = nType;
|
nSendStreamType = nType;
|
||||||
@ -668,6 +680,9 @@ public:
|
|||||||
static bool IsBanned(CNetAddr ip);
|
static bool IsBanned(CNetAddr ip);
|
||||||
bool Misbehaving(int howmuch); // 1 == a little, 100 == a lot
|
bool Misbehaving(int howmuch); // 1 == a little, 100 == a lot
|
||||||
void copyStats(CNodeStats &stats);
|
void copyStats(CNodeStats &stats);
|
||||||
|
|
||||||
|
void I2PStreamReceive ();
|
||||||
|
void HandleI2PStreamReceive (const boost::system::error_code& ecode, size_t bytes_transferred, std::shared_ptr<I2PCNodeBuffer> buf);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user