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 if (!log || !appender)
55 return FALSE;
56
57 return TRUE;
58}
59
60static BOOL WLog_SyslogAppender_Close(wLog* log, wLogAppender* appender)
61{
62 if (!log || !appender)
63 return FALSE;
64
65 return TRUE;
66}
67
68static BOOL WLog_SyslogAppender_WriteMessage(wLog* log, wLogAppender* appender,
69 const wLogMessage* message)
70{
71 int syslogLevel = 0;
72
73 if (!log || !appender || !message)
74 return FALSE;
75
76 syslogLevel = getSyslogLevel(message->Level);
77 if (syslogLevel >= 0)
78 syslog(syslogLevel, "%s", message->TextString);
79
80 return TRUE;
81}
82
83static BOOL WLog_SyslogAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
84 const wLogMessage* message)
85{
86 int syslogLevel = 0;
87
88 if (!log || !appender || !message)
89 return FALSE;
90
91 syslogLevel = getSyslogLevel(message->Level);
92 if (syslogLevel >= 0)
93 syslog(syslogLevel, "skipped data message of %" PRIuz " bytes", message->Length);
94
95 return TRUE;
96}
97
98static BOOL WLog_SyslogAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
99 const wLogMessage* message)
100{
101 int syslogLevel = 0;
102
103 if (!log || !appender || !message)
104 return FALSE;
105
106 syslogLevel = getSyslogLevel(message->Level);
107 if (syslogLevel >= 0)
108 syslog(syslogLevel, "skipped image (%" PRIuz "x%" PRIuz "x%" PRIuz ")", message->ImageWidth,
109 message->ImageHeight, message->ImageBpp);
110
111 return TRUE;
112}
113
114static void WLog_SyslogAppender_Free(wLogAppender* appender)
115{
116 free(appender);
117}
118
119wLogAppender* WLog_SyslogAppender_New(WINPR_ATTR_UNUSED wLog* log)
120{
121 wLogSyslogAppender* appender = (wLogSyslogAppender*)calloc(1, sizeof(wLogSyslogAppender));
122 if (!appender)
123 return NULL;
124
125 appender->common.Type = WLOG_APPENDER_SYSLOG;
126
127 appender->common.Open = WLog_SyslogAppender_Open;
128 appender->common.Close = WLog_SyslogAppender_Close;
129 appender->common.WriteMessage = WLog_SyslogAppender_WriteMessage;
130 appender->common.WriteDataMessage = WLog_SyslogAppender_WriteDataMessage;
131 appender->common.WriteImageMessage = WLog_SyslogAppender_WriteImageMessage;
132 appender->common.Free = WLog_SyslogAppender_Free;
133
134 return &appender->common;
135}