mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 08:00:38 +03:00
Merge pull request #4 from orignal/master
Merge pull request from orignal/master
This commit is contained in:
commit
a5776b064b
@ -33,7 +33,7 @@ namespace i2p
|
||||
i2p::proxy::HTTPProxy *httpProxy;
|
||||
};
|
||||
|
||||
Daemon_Singleton::Daemon_Singleton() : d(*new Daemon_Singleton_Private()), running(1) {};
|
||||
Daemon_Singleton::Daemon_Singleton() : running(1), d(*new Daemon_Singleton_Private()) {};
|
||||
Daemon_Singleton::~Daemon_Singleton() {
|
||||
delete &d;
|
||||
};
|
||||
|
@ -1,5 +1,4 @@
|
||||
#include <boost/bind.hpp>
|
||||
#include <boost/bind/protect.hpp>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include "base64.h"
|
||||
#include "Log.h"
|
||||
@ -388,8 +387,8 @@ namespace util
|
||||
{
|
||||
if (m_Stream)
|
||||
m_Stream->AsyncReceive (boost::asio::buffer (m_StreamBuffer, 8192),
|
||||
boost::protect (boost::bind (&HTTPConnection::HandleStreamReceive, this,
|
||||
boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)),
|
||||
boost::bind (&HTTPConnection::HandleStreamReceive, this,
|
||||
boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred),
|
||||
45); // 45 seconds timeout
|
||||
}
|
||||
|
||||
|
@ -40,6 +40,12 @@ namespace data
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool IdentHash::FromBase32(const std::string& s)
|
||||
{
|
||||
size_t count = Base32ToByteStream(s.c_str(), s.length(), m_Hash, sizeof(m_Hash));
|
||||
return count == sizeof(m_Hash);
|
||||
}
|
||||
|
||||
Keys CreateRandomKeys ()
|
||||
{
|
||||
Keys keys;
|
||||
|
@ -73,7 +73,9 @@ namespace data
|
||||
|
||||
bool operator== (const IdentHash& other) const { return !memcmp (m_Hash, other.m_Hash, 32); };
|
||||
bool operator< (const IdentHash& other) const { return memcmp (m_Hash, other.m_Hash, 32) < 0; };
|
||||
|
||||
|
||||
bool FromBase32(const std::string&);
|
||||
|
||||
private:
|
||||
|
||||
uint8_t m_Hash[32];
|
||||
@ -106,7 +108,7 @@ namespace data
|
||||
public:
|
||||
|
||||
RoutingDestination (): m_ElGamalEncryption (nullptr) {};
|
||||
virtual ~RoutingDestination () { if (m_ElGamalEncryption) delete m_ElGamalEncryption; };
|
||||
virtual ~RoutingDestination () { delete m_ElGamalEncryption; };
|
||||
|
||||
virtual const IdentHash& GetIdentHash () const = 0;
|
||||
virtual const uint8_t * GetEncryptionPublicKey () const = 0;
|
||||
|
15
Log.cpp
15
Log.cpp
@ -2,14 +2,19 @@
|
||||
|
||||
#include "Daemon.h"
|
||||
|
||||
i2p::util::MsgQueue<LogMsg> g_Log;
|
||||
Log g_Log;
|
||||
|
||||
void LogMsg::Process()
|
||||
{
|
||||
if (Daemon.isLogging == 1 && Daemon.logfile.is_open())
|
||||
{
|
||||
Daemon.logfile << s.str();
|
||||
Daemon.logfile.flush();
|
||||
}
|
||||
|
||||
output << s.str();
|
||||
}
|
||||
}
|
||||
|
||||
void Log::Flush ()
|
||||
{
|
||||
if (Daemon.isLogging == 1 && Daemon.logfile.is_open())
|
||||
Daemon.logfile.flush();
|
||||
}
|
||||
|
||||
|
14
Log.h
14
Log.h
@ -3,6 +3,7 @@
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <functional>
|
||||
#include "Queue.h"
|
||||
|
||||
struct LogMsg
|
||||
@ -15,7 +16,18 @@ struct LogMsg
|
||||
void Process();
|
||||
};
|
||||
|
||||
extern i2p::util::MsgQueue<LogMsg> g_Log;
|
||||
class Log: public i2p::util::MsgQueue<LogMsg>
|
||||
{
|
||||
public:
|
||||
|
||||
Log () { SetOnEmpty (std::bind (&Log::Flush, this)); };
|
||||
|
||||
private:
|
||||
|
||||
void Flush ();
|
||||
};
|
||||
|
||||
extern Log g_Log;
|
||||
|
||||
template<typename TValue>
|
||||
void LogPrint (std::stringstream& s, TValue arg)
|
||||
|
36
Queue.h
36
Queue.h
@ -5,6 +5,7 @@
|
||||
#include <mutex>
|
||||
#include <thread>
|
||||
#include <condition_variable>
|
||||
#include <functional>
|
||||
|
||||
namespace i2p
|
||||
{
|
||||
@ -46,6 +47,12 @@ namespace util
|
||||
return el;
|
||||
}
|
||||
|
||||
void Wait ()
|
||||
{
|
||||
std::unique_lock<std::mutex> l(m_QueueMutex);
|
||||
m_NonEmpty.wait (l);
|
||||
}
|
||||
|
||||
bool Wait (int sec, int usec)
|
||||
{
|
||||
std::unique_lock<std::mutex> l(m_QueueMutex);
|
||||
@ -98,27 +105,40 @@ namespace util
|
||||
{
|
||||
public:
|
||||
|
||||
MsgQueue (): m_Thread (std::bind (&MsgQueue<Msg>::Run, this)) , running(1) {};
|
||||
typedef std::function<void()> OnEmpty;
|
||||
|
||||
MsgQueue (): m_IsRunning (true), m_Thread (std::bind (&MsgQueue<Msg>::Run, this)) {};
|
||||
void Stop()
|
||||
{
|
||||
running = 0;
|
||||
m_IsRunning = false;
|
||||
Queue<Msg>::WakeUp ();
|
||||
m_Thread.join();
|
||||
}
|
||||
|
||||
void SetOnEmpty (OnEmpty const & e) { m_OnEmpty = e; };
|
||||
|
||||
private:
|
||||
|
||||
void Run ()
|
||||
{
|
||||
Msg * msg = nullptr;
|
||||
while ((msg = Queue<Msg>::GetNext ()) != nullptr && running)
|
||||
while (m_IsRunning)
|
||||
{
|
||||
msg->Process ();
|
||||
delete msg;
|
||||
while (Msg * msg = Queue<Msg>::Get ())
|
||||
{
|
||||
msg->Process ();
|
||||
delete msg;
|
||||
}
|
||||
if (m_OnEmpty != nullptr)
|
||||
m_OnEmpty ();
|
||||
Queue<Msg>::Wait ();
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
std::thread m_Thread;
|
||||
volatile int running;
|
||||
|
||||
bool m_IsRunning;
|
||||
std::thread m_Thread;
|
||||
OnEmpty m_OnEmpty;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -283,11 +283,13 @@ namespace stream
|
||||
bool Stream::SendPacket (const uint8_t * buf, size_t len)
|
||||
{
|
||||
const I2NPMessage * leaseSet = nullptr;
|
||||
|
||||
if (m_LeaseSetUpdated)
|
||||
{
|
||||
leaseSet = m_LocalDestination->GetLeaseSet ();
|
||||
m_LeaseSetUpdated = false;
|
||||
}
|
||||
|
||||
I2NPMessage * msg = i2p::garlic::routing.WrapMessage (m_RemoteLeaseSet,
|
||||
CreateDataMessage (this, buf, len), leaseSet);
|
||||
if (!m_OutboundTunnel || m_OutboundTunnel->IsFailed ())
|
||||
|
@ -214,8 +214,8 @@ namespace stream
|
||||
}
|
||||
}
|
||||
m_ReceiveTimer.expires_from_now (boost::posix_time::seconds(timeout));
|
||||
m_ReceiveTimer.async_wait (boost::bind (&Stream::HandleReceiveTimer<Buffer, ReceiveHandler>,
|
||||
this, boost::asio::placeholders::error, buffer, handler));
|
||||
m_ReceiveTimer.async_wait ([=](const boost::system::error_code& ecode)
|
||||
{ this->HandleReceiveTimer (ecode, buffer, handler); });
|
||||
}
|
||||
|
||||
template<typename Buffer, typename ReceiveHandler>
|
||||
|
@ -21,6 +21,7 @@ set ( SOURCES
|
||||
NTCPSession.cpp
|
||||
RouterContext.cpp
|
||||
SSU.cpp
|
||||
SSUData.cpp
|
||||
TransitTunnel.cpp
|
||||
Tunnel.cpp
|
||||
TunnelGateway.cpp
|
||||
@ -37,6 +38,7 @@ set ( SOURCES
|
||||
TunnelEndpoint.cpp
|
||||
TunnelPool.cpp
|
||||
util.cpp
|
||||
Daemon.cpp
|
||||
)
|
||||
|
||||
set ( HEADERS
|
||||
@ -48,6 +50,7 @@ set ( HEADERS
|
||||
NTCPSession.h
|
||||
RouterContext.h
|
||||
SSU.h
|
||||
SSUData.h
|
||||
TransitTunnel.h
|
||||
Tunnel.h
|
||||
TunnelGateway.h
|
||||
@ -64,8 +67,17 @@ set ( HEADERS
|
||||
TunnelEndpoint.h
|
||||
TunnelPool.h
|
||||
util.h
|
||||
Daemon.h
|
||||
)
|
||||
|
||||
if (WIN32)
|
||||
list (APPEND SOURCES DeamonWin32.cpp)
|
||||
else ()
|
||||
list (APPEND SOURCES DaemonLinux.cpp)
|
||||
endif ()
|
||||
|
||||
|
||||
|
||||
source_group ("Header Files" FILES ${HEADERS})
|
||||
source_group ("Source Files" FILES ${SOURCES})
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user