20#include <winpr/config.h>
22#include "CallbackAppender.h"
30} wLogCallbackAppender;
32static BOOL WLog_CallbackAppender_Open(WINPR_ATTR_UNUSED wLog* log,
33 WINPR_ATTR_UNUSED wLogAppender* appender)
38static BOOL WLog_CallbackAppender_Close(WINPR_ATTR_UNUSED wLog* log,
39 WINPR_ATTR_UNUSED wLogAppender* appender)
44static BOOL WLog_CallbackAppender_WriteMessage(wLog* log, wLogAppender* appender,
47 WINPR_ASSERT(cmessage);
51 char prefix[WLOG_MAX_PREFIX_SIZE] = WINPR_C_ARRAY_INIT;
52 WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix,
sizeof(prefix));
54 wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
56 if (callbackAppender->callbacksEx.message)
59 message.PrefixString = prefix;
60 return callbackAppender->callbacksEx.message(appender, &message);
62 else if (callbackAppender->callbacks.message)
65 message.PrefixString = prefix;
66 return callbackAppender->callbacks.message(&message);
72static BOOL WLog_CallbackAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
78 char prefix[WLOG_MAX_PREFIX_SIZE] = WINPR_C_ARRAY_INIT;
79 WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix,
sizeof(prefix));
81 wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
82 if (callbackAppender->callbacksEx.data)
85 message.PrefixString = prefix;
86 return callbackAppender->callbacksEx.data(appender, &message);
88 else if (callbackAppender->callbacks.data)
91 message.PrefixString = prefix;
92 return callbackAppender->callbacks.data(&message);
98static BOOL WLog_CallbackAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
101 WINPR_ASSERT(cmessage);
105 char prefix[WLOG_MAX_PREFIX_SIZE] = WINPR_C_ARRAY_INIT;
106 WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix,
sizeof(prefix));
108 wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
109 if (callbackAppender->callbacksEx.image)
112 message.PrefixString = prefix;
113 return callbackAppender->callbacksEx.image(appender, &message);
115 else if (callbackAppender->callbacks.image)
118 message.PrefixString = prefix;
119 return callbackAppender->callbacks.image(&message);
125static BOOL WLog_CallbackAppender_WritePacketMessage(wLog* log, wLogAppender* appender,
128 WINPR_ASSERT(cmessage);
132 char prefix[WLOG_MAX_PREFIX_SIZE] = WINPR_C_ARRAY_INIT;
133 WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix,
sizeof(prefix));
135 wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
136 if (callbackAppender->callbacksEx.package)
139 message.PrefixString = prefix;
140 return callbackAppender->callbacksEx.package(appender, &message);
142 else if (callbackAppender->callbacks.package)
145 message.PrefixString = prefix;
146 return callbackAppender->callbacks.package(&message);
152static BOOL WLog_CallbackAppender_Set(wLogAppender* appender,
const char* setting,
void* value)
154 wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
159 if (strcmp(setting,
"callbacks") == 0)
165 if (strcmp(setting,
"callbacksEx") == 0)
173static void WLog_CallbackAppender_Free(wLogAppender* appender)
178wLogAppender* WLog_CallbackAppender_New(WINPR_ATTR_UNUSED wLog* log)
180 wLogCallbackAppender* CallbackAppender =
181 (wLogCallbackAppender*)calloc(1,
sizeof(wLogCallbackAppender));
182 if (!CallbackAppender)
185 CallbackAppender->common.Type = WLOG_APPENDER_CALLBACK;
186 CallbackAppender->common.Open = WLog_CallbackAppender_Open;
187 CallbackAppender->common.Close = WLog_CallbackAppender_Close;
188 CallbackAppender->common.WriteMessage = WLog_CallbackAppender_WriteMessage;
189 CallbackAppender->common.WriteDataMessage = WLog_CallbackAppender_WriteDataMessage;
190 CallbackAppender->common.WriteImageMessage = WLog_CallbackAppender_WriteImageMessage;
191 CallbackAppender->common.WritePacketMessage = WLog_CallbackAppender_WritePacketMessage;
192 CallbackAppender->common.Free = WLog_CallbackAppender_Free;
193 CallbackAppender->common.Set = WLog_CallbackAppender_Set;
195 return &CallbackAppender->common;
extended callback type with context