Bladeren bron

*** empty log message ***

Mike Goslin 25 jaren geleden
bovenliggende
commit
97641032d7
2 gewijzigde bestanden met toevoegingen van 86 en 34 verwijderingen
  1. 75 18
      panda/src/downloader/downloadDb.cxx
  2. 11 16
      panda/src/downloader/downloadDb.h

+ 75 - 18
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<PT(MultifileRecord)>::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;
+}

+ 11 - 16
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>
 MultifileRecord is a Vector<FileRecord>
 */
 
 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<PT(FileRecord)> FileRecords;
@@ -206,10 +197,14 @@ public:
   typedef vector<unsigned long> vector_ulong;
   typedef map<int, vector_ulong> 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) {