#
#
# patch "ChangeLog"
# from [36ddfbc60c098baecae82e3be37bb02055100506]
# to [716872b35fcc3a87de33228f50cfc9661f6844d1]
#
# patch "netcmd.cc"
# from [5a63ccd88ddb02cf5853e13ce3fff6ea20851a53]
# to [da3773c93069c0834ce0b3caf34020305dd7d8b2]
#
# patch "netcmd.hh"
# from [22664387cea0916b87288113ec5b559c2c49eda5]
# to [e290b45f5acb01bfe181832d4750275e05b2f98f]
#
============================================================
--- ChangeLog 36ddfbc60c098baecae82e3be37bb02055100506
+++ ChangeLog 716872b35fcc3a87de33228f50cfc9661f6844d1
@@ -1,3 +1,11 @@
+2006-02-24 Timothy Brownawell
+
+ * netcmd.cc: Ignore protocol version field on usher_cmd packets. It
+ should now be possible to use an usher to redirect connections based
+ on netsync version.
+ * netcmd.hh: Remove unused netcmd::get_version() and
+ unused/unimplemented netcmd::netcmd(u8 version).
+
2006-02-12 Nathaniel Smith
* netsync.cc (serve_connections): Revert garbage that I
============================================================
--- netcmd.cc 5a63ccd88ddb02cf5853e13ce3fff6ea20851a53
+++ netcmd.cc da3773c93069c0834ce0b3caf34020305dd7d8b2
@@ -88,15 +88,6 @@
return false;
u8 extracted_ver = extract_datum_lsb(inbuf, pos, "netcmd protocol number");
- if (extracted_ver != version)
- throw bad_decode(F("protocol version mismatch: wanted '%d' got '%d'\n"
- "%s")
- % widen(version)
- % widen(extracted_ver)
- % ((version < extracted_ver)
- ? _("the remote side has a newer, incompatible version of monotone")
- : _("the remote side has an older, incompatible version of monotone")));
- version = extracted_ver;
u8 cmd_byte = extract_datum_lsb(inbuf, pos, "netcmd code");
switch (cmd_byte)
@@ -115,8 +106,21 @@
cmd_code = static_cast(cmd_byte);
break;
default:
- throw bad_decode(F("unknown netcmd code 0x%x") % widen(cmd_byte));
+ // if the versions don't match, we will throw the more descriptive
+ // error immediately after this switch.
+ if (extracted_ver == version)
+ throw bad_decode(F("unknown netcmd code 0x%x")
+ % widen(cmd_byte));
}
+ // Ignore the version on usher_cmd packets.
+ if (extracted_ver != version && cmd_code != usher_cmd)
+ throw bad_decode(F("protocol version mismatch: wanted '%d' got '%d'\n"
+ "%s")
+ % widen(version)
+ % widen(extracted_ver)
+ % ((version < extracted_ver)
+ ? _("the remote side has a newer, incompatible version of monotone")
+ : _("the remote side has an older, incompatible version of monotone")));
// check to see if we have even enough bytes for a complete uleb128
size_t payload_len = 0;
============================================================
--- netcmd.hh 22664387cea0916b87288113ec5b559c2c49eda5
+++ netcmd.hh e290b45f5acb01bfe181832d4750275e05b2f98f
@@ -69,9 +69,7 @@
std::string payload;
public:
netcmd();
- netcmd(u8 _version);
netcmd_code get_cmd_code() const {return cmd_code;}
- u8 get_version() const {return version;}
size_t encoded_size();
bool operator==(netcmd const & other) const;