mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-24 10:14:13 +00:00
commit
487df84b90
@ -203,7 +203,7 @@ namespace client
|
|||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------
|
//---------------------------------------------------------------------
|
||||||
AddressBook::AddressBook (): m_Storage(new AddressBookFilesystemStorage), m_IsLoaded (false), m_IsDownloading (false),
|
AddressBook::AddressBook (): m_Storage(nullptr), m_IsLoaded (false), m_IsDownloading (false),
|
||||||
m_DefaultSubscription (nullptr), m_SubscriptionsUpdateTimer (nullptr)
|
m_DefaultSubscription (nullptr), m_SubscriptionsUpdateTimer (nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -215,6 +215,8 @@ namespace client
|
|||||||
|
|
||||||
void AddressBook::Start ()
|
void AddressBook::Start ()
|
||||||
{
|
{
|
||||||
|
if (!m_Storage)
|
||||||
|
m_Storage = new AddressBookFilesystemStorage;
|
||||||
m_Storage->Init();
|
m_Storage->Init();
|
||||||
LoadHosts (); /* try storage, then hosts.txt, then download */
|
LoadHosts (); /* try storage, then hosts.txt, then download */
|
||||||
StartSubscriptions ();
|
StartSubscriptions ();
|
||||||
|
@ -82,13 +82,13 @@ namespace proxy {
|
|||||||
void HTTPReqHandler::AsyncSockRead()
|
void HTTPReqHandler::AsyncSockRead()
|
||||||
{
|
{
|
||||||
LogPrint(eLogDebug, "HTTPProxy: async sock read");
|
LogPrint(eLogDebug, "HTTPProxy: async sock read");
|
||||||
if(m_sock) {
|
if (!m_sock) {
|
||||||
m_sock->async_receive(boost::asio::buffer(m_http_buff, http_buffer_size),
|
|
||||||
std::bind(&HTTPReqHandler::HandleSockRecv, shared_from_this(),
|
|
||||||
std::placeholders::_1, std::placeholders::_2));
|
|
||||||
} else {
|
|
||||||
LogPrint(eLogError, "HTTPProxy: no socket for read");
|
LogPrint(eLogError, "HTTPProxy: no socket for read");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
m_sock->async_receive(boost::asio::buffer(m_http_buff, http_buffer_size),
|
||||||
|
std::bind(&HTTPReqHandler::HandleSockRecv, shared_from_this(),
|
||||||
|
std::placeholders::_1, std::placeholders::_2));
|
||||||
}
|
}
|
||||||
|
|
||||||
void HTTPReqHandler::Terminate() {
|
void HTTPReqHandler::Terminate() {
|
||||||
@ -335,20 +335,18 @@ namespace proxy {
|
|||||||
|
|
||||||
void HTTPReqHandler::HandleStreamRequestComplete (std::shared_ptr<i2p::stream::Stream> stream)
|
void HTTPReqHandler::HandleStreamRequestComplete (std::shared_ptr<i2p::stream::Stream> stream)
|
||||||
{
|
{
|
||||||
if (stream)
|
if (!stream) {
|
||||||
{
|
|
||||||
if (Kill()) return;
|
|
||||||
LogPrint (eLogInfo, "HTTPProxy: New I2PTunnel connection");
|
|
||||||
auto connection = std::make_shared<i2p::client::I2PTunnelConnection>(GetOwner(), m_sock, stream);
|
|
||||||
GetOwner()->AddHandler (connection);
|
|
||||||
connection->I2PConnect (reinterpret_cast<const uint8_t*>(m_request.data()), m_request.size());
|
|
||||||
Done(shared_from_this());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LogPrint (eLogError, "HTTPProxy: error when creating the stream, check the previous warnings for more info");
|
LogPrint (eLogError, "HTTPProxy: error when creating the stream, check the previous warnings for more info");
|
||||||
HTTPRequestFailed("error when creating the stream, check logs");
|
HTTPRequestFailed("error when creating the stream, check logs");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
if (Kill())
|
||||||
|
return;
|
||||||
|
LogPrint (eLogDebug, "HTTPProxy: New I2PTunnel connection");
|
||||||
|
auto connection = std::make_shared<i2p::client::I2PTunnelConnection>(GetOwner(), m_sock, stream);
|
||||||
|
GetOwner()->AddHandler (connection);
|
||||||
|
connection->I2PConnect (reinterpret_cast<const uint8_t*>(m_request.data()), m_request.size());
|
||||||
|
Done (shared_from_this());
|
||||||
}
|
}
|
||||||
|
|
||||||
HTTPProxy::HTTPProxy(const std::string& address, int port, std::shared_ptr<i2p::client::ClientDestination> localDestination):
|
HTTPProxy::HTTPProxy(const std::string& address, int port, std::shared_ptr<i2p::client::ClientDestination> localDestination):
|
||||||
|
1
Makefile
1
Makefile
@ -11,6 +11,7 @@ include filelist.mk
|
|||||||
|
|
||||||
USE_AESNI := yes
|
USE_AESNI := yes
|
||||||
USE_STATIC := no
|
USE_STATIC := no
|
||||||
|
USE_UPNP := no
|
||||||
|
|
||||||
ifeq ($(UNAME),Darwin)
|
ifeq ($(UNAME),Darwin)
|
||||||
DAEMON_SRC += DaemonLinux.cpp
|
DAEMON_SRC += DaemonLinux.cpp
|
||||||
|
@ -8,7 +8,7 @@ INCFLAGS = -I${SSLROOT}/include -I${BOOSTROOT}/include
|
|||||||
LDFLAGS = -L${SSLROOT}/lib -L${BOOSTROOT}/lib
|
LDFLAGS = -L${SSLROOT}/lib -L${BOOSTROOT}/lib
|
||||||
LDLIBS = -lz -lcrypto -lssl -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread
|
LDLIBS = -lz -lcrypto -lssl -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread
|
||||||
|
|
||||||
ifeq ($(USE_UPNP),1)
|
ifeq ($(USE_UPNP),yes)
|
||||||
LDFLAGS += -ldl
|
LDFLAGS += -ldl
|
||||||
CXXFLAGS += -DUSE_UPNP
|
CXXFLAGS += -DUSE_UPNP
|
||||||
endif
|
endif
|
||||||
|
@ -43,7 +43,7 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# UPNP Support (miniupnpc 1.5 or 1.6)
|
# UPNP Support (miniupnpc 1.5 or 1.6)
|
||||||
ifeq ($(USE_UPNP),1)
|
ifeq ($(USE_UPNP),yes)
|
||||||
LDFLAGS += -lminiupnpc
|
LDFLAGS += -lminiupnpc
|
||||||
CXXFLAGS += -DUSE_UPNP
|
CXXFLAGS += -DUSE_UPNP
|
||||||
endif
|
endif
|
||||||
|
@ -9,7 +9,7 @@ LDFLAGS = -Wl,-rpath,/usr/local/lib \
|
|||||||
-L/usr/local/lib
|
-L/usr/local/lib
|
||||||
|
|
||||||
# UPNP Support
|
# UPNP Support
|
||||||
ifeq ($(USE_UPNP),1)
|
ifeq ($(USE_UPNP),yes)
|
||||||
CXXFLAGS += -DUSE_UPNP -DMINIUPNP_STATICLIB
|
CXXFLAGS += -DUSE_UPNP -DMINIUPNP_STATICLIB
|
||||||
LDLIBS = -Wl,-Bstatic -lminiupnpc
|
LDLIBS = -Wl,-Bstatic -lminiupnpc
|
||||||
endif
|
endif
|
||||||
@ -37,7 +37,7 @@ ifeq ($(USE_WIN32_APP), yes)
|
|||||||
DAEMON_OBJS += $(patsubst %.rc,obj/%.o,$(DAEMON_RC))
|
DAEMON_OBJS += $(patsubst %.rc,obj/%.o,$(DAEMON_RC))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(USE_AESNI),1)
|
ifeq ($(USE_AESNI),yes)
|
||||||
CPU_FLAGS = -maes -DAESNI
|
CPU_FLAGS = -maes -DAESNI
|
||||||
else
|
else
|
||||||
CPU_FLAGS = -msse
|
CPU_FLAGS = -msse
|
||||||
|
@ -5,7 +5,7 @@ INCFLAGS = -I/usr/local/include -I/usr/local/ssl/include
|
|||||||
LDFLAGS = -Wl,-rpath,/usr/local/lib -L/usr/local/lib -L/usr/local/ssl/lib
|
LDFLAGS = -Wl,-rpath,/usr/local/lib -L/usr/local/lib -L/usr/local/ssl/lib
|
||||||
LDLIBS = -lz -lcrypto -lssl -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread
|
LDLIBS = -lz -lcrypto -lssl -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread
|
||||||
|
|
||||||
ifeq ($(USE_UPNP),1)
|
ifeq ($(USE_UPNP),yes)
|
||||||
LDFLAGS += -ldl
|
LDFLAGS += -ldl
|
||||||
CXXFLAGS += -DUSE_UPNP
|
CXXFLAGS += -DUSE_UPNP
|
||||||
endif
|
endif
|
||||||
|
@ -430,7 +430,7 @@ namespace transport
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LogPrint (eLogInfo, "NTCP: Server session from ", m_Socket.remote_endpoint (), " connected");
|
LogPrint (eLogDebug, "NTCP: Server session from ", m_Socket.remote_endpoint (), " connected");
|
||||||
m_Server.AddNTCPSession (shared_from_this ());
|
m_Server.AddNTCPSession (shared_from_this ());
|
||||||
|
|
||||||
Connected ();
|
Connected ();
|
||||||
@ -942,7 +942,7 @@ namespace transport
|
|||||||
{
|
{
|
||||||
if (ecode)
|
if (ecode)
|
||||||
{
|
{
|
||||||
LogPrint (eLogError, "NTCP: Connect error: ", ecode.message ());
|
LogPrint (eLogError, "NTCP: Can't connect to ", conn->GetSocket ().remote_endpoint (), ": ", ecode.message ());
|
||||||
if (ecode != boost::asio::error::operation_aborted)
|
if (ecode != boost::asio::error::operation_aborted)
|
||||||
i2p::data::netdb.SetUnreachable (conn->GetRemoteIdentity ()->GetIdentHash (), true);
|
i2p::data::netdb.SetUnreachable (conn->GetRemoteIdentity ()->GetIdentHash (), true);
|
||||||
conn->Terminate ();
|
conn->Terminate ();
|
||||||
|
@ -671,7 +671,7 @@ namespace data
|
|||||||
|
|
||||||
if (!replyMsg)
|
if (!replyMsg)
|
||||||
{
|
{
|
||||||
LogPrint (eLogWarning, "NetDb: Requested ", key, " not found. ", numExcluded, " excluded");
|
LogPrint (eLogWarning, "NetDb: Requested ", key, " not found, ", numExcluded, " peers excluded");
|
||||||
// find or cleate response
|
// find or cleate response
|
||||||
std::vector<IdentHash> closestFloodfills;
|
std::vector<IdentHash> closestFloodfills;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
8
SSU.cpp
8
SSU.cpp
@ -231,7 +231,7 @@ namespace transport
|
|||||||
session = std::make_shared<SSUSession> (*this, packet->from);
|
session = std::make_shared<SSUSession> (*this, packet->from);
|
||||||
session->WaitForConnect ();
|
session->WaitForConnect ();
|
||||||
(*sessions)[packet->from] = session;
|
(*sessions)[packet->from] = session;
|
||||||
LogPrint (eLogInfo, "SSU: new session from ", packet->from.address ().to_string (), ":", packet->from.port (), " created");
|
LogPrint (eLogDebug, "SSU: new session from ", packet->from.address ().to_string (), ":", packet->from.port (), " created");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
session->ProcessNextMessage (packet->buf, packet->len, packet->from);
|
session->ProcessNextMessage (packet->buf, packet->len, packet->from);
|
||||||
@ -312,7 +312,7 @@ namespace transport
|
|||||||
auto session = std::make_shared<SSUSession> (*this, remoteEndpoint, router, peerTest);
|
auto session = std::make_shared<SSUSession> (*this, remoteEndpoint, router, peerTest);
|
||||||
sessions[remoteEndpoint] = session;
|
sessions[remoteEndpoint] = session;
|
||||||
// connect
|
// connect
|
||||||
LogPrint (eLogInfo, "SSU: Creating new session to [", i2p::data::GetIdentHashAbbreviation (router->GetIdentHash ()), "] ",
|
LogPrint (eLogDebug, "SSU: Creating new session to [", i2p::data::GetIdentHashAbbreviation (router->GetIdentHash ()), "] ",
|
||||||
remoteEndpoint.address ().to_string (), ":", remoteEndpoint.port ());
|
remoteEndpoint.address ().to_string (), ":", remoteEndpoint.port ());
|
||||||
session->Connect ();
|
session->Connect ();
|
||||||
}
|
}
|
||||||
@ -364,10 +364,10 @@ namespace transport
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (introducerSession) // session found
|
if (introducerSession) // session found
|
||||||
LogPrint (eLogInfo, "SSU: Session to introducer already exists");
|
LogPrint (eLogWarning, "SSU: Session to introducer already exists");
|
||||||
else // create new
|
else // create new
|
||||||
{
|
{
|
||||||
LogPrint (eLogInfo, "SSU: Creating new session to introducer");
|
LogPrint (eLogDebug, "SSU: Creating new session to introducer ", introducer->iHost);
|
||||||
boost::asio::ip::udp::endpoint introducerEndpoint (introducer->iHost, introducer->iPort);
|
boost::asio::ip::udp::endpoint introducerEndpoint (introducer->iHost, introducer->iPort);
|
||||||
introducerSession = std::make_shared<SSUSession> (*this, introducerEndpoint, router);
|
introducerSession = std::make_shared<SSUSession> (*this, introducerEndpoint, router);
|
||||||
m_Sessions[introducerEndpoint] = introducerSession;
|
m_Sessions[introducerEndpoint] = introducerSession;
|
||||||
|
@ -241,7 +241,7 @@ namespace transport
|
|||||||
if (!msg->IsExpired ())
|
if (!msg->IsExpired ())
|
||||||
m_Handler.PutNextMessage (msg);
|
m_Handler.PutNextMessage (msg);
|
||||||
else
|
else
|
||||||
LogPrint (eLogInfo, "SSU: message expired");
|
LogPrint (eLogDebug, "SSU: message expired");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
LogPrint (eLogWarning, "SSU: Message ", msgID, " already received");
|
LogPrint (eLogWarning, "SSU: Message ", msgID, " already received");
|
||||||
|
@ -814,7 +814,7 @@ namespace transport
|
|||||||
if (!ecode)
|
if (!ecode)
|
||||||
{
|
{
|
||||||
// timeout expired
|
// timeout expired
|
||||||
LogPrint (eLogWarning, "SSU: session was not established after ", SSU_CONNECT_TIMEOUT, " seconds");
|
LogPrint (eLogWarning, "SSU: session with ", m_RemoteEndpoint, " was not established after ", SSU_CONNECT_TIMEOUT, " seconds");
|
||||||
Failed ();
|
Failed ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -891,7 +891,7 @@ namespace transport
|
|||||||
{
|
{
|
||||||
if (ecode != boost::asio::error::operation_aborted)
|
if (ecode != boost::asio::error::operation_aborted)
|
||||||
{
|
{
|
||||||
LogPrint (eLogWarning, "SSU: no activity for ", SSU_TERMINATION_TIMEOUT, " seconds");
|
LogPrint (eLogWarning, "SSU: no activity with ", m_RemoteEndpoint, " for ", SSU_TERMINATION_TIMEOUT, " seconds");
|
||||||
Failed ();
|
Failed ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ namespace tunnel
|
|||||||
{
|
{
|
||||||
if (isEndpoint)
|
if (isEndpoint)
|
||||||
{
|
{
|
||||||
LogPrint (eLogInfo, "TransitTunnel: endpoint ", receiveTunnelID, " created");
|
LogPrint (eLogDebug, "TransitTunnel: endpoint ", receiveTunnelID, " created");
|
||||||
return std::make_shared<TransitTunnelEndpoint> (receiveTunnelID, nextIdent, nextTunnelID, layerKey, ivKey);
|
return std::make_shared<TransitTunnelEndpoint> (receiveTunnelID, nextIdent, nextTunnelID, layerKey, ivKey);
|
||||||
}
|
}
|
||||||
else if (isGateway)
|
else if (isGateway)
|
||||||
@ -102,7 +102,7 @@ namespace tunnel
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LogPrint (eLogInfo, "TransitTunnel: ", receiveTunnelID, "->", nextTunnelID, " created");
|
LogPrint (eLogDebug, "TransitTunnel: ", receiveTunnelID, "->", nextTunnelID, " created");
|
||||||
return std::make_shared<TransitTunnelParticipant> (receiveTunnelID, nextIdent, nextTunnelID, layerKey, ivKey);
|
return std::make_shared<TransitTunnelParticipant> (receiveTunnelID, nextIdent, nextTunnelID, layerKey, ivKey);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
1
debian/control
vendored
1
debian/control
vendored
@ -8,6 +8,7 @@ Build-Depends: debhelper (>= 9.0.0), dpkg-dev (>= 1.16.1~),
|
|||||||
libboost-date-time-dev,
|
libboost-date-time-dev,
|
||||||
libboost-filesystem-dev,
|
libboost-filesystem-dev,
|
||||||
libboost-program-options-dev,
|
libboost-program-options-dev,
|
||||||
|
libminiupnpc-dev,
|
||||||
libssl-dev
|
libssl-dev
|
||||||
Standards-Version: 3.9.3
|
Standards-Version: 3.9.3
|
||||||
Homepage: https://github.com/PurpleI2P/i2pd
|
Homepage: https://github.com/PurpleI2P/i2pd
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
diff --git a/Makefile b/Makefile
|
diff --git a/Makefile b/Makefile
|
||||||
index 2e86fd8..c1037af 100644
|
index fe8ae7e..fc8abda 100644
|
||||||
--- a/Makefile
|
--- a/Makefile
|
||||||
+++ b/Makefile
|
+++ b/Makefile
|
||||||
@@ -9,7 +9,7 @@ DEPS := obj/make.dep
|
@@ -9,9 +9,9 @@ DEPS := obj/make.dep
|
||||||
|
|
||||||
include filelist.mk
|
include filelist.mk
|
||||||
|
|
||||||
-USE_AESNI := yes
|
-USE_AESNI := yes
|
||||||
+USE_AESNI := no
|
+USE_AESNI := no
|
||||||
USE_STATIC := no
|
USE_STATIC := no
|
||||||
|
-USE_UPNP := no
|
||||||
|
+USE_UPNP := yes
|
||||||
|
|
||||||
ifeq ($(UNAME),Darwin)
|
ifeq ($(UNAME),Darwin)
|
||||||
|
DAEMON_SRC += DaemonLinux.cpp
|
2
debian/patches/series
vendored
2
debian/patches/series
vendored
@ -1 +1 @@
|
|||||||
0001-disable-aesni-by-default.patch
|
01-tune-build-opts.patch
|
||||||
|
@ -22,7 +22,6 @@ int main() {
|
|||||||
assert(req->version == "HTTP/1.0");
|
assert(req->version == "HTTP/1.0");
|
||||||
assert(req->method == "GET");
|
assert(req->method == "GET");
|
||||||
assert(req->uri == "/");
|
assert(req->uri == "/");
|
||||||
assert(req->host == "inr.i2p");
|
|
||||||
assert(req->headers.size() == 3);
|
assert(req->headers.size() == 3);
|
||||||
assert(req->headers.count("Host") == 1);
|
assert(req->headers.count("Host") == 1);
|
||||||
assert(req->headers.count("Accept") == 1);
|
assert(req->headers.count("Accept") == 1);
|
||||||
@ -42,7 +41,6 @@ int main() {
|
|||||||
assert(req->version == "HTTP/1.0");
|
assert(req->version == "HTTP/1.0");
|
||||||
assert(req->method == "GET");
|
assert(req->method == "GET");
|
||||||
assert(req->uri == "/");
|
assert(req->uri == "/");
|
||||||
assert(req->host == "");
|
|
||||||
assert(req->headers.size() == 0);
|
assert(req->headers.size() == 0);
|
||||||
delete req;
|
delete req;
|
||||||
|
|
||||||
@ -52,7 +50,7 @@ int main() {
|
|||||||
"\r\n";
|
"\r\n";
|
||||||
len = strlen(buf);
|
len = strlen(buf);
|
||||||
req = new HTTPReq;
|
req = new HTTPReq;
|
||||||
assert((ret = req->parse(buf, len)) == -1); /* no host header */
|
assert((ret = req->parse(buf, len)) > 0);
|
||||||
delete req;
|
delete req;
|
||||||
|
|
||||||
/* test: parsing incomplete request */
|
/* test: parsing incomplete request */
|
||||||
@ -76,7 +74,6 @@ int main() {
|
|||||||
assert((ret = req->parse(buf, len)) == len); /* no host header */
|
assert((ret = req->parse(buf, len)) == len); /* no host header */
|
||||||
assert(req->method == "GET");
|
assert(req->method == "GET");
|
||||||
assert(req->uri == "http://inr.i2p");
|
assert(req->uri == "http://inr.i2p");
|
||||||
assert(req->host == "stats.i2p");
|
|
||||||
assert(req->headers.size() == 3);
|
assert(req->headers.size() == 3);
|
||||||
assert(req->headers.count("Host") == 1);
|
assert(req->headers.count("Host") == 1);
|
||||||
assert(req->headers.count("Accept") == 1);
|
assert(req->headers.count("Accept") == 1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user