From 0ad0c09511a04ebe837f2acb859d47f2aa4e038a Mon Sep 17 00:00:00 2001 From: Antonin Kral Date: Fri, 24 Sep 2010 19:01:03 +0200 Subject: Imported Upstream version 1.6.3 --- util/message.h | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'util/message.h') diff --git a/util/message.h b/util/message.h index 13f31df..203ad83 100644 --- a/util/message.h +++ b/util/message.h @@ -30,7 +30,7 @@ namespace mongo { class PiggyBackData; typedef AtomicUInt MSGID; - class Listener { + class Listener : boost::noncopyable { public: Listener(const string &ip, int p, bool logConnect=true ) : _port(p), _ip(ip), _logConnect(logConnect), _elapsedTime(0){ } virtual ~Listener() { @@ -74,7 +74,7 @@ namespace mongo { static const Listener* _timeTracker; }; - class AbstractMessagingPort { + class AbstractMessagingPort : boost::noncopyable { public: virtual ~AbstractMessagingPort() { } virtual void reply(Message& received, Message& response, MSGID responseTo) = 0; // like the reply below, but doesn't rely on received.data still being available @@ -86,6 +86,7 @@ namespace mongo { virtual int getClientId(){ int x = remotePort(); x = x << 16; + x |= ( ( 0xFF0 & (long long)this ) >> 8 ); // lowest byte in pointer often meaningless return x; } }; @@ -135,6 +136,11 @@ namespace mongo { int _timeout; int _logLevel; // passed to log() when logging errors + static void closeAllSockets(unsigned tagMask = 0xffffffff); + + /* ports can be tagged with various classes. see closeAllSockets(tag). defaults to 0. */ + unsigned tag; + friend class PiggyBackData; }; @@ -169,6 +175,30 @@ namespace mongo { return ""; } } + + inline bool opIsWrite( int op ){ + switch ( op ){ + + case 0: + case opReply: + case dbMsg: + case dbQuery: + case dbGetMore: + case dbKillCursors: + return false; + + case dbUpdate: + case dbInsert: + case dbDelete: + return false; + + default: + PRINT(op); + assert(0); + return ""; + } + + } #pragma pack(1) /* see http://www.mongodb.org/display/DOCS/Mongo+Wire+Protocol -- cgit v1.2.3