From 97641032d7776f3effe8ac44ef85a9729dca4242 Mon Sep 17 00:00:00 2001 From: Mike Goslin Date: Fri, 20 Oct 2000 03:35:28 +0000 Subject: [PATCH] *** empty log message *** --- panda/src/downloader/downloadDb.cxx | 93 +++++++++++++++++++++++------ panda/src/downloader/downloadDb.h | 27 ++++----- 2 files changed, 86 insertions(+), 34 deletions(-) diff --git a/panda/src/downloader/downloadDb.cxx b/panda/src/downloader/downloadDb.cxx index 6255eae773..cbe8f2c190 100644 --- a/panda/src/downloader/downloadDb.cxx +++ b/panda/src/downloader/downloadDb.cxx @@ -177,10 +177,8 @@ client_file_version_correct(string mfname, string filename) const { // Description: //////////////////////////////////////////////////////////////////// bool DownloadDb:: -client_file_hash_correct(string mfname, string filename) const { - Hash client_hash = get_client_file_hash(mfname, filename); - Hash server_hash = get_server_file_hash(mfname, filename); - return (client_hash == server_hash); +client_file_crc_correct(string mfname, string filename) const { + return true; } // Operations on multifiles @@ -246,6 +244,11 @@ read_db(Filename &file) { << file << endl; return db; } + if (!read_version_map(read_stream)) { + downloader_cat.error() + << "DownloadDb::read() - read_version_map() failed: " + << file << endl; + } return db; } @@ -270,6 +273,7 @@ write_db(Filename &file, Db db) { << "Writing to file: " << file << endl; db.write(write_stream); + write_version_map(write_stream); write_stream.close(); return true; } @@ -305,9 +309,9 @@ server_add_multifile(string mfname, Phase phase, Version version, int size, int // Description: //////////////////////////////////////////////////////////////////// void DownloadDb:: -server_add_file(string mfname, string fname, Version version, Hash hash) { +server_add_file(string mfname, string fname, Version version) { // Make the new file record - PT(FileRecord) fr = new FileRecord(fname, version, hash); + PT(FileRecord) fr = new FileRecord(fname, version); // Find the multifile with mfname vector::iterator i = _server_db._mfile_records.begin(); @@ -658,12 +662,9 @@ parse_fr(uchar *start, int size) { PN_int32 fr_name_length = di.get_int32(); fr->_name = di.extract_bytes(fr_name_length); fr->_version = di.get_int32(); - fr->_hash = di.get_int32(); downloader_cat.debug() - << "Parsed file record: " << fr->_name - << " version: " << fr->_version - << " hash: " << fr->_hash << endl; + << "Parsed file record: " << fr->_name << " version: " << fr->_version << endl; // Return the new MultifileRecord return fr; @@ -893,7 +894,6 @@ DownloadDb::FileRecord:: FileRecord(void) { _name = ""; _version = 0; - _hash = 0; } @@ -903,10 +903,9 @@ FileRecord(void) { // Description: //////////////////////////////////////////////////////////////////// DownloadDb::FileRecord:: -FileRecord(string name, Version version, Hash hash) { +FileRecord(string name, Version version) { _name = name; _version = version; - _hash = hash; } //////////////////////////////////////////////////////////////////// @@ -916,9 +915,7 @@ FileRecord(string name, Version version, Hash hash) { //////////////////////////////////////////////////////////////////// void DownloadDb::FileRecord:: output(ostream &out) const { - out << " FileRecord: " << _name - << " version: " << _version - << " hash: " << _hash << endl; + out << " FileRecord: " << _name << " version: " << _version << endl; } //////////////////////////////////////////////////////////////////// @@ -932,6 +929,16 @@ add_version(const Filename &name, ulong hash, int version) { _versions[name_code][version] = hash; } +//////////////////////////////////////////////////////////////////// +// Function: DownloadDb::add_version +// Access: Public +// Description: +//////////////////////////////////////////////////////////////////// +void DownloadDb:: +add_version(int name, ulong hash, int version) { + _versions[name][version] = hash; +} + //////////////////////////////////////////////////////////////////// // Function: DownloadDb::get_version // Access: Public @@ -947,6 +954,56 @@ get_version(const Filename &name, ulong hash) { return -1; } +//////////////////////////////////////////////////////////////////// +// Function: DownloadDb::write_version_map +// Access: Protected +// Description: +//////////////////////////////////////////////////////////////////// +void DownloadDb:: +write_version_map(ofstream &write_stream) { + _master_datagram.clear(); + VersionMap::iterator vmi; + vector_ulong::iterator i; + _master_datagram.add_int32(_versions.size()); + for (vmi = _versions.begin(); vmi != _versions.end(); ++vmi) { + _master_datagram.add_int32((*vmi).first); + _master_datagram.add_int32((*vmi).second.size()); + for (i = (*vmi).second.begin(); i != (*vmi).second.end(); ++i) + _master_datagram.add_uint64((*i)); + } + string msg = _master_datagram.get_message(); + write_stream.write((char *)msg.data(), msg.length()); +} - - +//////////////////////////////////////////////////////////////////// +// Function: DownloadDb::read_version_map +// Access: Protected +// Description: +//////////////////////////////////////////////////////////////////// +bool DownloadDb:: +read_version_map(ifstream &read_stream) { + _master_datagram.clear(); + char *buffer = new char[sizeof(PN_uint64)]; + read_stream.read(buffer, sizeof(PN_int32)); + _master_datagram.append_data(buffer, sizeof(PN_int32)); + DatagramIterator di(_master_datagram); + int num_entries = di.get_int32(); + _master_datagram.clear(); + for (int i = 0; i < num_entries; i++) { + read_stream.read(buffer, 2 * sizeof(PN_int32)); + _master_datagram.append_data(buffer, 2 * sizeof(PN_int32)); + DatagramIterator di2(_master_datagram); + int name = di2.get_int32(); + int length = di2.get_int32(); + for (int j = 0; j < length; j++) { + read_stream.read(buffer, sizeof(PN_uint64)); + _master_datagram.clear(); + _master_datagram.append_data(buffer, sizeof(PN_uint64)); + DatagramIterator di3(_master_datagram); + int hash = di3.get_uint64(); + add_version(name, hash, j); + } + } + delete buffer; + return true; +} diff --git a/panda/src/downloader/downloadDb.h b/panda/src/downloader/downloadDb.h index 605dd5014c..c9c2a0b12b 100644 --- a/panda/src/downloader/downloadDb.h +++ b/panda/src/downloader/downloadDb.h @@ -27,24 +27,20 @@ magic_number number_of_multifiles header_length multifile_name phase version size status num_files - header_length file_name version hash - header_length file_name version hash + header_length file_name version + header_length file_name version header_length multifile_name phase version size status num_files - header_length file_name version hash - header_length file_name version hash + header_length file_name version + header_length file_name version ... ... -Note: the has value will not be valid on the client db. Only -the server db will have the hash value stored - A Db is a Vector MultifileRecord is a Vector */ typedef int Version; -typedef ulong Hash; typedef int Phase; class EXPCL_PANDAEXPRESS DownloadDb { @@ -85,7 +81,6 @@ public: INLINE void set_client_multifile_size(string mfname, int size); INLINE void set_client_multifile_delta_size(string mfname, int size); INLINE int get_server_multifile_size(string mfname) const; - INLINE void set_server_multifile_size(string mfname, int size); INLINE int get_client_multifile_phase(string mfname) const; INLINE int get_server_multifile_phase(string mfname) const; @@ -104,9 +99,6 @@ public: INLINE Version get_server_file_version(string mfname, string fname) const; INLINE void set_client_file_version(string mfname, string fname, Version version); - INLINE Hash get_client_file_hash(string mfname, string fname) const; - INLINE Hash get_server_file_hash(string mfname, string fname) const; - // Check client db against server db bool client_db_current_version(void) const; @@ -117,7 +109,7 @@ public: bool client_multifile_expanded(string mfname) const; bool client_multifile_version_correct(string mfname) const; bool client_file_version_correct(string mfname, string filename) const; - bool client_file_hash_correct(string mfname, string filename) const; + bool client_file_crc_correct(string mfname, string filename) const; // Operations on multifiles void delete_client_multifile(string mfname); @@ -127,18 +119,17 @@ public: // Server side operations to create multifile records void create_new_server_db(); void server_add_multifile(string mfname, Phase phase, Version version, int size, int status); - void server_add_file(string mfname, string fname, Version version, Hash hash); + void server_add_file(string mfname, string fname, Version version); public: class EXPCL_PANDAEXPRESS FileRecord : public ReferenceCount { public: FileRecord(void); - FileRecord(string name, Version version, Hash hash); + FileRecord(string name, Version version); void output(ostream &out) const; string _name; Version _version; - Hash _hash; }; typedef vector FileRecords; @@ -206,10 +197,14 @@ public: typedef vector vector_ulong; typedef map VersionMap; void add_version(const Filename &name, ulong hash, int version); + void add_version(int name, ulong hash, int version); int get_version(const Filename &name, ulong hash); protected: + void write_version_map(ofstream &write_stream); + bool read_version_map(ifstream &read_stream); VersionMap _versions; + Datagram _master_datagram; }; INLINE ostream &operator << (ostream &out, const DownloadDb &dldb) {