20#include <winpr/config.h>
22#include "CallbackAppender.h"
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 WINPR_ASSERT(cmessage);
50 char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
51 WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix,
sizeof(prefix));
53 wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
55 if (callbackAppender->callbacks && callbackAppender->callbacks->message)
58 message.PrefixString = prefix;
59 return callbackAppender->callbacks->message(&message);
65static BOOL WLog_CallbackAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
71 char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
72 WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix,
sizeof(prefix));
74 wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
75 if (callbackAppender->callbacks && callbackAppender->callbacks->data)
78 message.PrefixString = prefix;
79 return callbackAppender->callbacks->data(&message);
85static BOOL WLog_CallbackAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
88 WINPR_ASSERT(cmessage);
92 char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
93 WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix,
sizeof(prefix));
95 wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
96 if (callbackAppender->callbacks && callbackAppender->callbacks->image)
99 message.PrefixString = prefix;
100 return callbackAppender->callbacks->image(&message);
106static BOOL WLog_CallbackAppender_WritePacketMessage(wLog* log, wLogAppender* appender,
109 WINPR_ASSERT(cmessage);
113 char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
114 WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix,
sizeof(prefix));
116 wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
117 if (callbackAppender->callbacks && callbackAppender->callbacks->package)
120 message.PrefixString = prefix;
121 return callbackAppender->callbacks->package(&message);
127static BOOL WLog_CallbackAppender_Set(wLogAppender* appender,
const char* setting,
void* value)
129 wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
131 if (!value || (strcmp(setting,
"callbacks") != 0))
134 if (!(callbackAppender->callbacks = calloc(1,
sizeof(
wLogCallbacks))))
139 callbackAppender->callbacks = memcpy(callbackAppender->callbacks, value,
sizeof(
wLogCallbacks));
143static void WLog_CallbackAppender_Free(wLogAppender* appender)
145 wLogCallbackAppender* callbackAppender = NULL;
151 callbackAppender = (wLogCallbackAppender*)appender;
153 free(callbackAppender->callbacks);
157wLogAppender* WLog_CallbackAppender_New(WINPR_ATTR_UNUSED wLog* log)
159 wLogCallbackAppender* CallbackAppender =
160 (wLogCallbackAppender*)calloc(1,
sizeof(wLogCallbackAppender));
161 if (!CallbackAppender)
164 CallbackAppender->common.Type = WLOG_APPENDER_CALLBACK;
165 CallbackAppender->common.Open = WLog_CallbackAppender_Open;
166 CallbackAppender->common.Close = WLog_CallbackAppender_Close;
167 CallbackAppender->common.WriteMessage = WLog_CallbackAppender_WriteMessage;
168 CallbackAppender->common.WriteDataMessage = WLog_CallbackAppender_WriteDataMessage;
169 CallbackAppender->common.WriteImageMessage = WLog_CallbackAppender_WriteImageMessage;
170 CallbackAppender->common.WritePacketMessage = WLog_CallbackAppender_WritePacketMessage;
171 CallbackAppender->common.Free = WLog_CallbackAppender_Free;
172 CallbackAppender->common.Set = WLog_CallbackAppender_Set;
174 return &CallbackAppender->common;