FreeRDP
Loading...
Searching...
No Matches
SyslogAppender.c
1
21#include <winpr/config.h>
22
23#include "SyslogAppender.h"
24#include <syslog.h>
25
26typedef struct
27{
28 wLogAppender common;
29} wLogSyslogAppender;
30
31static int getSyslogLevel(DWORD level)
32{
33 switch (level)
34 {
35 case WLOG_TRACE:
36 case WLOG_DEBUG:
37 return LOG_DEBUG;
38 case WLOG_INFO:
39 return LOG_INFO;
40 case WLOG_WARN:
41 return LOG_WARNING;
42 case WLOG_ERROR:
43 return LOG_ERR;
44 case WLOG_FATAL:
45 return LOG_CRIT;
46 case WLOG_OFF:
47 default:
48 return -1;
49 }
50}
51
52static BOOL WLog_SyslogAppender_Open(wLog* log, wLogAppender* appender)
53{
54 return !(!log || !appender);
55}
56
57static BOOL WLog_SyslogAppender_Close(wLog* log, wLogAppender* appender)
58{
59 return !(!log || !appender);
60}
61
62static BOOL WLog_SyslogAppender_WriteMessage(wLog* log, wLogAppender* appender,
63 const wLogMessage* message)
64{
65 int syslogLevel = 0;
66
67 if (!log || !appender || !message)
68 return FALSE;
69
70 syslogLevel = getSyslogLevel(message->Level);
71 if (syslogLevel >= 0)
72 syslog(syslogLevel, "%s", message->TextString);
73
74 return TRUE;
75}
76
77static BOOL WLog_SyslogAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
78 const wLogMessage* message)
79{
80 int syslogLevel = 0;
81
82 if (!log || !appender || !message)
83 return FALSE;
84
85 syslogLevel = getSyslogLevel(message->Level);
86 if (syslogLevel >= 0)
87 syslog(syslogLevel, "skipped data message of %" PRIuz " bytes", message->Length);
88
89 return TRUE;
90}
91
92static BOOL WLog_SyslogAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
93 const wLogMessage* message)
94{
95 int syslogLevel = 0;
96
97 if (!log || !appender || !message)
98 return FALSE;
99
100 syslogLevel = getSyslogLevel(message->Level);
101 if (syslogLevel >= 0)
102 syslog(syslogLevel, "skipped image (%" PRIuz "x%" PRIuz "x%" PRIuz ")", message->ImageWidth,
103 message->ImageHeight, message->ImageBpp);
104
105 return TRUE;
106}
107
108static void WLog_SyslogAppender_Free(wLogAppender* appender)
109{
110 free(appender);
111}
112
113wLogAppender* WLog_SyslogAppender_New(WINPR_ATTR_UNUSED wLog* log)
114{
115 wLogSyslogAppender* appender = (wLogSyslogAppender*)calloc(1, sizeof(wLogSyslogAppender));
116 if (!appender)
117 return nullptr;
118
119 appender->common.Type = WLOG_APPENDER_SYSLOG;
120
121 appender->common.Open = WLog_SyslogAppender_Open;
122 appender->common.Close = WLog_SyslogAppender_Close;
123 appender->common.WriteMessage = WLog_SyslogAppender_WriteMessage;
124 appender->common.WriteDataMessage = WLog_SyslogAppender_WriteDataMessage;
125 appender->common.WriteImageMessage = WLog_SyslogAppender_WriteImageMessage;
126 appender->common.Free = WLog_SyslogAppender_Free;
127
128 return &appender->common;
129}