FreeRDP
Loading...
Searching...
No Matches
CallbackAppender.c
1
20#include <winpr/config.h>
21
22#include "CallbackAppender.h"
23
24typedef struct
25{
26 WLOG_APPENDER_COMMON();
27
28 wLogCallbacks* callbacks;
29} wLogCallbackAppender;
30
31static BOOL WLog_CallbackAppender_Open(WINPR_ATTR_UNUSED wLog* log,
32 WINPR_ATTR_UNUSED wLogAppender* appender)
33{
34 return TRUE;
35}
36
37static BOOL WLog_CallbackAppender_Close(WINPR_ATTR_UNUSED wLog* log,
38 WINPR_ATTR_UNUSED wLogAppender* appender)
39{
40 return TRUE;
41}
42
43static BOOL WLog_CallbackAppender_WriteMessage(wLog* log, wLogAppender* appender,
44 wLogMessage* message)
45{
46 char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
47 wLogCallbackAppender* callbackAppender = NULL;
48
49 if (!appender)
50 return FALSE;
51
52 message->PrefixString = prefix;
53 WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
54
55 callbackAppender = (wLogCallbackAppender*)appender;
56
57 if (callbackAppender->callbacks && callbackAppender->callbacks->message)
58 return callbackAppender->callbacks->message(message);
59 else
60 return FALSE;
61}
62
63static BOOL WLog_CallbackAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
64 wLogMessage* message)
65{
66 char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
67 wLogCallbackAppender* callbackAppender = NULL;
68
69 if (!appender)
70 return FALSE;
71
72 message->PrefixString = prefix;
73 WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
74
75 callbackAppender = (wLogCallbackAppender*)appender;
76 if (callbackAppender->callbacks && callbackAppender->callbacks->data)
77 return callbackAppender->callbacks->data(message);
78 else
79 return FALSE;
80}
81
82static BOOL WLog_CallbackAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
83 wLogMessage* message)
84{
85 char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
86 wLogCallbackAppender* callbackAppender = NULL;
87
88 if (!appender)
89 return FALSE;
90
91 message->PrefixString = prefix;
92 WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
93
94 callbackAppender = (wLogCallbackAppender*)appender;
95 if (callbackAppender->callbacks && callbackAppender->callbacks->image)
96 return callbackAppender->callbacks->image(message);
97 else
98 return FALSE;
99}
100
101static BOOL WLog_CallbackAppender_WritePacketMessage(wLog* log, wLogAppender* appender,
102 wLogMessage* message)
103{
104 char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
105 wLogCallbackAppender* callbackAppender = NULL;
106
107 if (!appender)
108 return FALSE;
109
110 message->PrefixString = prefix;
111 WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
112
113 callbackAppender = (wLogCallbackAppender*)appender;
114 if (callbackAppender->callbacks && callbackAppender->callbacks->package)
115 return callbackAppender->callbacks->package(message);
116 else
117 return FALSE;
118}
119
120static BOOL WLog_CallbackAppender_Set(wLogAppender* appender, const char* setting, void* value)
121{
122 wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
123
124 if (!value || (strcmp(setting, "callbacks") != 0))
125 return FALSE;
126
127 if (!(callbackAppender->callbacks = calloc(1, sizeof(wLogCallbacks))))
128 {
129 return FALSE;
130 }
131
132 callbackAppender->callbacks = memcpy(callbackAppender->callbacks, value, sizeof(wLogCallbacks));
133 return TRUE;
134}
135
136static void WLog_CallbackAppender_Free(wLogAppender* appender)
137{
138 wLogCallbackAppender* callbackAppender = NULL;
139 if (!appender)
140 {
141 return;
142 }
143
144 callbackAppender = (wLogCallbackAppender*)appender;
145
146 free(callbackAppender->callbacks);
147 free(appender);
148}
149
150wLogAppender* WLog_CallbackAppender_New(WINPR_ATTR_UNUSED wLog* log)
151{
152 wLogCallbackAppender* CallbackAppender = NULL;
153
154 CallbackAppender = (wLogCallbackAppender*)calloc(1, sizeof(wLogCallbackAppender));
155 if (!CallbackAppender)
156 return NULL;
157
158 CallbackAppender->Type = WLOG_APPENDER_CALLBACK;
159
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;
168
169 return (wLogAppender*)CallbackAppender;
170}