@@ -231,14 +231,13 @@
231 231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *azAuxName[MX_AUX]; /* Name of each aux() or option() value */
232 232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *azAuxParam[MX_AUX]; /* Param of each aux() or option() value */
233 233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *azAuxVal[MX_AUX]; /* Value of each aux() or option() value */
234 234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char **azAuxOpt[MX_AUX]; /* Options of each option() value */
235 235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int anAuxCols[MX_AUX]; /* Number of columns for option() values */
236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
237 236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int allowSymlinks; /* Cached "allow-symlinks" option */
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
239 237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int mainTimerId; /* Set to fossil_timer_start() */
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nPendingRequest; /* # of HTTP requests in "fossil server" */
240 239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef FOSSIL_ENABLE_JSON
241 240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct FossilJsonBits {
242 241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isJsonMode; /* True if running in JSON mode, else
243 242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
false. This changes how errors are
244 243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
reported. In JSON mode we try to
@@ -2323,10 +2322,19 @@
2323 2322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2324 2323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
2325 2324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2326 2325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
2327 2326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
2327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
2329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Send a time-out reply
2330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
2331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void sigalrm_handler(int x){
2332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ printf("TIMEOUT\n");
2333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fflush(stdout);
2334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ exit(1);
2335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2328 2336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2329 2337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
2330 2338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: server*
2331 2339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: ui
2332 2340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -2375,10 +2383,12 @@
2375 2383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --page PAGE Start "ui" on PAGE. ex: --page "timeline?y=ci"
2376 2384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --files GLOBLIST Comma-separated list of glob patterns for static files
2377 2385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --localauth enable automatic login for requests from localhost
2378 2386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --localhost listen on 127.0.0.1 only (always true for "ui")
2379 2387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --https signal a request coming in via https
2388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --max-latency N Do not let any single HTTP request run for more than N
2389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** seconds (only works on unix)
2380 2390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --nojail Drop root privileges but do not enter the chroot jail
2381 2391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --nossl signal that no SSL connections are available
2382 2392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --notfound URL Redirect
2383 2393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** -P|--port TCPPORT listen to request on port TCPPORT
2384 2394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --th-trace trace TH1 execution (for debugging purposes)
@@ -2402,10 +2412,11 @@
2402 2412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int noJail; /* Do not enter the chroot jail */
2403 2413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
2404 2414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int allowRepoList; /* List repositories on URL "/" */
2405 2415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zAltBase; /* Argument to the --baseurl option */
2406 2416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFileGlob; /* Static content must match this */
2417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zMaxLatency; /* Maximum runtime of any single HTTP request */
2407 2418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zIpAddr = 0; /* Bind to this IP address */
2408 2419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int fCreate = 0; /* The --create flag */
2409 2420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zInitPage = 0; /* Start on this page. --page option */
2410 2421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(_WIN32) && USE_SEE
2411 2422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zPidKey;
@@ -2414,10 +2425,11 @@
2414 2425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(_WIN32)
2415 2426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zStopperFile; /* Name of file used to terminate server */
2416 2427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zStopperFile = find_option("stopper", 0, 1);
2417 2428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
2418 2429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zMaxLatency = find_option("max-latency",0,1);
2419 2431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFileGlob = find_option("files-urlenc",0,1);
2420 2432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zFileGlob ){
2421 2433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *z = mprintf("%s", zFileGlob);
2422 2434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dehttpize(z);
2423 2435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFileGlob = z;
@@ -2526,10 +2538,14 @@
2526 2538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.localOpen ) flags |= HTTP_SERVER_HAD_CHECKOUT;
2527 2539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_close(1);
2528 2540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( cgi_http_server(iPort, mxPort, zBrowserCmd, zIpAddr, flags) ){
2529 2541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_fatal("unable to listen on TCP socket %d", iPort);
2530 2542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zMaxLatency ){
2544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ signal(SIGALRM, sigalrm_handler);
2545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ alarm(atoi(zMaxLatency));
2546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2531 2547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.httpIn = stdin;
2532 2548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.httpOut = stdout;
2533 2549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.fHttpTrace || g.fSqlTrace ){
2534 2550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fprintf(stderr, "====== SERVER pid %d =======\n", getpid());
2535 2551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2536 2552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!