Try continuing service if error is not really bad

This commit is contained in:
Jeff Becker 2017-08-31 09:14:33 -04:00
parent 543566840c
commit 3a6fc64a90
No known key found for this signature in database
GPG key ID: F357B3B42F6F9B05

View file

@ -13,20 +13,20 @@ namespace client
m_LocalDestination (localDestination ? localDestination : m_LocalDestination (localDestination ? localDestination :
i2p::client::context.CreateNewLocalDestination (false, I2P_SERVICE_DEFAULT_KEY_TYPE)), isUpdated (true) i2p::client::context.CreateNewLocalDestination (false, I2P_SERVICE_DEFAULT_KEY_TYPE)), isUpdated (true)
{ {
m_LocalDestination->Acquire (); m_LocalDestination->Acquire ();
} }
I2PService::I2PService (i2p::data::SigningKeyType kt): I2PService::I2PService (i2p::data::SigningKeyType kt):
m_LocalDestination (i2p::client::context.CreateNewLocalDestination (false, kt)), m_LocalDestination (i2p::client::context.CreateNewLocalDestination (false, kt)),
isUpdated (true) isUpdated (true)
{ {
m_LocalDestination->Acquire (); m_LocalDestination->Acquire ();
} }
I2PService::~I2PService () I2PService::~I2PService ()
{ {
ClearHandlers (); ClearHandlers ();
if (m_LocalDestination) m_LocalDestination->Release (); if (m_LocalDestination) m_LocalDestination->Release ();
} }
void I2PService::ClearHandlers () void I2PService::ClearHandlers ()
@ -36,7 +36,7 @@ namespace client
it->Terminate (); it->Terminate ();
m_Handlers.clear(); m_Handlers.clear();
} }
void I2PService::CreateStream (StreamRequestComplete streamRequestComplete, const std::string& dest, int port) { void I2PService::CreateStream (StreamRequestComplete streamRequestComplete, const std::string& dest, int port) {
assert(streamRequestComplete); assert(streamRequestComplete);
i2p::data::IdentHash identHash; i2p::data::IdentHash identHash;
@ -60,7 +60,7 @@ namespace client
{ {
Terminate(); Terminate();
} }
void TCPIPPipe::Start() void TCPIPPipe::Start()
{ {
AsyncReceiveUpstream(); AsyncReceiveUpstream();
@ -84,7 +84,7 @@ namespace client
} }
Done(shared_from_this()); Done(shared_from_this());
} }
void TCPIPPipe::AsyncReceiveUpstream() void TCPIPPipe::AsyncReceiveUpstream()
{ {
if (m_up) { if (m_up) {
@ -132,12 +132,12 @@ namespace client
shared_from_this(), shared_from_this(),
std::placeholders::_1) std::placeholders::_1)
); );
} else { } else {
LogPrint(eLogError, "TCPIPPipe: downstream write: no socket"); LogPrint(eLogError, "TCPIPPipe: downstream write: no socket");
} }
} }
void TCPIPPipe::HandleDownstreamReceived(const boost::system::error_code & ecode, std::size_t bytes_transfered) void TCPIPPipe::HandleDownstreamReceived(const boost::system::error_code & ecode, std::size_t bytes_transfered)
{ {
LogPrint(eLogDebug, "TCPIPPipe: downstream: ", (int) bytes_transfered, " bytes received"); LogPrint(eLogDebug, "TCPIPPipe: downstream: ", (int) bytes_transfered, " bytes received");
@ -162,7 +162,7 @@ namespace client
AsyncReceiveUpstream(); AsyncReceiveUpstream();
} }
} }
void TCPIPPipe::HandleUpstreamWrite(const boost::system::error_code & ecode) { void TCPIPPipe::HandleUpstreamWrite(const boost::system::error_code & ecode) {
if (ecode) { if (ecode) {
LogPrint(eLogError, "TCPIPPipe: upstream write error:" , ecode.message()); LogPrint(eLogError, "TCPIPPipe: upstream write error:" , ecode.message());
@ -172,7 +172,7 @@ namespace client
AsyncReceiveDownstream(); AsyncReceiveDownstream();
} }
} }
void TCPIPPipe::HandleUpstreamReceived(const boost::system::error_code & ecode, std::size_t bytes_transfered) void TCPIPPipe::HandleUpstreamReceived(const boost::system::error_code & ecode, std::size_t bytes_transfered)
{ {
LogPrint(eLogDebug, "TCPIPPipe: upstream ", (int)bytes_transfered, " bytes received"); LogPrint(eLogDebug, "TCPIPPipe: upstream ", (int)bytes_transfered, " bytes received");
@ -187,7 +187,7 @@ namespace client
DownstreamWrite(bytes_transfered); DownstreamWrite(bytes_transfered);
} }
} }
void TCPIPAcceptor::Start () void TCPIPAcceptor::Start ()
{ {
m_Acceptor.reset (new boost::asio::ip::tcp::acceptor (GetService (), m_LocalEndpoint)); m_Acceptor.reset (new boost::asio::ip::tcp::acceptor (GetService (), m_LocalEndpoint));
@ -198,10 +198,10 @@ namespace client
void TCPIPAcceptor::Stop () void TCPIPAcceptor::Stop ()
{ {
if (m_Acceptor) if (m_Acceptor)
{ {
m_Acceptor->close(); m_Acceptor->close();
m_Acceptor.reset (nullptr); m_Acceptor.reset (nullptr);
} }
m_Timer.cancel (); m_Timer.cancel ();
ClearHandlers(); ClearHandlers();
} }
@ -219,19 +219,22 @@ namespace client
{ {
LogPrint(eLogDebug, "I2PService: ", GetName(), " accepted"); LogPrint(eLogDebug, "I2PService: ", GetName(), " accepted");
auto handler = CreateHandler(socket); auto handler = CreateHandler(socket);
if (handler) if (handler)
{ {
AddHandler(handler); AddHandler(handler);
handler->Handle(); handler->Handle();
} }
else else
socket->close(); socket->close();
Accept(); Accept();
} }
else else
{ {
if (ecode != boost::asio::error::operation_aborted) if (ecode != boost::asio::error::operation_aborted)
{
LogPrint (eLogError, "I2PService: ", GetName(), " closing socket on accept because: ", ecode.message ()); LogPrint (eLogError, "I2PService: ", GetName(), " closing socket on accept because: ", ecode.message ());
Accept();
}
} }
} }
} }