open_toontown_panda3d/direct/src/plugin/p3dPatchfileReader.h

73 lines
1.8 KiB
C++

/**
* PANDA 3D SOFTWARE
* Copyright (c) Carnegie Mellon University. All rights reserved.
*
* All use of this software is subject to the terms of the revised BSD
* license. You should have received a copy of this license along
* with this source code in a file named "LICENSE."
*
* @file p3dPatchfileReader.h
* @author drose
* @date 2009-09-27
*/
#ifndef P3DPATCHFILEREADER_H
#define P3DPATCHFILEREADER_H
#include "p3d_plugin_common.h"
#include "p3dInstanceManager.h" // for openssl
#include "fileSpec.h"
/**
* A read-only implementation of Panda's patchfile format, for applying
* patches.
*
* This object assumes that the sourcefile has been already validated against
* its md5 hash, and does not validate it again. It *does* verify that the
* md5 hash in source and target match those read in the patchfile header; and
* it verifies the md5 hash on the target after completion.
*/
class P3DPatchfileReader {
public:
P3DPatchfileReader(const std::string &package_dir,
const FileSpec &patchfile,
const FileSpec &source,
const FileSpec &target);
~P3DPatchfileReader();
bool open_read();
inline bool is_open() const;
bool step();
inline size_t get_bytes_written() const;
inline bool get_success() const;
void close();
private:
bool copy_bytes(std::istream &in, size_t copy_byte_count);
inline unsigned int read_uint16();
inline unsigned int read_uint32();
inline int read_int32();
private:
std::string _package_dir;
FileSpec _patchfile;
FileSpec _source;
FileSpec _target;
std::string _output_pathname;
ifstream _patch_in;
ifstream _source_in;
ofstream _target_out;
bool _is_open;
size_t _target_length;
size_t _bytes_written;
bool _success;
};
#include "p3dPatchfileReader.I"
#endif