* fix wildfire exception handling; collect stuff in a buffer, and serialize it to...
authorWilfried Göesgens <willi@citadel.org>
Thu, 29 Apr 2010 20:57:19 +0000 (20:57 +0000)
committerWilfried Göesgens <willi@citadel.org>
Thu, 29 Apr 2010 20:57:19 +0000 (20:57 +0000)
webcit/subst.c
webcit/tcp_sockets.c
webcit/webcit.h

index af37b2098df251c8be4aab1a243a987fe9d217df..24c660b75294e6a3b7acbfbe010fe8d9f5377c95 100644 (file)
@@ -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);
 /*
index 62f8865592771ee2070049a9a52ac4aecebd5e00..5e1e2503f9a52ccc85d06d2421f49c5659393485 100644 (file)
@@ -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));
index e88d0e90de53c67bdea69703e5bec5b5c0dee897..91feac91bdd2fa5ca9baf0965ed8bd297101861e 100644 (file)
@@ -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 */