Coverage Report

Created: 2024-05-20 06:11

/src/FreeRDP/winpr/libwinpr/utils/wlog/CallbackAppender.c
Line
Count
Source (jump to first uncovered line)
1
/**
2
 * WinPR: Windows Portable Runtime
3
 * WinPR Logger
4
 *
5
 * Copyright 2014 Armin Novak <armin.novak@thincast.com>
6
 *
7
 * Licensed under the Apache License, Version 2.0 (the "License");
8
 * you may not use this file except in compliance with the License.
9
 * You may obtain a copy of the License at
10
 *
11
 *     http://www.apache.org/licenses/LICENSE-2.0
12
 *
13
 * Unless required by applicable law or agreed to in writing, software
14
 * distributed under the License is distributed on an "AS IS" BASIS,
15
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
 * See the License for the specific language governing permissions and
17
 * limitations under the License.
18
 */
19
20
#include <winpr/config.h>
21
22
#include "CallbackAppender.h"
23
24
typedef struct
25
{
26
  WLOG_APPENDER_COMMON();
27
28
  wLogCallbacks* callbacks;
29
} wLogCallbackAppender;
30
31
static BOOL WLog_CallbackAppender_Open(wLog* log, wLogAppender* appender)
32
0
{
33
0
  return TRUE;
34
0
}
35
36
static BOOL WLog_CallbackAppender_Close(wLog* log, wLogAppender* appender)
37
0
{
38
0
  return TRUE;
39
0
}
40
41
static BOOL WLog_CallbackAppender_WriteMessage(wLog* log, wLogAppender* appender,
42
                                               wLogMessage* message)
43
0
{
44
0
  char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
45
0
  wLogCallbackAppender* callbackAppender = NULL;
46
47
0
  if (!appender)
48
0
    return FALSE;
49
50
0
  message->PrefixString = prefix;
51
0
  WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
52
53
0
  callbackAppender = (wLogCallbackAppender*)appender;
54
55
0
  if (callbackAppender->callbacks && callbackAppender->callbacks->message)
56
0
    return callbackAppender->callbacks->message(message);
57
0
  else
58
0
    return FALSE;
59
0
}
60
61
static BOOL WLog_CallbackAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
62
                                                   wLogMessage* message)
63
0
{
64
0
  char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
65
0
  wLogCallbackAppender* callbackAppender = NULL;
66
67
0
  if (!appender)
68
0
    return FALSE;
69
70
0
  message->PrefixString = prefix;
71
0
  WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
72
73
0
  callbackAppender = (wLogCallbackAppender*)appender;
74
0
  if (callbackAppender->callbacks && callbackAppender->callbacks->data)
75
0
    return callbackAppender->callbacks->data(message);
76
0
  else
77
0
    return FALSE;
78
0
}
79
80
static BOOL WLog_CallbackAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
81
                                                    wLogMessage* message)
82
0
{
83
0
  char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
84
0
  wLogCallbackAppender* callbackAppender = NULL;
85
86
0
  if (!appender)
87
0
    return FALSE;
88
89
0
  message->PrefixString = prefix;
90
0
  WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
91
92
0
  callbackAppender = (wLogCallbackAppender*)appender;
93
0
  if (callbackAppender->callbacks && callbackAppender->callbacks->image)
94
0
    return callbackAppender->callbacks->image(message);
95
0
  else
96
0
    return FALSE;
97
0
}
98
99
static BOOL WLog_CallbackAppender_WritePacketMessage(wLog* log, wLogAppender* appender,
100
                                                     wLogMessage* message)
101
0
{
102
0
  char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
103
0
  wLogCallbackAppender* callbackAppender = NULL;
104
105
0
  if (!appender)
106
0
    return FALSE;
107
108
0
  message->PrefixString = prefix;
109
0
  WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
110
111
0
  callbackAppender = (wLogCallbackAppender*)appender;
112
0
  if (callbackAppender->callbacks && callbackAppender->callbacks->package)
113
0
    return callbackAppender->callbacks->package(message);
114
0
  else
115
0
    return FALSE;
116
0
}
117
118
static BOOL WLog_CallbackAppender_Set(wLogAppender* appender, const char* setting, void* value)
119
0
{
120
0
  wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
121
122
0
  if (!value || strcmp(setting, "callbacks"))
123
0
    return FALSE;
124
125
0
  if (!(callbackAppender->callbacks = calloc(1, sizeof(wLogCallbacks))))
126
0
  {
127
0
    return FALSE;
128
0
  }
129
130
0
  callbackAppender->callbacks = memcpy(callbackAppender->callbacks, value, sizeof(wLogCallbacks));
131
0
  return TRUE;
132
0
}
133
134
static void WLog_CallbackAppender_Free(wLogAppender* appender)
135
0
{
136
0
  wLogCallbackAppender* callbackAppender = NULL;
137
0
  if (!appender)
138
0
  {
139
0
    return;
140
0
  }
141
142
0
  callbackAppender = (wLogCallbackAppender*)appender;
143
144
0
  free(callbackAppender->callbacks);
145
0
  free(appender);
146
0
}
147
148
wLogAppender* WLog_CallbackAppender_New(wLog* log)
149
0
{
150
0
  wLogCallbackAppender* CallbackAppender = NULL;
151
152
0
  CallbackAppender = (wLogCallbackAppender*)calloc(1, sizeof(wLogCallbackAppender));
153
0
  if (!CallbackAppender)
154
0
    return NULL;
155
156
0
  CallbackAppender->Type = WLOG_APPENDER_CALLBACK;
157
158
0
  CallbackAppender->Open = WLog_CallbackAppender_Open;
159
0
  CallbackAppender->Close = WLog_CallbackAppender_Close;
160
0
  CallbackAppender->WriteMessage = WLog_CallbackAppender_WriteMessage;
161
0
  CallbackAppender->WriteDataMessage = WLog_CallbackAppender_WriteDataMessage;
162
0
  CallbackAppender->WriteImageMessage = WLog_CallbackAppender_WriteImageMessage;
163
0
  CallbackAppender->WritePacketMessage = WLog_CallbackAppender_WritePacketMessage;
164
0
  CallbackAppender->Free = WLog_CallbackAppender_Free;
165
0
  CallbackAppender->Set = WLog_CallbackAppender_Set;
166
167
0
  return (wLogAppender*)CallbackAppender;
168
0
}