|
C/C++ Reference
|
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