summaryrefslogtreecommitdiff
path: root/src/mongo/rpc
diff options
context:
space:
mode:
authorMisha Tyulenev <misha@mongodb.com>2015-11-19 18:01:08 -0500
committerMisha Tyulenev <misha@mongodb.com>2015-11-19 18:17:02 -0500
commit6ff0dce6e092f618f83d73f5a815c2b0cd766bcb (patch)
treec50685fa4fb75b5e23a270630aa914548e93d982 /src/mongo/rpc
parent23245d6bb38a2a2fa2a4266a1527c82d8ca3736f (diff)
downloadmongo-6ff0dce6e092f618f83d73f5a815c2b0cd766bcb.tar.gz
SERVER-20651 do not allow mongos connect to mongod if mongod does not support COMMAND protocol
Diffstat (limited to 'src/mongo/rpc')
-rw-r--r--src/mongo/rpc/protocol.cpp13
-rw-r--r--src/mongo/rpc/protocol.h5
2 files changed, 18 insertions, 0 deletions
diff --git a/src/mongo/rpc/protocol.cpp b/src/mongo/rpc/protocol.cpp
index 5bff4b05e4f..3c3cafb6479 100644
--- a/src/mongo/rpc/protocol.cpp
+++ b/src/mongo/rpc/protocol.cpp
@@ -151,5 +151,18 @@ bool supportsWireVersionForOpCommandInMongod(int minWireVersion, int maxWireVers
(maxWireVersion >= WireVersion::FIND_COMMAND);
}
+ProtocolSet computeProtocolSet(int minWireVersion, int maxWireVersion) {
+ ProtocolSet result = supports::kNone;
+ if (minWireVersion <= maxWireVersion) {
+ if (maxWireVersion >= WireVersion::FIND_COMMAND) {
+ result |= supports::kOpCommandOnly;
+ }
+ if (minWireVersion <= WireVersion::RELEASE_2_4_AND_BEFORE) {
+ result |= supports::kOpQueryOnly;
+ }
+ }
+ return result;
+}
+
} // namespace rpc
} // namespace mongo
diff --git a/src/mongo/rpc/protocol.h b/src/mongo/rpc/protocol.h
index 4efb5e0b833..643351106e0 100644
--- a/src/mongo/rpc/protocol.h
+++ b/src/mongo/rpc/protocol.h
@@ -106,5 +106,10 @@ StatusWith<ProtocolSet> parseProtocolSetFromIsMasterReply(const BSONObj& isMaste
*/
bool supportsWireVersionForOpCommandInMongod(int minWireVersion, int maxWireVersion);
+/**
+ * Computes supported protocols from wire versions.
+ */
+ProtocolSet computeProtocolSet(int minWireVersion, int maxWireVersion);
+
} // namespace rpc
} // namespace mongo