00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "dconfig.h"
00016 #include "config_downloader.h"
00017 #include "httpChannel.h"
00018 #include "virtualFileHTTP.h"
00019 #include "virtualFileMountHTTP.h"
00020 #include "pandaSystem.h"
00021
00022
00023 ConfigureDef(config_downloader);
00024 NotifyCategoryDef(downloader, "");
00025
00026 ConfigVariableInt downloader_byte_rate
00027 ("downloader-byte-rate", 500000,
00028 PRC_DESC("Specifies the default max bytes per second of throughput that is "
00029 "supported by any HTTP connections with download-throttle enabled. "
00030 "This may also be set on a per-channel basis with "
00031 "HTTPChannel::set_max_bytes_per_second(). It has no effect unless "
00032 "download-throttle (or HTTPChannel::set_download_throttle) is true."));
00033
00034 ConfigVariableBool download_throttle
00035 ("download-throttle", false,
00036 PRC_DESC("When this is true, all HTTP channels will be bandwidth-limited "
00037 "so as not to consume more than downloader-byte-rate bytes per "
00038 "second."));
00039
00040 ConfigVariableDouble downloader_frequency
00041 ("downloader-frequency", 0.2,
00042 PRC_DESC("Frequency of download chunk requests in seconds (or fractions of) "
00043 "(Estimated 200 msec round-trip to server)."));
00044
00045 ConfigVariableInt downloader_timeout
00046 ("downloader-timeout", 15);
00047
00048 ConfigVariableInt downloader_timeout_retries
00049 ("downloader-timeout-retries", 5);
00050
00051 ConfigVariableDouble decompressor_step_time
00052 ("decompressor-step-time", 0.005,
00053 PRC_DESC("Specifies the maximum amount of time that should be consumed by "
00054 "a single call to Decompressor::run()."));
00055
00056 ConfigVariableDouble extractor_step_time
00057 ("extractor-step-time", 0.005,
00058 PRC_DESC("Specifies the maximum amount of time that should be consumed by "
00059 "a single call to Extractor::step()."));
00060
00061 ConfigVariableInt patcher_buffer_size
00062 ("patcher-buffer-size", 16384,
00063 PRC_DESC("Limits the size of the buffer used in a single call to "
00064 "Patcher::run(). Increasing this may help the Patcher "
00065 "perform more work before returning."));
00066
00067 ConfigVariableBool http_proxy_tunnel
00068 ("http-proxy-tunnel", false,
00069 PRC_DESC("This specifies the default value for HTTPChannel::set_proxy_tunnel(). "
00070 "If this is true, we will tunnel through a proxy for all connections, "
00071 "instead of asking the proxy to serve documents normally."));
00072
00073 ConfigVariableDouble http_connect_timeout
00074 ("http-connect-timeout", 10.0,
00075 PRC_DESC("This is the default amount of time to wait for a TCP/IP connection "
00076 "to be established, in seconds."));
00077
00078 ConfigVariableDouble http_timeout
00079 ("http-timeout", 20.0,
00080 PRC_DESC("This is the default amount of time to wait for the HTTP server (or "
00081 "proxy) to finish sending its response to our request, in seconds. "
00082 "It starts counting after the TCP connection has been established "
00083 "(http_connect_timeout, above) and the request has been sent."));
00084
00085 ConfigVariableInt http_skip_body_size
00086 ("http-skip-body-size", 8192,
00087 PRC_DESC("This is the maximum number of bytes in a received "
00088 "(but unwanted) body that will be skipped past, in "
00089 "order to reset to a new request. "
00090 "See HTTPChannel::set_skip_body_size()."));
00091
00092 ConfigVariableDouble http_idle_timeout
00093 ("http-idle-timeout", 5.0,
00094 PRC_DESC("This the amount of time, in seconds, in which a "
00095 "previously-established connection is allowed to remain open "
00096 "and unused. If a previous connection has remained unused for "
00097 "at least this number of seconds, it will be closed and a new "
00098 "connection will be opened; otherwise, the same connection "
00099 "will be reused for the next request (for a particular "
00100 "HTTPChannel)."));
00101
00102 ConfigVariableInt http_max_connect_count
00103 ("http-max-connect-count", 10,
00104 PRC_DESC("This is the maximum number of times to try reconnecting to the "
00105 "server on any one document attempt. This is just a failsafe to "
00106 "prevent the code from attempting runaway connections; this limit "
00107 "should never be reached in practice."));
00108
00109 ConfigVariableInt tcp_header_size
00110 ("tcp-header-size", 2,
00111 PRC_DESC("Specifies the number of bytes to use to specify the datagram "
00112 "length when writing a datagram on a TCP stream. This may be "
00113 "0, 2, or 4. The server and client must agree on this value."));
00114
00115 ConfigureFn(config_downloader) {
00116 init_libdownloader();
00117 }
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127 void
00128 init_libdownloader() {
00129 static bool initialized = false;
00130 if (initialized) {
00131 return;
00132 }
00133 initialized = true;
00134
00135 #ifdef HAVE_OPENSSL
00136 HTTPChannel::init_type();
00137 VirtualFileHTTP::init_type();
00138 VirtualFileMountHTTP::init_type();
00139
00140 VirtualFileMountHTTP::reload_vfs_mount_url();
00141
00142
00143
00144 ConfigVariableBool early_random_seed
00145 ("early-random-seed", false,
00146 PRC_DESC("Configure this true to compute the SSL random seed "
00147 "early on in the application (specifically, when the libpandaexpress "
00148 "library is loaded), or false to defer this until it is actually "
00149 "needed (which will be the first time you open an https connection "
00150 "or otherwise use encryption services). You can also call "
00151 "HTTPClient::init_random_seed() to "
00152 "do this when you are ready. The issue is that on Windows, "
00153 "OpenSSL will attempt to "
00154 "randomize its seed by crawling through the entire heap of "
00155 "allocated memory, which can be extremely large in a Panda "
00156 "application, especially if you have already opened a window and "
00157 "started rendering; and so this can take as much as 30 seconds "
00158 "or more. For this reason it is best to initialize the random "
00159 "seed at startup, when the application is still very small."));
00160 if (early_random_seed) {
00161 HTTPClient::init_random_seed();
00162 }
00163
00164 PandaSystem *ps = PandaSystem::get_global_ptr();
00165 ps->add_system("OpenSSL");
00166 #endif // HAVE_OPENSSL
00167 }