--- parser3/src/targets/cgi/parser3.C 2004/07/30 10:02:31 1.231 +++ parser3/src/targets/cgi/parser3.C 2006/04/09 13:38:47 1.239 @@ -1,11 +1,11 @@ /** @file Parser: scripting and CGI main. - Copyright(c) 2001-2004 ArtLebedev Group (http://www.artlebedev.com) + Copyright(c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_PARSER3_C="$Date: 2004/07/30 10:02:31 $"; +static const char * const IDENT_PARSER3_C="$Date: 2006/04/09 13:38:47 $"; #include "pa_config_includes.h" @@ -27,7 +27,10 @@ static const char * const IDENT_PARSER3_ # include #endif -//#define _DEBUG +// defines + +// comment remove me after debugging +//#define PA_DEBUG_CGI_ENTRY_EXIT "c:\\parser\\debug-parser3.log" #if _MSC_VER && !defined(_DEBUG) # define PA_SUPPRESS_SYSTEM_EXCEPTION @@ -71,6 +74,10 @@ static void log(const char* fmt, va_list f=fopen(log_by_env, "at"); opened=f!=0; } +#ifdef PA_DEBUG_CGI_ENTRY_EXIT + f=fopen(PA_DEBUG_CGI_ENTRY_EXIT, "at"); + opened=f!=0; +#endif if(!opened && config_filespec_cstr) { char beside_config_path[MAX_STRING]; @@ -99,23 +106,41 @@ static void log(const char* fmt, va_list time_t t=time(0); if(const char* stamp=ctime(&t)) { // never saw that if(size_t len=strlen(stamp)) // saw once stamp being ="" - fprintf(f, "[%.*s] ", len-1, stamp); + fprintf(f, "[%.*s] [%u] ", len-1, stamp, + (unsigned int)getpid() + ); } // message char buf[MAX_STRING]; size_t size=vsnprintf(buf, MAX_STRING, fmt, args); remove_crlf(buf, buf+size); - fwrite(buf, size, 1, f); + + if(request_info) + fprintf(f, " [uri=%s, method=%s, cl=%u]", + request_info->uri? request_info->uri: "", + request_info->method? request_info->method: "", + request_info->content_length); + else + fputs(" [no request info]", f); + // newline - fprintf(f, "\n"); + fputs("\n", f); if(opened) fclose(f); else fflush(f); } +#ifdef PA_DEBUG_CGI_ENTRY_EXIT +static void log(const char* fmt, ...) { + va_list args; + va_start(args,fmt); + log(fmt, args); + va_end(args); +} +#endif // appends to parser3.log located beside my binary if openable, to stderr otherwize void SAPI::log(SAPI_Info&, const char* fmt, ...) { @@ -172,14 +197,14 @@ void SAPI::die(const char* fmt, ...) { va_list args; va_start(args, fmt); die_or_abort(fmt, args, false/*write core?*/); - va_end(args); +//unreachable anyway va_end(args); } void SAPI::abort(const char* fmt, ...) { va_list args; va_start(args, fmt); die_or_abort(fmt, args, true/*write core?*/); - va_end(args); +//unreachable anyway va_end(args); } char* SAPI::get_env(SAPI_Info& , const char* name) { @@ -341,7 +366,11 @@ static void real_parser_handler(const ch pa_globals_init(); if(!filespec_to_process || !*filespec_to_process) - SAPI::die("Parser/%s", PARSER_VERSION); + SAPI::die("Parser/%s" +#ifdef PA_DEBUG_CGI_ENTRY_EXIT + " with entry/exit tracing" +#endif + , PARSER_VERSION); // Request info Request_info request_info; memset(&request_info, 0, sizeof(request_info)); @@ -444,6 +473,17 @@ static void real_parser_handler(const ch if(execution_canceled) SAPI::die("Execution canceled"); +#ifdef PA_DEBUG_CGI_ENTRY_EXIT + log("request_info: method=%s, uri=%s, q=%s, dr=%s, pt=%s, cookies=%s, cl=%u", + request_info.method, + request_info.uri, + request_info.query_string, + request_info.document_root, + request_info.path_translated, + request_info.cookie, + request_info.content_length); +#endif + // prepare to process request Request request(SAPI_info, request_info, cgi ? String::Language(String::L_HTML|String::L_OPTIMIZE_BIT) : String::L_AS_IS, @@ -519,7 +559,7 @@ static void call_real_parser_handler__su __try { parser_exception=call_real_parser_handler__do_PEH_return_it( filespec_to_process, - request_method, header_only); + request_method, header_only); } __except ( (system_exception=GetExceptionInformation()), EXCEPTION_EXECUTE_HANDLER) @@ -547,7 +587,8 @@ static void call_real_parser_handler__su static void usage(const char* program) { printf( - "Parser/%s Copyright(c) 2001-2004 ArtLebedev Group (http://www.artlebedev.com)\n" + "Parser/%s\n" + "Copyright(c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com)\n" "Author: Alexandr Petrosian (http://paf.design.ru)\n" "\n" "Usage: %s [options] file\n" @@ -563,6 +604,9 @@ static void usage(const char* program) { } int main(int argc, char *argv[]) { +#ifdef PA_DEBUG_CGI_ENTRY_EXIT + log("main: entry"); +#endif //_asm int 3; GC_java_finalization=0; @@ -694,9 +738,8 @@ int main(int argc, char *argv[]) { // possible pool' exception not catch-ed now // and there could be out-of-memory exception char buf[MAX_STRING]; - snprintf(buf, MAX_STRING, "Exception %s [%s]", - e.comment(), - e.type()); + snprintf(buf, MAX_STRING, "Unhandled exception %s", + e.comment()); // log it SAPI::log(SAPI_info, "%s", buf); @@ -719,5 +762,8 @@ int main(int argc, char *argv[]) { // unsuccessful finish } +#ifdef PA_DEBUG_CGI_ENTRY_EXIT + log("main: successful return"); +#endif return 0; }