mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-17 12:12:10 -04:00
242 lines
8.7 KiB
C++
242 lines
8.7 KiB
C++
// Filename: config_express.cxx
|
|
// Created by: drose (28Mar06)
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
//
|
|
// PANDA 3D SOFTWARE
|
|
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
|
|
//
|
|
// All use of this software is subject to the terms of the Panda 3d
|
|
// Software license. You should have received a copy of this license
|
|
// along with this source code; you will also find a current copy of
|
|
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
|
|
//
|
|
// To contact the maintainers of this program write to
|
|
// panda3d-general@lists.sourceforge.net .
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
#include "config_express.h"
|
|
#include "datagram.h"
|
|
#include "nodeReferenceCount.h"
|
|
#include "referenceCount.h"
|
|
#include "textEncoder.h"
|
|
#include "typedObject.h"
|
|
#include "typedReferenceCount.h"
|
|
#include "virtualFile.h"
|
|
#include "virtualFileComposite.h"
|
|
#include "virtualFileMount.h"
|
|
#include "virtualFileMountMultifile.h"
|
|
#include "virtualFileMountSystem.h"
|
|
#include "virtualFileSimple.h"
|
|
#include "pandaSystem.h"
|
|
#include "numeric_types.h"
|
|
|
|
#include "dconfig.h"
|
|
|
|
ConfigureDef(config_express);
|
|
NotifyCategoryDef(express, "");
|
|
|
|
ConfigureFn(config_express) {
|
|
init_libexpress();
|
|
}
|
|
|
|
ConfigVariableInt patchfile_window_size
|
|
("patchfile-window-size", 16);
|
|
|
|
ConfigVariableInt patchfile_increment_size
|
|
("patchfile-increment-size", 8);
|
|
|
|
ConfigVariableInt patchfile_buffer_size
|
|
("patchfile-buffer-size", 4096);
|
|
|
|
ConfigVariableInt patchfile_zone_size
|
|
("patchfile-zone-size", 10000);
|
|
|
|
ConfigVariableBool keep_temporary_files
|
|
("keep-temporary-files", false,
|
|
PRC_DESC("Set this true to keep around the temporary files from "
|
|
"downloading, decompressing, and patching, or false (the "
|
|
"default) to delete these. Mainly useful for debugging "
|
|
"when the process goes wrong."));
|
|
|
|
ConfigVariableString encryption_algorithm
|
|
("encryption-algorithm", "bf-cbc",
|
|
PRC_DESC("This defines the OpenSSL encryption algorithm which is used to "
|
|
"encrypt any streams created by the current runtime. The default is "
|
|
"Blowfish; the complete set of available algorithms is defined by "
|
|
"the current version of OpenSSL. This value is used only to control "
|
|
"encryption; the correct algorithm will automatically be selected on "
|
|
"decryption."));
|
|
|
|
ConfigVariableInt encryption_key_length
|
|
("encryption-key-length", 0,
|
|
PRC_DESC("This defines the key length, in bits, for the selected encryption "
|
|
"algorithm. Some algorithms have a variable key length. Specifying "
|
|
"a value of 0 here means to use the default key length for the "
|
|
"algorithm as defined by OpenSSL. This value is used only to "
|
|
"control encryption; the correct key length will automatically be "
|
|
"selected on decryption."));
|
|
|
|
ConfigVariableInt encryption_iteration_count
|
|
("encryption-iteration-count", 100000,
|
|
PRC_DESC("This defines the number of times a password is hashed to generate a "
|
|
"key when encrypting. Its purpose is to make it computationally "
|
|
"more expensive for an attacker to search the key space "
|
|
"exhaustively. This should be a multiple of 1,000 and should not "
|
|
"exceed about 65 million; the value 0 indicates just one application "
|
|
"of the hashing algorithm. This value is used only to control "
|
|
"encryption; the correct count will automatically be selected on "
|
|
"decryption."));
|
|
|
|
ConfigVariableInt multifile_encryption_iteration_count
|
|
("multifile-encryption-iteration-count", 0,
|
|
PRC_DESC("This is a special value of encryption-iteration-count used to encrypt "
|
|
"subfiles within a multifile. It has a default value of 0 (just one "
|
|
"application), on the assumption that the files from a multifile must "
|
|
"be loaded quickly, without paying the cost of an expensive hash on "
|
|
"each subfile in order to decrypt it."));
|
|
|
|
ConfigVariableBool vfs_case_sensitive
|
|
("vfs-case-sensitive", true,
|
|
PRC_DESC("Set this true to make the VirtualFileSystem present the native "
|
|
"OS-provided filesystem as if it were a case-sensitive file "
|
|
"system, even if it is not (e.g. on Windows). This variable "
|
|
"has no effect if the native filesystem is already case-sensitive, "
|
|
"and it has no effect on mounted multifile systems, which are "
|
|
"always case-sensitive."));
|
|
|
|
ConfigVariableBool vfs_implicit_pz
|
|
("vfs-implicit-pz", true,
|
|
PRC_DESC("When this is true, the VirtualFileSystem will pretend a named "
|
|
"file exists even if it doesn't, as long as a filename with the "
|
|
"same name and the additional extension .pz does exist. In this "
|
|
"case, the VirtualFileSystem will implicitly open the .pz file "
|
|
"and decompress it on-the-fly."));
|
|
|
|
ConfigVariableBool use_vfs
|
|
("use-vfs", true,
|
|
PRC_DESC("Set this true to use the VirtualFileSystem mechanism for loading "
|
|
"models, etc. Since the VirtualFileSystem is now the de facto "
|
|
"filesystem for Panda, you should always keep this true, since "
|
|
"there is now code that assumes it to be true. This variable "
|
|
"is now deprecated."));
|
|
|
|
ConfigVariableBool collect_tcp
|
|
("collect-tcp", false,
|
|
PRC_DESC("Set this true to enable accumulation of several small consecutive "
|
|
"TCP datagrams into one large datagram before sending it, to reduce "
|
|
"overhead from the TCP/IP protocol. See "
|
|
"Connection::set_collect_tcp() or SocketStream::set_collect_tcp()."));
|
|
|
|
ConfigVariableDouble collect_tcp_interval
|
|
("collect-tcp-interval", 0.2);
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: init_libexpress
|
|
// Description: Initializes the library. This must be called at
|
|
// least once before any of the functions or classes in
|
|
// this library can be used. Normally it will be
|
|
// called by the static initializers and need not be
|
|
// called explicitly, but special cases exist.
|
|
////////////////////////////////////////////////////////////////////
|
|
void
|
|
init_libexpress() {
|
|
static bool initialized = false;
|
|
if (initialized) {
|
|
return;
|
|
}
|
|
initialized = true;
|
|
|
|
Datagram::init_type();
|
|
NodeReferenceCount::init_type();
|
|
ReferenceCount::init_type();
|
|
TextEncoder::init_type();
|
|
TypedObject::init_type();
|
|
TypedReferenceCount::init_type();
|
|
VirtualFile::init_type();
|
|
VirtualFileComposite::init_type();
|
|
VirtualFileMount::init_type();
|
|
VirtualFileMountMultifile::init_type();
|
|
VirtualFileMountSystem::init_type();
|
|
VirtualFileSimple::init_type();
|
|
|
|
init_system_type_handles();
|
|
|
|
#ifdef HAVE_ZLIB
|
|
{
|
|
PandaSystem *ps = PandaSystem::get_global_ptr();
|
|
ps->add_system("zlib");
|
|
}
|
|
#endif
|
|
|
|
// This is a fine place to ensure that the numeric types have been
|
|
// chosen correctly.
|
|
nassertv(sizeof(PN_int8) == 1 && sizeof(PN_uint8) == 1);
|
|
nassertv(sizeof(PN_int16) == 2 && sizeof(PN_uint16) == 2);
|
|
nassertv(sizeof(PN_int32) == 4 && sizeof(PN_uint32) == 4);
|
|
nassertv(sizeof(PN_int64) == 8 && sizeof(PN_uint64) == 8);
|
|
nassertv(sizeof(PN_float32) == 4);
|
|
nassertv(sizeof(PN_float64) == 8);
|
|
|
|
// Also, ensure that we have the right endianness.
|
|
PN_uint32 word;
|
|
memcpy(&word, "\1\2\3\4", 4);
|
|
#ifdef WORDS_BIGENDIAN
|
|
nassertv(word == 0x01020304);
|
|
#else
|
|
nassertv(word == 0x04030201);
|
|
#endif
|
|
}
|
|
|
|
bool
|
|
get_use_high_res_clock() {
|
|
static ConfigVariableBool *use_high_res_clock = NULL;
|
|
|
|
if (use_high_res_clock == (ConfigVariableBool *)NULL) {
|
|
use_high_res_clock = new ConfigVariableBool
|
|
("use-high-res-clock", true,
|
|
PRC_DESC("Set this to false to avoid using the high-precision clock, even if "
|
|
"it is available."));
|
|
}
|
|
|
|
return *use_high_res_clock;
|
|
}
|
|
|
|
bool
|
|
get_paranoid_clock() {
|
|
static ConfigVariableBool *paranoid_clock = NULL;
|
|
|
|
if (paranoid_clock == (ConfigVariableBool *)NULL) {
|
|
paranoid_clock = new ConfigVariableBool
|
|
("paranoid-clock", false,
|
|
PRC_DESC("Set this to true to double-check the results of the high-resolution "
|
|
"clock against the system clock. This has no effect if NDEBUG is "
|
|
"defined."));
|
|
}
|
|
|
|
return *paranoid_clock;
|
|
}
|
|
|
|
bool
|
|
get_verify_dcast() {
|
|
static ConfigVariableBool *verify_dcast = NULL;
|
|
|
|
if (verify_dcast == (ConfigVariableBool *)NULL) {
|
|
verify_dcast = new ConfigVariableBool
|
|
("verify-dcast", true,
|
|
PRC_DESC("Set this to true to verify that every attempted DCAST operation in "
|
|
"fact references the correct type, or false otherwise. This has no "
|
|
"effect if NDEBUG is defined, in which case it is never tested."));
|
|
}
|
|
|
|
return *verify_dcast;
|
|
}
|
|
|
|
// Returns the configure object for accessing config variables from a
|
|
// scripting language.
|
|
ConfigExpress &
|
|
get_config_express() {
|
|
return config_express;
|
|
}
|