--- parser3/src/targets/cgi/parser3.C 2005/01/19 15:48:25 1.236 +++ parser3/src/targets/cgi/parser3.C 2007/08/17 08:16:11 1.243 @@ -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: 2005/01/19 15:48:25 $"; +static const char * const IDENT_PARSER3_C="$Date: 2007/08/17 08:16:11 $"; #include "pa_config_includes.h" @@ -115,10 +115,18 @@ static void log(const char* fmt, va_list 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); @@ -189,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) { @@ -230,7 +238,7 @@ size_t SAPI::read_post(SAPI_Info& , char } void SAPI::add_header_attribute(SAPI_Info& , const char* dont_store_key, const char* dont_store_value) { - if(cgi) + if( cgi && (!request || !request->console.was_used()) ) printf("%s: %s\n", dont_store_key, dont_store_value); } @@ -289,8 +297,15 @@ static void SIGUSR1_handler(int /*sig*/) #endif #ifdef SIGPIPE +#define SIGPIPE_NAME "SIGPIPE" +static const String sigpipe_name(SIGPIPE_NAME); static void SIGPIPE_handler(int /*sig*/){ + Value* sigpipe=0; + if(request) + sigpipe=request->main_class.get_element(sigpipe_name, request->main_class, false); + if(sigpipe && sigpipe->as_bool()) log_signal("SIGPIPE"); + execution_canceled=true; if(request) request->set_interrupted(true); @@ -376,7 +391,7 @@ static void real_parser_handler(const ch memcpy(document_root_buf, filespec_to_process, len); document_root_buf[len]=0; request_info.document_root=document_root_buf; } else - throw Exception("parser.runtime", + throw Exception(PARSER_RUNTIME, 0, "CGI: no PATH_INFO defined(in reinventing DOCUMENT_ROOT)"); } else { @@ -580,7 +595,7 @@ static void call_real_parser_handler__su static void usage(const char* program) { printf( "Parser/%s\n" - "Copyright(c) 2001-2004 ArtLebedev Group (http://www.artlebedev.com)\n" + "Copyright(c) 2001-2007 ArtLebedev Group (http://www.artlebedev.com)\n" "Author: Alexandr Petrosian (http://paf.design.ru)\n" "\n" "Usage: %s [options] file\n"