From 35078916b7c4818f296512e6a5b07158a14e5541 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Thu, 29 Apr 2010 20:57:19 +0000 Subject: [PATCH] * fix wildfire exception handling; collect stuff in a buffer, and serialize it to the header when done. --- webcit/subst.c | 25 +++++++++---------------- webcit/tcp_sockets.c | 5 +++++ webcit/webcit.h | 1 + 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/webcit/subst.c b/webcit/subst.c index af37b2098..24c660b75 100644 --- a/webcit/subst.c +++ b/webcit/subst.c @@ -136,7 +136,6 @@ const char *ContextName(int ContextType) void LogTemplateError (StrBuf *Target, const char *Type, int ErrorPos, WCTemplputParams *TP, const char *Format, ...) { wcsession *WCC; - StrBuf *Header; StrBuf *Error; StrBuf *Info; va_list arg_ptr; @@ -192,7 +191,7 @@ void LogTemplateError (StrBuf *Target, const char *Type, int ErrorPos, WCTemplpu return; } - Header = NewStrBuf(); + if (WCC->WFBuf == NULL) WCC->WFBuf = NewStrBuf(); if (TP->Tokens != NULL) { /* deprecated: @@ -213,7 +212,7 @@ void LogTemplateError (StrBuf *Target, const char *Type, int ErrorPos, WCTemplpu ChrPtr(TP->Tokens->FlatToken)); - SerializeJson(Header, WildFireException(SKEY(TP->Tokens->FileName), + SerializeJson(WCC->WFBuf, WildFireException(SKEY(TP->Tokens->FileName), TP->Tokens->Line, Info, 1), 1); @@ -223,7 +222,7 @@ void LogTemplateError (StrBuf *Target, const char *Type, int ErrorPos, WCTemplpu Error, eERROR), 1); */ - WildFireSerializePayload(Header, WCC->HBuf, &WCC->Hdr->nWildfireHeaders, NULL); + } else { @@ -239,10 +238,8 @@ void LogTemplateError (StrBuf *Target, const char *Type, int ErrorPos, WCTemplpu Err, ChrPtr(Error), ChrPtr(TP->Tokens->FlatToken)); - SerializeJson(Header, WildFireException(HKEY(__FILE__), __LINE__, Info, 1), 1); - WildFireSerializePayload(Header, WCC->HBuf, &WCC->Hdr->nWildfireHeaders, NULL); + SerializeJson(WCC->WFBuf, WildFireException(HKEY(__FILE__), __LINE__, Info, 1), 1); } - FreeStrBuf(&Header); FreeStrBuf(&Info); FreeStrBuf(&Error); /* @@ -257,7 +254,6 @@ void LogTemplateError (StrBuf *Target, const char *Type, int ErrorPos, WCTemplpu void LogError (StrBuf *Target, const char *Type, const char *Format, ...) { wcsession *WCC; - StrBuf *Header; StrBuf *Error; StrBuf *Info; va_list arg_ptr; @@ -272,16 +268,13 @@ void LogError (StrBuf *Target, const char *Type, const char *Format, ...) lprintf(1, ChrPtr(Error)); WCC = WC; - Header = NewStrBuf(); + if (WCC->WFBuf == NULL) WCC->WFBuf = NewStrBuf(); + SerializeJson(WCC->WFBuf, WildFireException(Type, strlen(Type), + 0, + Info, + 1), 1); - SerializeJson(Header, WildFireException(Type, strlen(Type), - 0, - Info, - 1), 1); - WildFireSerializePayload(Header, WCC->HBuf, &WCC->Hdr->nWildfireHeaders, NULL); - - FreeStrBuf(&Header); FreeStrBuf(&Info); FreeStrBuf(&Error); /* diff --git a/webcit/tcp_sockets.c b/webcit/tcp_sockets.c index 62f886559..5e1e2503f 100644 --- a/webcit/tcp_sockets.c +++ b/webcit/tcp_sockets.c @@ -840,6 +840,11 @@ long end_burst(void) } } + if (WCC->WFBuf != NULL) { + WildFireSerializePayload(WCC->WFBuf, WCC->HBuf, &WCC->Hdr->nWildfireHeaders, NULL); + FreeStrBuf(WCC->WFBuf); + } + if (WCC->Hdr->HR.prohibit_caching) hprintf("Pragma: no-cache\r\nCache-Control: no-store\r\nExpires:-1\r\n"); hprintf("Content-length: %d\r\n\r\n", StrLength(WCC->WBuf)); diff --git a/webcit/webcit.h b/webcit/webcit.h index e88d0e90d..91feac91b 100644 --- a/webcit/webcit.h +++ b/webcit/webcit.h @@ -485,6 +485,7 @@ struct wcsession { ParsedHttpHdrs *Hdr; StrBuf *WBuf; /* Our output buffer */ StrBuf *HBuf; /* Our HeaderBuffer */ + StrBuf *WFBuf; /* Wildfire error logging buffer */ HashList *vars; /* HTTP variable substitutions for this page */ StrBuf *trailing_javascript; /* extra javascript to be appended to page */ -- 2.30.2