Barracuda Application Server C/C++ Reference
NO
HttpTrace.h
1/*
2 * ____ _________ __ _
3 * / __ \___ ____ _/ /_ __(_)___ ___ ___ / / ____ ____ _(_)____
4 * / /_/ / _ \/ __ `/ / / / / / __ `__ \/ _ \/ / / __ \/ __ `/ / ___/
5 * / _, _/ __/ /_/ / / / / / / / / / / / __/ /___/ /_/ / /_/ / / /__
6 * /_/ |_|\___/\__,_/_/ /_/ /_/_/ /_/ /_/\___/_____/\____/\__, /_/\___/
7 * /____/
8 *
9 * Barracuda Embedded Web-Server
10 *
11 ****************************************************************************
12 * HEADER
13 *
14 * $Id: HttpTrace.h 5813 2026-06-15 10:15:50Z wini $
15 *
16 * COPYRIGHT: Real Time Logic LLC, 2004-2021
17 *
18 * This software is copyrighted by and is the sole property of Real
19 * Time Logic LLC. All rights, title, ownership, or other interests in
20 * the software remain the property of Real Time Logic LLC. This
21 * software may only be used in accordance with the terms and
22 * conditions stipulated in the corresponding license agreement under
23 * which the software has been supplied. Any unauthorized use,
24 * duplication, transmission, distribution, or disclosure of this
25 * software is expressly forbidden.
26
27 * This Copyright notice may not be removed or modified without prior
28 * written consent of Real Time Logic LLC.
29
30 * Real Time Logic LLC. reserves the right to modify this software
31 * without notice.
32
33 * http://www.realtimelogic.com
34 ****************************************************************************
35 *
36 */
37
38
39#ifndef __HttpTrace_h
40#define __HttpTrace_h
41
42#include <HttpServer.h>
43
44#ifdef __cplusplus
45#undef printf
46#endif
47
48#ifndef NO_HTTP_TRACE
49#ifndef HTTP_TRACE
50#define HTTP_TRACE
51#endif
52#endif
53
54#define HttpTrace_doRequestMask 0x01
55#define HttpTrace_doRequestHeadersMask 0x02
56#define HttpTrace_doResponseHeadersMask 0x04
57#define HttpTrace_doResponseBodyMask 0x08
58#define HttpTrace_doHttp11StateMask 0x10
59#define HttpTrace_doReqBufOverflowMask 0x20
60
61
62typedef void (*HttpTrace_Flush)(char* buf, int bufLen);
63
123typedef struct HttpTrace
124{
125#ifdef __cplusplus
163 static void setFLushCallback(HttpTrace_Flush fcb);
164
172 static void vprintf(int prio, const char* fmt, va_list argList);
173
179 static void printf(int prio, const char* fmt, ...);
180
186 static void write(int prio, const char* buf, int len = -1);
187
196 static int setPrio(int prio);
197
202 static BufPrint* getWriter();
203
207 static void releaseWriter(void);
208
220 static void setRequest(bool cmd);
221
226 static void setRequestHeaders(bool cmd);
227
232 static void setResponseHeaders(bool cmd);
233
239 static void setResponseBody(bool cmd);
240
266 static void setHttp11State(bool cmd);
267
277 static void setReqBufOverflow(bool cmd);
278
285 static int setBufSize(int size);
286
289 static void flush();
290
292 static bool isRequestSet();
294 static bool isRequestHeadersSet();
296 static bool isResponseHeadersSet();
298 static bool isResponseBodySet();
300 static bool isHttp11StateSet();
301
302 private:
306 inline HttpTrace() {}
307#endif
308 BufPrint print; /* As if inherited */
309 int prio;
310 U8 traceCmds;
311}HttpTrace;
312
313#ifdef __cplusplus
314extern "C" {
315#endif
316BA_API int HttpTrace_setPrio(int prio);
317BA_API void HttpTrace_setFLushCallback(HttpTrace_Flush fcb);
318BA_API HttpTrace_Flush HttpTrace_getFLushCallback(void);
319BA_API void HttpTrace_vprintf(int prio, const char* fmt, va_list argList);
320BA_API void HttpTrace_printf(int prio, const char* fmt, ...);
321BA_API void HttpTrace_write(int prio, const char* buf, int len);
322BA_API void HttpTrace_flush(void);
323
324BA_API void HttpTrace_setRequest(BaBool cmd);
325BA_API void HttpTrace_setRequestHeaders(BaBool cmd);
326BA_API void HttpTrace_setResponseHeaders(BaBool cmd);
327BA_API void HttpTrace_setResponseBody(BaBool cmd);
328BA_API void HttpTrace_setHttp11State(BaBool cmd);
329BA_API void HttpTrace_setReqBufOverflow(BaBool cmd);
330BA_API int HttpTrace_setBufSize(int size);
331BA_API void HttpTrace_close(void);
332
333/* Internal funtion. Used by macros below */
334BA_API U8 HttpTrace_getTraceCmds(void);
335#define HttpTrace_isRequestSet() \
336 (HttpTrace_getTraceCmds() & HttpTrace_doRequestMask ? TRUE : FALSE)
337#define HttpTrace_isRequestHeadersSet() \
338 (HttpTrace_getTraceCmds() & HttpTrace_doRequestHeadersMask ? TRUE : FALSE)
339#define HttpTrace_isResponseHeadersSet() \
340 (HttpTrace_getTraceCmds() & HttpTrace_doResponseHeadersMask ? TRUE : FALSE)
341#define HttpTrace_isResponseBodySet() \
342 (HttpTrace_getTraceCmds() & HttpTrace_doResponseBodyMask ? TRUE : FALSE)
343#define HttpTrace_isHttp11StateSet() \
344 (HttpTrace_getTraceCmds() & HttpTrace_doHttp11StateMask ? TRUE : FALSE)
345
346/* Private Barracuda functions */
347
348#ifdef HTTP_TRACE
349#define TRPR(data) HttpTrace_TRPR data
350BA_API void HttpTrace_TRPR(const char* fmt, ...);
351#else
352#define TRPR(data)
353#endif
354BA_API HttpTrace* HttpTrace_get(void);
355#define HttpTrace_doRequest() \
356 (HttpTrace_get()->traceCmds & HttpTrace_doRequestMask)
357#define HttpTrace_doRequestHeaders() \
358 (HttpTrace_get()->traceCmds & HttpTrace_doRequestHeadersMask)
359#define HttpTrace_doResponseHeaders() \
360 (HttpTrace_get()->traceCmds & HttpTrace_doResponseHeadersMask)
361#define HttpTrace_doResponseBody() \
362 (HttpTrace_get()->traceCmds & HttpTrace_doResponseBodyMask)
363#define HttpTrace_doHttp11State() \
364 (HttpTrace_get()->traceCmds & HttpTrace_doHttp11StateMask)
365#define HttpTrace_doReqBufOverflow() \
366 (HttpTrace_get()->traceCmds & HttpTrace_doReqBufOverflowMask)
367BA_API BufPrint* HttpTrace_getWriter(void);
368BA_API void HttpTrace_releaseWriter(void);
369#ifdef __cplusplus
370}
371inline int HttpTrace::setPrio(int prio) {
372 return HttpTrace_setPrio(prio);
373}
374inline void HttpTrace::setFLushCallback(HttpTrace_Flush fcb) {
375 HttpTrace_setFLushCallback(fcb); }
376inline void HttpTrace::vprintf(int prio, const char* fmt, va_list argList) {
377 HttpTrace_vprintf(prio, fmt, argList); }
378inline void HttpTrace::printf(int prio, const char* fmt, ...) {
379 va_list varg;
380 va_start(varg, fmt);
381 HttpTrace_vprintf(prio, fmt, varg);
382 va_end(varg);
383}
384inline void HttpTrace::write(int prio, const char* buf, int len) {
385 HttpTrace_write(prio, buf, len); }
386
388 return HttpTrace_getWriter(); }
389inline void HttpTrace::releaseWriter(void) {
390 HttpTrace_releaseWriter(); }
391inline void HttpTrace::setRequest(bool cmd) {
392 HttpTrace_setRequest(cmd); }
393inline void HttpTrace::setRequestHeaders(bool cmd) {
394 HttpTrace_setRequestHeaders(cmd); }
395inline void HttpTrace::setResponseHeaders(bool cmd) {
396 HttpTrace_setResponseHeaders(cmd); }
397inline void HttpTrace::setResponseBody(bool cmd) {
398 HttpTrace_setResponseBody(cmd); }
399inline void HttpTrace::setHttp11State(bool cmd) {
400 HttpTrace_setHttp11State(cmd); }
401inline void HttpTrace::setReqBufOverflow(bool cmd) {
402 HttpTrace_setReqBufOverflow(cmd); }
403inline int HttpTrace::setBufSize(int size) {
404 return HttpTrace_setBufSize(size); }
405inline void HttpTrace::flush() {
406 HttpTrace_flush();
407}
409 return HttpTrace_isRequestSet() ? true : false;
410}
412 return HttpTrace_isRequestHeadersSet() ? true : false;
413}
415 return HttpTrace_isResponseHeadersSet() ? true : false;
416}
418 return HttpTrace_isResponseBodySet() ? true : false;
419}
421 return HttpTrace_isHttp11StateSet() ? true : false;
422}
423#endif
424
425#ifdef __cplusplus
432{
434 _bufPrint = HttpTrace_getWriter();
435 }
437 release();
438 }
439
441 void release() {
442 if(_bufPrint) {_bufPrint=0; HttpTrace_releaseWriter(); }
443 }
444
446 void lock() {
447 if(!_bufPrint) {_bufPrint = HttpTrace_getWriter(); }
448 }
449
452 operator BufPrint*() { return _bufPrint; }
453
456 BufPrint* operator -> () { return _bufPrint; }
457 private:
458 BufPrint* _bufPrint;
459};
460#endif
461
462
463
464#endif
The BufPrint class, which implements an ANSI compatible printf method, is a base class used by severa...
Definition: BufPrint.h:122
HttpTraceWriteLock is a C++ class that makes it easier to lock the trace by using method HttpTrace::g...
Definition: HttpTrace.h:432
BufPrint * operator->()
Operator that makes it possible to do myLock->printf("hi");.
Definition: HttpTrace.h:456
void release()
Release the trace if not already released.
Definition: HttpTrace.h:441
void lock()
Lock the trace if not already locked.
Definition: HttpTrace.h:446
Trace the communication between a client and the server.
Definition: HttpTrace.h:124
static bool isResponseBodySet()
Returns true if response-body tracing is enabled.
Definition: HttpTrace.h:417
static void printf(int prio, const char *fmt,...)
Write data to the trace buffer.
Definition: HttpTrace.h:378
static int setPrio(int prio)
Set the trace message priority filter.
Definition: HttpTrace.h:371
static void flush()
Force a flush on data in trace buffer; i.e., call the flush callback.
Definition: HttpTrace.h:405
static void releaseWriter(void)
Release the trace.
Definition: HttpTrace.h:389
static void setResponseHeaders(bool cmd)
If enabled, the web-server dumps the content of the response header to the trace buffer.
Definition: HttpTrace.h:395
static void setHttp11State(bool cmd)
If enabled, prints the status for each active client connection of the internal "HTTP 1....
Definition: HttpTrace.h:399
static BufPrint * getWriter()
Get and lock the trace BufPrint object.
Definition: HttpTrace.h:387
static void setFLushCallback(HttpTrace_Flush fcb)
The HTTP_TRACE compile time macro adds the trace library to the Barracuda library,...
Definition: HttpTrace.h:374
static int setBufSize(int size)
Set trace buffer size.
Definition: HttpTrace.h:403
static bool isHttp11StateSet()
Returns true if HTTP/1.1 connection-state tracing is enabled.
Definition: HttpTrace.h:420
static void write(int prio, const char *buf, int len=-1)
Write data to the trace buffer.
Definition: HttpTrace.h:384
static void vprintf(int prio, const char *fmt, va_list argList)
Write data to the trace buffer.
Definition: HttpTrace.h:376
static bool isRequestSet()
Returns true if request-line tracing is enabled.
Definition: HttpTrace.h:408
static bool isResponseHeadersSet()
Returns true if response-header tracing is enabled.
Definition: HttpTrace.h:414
static bool isRequestHeadersSet()
Returns true if request-header tracing is enabled.
Definition: HttpTrace.h:411
static void setResponseBody(bool cmd)
If enabled, the web-server dumps the content of the response body to the trace buffer.
Definition: HttpTrace.h:397
static void setRequest(bool cmd)
Enable or disable request-line tracing.
Definition: HttpTrace.h:391
static void setRequestHeaders(bool cmd)
If enabled, the web-server dumps the content of the request header to the trace buffer.
Definition: HttpTrace.h:393
static void setReqBufOverflow(bool cmd)
Prints "ReqBufOverflow" if enabled and the HttpRequest buffer overflows.
Definition: HttpTrace.h:401