diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-08-25 11:55:30 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-08-25 11:55:30 +0000 |
| commit | 15101a89a058263c43e19d9f0eb6e55ebba15672 (patch) | |
| tree | 6d93f79d8ea1dee05dbd6cea77ff2682c310871d /src/DHTRoutingTableDeserializer.cc | |
| parent | d9668e2c23bacaf8494c77f64a9e6330a50799dd (diff) | |
2008-08-25 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Bump up version number of dht.dat file to 3. In version 3
format, time
is stored in 64bit, network byte order.
New build can load old format(version 2) but it saves the file
in new
format. It means once you used new build, your dht.dat becomes
incompatible with older build.
* src/DHTRoutingTableDeserializer.cc
* src/DHTRoutingTableSerializer.cc
* test/DHTRoutingTableSerializerTest.cc
Diffstat (limited to 'src/DHTRoutingTableDeserializer.cc')
| -rw-r--r-- | src/DHTRoutingTableDeserializer.cc | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/DHTRoutingTableDeserializer.cc b/src/DHTRoutingTableDeserializer.cc index db84f7f7..48b8a2fb 100644 --- a/src/DHTRoutingTableDeserializer.cc +++ b/src/DHTRoutingTableDeserializer.cc @@ -40,6 +40,7 @@ #include "Logger.h" #include "a2netcompat.h" #include "StringFormat.h" +#include "Util.h" #include <cerrno> #include <cstring> #include <istream> @@ -73,24 +74,45 @@ void DHTRoutingTableDeserializer::deserialize(std::istream& in) header[2] = 0x02; // version header[6] = 0; - header[7] = 0x02; + header[7] = 0x03; + + char headerCompat[8]; + memset(headerCompat, 0, sizeof(headerCompat)); + // magic + headerCompat[0] = 0xa1; + headerCompat[1] = 0xa2; + // format ID + headerCompat[2] = 0x02; + // version + headerCompat[6] = 0; + headerCompat[7] = 0x02; char zero[8]; memset(zero, 0, sizeof(zero)); + int version; char buf[26]; // header in.read(buf, 8); - if(memcmp(header, buf, 8) != 0) { + if(memcmp(header, buf, 8) == 0) { + version = 3; + } else if(memcmp(headerCompat, buf, 8) == 0) { + version = 2; + } else { throw DlAbortEx (StringFormat("Failed to load DHT routing table. cause:%s", "bad header").str()); } // time - in.read(buf, 4); - _serializedTime.setTimeInSec(ntohl(*reinterpret_cast<uint32_t*>(buf))); - // 4bytes reserved - in.read(buf, 4); + if(version == 2) { + in.read(buf, 4); + _serializedTime.setTimeInSec(ntohl(*reinterpret_cast<uint32_t*>(buf))); + // 4bytes reserved + in.read(buf, 4); + } else { + in.read(buf, 8); + _serializedTime.setTimeInSec(ntoh64(*reinterpret_cast<uint64_t*>(buf))); + } // localnode // 8bytes reserved |
