mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-31 09:04:14 +00:00
add more websocket events
This commit is contained in:
parent
34f090662a
commit
93eca799dd
20
Tunnel.cpp
20
Tunnel.cpp
@ -29,12 +29,14 @@ namespace tunnel
|
|||||||
|
|
||||||
void Tunnel::Build (uint32_t replyMsgID, std::shared_ptr<OutboundTunnel> outboundTunnel)
|
void Tunnel::Build (uint32_t replyMsgID, std::shared_ptr<OutboundTunnel> outboundTunnel)
|
||||||
{
|
{
|
||||||
|
#ifdef WITH_EVENTS
|
||||||
|
std::string peers = i2p::context.GetIdentity()->GetIdentHash().ToBase64();
|
||||||
|
#endif
|
||||||
auto numHops = m_Config->GetNumHops ();
|
auto numHops = m_Config->GetNumHops ();
|
||||||
int numRecords = numHops <= STANDARD_NUM_RECORDS ? STANDARD_NUM_RECORDS : numHops;
|
int numRecords = numHops <= STANDARD_NUM_RECORDS ? STANDARD_NUM_RECORDS : numHops;
|
||||||
auto msg = NewI2NPShortMessage ();
|
auto msg = NewI2NPShortMessage ();
|
||||||
*msg->GetPayload () = numRecords;
|
*msg->GetPayload () = numRecords;
|
||||||
msg->len += numRecords*TUNNEL_BUILD_RECORD_SIZE + 1;
|
msg->len += numRecords*TUNNEL_BUILD_RECORD_SIZE + 1;
|
||||||
|
|
||||||
// shuffle records
|
// shuffle records
|
||||||
std::vector<int> recordIndicies;
|
std::vector<int> recordIndicies;
|
||||||
for (int i = 0; i < numRecords; i++) recordIndicies.push_back(i);
|
for (int i = 0; i < numRecords; i++) recordIndicies.push_back(i);
|
||||||
@ -55,8 +57,15 @@ namespace tunnel
|
|||||||
hop->CreateBuildRequestRecord (records + idx*TUNNEL_BUILD_RECORD_SIZE, msgID);
|
hop->CreateBuildRequestRecord (records + idx*TUNNEL_BUILD_RECORD_SIZE, msgID);
|
||||||
hop->recordIndex = idx;
|
hop->recordIndex = idx;
|
||||||
i++;
|
i++;
|
||||||
|
#ifdef WITH_EVENTS
|
||||||
|
peers += ":" + hop->ident->GetIdentHash().ToBase64();
|
||||||
|
#endif
|
||||||
hop = hop->next;
|
hop = hop->next;
|
||||||
}
|
}
|
||||||
|
#ifdef WITH_EVENTS
|
||||||
|
EmitTunnelEvent("tunnel.build", this, peers);
|
||||||
|
#endif
|
||||||
|
|
||||||
// fill up fake records with random data
|
// fill up fake records with random data
|
||||||
for (int i = numHops; i < numRecords; i++)
|
for (int i = numHops; i < numRecords; i++)
|
||||||
{
|
{
|
||||||
@ -182,6 +191,13 @@ namespace tunnel
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Tunnel::SetState(TunnelState state)
|
||||||
|
{
|
||||||
|
m_State = state;
|
||||||
|
EmitTunnelEvent("tunnel.state", this, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Tunnel::PrintHops (std::stringstream& s) const
|
void Tunnel::PrintHops (std::stringstream& s) const
|
||||||
{
|
{
|
||||||
// hops are in inverted order, we must print in direct order
|
// hops are in inverted order, we must print in direct order
|
||||||
@ -778,7 +794,7 @@ namespace tunnel
|
|||||||
{
|
{
|
||||||
if (config)
|
if (config)
|
||||||
return CreateTunnel<InboundTunnel>(config, outboundTunnel);
|
return CreateTunnel<InboundTunnel>(config, outboundTunnel);
|
||||||
else
|
else
|
||||||
return CreateZeroHopsInboundTunnel ();
|
return CreateZeroHopsInboundTunnel ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
29
Tunnel.h
29
Tunnel.h
@ -19,11 +19,38 @@
|
|||||||
#include "TunnelGateway.h"
|
#include "TunnelGateway.h"
|
||||||
#include "TunnelBase.h"
|
#include "TunnelBase.h"
|
||||||
#include "I2NPProtocol.h"
|
#include "I2NPProtocol.h"
|
||||||
|
#include "Event.h"
|
||||||
|
|
||||||
namespace i2p
|
namespace i2p
|
||||||
{
|
{
|
||||||
namespace tunnel
|
namespace tunnel
|
||||||
{
|
{
|
||||||
|
|
||||||
|
template<typename TunnelT>
|
||||||
|
static void EmitTunnelEvent(const std::string & ev, const TunnelT & t)
|
||||||
|
{
|
||||||
|
#ifdef WITH_EVENTS
|
||||||
|
EmitEvent({{"type", ev}, {"tid", std::to_string(t->GetTunnelID())}});
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename TunnelT, typename T>
|
||||||
|
static void EmitTunnelEvent(const std::string & ev, TunnelT * t, const T & val)
|
||||||
|
{
|
||||||
|
#ifdef WITH_EVENTS
|
||||||
|
EmitEvent({{"type", ev}, {"tid", std::to_string(t->GetTunnelID())}, {"value", std::to_string(val)}, {"inbound", std::to_string(t->IsInbound())}});
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename TunnelT>
|
||||||
|
static void EmitTunnelEvent(const std::string & ev, TunnelT * t, const std::string & val)
|
||||||
|
{
|
||||||
|
#ifdef WITH_EVENTS
|
||||||
|
EmitEvent({{"type", ev}, {"tid", std::to_string(t->GetTunnelID())}, {"value", val}, {"inbound", std::to_string(t->IsInbound())}});
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const int TUNNEL_EXPIRATION_TIMEOUT = 660; // 11 minutes
|
const int TUNNEL_EXPIRATION_TIMEOUT = 660; // 11 minutes
|
||||||
const int TUNNEL_EXPIRATION_THRESHOLD = 60; // 1 minute
|
const int TUNNEL_EXPIRATION_THRESHOLD = 60; // 1 minute
|
||||||
const int TUNNEL_RECREATION_THRESHOLD = 90; // 1.5 minutes
|
const int TUNNEL_RECREATION_THRESHOLD = 90; // 1.5 minutes
|
||||||
@ -62,7 +89,7 @@ namespace tunnel
|
|||||||
std::vector<std::shared_ptr<const i2p::data::IdentityEx> > GetPeers () const;
|
std::vector<std::shared_ptr<const i2p::data::IdentityEx> > GetPeers () const;
|
||||||
std::vector<std::shared_ptr<const i2p::data::IdentityEx> > GetInvertedPeers () const;
|
std::vector<std::shared_ptr<const i2p::data::IdentityEx> > GetInvertedPeers () const;
|
||||||
TunnelState GetState () const { return m_State; };
|
TunnelState GetState () const { return m_State; };
|
||||||
void SetState (TunnelState state) { m_State = state; };
|
void SetState (TunnelState state);
|
||||||
bool IsEstablished () const { return m_State == eTunnelStateEstablished; };
|
bool IsEstablished () const { return m_State == eTunnelStateEstablished; };
|
||||||
bool IsFailed () const { return m_State == eTunnelStateFailed; };
|
bool IsFailed () const { return m_State == eTunnelStateFailed; };
|
||||||
bool IsRecreated () const { return m_IsRecreated; };
|
bool IsRecreated () const { return m_IsRecreated; };
|
||||||
|
@ -8,11 +8,14 @@
|
|||||||
#include "Transports.h"
|
#include "Transports.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
#include "TunnelPool.h"
|
#include "TunnelPool.h"
|
||||||
|
#include "Destination.h"
|
||||||
|
#include "Event.h"
|
||||||
|
|
||||||
namespace i2p
|
namespace i2p
|
||||||
{
|
{
|
||||||
namespace tunnel
|
namespace tunnel
|
||||||
{
|
{
|
||||||
|
|
||||||
TunnelPool::TunnelPool (int numInboundHops, int numOutboundHops, int numInboundTunnels, int numOutboundTunnels):
|
TunnelPool::TunnelPool (int numInboundHops, int numOutboundHops, int numInboundTunnels, int numOutboundTunnels):
|
||||||
m_NumInboundHops (numInboundHops), m_NumOutboundHops (numOutboundHops),
|
m_NumInboundHops (numInboundHops), m_NumOutboundHops (numOutboundHops),
|
||||||
m_NumInboundTunnels (numInboundTunnels), m_NumOutboundTunnels (numOutboundTunnels), m_IsActive (true),
|
m_NumInboundTunnels (numInboundTunnels), m_NumOutboundTunnels (numOutboundTunnels), m_IsActive (true),
|
||||||
@ -67,6 +70,7 @@ namespace tunnel
|
|||||||
{
|
{
|
||||||
if (!m_IsActive) return;
|
if (!m_IsActive) return;
|
||||||
{
|
{
|
||||||
|
EmitTunnelEvent("tunnels.created", createdTunnel);
|
||||||
std::unique_lock<std::mutex> l(m_InboundTunnelsMutex);
|
std::unique_lock<std::mutex> l(m_InboundTunnelsMutex);
|
||||||
m_InboundTunnels.insert (createdTunnel);
|
m_InboundTunnels.insert (createdTunnel);
|
||||||
}
|
}
|
||||||
@ -78,6 +82,8 @@ namespace tunnel
|
|||||||
{
|
{
|
||||||
if (expiredTunnel)
|
if (expiredTunnel)
|
||||||
{
|
{
|
||||||
|
EmitTunnelEvent("tunnels.expired", expiredTunnel);
|
||||||
|
|
||||||
expiredTunnel->SetTunnelPool (nullptr);
|
expiredTunnel->SetTunnelPool (nullptr);
|
||||||
for (auto& it: m_Tests)
|
for (auto& it: m_Tests)
|
||||||
if (it.second.second == expiredTunnel) it.second.second = nullptr;
|
if (it.second.second == expiredTunnel) it.second.second = nullptr;
|
||||||
@ -91,6 +97,7 @@ namespace tunnel
|
|||||||
{
|
{
|
||||||
if (!m_IsActive) return;
|
if (!m_IsActive) return;
|
||||||
{
|
{
|
||||||
|
EmitTunnelEvent("tunnels.created", createdTunnel);
|
||||||
std::unique_lock<std::mutex> l(m_OutboundTunnelsMutex);
|
std::unique_lock<std::mutex> l(m_OutboundTunnelsMutex);
|
||||||
m_OutboundTunnels.insert (createdTunnel);
|
m_OutboundTunnels.insert (createdTunnel);
|
||||||
}
|
}
|
||||||
@ -101,6 +108,8 @@ namespace tunnel
|
|||||||
{
|
{
|
||||||
if (expiredTunnel)
|
if (expiredTunnel)
|
||||||
{
|
{
|
||||||
|
EmitTunnelEvent("tunnels.expired", expiredTunnel);
|
||||||
|
|
||||||
expiredTunnel->SetTunnelPool (nullptr);
|
expiredTunnel->SetTunnelPool (nullptr);
|
||||||
for (auto& it: m_Tests)
|
for (auto& it: m_Tests)
|
||||||
if (it.second.first == expiredTunnel) it.second.first = nullptr;
|
if (it.second.first == expiredTunnel) it.second.first = nullptr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user