|
|
| 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; |
| } | } |