# # # 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;