20#include <winpr/config.h>
22#include "CallbackAppender.h"
26 WLOG_APPENDER_COMMON();
29} wLogCallbackAppender;
31static BOOL WLog_CallbackAppender_Open(WINPR_ATTR_UNUSED wLog* log,
32 WINPR_ATTR_UNUSED wLogAppender* appender)
37static BOOL WLog_CallbackAppender_Close(WINPR_ATTR_UNUSED wLog* log,
38 WINPR_ATTR_UNUSED wLogAppender* appender)
43static BOOL WLog_CallbackAppender_WriteMessage(wLog* log, wLogAppender* appender,
46 char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
47 wLogCallbackAppender* callbackAppender = NULL;
52 message->PrefixString = prefix;
53 WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
55 callbackAppender = (wLogCallbackAppender*)appender;
57 if (callbackAppender->callbacks && callbackAppender->callbacks->message)
58 return callbackAppender->callbacks->message(message);
63static BOOL WLog_CallbackAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
66 char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
67 wLogCallbackAppender* callbackAppender = NULL;
72 message->PrefixString = prefix;
73 WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
75 callbackAppender = (wLogCallbackAppender*)appender;
76 if (callbackAppender->callbacks && callbackAppender->callbacks->data)
77 return callbackAppender->callbacks->data(message);
82static BOOL WLog_CallbackAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
85 char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
86 wLogCallbackAppender* callbackAppender = NULL;
91 message->PrefixString = prefix;
92 WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
94 callbackAppender = (wLogCallbackAppender*)appender;
95 if (callbackAppender->callbacks && callbackAppender->callbacks->image)
96 return callbackAppender->callbacks->image(message);
101static BOOL WLog_CallbackAppender_WritePacketMessage(wLog* log, wLogAppender* appender,
104 char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
105 wLogCallbackAppender* callbackAppender = NULL;
110 message->PrefixString = prefix;
111 WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
113 callbackAppender = (wLogCallbackAppender*)appender;
114 if (callbackAppender->callbacks && callbackAppender->callbacks->package)
115 return callbackAppender->callbacks->package(message);
120static BOOL WLog_CallbackAppender_Set(wLogAppender* appender,
const char* setting,
void* value)
122 wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
124 if (!value || (strcmp(setting,
"callbacks") != 0))
127 if (!(callbackAppender->callbacks = calloc(1,
sizeof(
wLogCallbacks))))
132 callbackAppender->callbacks = memcpy(callbackAppender->callbacks, value,
sizeof(
wLogCallbacks));
136static void WLog_CallbackAppender_Free(wLogAppender* appender)
138 wLogCallbackAppender* callbackAppender = NULL;
144 callbackAppender = (wLogCallbackAppender*)appender;
146 free(callbackAppender->callbacks);
150wLogAppender* WLog_CallbackAppender_New(WINPR_ATTR_UNUSED wLog* log)
152 wLogCallbackAppender* CallbackAppender = NULL;
154 CallbackAppender = (wLogCallbackAppender*)calloc(1,
sizeof(wLogCallbackAppender));
155 if (!CallbackAppender)
158 CallbackAppender->Type = WLOG_APPENDER_CALLBACK;
160 CallbackAppender->Open = WLog_CallbackAppender_Open;
161 CallbackAppender->Close = WLog_CallbackAppender_Close;
162 CallbackAppender->WriteMessage = WLog_CallbackAppender_WriteMessage;
163 CallbackAppender->WriteDataMessage = WLog_CallbackAppender_WriteDataMessage;
164 CallbackAppender->WriteImageMessage = WLog_CallbackAppender_WriteImageMessage;
165 CallbackAppender->WritePacketMessage = WLog_CallbackAppender_WritePacketMessage;
166 CallbackAppender->Free = WLog_CallbackAppender_Free;
167 CallbackAppender->Set = WLog_CallbackAppender_Set;
169 return (wLogAppender*)CallbackAppender;