--- parser3/src/targets/apache/mod_parser3_core.C 2021/01/20 16:09:53 1.35 +++ parser3/src/targets/apache/mod_parser3_core.C 2024/11/10 00:28:42 1.39 @@ -1,11 +1,11 @@ /** @file Parser: apache 1.3/2.X module, part, compiled by parser3project. - Copyright (c) 2001-2020 Art. Lebedev Studio (http://www.artlebedev.com) - Author: Alexandr Petrosian (http://paf.design.ru) + Copyright (c) 2001-2024 Art. Lebedev Studio (http://www.artlebedev.com) + Authors: Konstantin Morshnev , Alexandr Petrosian */ -volatile const char * IDENT_MOD_PARSER3_CORE_C="$Id: mod_parser3_core.C,v 1.35 2021/01/20 16:09:53 moko Exp $"; +volatile const char * IDENT_MOD_PARSER3_CORE_C="$Id: mod_parser3_core.C,v 1.39 2024/11/10 00:28:42 moko Exp $"; #include "pa_config_includes.h" @@ -78,6 +78,14 @@ void SAPI::die(const char* fmt, ...) { // va_end(args); } +void SAPI::send_error(SAPI_Info& info, const char *exception_cstr, const char *status){ + // capitalized headers passed for preventing malloc during capitalization + add_header_attribute(info, HTTP_STATUS_CAPITALIZED, status); + add_header_attribute(info, HTTP_CONTENT_TYPE_CAPITALIZED, "text/plain"); + send_headers(info); + send_body(info, exception_cstr, strlen(exception_cstr)); +} + char* SAPI::Env::get(SAPI_Info& SAPI_info, const char* name) { const char* dont_return_me=pa_ap_table_get(SAPI_info.r->subprocess_env, name); return dont_return_me?pa_strdup(dont_return_me):0; @@ -153,12 +161,15 @@ void SAPI::add_header_attribute(SAPI_Inf pa_ap_pstrdup(SAPI_info.r->pool, dont_store_value)); } -void SAPI::send_header(SAPI_Info& SAPI_info) { +void SAPI::send_headers(SAPI_Info& SAPI_info) { pa_ap_hard_timeout("Send header", SAPI_info.r); pa_ap_send_http_header(SAPI_info.r); pa_ap_kill_timeout(SAPI_info.r); } +void SAPI::clear_headers(SAPI_Info& info) { +} + size_t SAPI::send_body(SAPI_Info& SAPI_info, const void *buf, size_t size) { pa_ap_hard_timeout("Send body", SAPI_info.r); size = (size_t)pa_ap_rwrite(buf, size, SAPI_info.r);