have to limit p3d_plugin to C API, which means no default arguments allowed

This commit is contained in:
David Rose 2009-12-09 18:55:14 +00:00
parent 157a072acb
commit ff93698ce6
6 changed files with 38 additions and 9 deletions

View File

@ -51,6 +51,20 @@ reset_verify_contents() {
} }
////////////////////////////////////////////////////////////////////
// Function: P3DInstanceManager::get_api_version
// Access: Public
// Description: Returns the api_version number which was passed to
// P3D_initialize(). Client code may use this to
// determine how to interpret parameters to various
// functions whose interface may have changed over
// different versions.
////////////////////////////////////////////////////////////////////
inline int P3DInstanceManager::
get_api_version() const {
return _api_version;
}
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: P3DInstanceManager::get_host_url // Function: P3DInstanceManager::get_host_url
// Access: Public // Access: Public

View File

@ -58,6 +58,7 @@ P3DInstanceManager() {
init_xml(); init_xml();
_is_initialized = false; _is_initialized = false;
_api_version = 0;
_next_temp_filename_counter = 1; _next_temp_filename_counter = 1;
_unique_id = 0; _unique_id = 0;
_trusted_environment = false; _trusted_environment = false;
@ -180,11 +181,12 @@ P3DInstanceManager::
// redownloaded. // redownloaded.
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
bool P3DInstanceManager:: bool P3DInstanceManager::
initialize(const string &contents_filename, const string &host_url, initialize(int api_version, const string &contents_filename,
bool verify_contents, const string &host_url, bool verify_contents,
const string &platform, const string &log_directory, const string &platform, const string &log_directory,
const string &log_basename, bool trusted_environment, const string &log_basename, bool trusted_environment,
bool console_environment) { bool console_environment) {
_api_version = api_version;
_trusted_environment = trusted_environment; _trusted_environment = trusted_environment;
_console_environment = console_environment; _console_environment = console_environment;
_verify_contents = verify_contents; _verify_contents = verify_contents;

View File

@ -50,7 +50,7 @@ private:
~P3DInstanceManager(); ~P3DInstanceManager();
public: public:
bool initialize(const string &contents_filename, bool initialize(int api_version, const string &contents_filename,
const string &host_url, const string &host_url,
bool verify_contents, bool verify_contents,
const string &platform, const string &platform,
@ -63,6 +63,7 @@ public:
inline bool get_verify_contents() const; inline bool get_verify_contents() const;
inline void reset_verify_contents(); inline void reset_verify_contents();
inline int get_api_version() const;
inline const string &get_host_url() const; inline const string &get_host_url() const;
inline const string &get_root_dir() const; inline const string &get_root_dir() const;
inline const string &get_platform() const; inline const string &get_platform() const;
@ -148,6 +149,7 @@ private:
private: private:
bool _is_initialized; bool _is_initialized;
int _api_version;
string _host_url; string _host_url;
string _root_dir; string _root_dir;
string _certs_dir; string _certs_dir;

View File

@ -39,7 +39,7 @@ P3D_initialize(int api_version, const char *contents_filename,
const char *platform, const char *platform,
const char *log_directory, const char *log_basename, const char *log_directory, const char *log_basename,
bool trusted_environment, bool console_environment) { bool trusted_environment, bool console_environment) {
if (api_version != P3D_API_VERSION) { if (api_version < 10 || api_version > P3D_API_VERSION) {
// Can't accept an incompatible version. // Can't accept an incompatible version.
return false; return false;
} }
@ -71,7 +71,7 @@ P3D_initialize(int api_version, const char *contents_filename,
} }
P3DInstanceManager *inst_mgr = P3DInstanceManager::get_global_ptr(); P3DInstanceManager *inst_mgr = P3DInstanceManager::get_global_ptr();
bool result = inst_mgr->initialize(contents_filename, host_url, bool result = inst_mgr->initialize(api_version, contents_filename, host_url,
verify_contents, platform, verify_contents, platform,
log_directory, log_basename, log_directory, log_basename,
trusted_environment, console_environment); trusted_environment, console_environment);
@ -132,13 +132,19 @@ P3D_new_instance(P3D_request_ready_func *func,
bool bool
P3D_instance_start(P3D_instance *instance, bool is_local, P3D_instance_start(P3D_instance *instance, bool is_local,
const char *p3d_filename, const int p3d_offset) { const char *p3d_filename, int p3d_offset) {
assert(P3DInstanceManager::get_global_ptr()->is_initialized()); assert(P3DInstanceManager::get_global_ptr()->is_initialized());
if (p3d_filename == NULL) { if (p3d_filename == NULL) {
p3d_filename = ""; p3d_filename = "";
} }
ACQUIRE_LOCK(_api_lock); ACQUIRE_LOCK(_api_lock);
P3DInstanceManager *inst_mgr = P3DInstanceManager::get_global_ptr(); P3DInstanceManager *inst_mgr = P3DInstanceManager::get_global_ptr();
if (inst_mgr->get_api_version() < 11) {
// Prior to version 11, there was no p3d_offset parameter. So, we
// default it to 0.
p3d_offset = 0;
}
P3DInstance *inst = inst_mgr->validate_instance(instance); P3DInstance *inst = inst_mgr->validate_instance(instance);
bool result = false; bool result = false;
if (inst != NULL) { if (inst != NULL) {

View File

@ -79,7 +79,7 @@ extern "C" {
(below). This number will be incremented whenever there are changes (below). This number will be incremented whenever there are changes
to any of the interface specifications defined in this header to any of the interface specifications defined in this header
file. */ file. */
#define P3D_API_VERSION 10 #define P3D_API_VERSION 11
/************************ GLOBAL FUNCTIONS **************************/ /************************ GLOBAL FUNCTIONS **************************/
@ -339,10 +339,15 @@ P3D_new_instance_func(P3D_request_ready_func *func,
should be downloaded to retrieve the p3d file. Also see should be downloaded to retrieve the p3d file. Also see
P3D_instance_start_stream(), below. P3D_instance_start_stream(), below.
p3d_offset is the offset within p3d_filename at which the p3d data
actually begins. It is normally 0 for an ordinary p3d file, but it
may be nonzero to indicate a p3d file embedded within another file
(such as is created by pdeploy).
The return value is true on success, false on failure. */ The return value is true on success, false on failure. */
typedef bool typedef bool
P3D_instance_start_func(P3D_instance *instance, bool is_local, P3D_instance_start_func(P3D_instance *instance, bool is_local,
const char *p3d_filename, const int p3d_offset = 0); const char *p3d_filename, int p3d_offset);
/* This function is an alternative to P3D_instance_start(); it /* This function is an alternative to P3D_instance_start(); it
indicates an intention to feed the p3d file data to the instance as indicates an intention to feed the p3d file data to the instance as

View File

@ -536,7 +536,7 @@ int PPInstance::Start( const std::string& p3dFilename )
nout << "Starting new P3D instance " << p3dFilename << "\n"; nout << "Starting new P3D instance " << p3dFilename << "\n";
if ( !P3D_instance_start( m_p3dInstance, false, p3dFilename.c_str() ) ) if ( !P3D_instance_start( m_p3dInstance, false, p3dFilename.c_str(), 0 ) )
{ {
nout << "Error starting P3D instance: " << GetLastError() << "\n"; nout << "Error starting P3D instance: " << GetLastError() << "\n";
return 1; return 1;