Diff for /parser3/src/targets/cgi/parser3.C between versions 1.216.2.30.2.7 and 1.220

version 1.216.2.30.2.7, 2003/03/26 07:45:24 version 1.220, 2003/11/06 09:56:17
Line 29  static const char* IDENT_PARSER3_C="$Dat Line 29  static const char* IDENT_PARSER3_C="$Dat
 #       include <getopt.h>  #       include <getopt.h>
 #endif  #endif
   
 //#define DEBUG_POOL_MALLOC  
 //#define DEBUG_MAILRECEIVE "mailreceive.eml"  //#define DEBUG_MAILRECEIVE "mailreceive.eml"
   
 // consts  // consts
Line 114  void SAPI::log(SAPI_Info&, const char* f Line 113  void SAPI::log(SAPI_Info&, const char* f
 }  }
   
 static void die_or_abort(const char* fmt, va_list args, bool write_core) {  static void die_or_abort(const char* fmt, va_list args, bool write_core) {
         //_asm int 3;  
 #ifdef DEBUG_POOL_MALLOC  
         extern void log_pool_stats();  
         log_pool_stats(SAPI_info);  
 #endif  
   
         // log          // log
   
         // logging is more important than user           // logging is more important than user 
Line 149  static void die_or_abort(const char* fmt Line 142  static void die_or_abort(const char* fmt
         // exit & try to produce core dump[unix] or invoke debugger[Win32 Debug version]          // exit & try to produce core dump[unix] or invoke debugger[Win32 Debug version]
         if(write_core) {          if(write_core) {
 #if defined(WIN32) && !defined(_DEBUG)  #if defined(WIN32) && !defined(_DEBUG)
                 //_asm int 3;  
                 // IIS with abort failes to show STDOUT, it just barks "abnormal program termination"                  // IIS with abort failes to show STDOUT, it just barks "abnormal program termination"
                 exit(1);                  exit(1);
 #else  #else
   #if _MSC_VER
                   _asm int 3;
   #endif
                 abort();                  abort();
 #endif  #endif
         }           } 
Line 232  static void full_file_spec(const char* f Line 227  static void full_file_spec(const char* f
                         || file_name[0] && file_name[1]==':'                          || file_name[0] && file_name[1]==':'
 #endif  #endif
                         )                          )
                         strncpy(buf, file_name, buf_size);                                  strncpy(buf, file_name, buf_size);
                 else {                  else {
                         char cwd[MAX_STRING];  getcwd(cwd, MAX_STRING);                          char cwd[MAX_STRING];  getcwd(cwd, MAX_STRING);
                         snprintf(buf, buf_size, "%s/%s", cwd, file_name);                          snprintf(buf, buf_size, "%s/%s", cwd, file_name);
Line 246  static void full_file_spec(const char* f Line 241  static void full_file_spec(const char* f
   
 static void log_signal(const char* signal_name) {  static void log_signal(const char* signal_name) {
         if(request_info)          if(request_info)
                 SAPI::log(SAPI_info, "%s received while %s. uri=%s, method=%s, qs=%s, cl=%u",                  SAPI::log(SAPI_info, "%s received while %s. uri=%s, method=%s, cl=%u",
                         signal_name,                          signal_name,
                         request?"executing code":"reading data",                          request?"executing code":"reading data",
                         request_info->uri,                          request_info->uri,
                         request_info->method,                          request_info->method,
                         request_info->query_string,  
                         request_info->content_length);                          request_info->content_length);
         else          else
                 SAPI::log(SAPI_info, "%s received before or after processing request",                  SAPI::log(SAPI_info, "%s received before or after processing request",
Line 281  main workhorse Line 275  main workhorse
                 to do that we need to consult metabase,                  to do that we need to consult metabase,
                 wich is tested but seems slow.                  wich is tested but seems slow.
 */  */
 static void real_parser_handler(  static void real_parser_handler(const char* filespec_to_process,
                                         const char* filespec_to_process,                                  const char* request_method, bool header_only) {
                                         const char* request_method, bool header_only) {  
         // init socks          // init socks
         pa_init_socks();          pa_init_socks();
                   
Line 294  static void real_parser_handler( Line 287  static void real_parser_handler(
                 SAPI::die("Parser/%s", PARSER_VERSION);                  SAPI::die("Parser/%s", PARSER_VERSION);
                   
         // Request info          // Request info
         Request_info request_info;          Request_info request_info;  memset(&request_info, 0, sizeof(request_info));
         char document_root_buf[MAX_STRING];          char document_root_buf[MAX_STRING];
         if(cgi) {          if(cgi) {
                 if(const char* env_document_root=getenv("DOCUMENT_ROOT"))                  if(const char* env_document_root=getenv("DOCUMENT_ROOT"))
Line 393  static void real_parser_handler( Line 386  static void real_parser_handler(
         // prepare to process request          // prepare to process request
         Request request(SAPI_info,           Request request(SAPI_info, 
                 request_info,                  request_info,
 /*#ifdef _DEBUG                  cgi ? String::Language(String::L_HTML|String::L_OPTIMIZE_BIT) : String::L_AS_IS,
                 String::L_HTML|String::L_OPTIMIZE_BIT  
 #else*/  
                 cgi ? String::Language(String::L_HTML|String::L_OPTIMIZE_BIT) : String::L_AS_IS  
 /*#endif*/  
                 ,  
                 true /* status_allowed */);                  true /* status_allowed */);
   
         // get request ptr for signal handlers          // get request ptr for signal handlers
Line 440  static void real_parser_handler( Line 428  static void real_parser_handler(
                   
         //          //
         pa_done_socks();          pa_done_socks();
           
 #ifdef DEBUG_POOL_MALLOC  
         extern void log_pool_stats();  
         log_pool_stats(request_pool);  
 #endif  
 }  }
   
 #if _MSC_VER && !defined(_DEBUG)  #if _MSC_VER && !defined(_DEBUG)
Line 462  Parser_executed Line 445  Parser_executed
 void  void
 #endif  #endif
 call_real_parser_handler__do_SEH_return_it(  call_real_parser_handler__do_SEH_return_it(
                                                                  const char* filespec_to_process,                                             const char* filespec_to_process,
                                                                  const char* request_method, bool header_only) {                                             const char* request_method, bool header_only) {
 #ifdef PA_USE___TRY  #ifdef PA_USE___TRY
         Parser_executed result={false};          Parser_executed result={false};
         __try {          __try {
Line 476  call_real_parser_handler__do_SEH_return_ Line 459  call_real_parser_handler__do_SEH_return_
         } __except (          } __except (
                 (result.system_exception=GetExceptionInformation()),                   (result.system_exception=GetExceptionInformation()), 
                 EXCEPTION_EXECUTE_HANDLER) {                  EXCEPTION_EXECUTE_HANDLER) {
                 //_asm int 3;  
                 result.with_system_exception=true;                  result.with_system_exception=true;
         }          }
         return result;          return result;
Line 484  call_real_parser_handler__do_SEH_return_ Line 466  call_real_parser_handler__do_SEH_return_
 }  }
   
 static void call_real_parser_handler__do_SEH(  static void call_real_parser_handler__do_SEH(
                                                                  const char* filespec_to_process,                                               const char* filespec_to_process,
                                                                  const char* request_method, bool header_only) {                                               const char* request_method, bool header_only) {
 #ifdef PA_USE___TRY  #ifdef PA_USE___TRY
         Parser_executed executed=          Parser_executed executed=
 #endif  #endif
Line 528  static void usage(const char* program) { Line 510  static void usage(const char* program) {
 }  }
   
 int main(int argc, char *argv[]) {  int main(int argc, char *argv[]) {
           GC_java_finalization=0;
   
   #ifndef PA_DEBUG_DISABLE_GC
           // Dont collect unless explicitly requested 
           // this is quicker (~30% ), but less memory-efficient(~8%)
           // so deciding for speed
           GC_dont_gc=1; 
   #endif
   /*
           
           Array<int> test;
           test+=3;
           test+=4;
   //      int a=test.count();
           int i=0;
           scanf("%d", &i);
           int b=test.get(i);
   //      int b=test.get(10);
           printf("%d", b);//test.count());*/
   
 #ifdef SIGUSR1  #ifdef SIGUSR1
     if(signal(SIGUSR1, SIGUSR1_handler)==SIG_ERR)      if(signal(SIGUSR1, SIGUSR1_handler)==SIG_ERR)
                 SAPI::die("Can not set handler for SIGUSR1");                  SAPI::die("Can not set handler for SIGUSR1");
Line 545  int main(int argc, char *argv[]) { Line 547  int main(int argc, char *argv[]) {
 #endif  #endif
   
 #ifdef _DEBUG  #ifdef _DEBUG
         //_crtBreakAlloc=4042;          //_crtBreakAlloc=46;
 #endif  #endif
         //_asm int 3;  
         argv0=argv[0];          argv0=argv[0];
   
         umask(2);          umask(2);
Line 614  int main(int argc, char *argv[]) { Line 615  int main(int argc, char *argv[]) {
   
         // Set flag to the new value          // Set flag to the new value
         _CrtSetDbgFlag( tmpFlag );          _CrtSetDbgFlag( tmpFlag );
         //_CrtSetBreakAlloc(62143); //147302  //      _CrtSetBreakAlloc(61);
   
         _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );          _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
         _CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDERR );          _CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDERR );
Line 634  int main(int argc, char *argv[]) { Line 635  int main(int argc, char *argv[]) {
                 // don't allocate anything on pool here:                  // don't allocate anything on pool here:
                 //   possible pool' exception not catch-ed now                  //   possible pool' exception not catch-ed now
                 //   and there could be out-of-memory exception                  //   and there could be out-of-memory exception
                   const char* body=e.comment();
                   char buf[MAX_STRING];
                   snprintf(buf, MAX_STRING, "exception in request exception handler: %s",
                           body);
                   // log it
                   SAPI::log(SAPI_info, "%s", buf);
   
                   //
                   int content_length=strlen(buf);
   
                   // prepare header
                   SAPI::add_header_attribute(SAPI_info, "content-type", "text/plain");
                   char content_length_cstr[MAX_NUMBER];
                   snprintf(content_length_cstr, MAX_NUMBER, "%u", content_length);
                   SAPI::add_header_attribute(SAPI_info, "content-length", content_length_cstr);
   
                   // send header
                   SAPI::send_header(SAPI_info);
   
                   // send body
                   if(!header_only)
                           SAPI::send_body(SAPI_info, buf, content_length);
   
                 SAPI::die("exception in request exception handler: %s", e.comment());                  // unsuccessful finish
         }          }
   
 //      _asm int 3;  
         return 0;          return 0;
 }  }

Removed from v.1.216.2.30.2.7  
changed lines
  Added in v.1.220


E-mail: