C/C++ Reference
HttpTrace.h
00001 /*
00002  *     ____             _________                __                _
00003  *    / __ \___  ____ _/ /_  __(_)___ ___  ___  / /   ____  ____ _(_)____
00004  *   / /_/ / _ \/ __ `/ / / / / / __ `__ \/ _ \/ /   / __ \/ __ `/ / ___/
00005  *  / _, _/  __/ /_/ / / / / / / / / / / /  __/ /___/ /_/ / /_/ / / /__
00006  * /_/ |_|\___/\__,_/_/ /_/ /_/_/ /_/ /_/\___/_____/\____/\__, /_/\___/
00007  *                                                       /____/
00008  *
00009  *                  Barracuda Embedded Web-Server
00010  *
00011  ****************************************************************************
00012  *                            HEADER
00013  *
00014  *   $Id: HttpTrace.h 2376 2011-05-25 01:16:16Z wini $
00015  *
00016  *   COPYRIGHT:  Real Time Logic LLC, 2004-2008
00017  *               http://www.realtimelogic.com
00018  */
00019 
00020 
00021 #ifndef __HttpTrace_h
00022 #define __HttpTrace_h
00023 
00024 #include <HttpServer.h>
00025 
00026 #ifndef NO_HTTP_TRACE
00027 #ifndef HTTP_TRACE
00028 #define HTTP_TRACE
00029 #endif
00030 #endif
00031 
00032 #define HttpTrace_doRequestMask          0x01
00033 #define HttpTrace_doRequestHeadersMask   0x02
00034 #define HttpTrace_doResponseHeadersMask  0x04
00035 #define HttpTrace_doResponseBodyMask     0x08
00036 #define HttpTrace_doHttp11StateMask      0x10
00037 #define HttpTrace_doReqBufOverflowMask   0x20
00038 
00039 
00040 typedef void (*HttpTrace_Flush)(char* buf, int bufLen);
00041 
00103 typedef struct HttpTrace
00104 {
00105 #ifdef __cplusplus
00106 
00146       static void setFLushCallback(HttpTrace_Flush fcb);
00147 
00155       static void vprintf(int prio, const char* fmt, va_list argList);
00156 
00162       static void printf(int prio, const char* fmt, ...);
00163 
00169       static void write(int prio, const char* buf, int len = -1);
00170 
00179       static int setPrio(int prio);
00180 
00185       static BufPrint* getWriter();
00186 
00190       static void releaseWriter(void);
00191 
00202       static void setRequest(bool cmd);
00203 
00207       static void setRequestHeaders(bool cmd);
00208 
00212       static void setResponseHeaders(bool cmd);
00213 
00218       static void setResponseBody(bool cmd);
00219 
00245       static void setHttp11State(bool cmd);
00246 
00256       static void setReqBufOverflow(bool cmd);
00257 
00262       static int setBufSize(int size);
00263 
00266       static void flush();
00267 
00268       static bool isRequestSet();
00269       static bool isRequestHeadersSet();
00270       static bool isResponseHeadersSet();
00271       static bool isResponseBodySet();
00272       static bool isHttp11StateSet();
00273 
00274    private:
00278       inline HttpTrace() {}
00279 #endif
00280       BufPrint print; /* As if inherited */
00281       int prio;
00282       U8 traceCmds;
00283 }HttpTrace;
00284 
00285 #ifdef __cplusplus
00286 extern "C" {
00287 #endif
00288 BA_API int HttpTrace_setPrio(int prio);
00289 BA_API void HttpTrace_setFLushCallback(HttpTrace_Flush fcb);
00290 BA_API HttpTrace_Flush HttpTrace_getFLushCallback(void);
00291 BA_API void HttpTrace_vprintf(int prio, const char* fmt, va_list argList);
00292 BA_API void HttpTrace_printf(int prio, const char* fmt, ...);
00293 BA_API void HttpTrace_write(int prio, const char* buf, int len);
00294 BA_API void HttpTrace_flush(void);
00295 
00296 BA_API void HttpTrace_setRequest(BaBool cmd);
00297 BA_API void HttpTrace_setRequestHeaders(BaBool cmd);
00298 BA_API void HttpTrace_setResponseHeaders(BaBool cmd);
00299 BA_API void HttpTrace_setResponseBody(BaBool cmd);
00300 BA_API void HttpTrace_setHttp11State(BaBool cmd);
00301 BA_API void HttpTrace_setReqBufOverflow(BaBool cmd);
00302 BA_API int HttpTrace_setBufSize(int size);
00303 
00304 /* Internal funtion. Used by macros below */
00305 BA_API U8 HttpTrace_getTraceCmds(void);
00306 #define HttpTrace_isRequestSet() \
00307   (HttpTrace_getTraceCmds() & HttpTrace_doRequestMask ? TRUE : FALSE)
00308 #define HttpTrace_isRequestHeadersSet() \
00309   (HttpTrace_getTraceCmds() & HttpTrace_doRequestHeadersMask ? TRUE : FALSE)
00310 #define HttpTrace_isResponseHeadersSet() \
00311   (HttpTrace_getTraceCmds() & HttpTrace_doResponseHeadersMask ? TRUE : FALSE)
00312 #define HttpTrace_isResponseBodySet() \
00313   (HttpTrace_getTraceCmds() & HttpTrace_doResponseBodyMask ? TRUE : FALSE)
00314 #define HttpTrace_isHttp11StateSet() \
00315   (HttpTrace_getTraceCmds() & HttpTrace_doHttp11StateMask ? TRUE : FALSE)
00316 
00317 /* Private Barracuda functions */
00318 
00319 #ifdef HTTP_TRACE
00320 #define TRPR(data) HttpTrace_TRPR data
00321 BA_API void HttpTrace_TRPR(const char* fmt, ...);
00322 #else
00323 #define TRPR(data)
00324 #endif
00325 BA_API HttpTrace* HttpTrace_get(void);
00326 #define HttpTrace_doRequest() \
00327   (HttpTrace_get()->traceCmds & HttpTrace_doRequestMask)
00328 #define HttpTrace_doRequestHeaders() \
00329   (HttpTrace_get()->traceCmds & HttpTrace_doRequestHeadersMask)
00330 #define HttpTrace_doResponseHeaders() \
00331   (HttpTrace_get()->traceCmds & HttpTrace_doResponseHeadersMask)
00332 #define HttpTrace_doResponseBody() \
00333   (HttpTrace_get()->traceCmds & HttpTrace_doResponseBodyMask)
00334 #define HttpTrace_doHttp11State() \
00335   (HttpTrace_get()->traceCmds & HttpTrace_doHttp11StateMask)
00336 #define HttpTrace_doReqBufOverflow() \
00337   (HttpTrace_get()->traceCmds & HttpTrace_doReqBufOverflowMask)
00338 BA_API BufPrint* HttpTrace_getWriter(void);
00339 BA_API void HttpTrace_releaseWriter(void);
00340 #ifdef __cplusplus
00341 }
00342 inline int HttpTrace::setPrio(int prio) {
00343    return HttpTrace_setPrio(prio);
00344 }
00345 inline void HttpTrace::setFLushCallback(HttpTrace_Flush fcb) {
00346    HttpTrace_setFLushCallback(fcb); }
00347 inline void HttpTrace::vprintf(int prio, const char* fmt, va_list argList) {
00348    HttpTrace_vprintf(prio, fmt, argList); }
00349 inline void HttpTrace::printf(int prio, const char* fmt, ...) {
00350    va_list varg;
00351    va_start(varg, fmt);
00352    HttpTrace_vprintf(prio, fmt, varg);
00353    va_end(varg);
00354 }
00355 inline void HttpTrace::write(int prio, const char* buf, int len) {
00356    HttpTrace_write(prio, buf, len); }
00357 
00358 inline BufPrint* HttpTrace::getWriter() {
00359    return HttpTrace_getWriter(); }
00360 inline void HttpTrace::releaseWriter(void) {
00361    HttpTrace_releaseWriter(); }
00362 inline void HttpTrace::setRequest(bool cmd) {
00363    HttpTrace_setRequest(cmd); }
00364 inline void HttpTrace::setRequestHeaders(bool cmd) {
00365    HttpTrace_setRequestHeaders(cmd); }
00366 inline void HttpTrace::setResponseHeaders(bool cmd) {
00367    HttpTrace_setResponseHeaders(cmd); }
00368 inline void HttpTrace::setResponseBody(bool cmd) {
00369    HttpTrace_setResponseBody(cmd); }
00370 inline void HttpTrace::setHttp11State(bool cmd) {
00371    HttpTrace_setHttp11State(cmd); }
00372 inline void HttpTrace::setReqBufOverflow(bool cmd) {
00373    HttpTrace_setReqBufOverflow(cmd); }
00374 inline int HttpTrace::setBufSize(int size) {
00375    return HttpTrace_setBufSize(size); }
00376 inline void HttpTrace::flush() {
00377    HttpTrace_flush();
00378 }
00379 inline bool HttpTrace::isRequestSet() {
00380    return HttpTrace_isRequestSet() ? true : false;
00381 }
00382 inline bool HttpTrace::isRequestHeadersSet() {
00383    return HttpTrace_isRequestHeadersSet() ? true : false;
00384 }
00385 inline bool HttpTrace::isResponseHeadersSet() {
00386    return HttpTrace_isResponseHeadersSet() ? true : false;
00387 }
00388 inline bool HttpTrace::isResponseBodySet() {
00389    return HttpTrace_isResponseBodySet() ? true : false;
00390 }
00391 inline bool HttpTrace::isHttp11StateSet() {
00392    return HttpTrace_isHttp11StateSet() ? true : false;
00393 }
00394 #endif
00395 
00396 #ifdef __cplusplus
00397 
00402 struct HttpTraceWriteLock
00403 {
00404       HttpTraceWriteLock() {
00405          _bufPrint = HttpTrace_getWriter();
00406       }
00407       ~HttpTraceWriteLock() {
00408          release();
00409       }
00410 
00412       void release() {
00413          if(_bufPrint) {_bufPrint=0; HttpTrace_releaseWriter(); }
00414       }
00415 
00417       void lock() {
00418          if(!_bufPrint) {_bufPrint = HttpTrace_getWriter(); }
00419       }
00420 
00423       operator BufPrint*() { return _bufPrint; }
00424 
00427       BufPrint* operator -> () { return _bufPrint; }
00428    private:
00429       BufPrint* _bufPrint;
00430 };
00431 #endif
00432 
00433 
00434 
00435 #endif