Diff
Not logged in

Differences From Artifact [ca79ae8a50]:

To Artifact [3f602b6431]:


2288
2289
2290
2291
2292
2293
2294
2295
2296

2297
2298
2299
2300
2301
2302
2303
2288
2289
2290
2291
2292
2293
2294


2295
2296
2297
2298
2299
2300
2301
2302







-
-
+







**
** It is called in a loop so some variables will need to be replaced
*/
void cgi_handle_ssh_http_request(const char *zIpAddr){
  static int nCycles = 0;
  static char *zCmd = 0;
  char *z, *zToken;
  const char *zType = 0;
  int i, content_length = 0;
  int i;
  char zLine[2000];     /* A single line of input. */

  assert( !g.httpUseSSL );
#ifdef FOSSIL_ENABLE_JSON
  if( nCycles==0 ){ json_bootstrap_early(); }
#endif
  if( zIpAddr ){
2384
2385
2386
2387
2388
2389
2390

2391




2392

2393


2394
2395
2396
2397
2398
2399
2400
2383
2384
2385
2386
2387
2388
2389
2390

2391
2392
2393
2394
2395
2396

2397
2398
2399
2400
2401
2402
2403
2404
2405







+
-
+
+
+
+

+
-
+
+







    i = strlen(zVal);
    while( i>0 && fossil_isspace(zVal[i-1]) ){ i--; }
    zVal[i] = 0;
    for(i=0; zFieldName[i]; i++){
      zFieldName[i] = fossil_tolower(zFieldName[i]);
    }
    if( fossil_strcmp(zFieldName,"content-length:")==0 ){
      if( nCycles==0 ){
      content_length = atoi(zVal);
	cgi_setenv("CONTENT_LENGTH", zVal);
      }else{
	cgi_replace_parameter("CONTENT_LENGTH", zVal);
      }
    }else if( fossil_strcmp(zFieldName,"content-type:")==0 ){
      if( nCycles==0 ){
      g.zContentType = zType = fossil_strdup(zVal);
	cgi_setenv("CONTENT_TYPE", zVal);
      }
    }else if( fossil_strcmp(zFieldName,"host:")==0 ){
      if( nCycles==0 ){
        cgi_setenv("HTTP_HOST", zVal);
      }
    }else if( fossil_strcmp(zFieldName,"user-agent:")==0 ){
      if( nCycles==0 ){
        cgi_setenv("HTTP_USER_AGENT", zVal);
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2422
2423
2424
2425
2426
2427
2428











2429
2430
2431
2432
2433
2434
2435







-
-
-
-
-
-
-
-
-
-
-







      cgi_replace_parameter("REMOTE_ADDR", "127.0.0.1");
    }
  }

  cgi_reset_content();
  cgi_destination(CGI_BODY);

  if( content_length>0 && zType ){
    blob_zero(&g.cgiIn);
    if( fossil_strcmp(zType, "application/x-fossil")==0 ){
      blob_read_from_channel(&g.cgiIn, g.httpIn, content_length);
      blob_uncompress(&g.cgiIn, &g.cgiIn);
    }else if( fossil_strcmp(zType, "application/x-fossil-debug")==0 ){
      blob_read_from_channel(&g.cgiIn, g.httpIn, content_length);
    }else if( fossil_strcmp(zType, "application/x-fossil-uncompressed")==0 ){
      blob_read_from_channel(&g.cgiIn, g.httpIn, content_length);
    }
  }
  cgi_init();
  cgi_trace(0);
  nCycles++;
}

/*
** This routine handles the old fossil SSH probes