aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/init.cpp7
-rw-r--r--src/net.cpp28
-rw-r--r--src/net.h11
-rw-r--r--src/protocol.cpp1
4 files changed, 42 insertions, 5 deletions
diff --git a/src/init.cpp b/src/init.cpp
index 48fd5ae97f..1eee4d2470 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -3,11 +3,12 @@
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#include "init.h"
+#include "main.h"
#include "txdb.h"
#include "walletdb.h"
#include "bitcoinrpc.h"
#include "net.h"
-#include "init.h"
#include "util.h"
#include "ui_interface.h"
#include "checkpoints.h"
@@ -569,6 +570,10 @@ bool AppInit2(boost::thread_group& threadGroup)
// ********************************************************* Step 6: network initialization
+ SetProcessMessagesHandler(ProcessMessages);
+ SetSendMessagesHandler(SendMessages);
+ SetStartShutdownHandler(StartShutdown);
+
int nSocksVersion = GetArg("-socks", 5);
if (nSocksVersion != 4 && nSocksVersion != 5)
return InitError(strprintf(_("Unknown -socks proxy version requested: %i"), nSocksVersion));
diff --git a/src/net.cpp b/src/net.cpp
index 7a1fcc5033..5932f5f8e3 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -5,7 +5,7 @@
#include "db.h"
#include "net.h"
-#include "init.h"
+#include "main.h"
#include "addrman.h"
#include "ui_interface.h"
#include "script.h"
@@ -68,6 +68,28 @@ CCriticalSection cs_vAddedNodes;
static CSemaphore *semOutbound = NULL;
+//
+// Handlers that need to be registered
+//
+static ProcessMessagesHandler fnProcessMessages = NULL;
+static SendMessagesHandler fnSendMessages = NULL;
+static StartShutdownHandler fnStartShutdown = NULL;
+
+void SetProcessMessagesHandler(ProcessMessagesHandler handler)
+{
+ fnProcessMessages = handler;
+}
+
+void SetSendMessagesHandler(SendMessagesHandler handler)
+{
+ fnSendMessages = handler;
+}
+
+void SetStartShutdownHandler(StartShutdownHandler handler)
+{
+ fnStartShutdown = handler;
+}
+
void AddOneShot(string strDest)
{
LOCK(cs_vOneShots);
@@ -1632,8 +1654,8 @@ void ThreadMessageHandler()
// Send messages
{
TRY_LOCK(pnode->cs_vSend, lockSend);
- if (lockSend)
- SendMessages(pnode, pnode == pnodeTrickle);
+ if (lockSend && fnSendMessages)
+ fnSendMessages(pnode, pnode == pnodeTrickle);
}
boost::this_thread::interruption_point();
}
diff --git a/src/net.h b/src/net.h
index 6f7bea9394..1c8c99aa3b 100644
--- a/src/net.h
+++ b/src/net.h
@@ -45,6 +45,17 @@ void StartNode(boost::thread_group& threadGroup);
bool StopNode();
void SocketSendData(CNode *pnode);
+//
+// Handlers that require registration
+//
+typedef bool (*ProcessMessagesHandler)(CNode* pfrom);
+typedef bool (*SendMessagesHandler)(CNode* pto, bool fSendTrickle);
+typedef void (*StartShutdownHandler)();
+
+void SetProcessMessagesHandler(ProcessMessagesHandler handler);
+void SetSendMessagesHandler(SendMessagesHandler handler);
+void SetStartShutdownHandler(StartShutdownHandler handler);
+
enum
{
LOCAL_NONE, // unknown
diff --git a/src/protocol.cpp b/src/protocol.cpp
index 88bbe49afd..1e22467a33 100644
--- a/src/protocol.cpp
+++ b/src/protocol.cpp
@@ -6,7 +6,6 @@
#include "protocol.h"
#include "util.h"
#include "netbase.h"
-#include "main.h"
#ifndef WIN32
# include <arpa/inet.h>