Merge pull request #11989 from akallabeth/wlog-fixes

[winpr,utils] improve WLog logging
This commit is contained in:
akallabeth
2025-11-11 14:44:47 +01:00
committed by GitHub
25 changed files with 359 additions and 345 deletions

View File

@@ -203,7 +203,8 @@ static const struct x11_key_scancode_t XKB_KEY_NAME_SCANCODE_TABLE[] = {
{ "RWIN", RDP_SCANCODE_RWIN }, /* 134: RWIN [Super_R] */
{ "COMP", RDP_SCANCODE_APPS }, /* 135: COMP [Menu] */
{ "STOP", RDP_SCANCODE_BROWSER_STOP }, /* 136: STOP [Cancel] */
{ "AGAI", RDP_SCANCODE_UNKNOWN }, /* 137: AGAI [Redo] */
{ "AGAI" /* codespell:ignore */, RDP_SCANCODE_UNKNOWN },
/* 137: AGAI [Redo] */ /* codespell:ignore */
{ "PROP", RDP_SCANCODE_UNKNOWN }, /* 138: PROP [SunProps] */
{ "UNDO", RDP_SCANCODE_UNKNOWN }, /* 139: UNDO [Undo] */
{ "FRNT", RDP_SCANCODE_UNKNOWN }, /* 140: FRNT [SunFront] */

View File

@@ -1064,7 +1064,7 @@ static BOOL arm_handle_bad_request(rdpArm* arm, const HttpResponse* response, BO
http_response_log_error_status(WLog_Get(TAG), WLOG_ERROR, response);
const size_t len = http_response_get_body_length(response);
const char* msg = (const char*)http_response_get_body(response);
const char* msg = http_response_get_body(response);
if (msg && (strnlen(msg, len + 1) > len))
{
WLog_Print(arm->log, WLOG_ERROR, "Got HTTP Response data, but length is invalid");

View File

@@ -176,7 +176,8 @@ static const XKB_KEY_NAME_SCANCODE XKB_KEY_NAME_SCANCODE_TABLE[] = {
{ "RWIN", RDP_SCANCODE_RWIN }, /* 134: RWIN [Super_R] */
{ "COMP", RDP_SCANCODE_APPS }, /* 135: COMP [Menu] */
{ "STOP", RDP_SCANCODE_BROWSER_STOP }, /* 136: STOP [Cancel] */
{ "AGAI", RDP_SCANCODE_UNKNOWN }, /* 137: AGAI [Redo] */
{ "AGAI" /* codespell:ignore */, RDP_SCANCODE_UNKNOWN },
/* 137: AGAI [Redo] */ /* codespell:ignore */
{ "PROP", RDP_SCANCODE_UNKNOWN }, /* 138: PROP [SunProps] */
{ "UNDO", RDP_SCANCODE_UNKNOWN }, /* 139: UNDO [Undo] */
{ "FRNT", RDP_SCANCODE_UNKNOWN }, /* 140: FRNT [SunFront] */

View File

@@ -26,3 +26,5 @@ manuel
shs
udo
wheight
emac
leadin

View File

@@ -698,35 +698,36 @@ static DWORD KEYCODE_TO_VKCODE_XKB[256] = {
VK_SNAPSHOT | KBDEXT, /* <PRSC> 107 */
VK_RMENU | KBDEXT, /* <RALT> <ALGR> 108 */
#endif
0, /* <LNFD> KEY_LINEFEED 109 */
VK_HOME | KBDEXT, /* <HOME> 110 */
VK_UP | KBDEXT, /* <UP> 111 */
VK_PRIOR | KBDEXT, /* <PGUP> 112 */
VK_LEFT | KBDEXT, /* <LEFT> 113 */
VK_RIGHT | KBDEXT, /* <RGHT> 114 */
VK_END | KBDEXT, /* <END> 115 */
VK_DOWN | KBDEXT, /* <DOWN> 116 */
VK_NEXT | KBDEXT, /* <PGDN> 117 */
VK_INSERT | KBDEXT, /* <INS> 118 */
VK_DELETE | KBDEXT, /* <DELE> 119 */
0, /* <I120> KEY_MACRO 120 */
VK_VOLUME_MUTE | KBDEXT, /* <MUTE> 121 */
VK_VOLUME_DOWN | KBDEXT, /* <VOL-> 122 */
VK_VOLUME_UP | KBDEXT, /* <VOL+> 123 */
0, /* <POWR> 124 */
0, /* <KPEQ> 125 */
0, /* <I126> KEY_KPPLUSMINUS 126 */
VK_PAUSE | KBDEXT, /* <PAUS> 127 */
0, /* <I128> KEY_SCALE 128 */
VK_ABNT_C2, /* <I129> <KPPT> KEY_KPCOMMA 129 */
VK_HANGUL, /* <HNGL> 130 */
VK_HANJA, /* <HJCV> 131 */
VK_OEM_8, /* <AE13> 132 */
VK_LWIN | KBDEXT, /* <LWIN> <LMTA> 133 */
VK_RWIN | KBDEXT, /* <RWIN> <RMTA> 134 */
VK_APPS | KBDEXT, /* <COMP> <MENU> 135 */
0, /* <STOP> 136 */
0, /* <AGAI> 137 */
0, /* <LNFD> KEY_LINEFEED 109 */
VK_HOME | KBDEXT, /* <HOME> 110 */
VK_UP | KBDEXT, /* <UP> 111 */
VK_PRIOR | KBDEXT, /* <PGUP> 112 */
VK_LEFT | KBDEXT, /* <LEFT> 113 */
VK_RIGHT | KBDEXT, /* <RGHT> 114 */
VK_END | KBDEXT, /* <END> 115 */
VK_DOWN | KBDEXT, /* <DOWN> 116 */
VK_NEXT | KBDEXT, /* <PGDN> 117 */
VK_INSERT | KBDEXT, /* <INS> 118 */
VK_DELETE | KBDEXT, /* <DELE> 119 */
0, /* <I120> KEY_MACRO 120 */
VK_VOLUME_MUTE | KBDEXT, /* <MUTE> 121 */
VK_VOLUME_DOWN | KBDEXT, /* <VOL-> 122 */
VK_VOLUME_UP | KBDEXT, /* <VOL+> 123 */
0, /* <POWR> 124 */
0, /* <KPEQ> 125 */
0, /* <I126> KEY_KPPLUSMINUS 126 */
VK_PAUSE | KBDEXT, /* <PAUS> 127 */
0, /* <I128> KEY_SCALE 128 */
VK_ABNT_C2, /* <I129> <KPPT> KEY_KPCOMMA 129 */
VK_HANGUL, /* <HNGL> 130 */
VK_HANJA, /* <HJCV> 131 */
VK_OEM_8, /* <AE13> 132 */
VK_LWIN | KBDEXT, /* <LWIN> <LMTA> 133 */
VK_RWIN | KBDEXT, /* <RWIN> <RMTA> 134 */
VK_APPS | KBDEXT, /* <COMP> <MENU> 135 */
0, /* <STOP> 136 */
0,
/* <AGAI> 137 */ // codespell:ignore
0, /* <PROP> 138 */
0, /* <UNDO> 139 */
0, /* <FRNT> 140 */

View File

@@ -96,7 +96,7 @@ endif()
find_package(libsystemd)
option(WITH_SYSTEMD "allows to export wLog to systemd journal" ${libsystemd_FOUND})
if(WITH_LIBSYSTEMD)
if(WITH_SYSTEMD)
find_package(libsystemd REQUIRED)
winpr_pc_add_requires_private("libsystemd")
set(WINPR_HAVE_JOURNALD_H TRUE)

View File

@@ -22,7 +22,7 @@
#include "wlog.h"
void WLog_Appender_Free(wLog* log, wLogAppender* appender);
WINPR_LOCAL void WLog_Appender_Free(wLog* log, wLogAppender* appender);
#include "FileAppender.h"
#include "ConsoleAppender.h"

View File

@@ -30,7 +30,7 @@
typedef struct
{
WLOG_APPENDER_COMMON();
wLogAppender common;
char* FileName;
char* FilePath;
@@ -104,7 +104,7 @@ static BOOL WLog_BinaryAppender_Close(WINPR_ATTR_UNUSED wLog* log, wLogAppender*
}
static BOOL WLog_BinaryAppender_WriteMessage(wLog* log, wLogAppender* appender,
wLogMessage* message)
const wLogMessage* message)
{
FILE* fp = NULL;
wStream* s = NULL;
@@ -169,14 +169,14 @@ static BOOL WLog_BinaryAppender_WriteMessage(wLog* log, wLogAppender* appender,
static BOOL WLog_BinaryAppender_WriteDataMessage(WINPR_ATTR_UNUSED wLog* log,
WINPR_ATTR_UNUSED wLogAppender* appender,
WINPR_ATTR_UNUSED wLogMessage* message)
WINPR_ATTR_UNUSED const wLogMessage* message)
{
return TRUE;
}
static BOOL WLog_BinaryAppender_WriteImageMessage(WINPR_ATTR_UNUSED wLog* log,
WINPR_ATTR_UNUSED wLogAppender* appender,
WINPR_ATTR_UNUSED wLogMessage* message)
WINPR_ATTR_UNUSED const wLogMessage* message)
{
return TRUE;
}
@@ -222,20 +222,18 @@ static void WLog_BinaryAppender_Free(wLogAppender* appender)
wLogAppender* WLog_BinaryAppender_New(WINPR_ATTR_UNUSED wLog* log)
{
wLogBinaryAppender* BinaryAppender = NULL;
BinaryAppender = (wLogBinaryAppender*)calloc(1, sizeof(wLogBinaryAppender));
wLogBinaryAppender* BinaryAppender = (wLogBinaryAppender*)calloc(1, sizeof(wLogBinaryAppender));
if (!BinaryAppender)
return NULL;
BinaryAppender->Type = WLOG_APPENDER_BINARY;
BinaryAppender->Open = WLog_BinaryAppender_Open;
BinaryAppender->Close = WLog_BinaryAppender_Close;
BinaryAppender->WriteMessage = WLog_BinaryAppender_WriteMessage;
BinaryAppender->WriteDataMessage = WLog_BinaryAppender_WriteDataMessage;
BinaryAppender->WriteImageMessage = WLog_BinaryAppender_WriteImageMessage;
BinaryAppender->Free = WLog_BinaryAppender_Free;
BinaryAppender->Set = WLog_BinaryAppender_Set;
BinaryAppender->common.Type = WLOG_APPENDER_BINARY;
BinaryAppender->common.Open = WLog_BinaryAppender_Open;
BinaryAppender->common.Close = WLog_BinaryAppender_Close;
BinaryAppender->common.WriteMessage = WLog_BinaryAppender_WriteMessage;
BinaryAppender->common.WriteDataMessage = WLog_BinaryAppender_WriteDataMessage;
BinaryAppender->common.WriteImageMessage = WLog_BinaryAppender_WriteImageMessage;
BinaryAppender->common.Free = WLog_BinaryAppender_Free;
BinaryAppender->common.Set = WLog_BinaryAppender_Set;
return (wLogAppender*)BinaryAppender;
return &BinaryAppender->common;
}

View File

@@ -23,6 +23,6 @@
#include "wlog.h"
WINPR_ATTR_MALLOC(WLog_Appender_Free, 2)
wLogAppender* WLog_BinaryAppender_New(wLog* log);
WINPR_LOCAL wLogAppender* WLog_BinaryAppender_New(wLog* log);
#endif /* WINPR_WLOG_BINARY_APPENDER_PRIVATE_H */

View File

@@ -23,7 +23,7 @@
typedef struct
{
WLOG_APPENDER_COMMON();
wLogAppender common;
wLogCallbacks* callbacks;
} wLogCallbackAppender;
@@ -41,78 +41,85 @@ static BOOL WLog_CallbackAppender_Close(WINPR_ATTR_UNUSED wLog* log,
}
static BOOL WLog_CallbackAppender_WriteMessage(wLog* log, wLogAppender* appender,
wLogMessage* message)
const wLogMessage* cmessage)
{
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
wLogCallbackAppender* callbackAppender = NULL;
WINPR_ASSERT(cmessage);
if (!appender)
return FALSE;
message->PrefixString = prefix;
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix));
callbackAppender = (wLogCallbackAppender*)appender;
wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
if (callbackAppender->callbacks && callbackAppender->callbacks->message)
return callbackAppender->callbacks->message(message);
{
wLogMessage message = *cmessage;
message.PrefixString = prefix;
return callbackAppender->callbacks->message(&message);
}
else
return FALSE;
}
static BOOL WLog_CallbackAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
wLogMessage* message)
const wLogMessage* cmessage)
{
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
wLogCallbackAppender* callbackAppender = NULL;
if (!appender)
return FALSE;
message->PrefixString = prefix;
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix));
callbackAppender = (wLogCallbackAppender*)appender;
wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
if (callbackAppender->callbacks && callbackAppender->callbacks->data)
return callbackAppender->callbacks->data(message);
{
wLogMessage message = *cmessage;
message.PrefixString = prefix;
return callbackAppender->callbacks->data(&message);
}
else
return FALSE;
}
static BOOL WLog_CallbackAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
wLogMessage* message)
const wLogMessage* cmessage)
{
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
wLogCallbackAppender* callbackAppender = NULL;
WINPR_ASSERT(cmessage);
if (!appender)
return FALSE;
message->PrefixString = prefix;
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix));
callbackAppender = (wLogCallbackAppender*)appender;
wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
if (callbackAppender->callbacks && callbackAppender->callbacks->image)
return callbackAppender->callbacks->image(message);
{
wLogMessage message = *cmessage;
message.PrefixString = prefix;
return callbackAppender->callbacks->image(&message);
}
else
return FALSE;
}
static BOOL WLog_CallbackAppender_WritePacketMessage(wLog* log, wLogAppender* appender,
wLogMessage* message)
const wLogMessage* cmessage)
{
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
wLogCallbackAppender* callbackAppender = NULL;
WINPR_ASSERT(cmessage);
if (!appender)
return FALSE;
message->PrefixString = prefix;
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix));
callbackAppender = (wLogCallbackAppender*)appender;
wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender;
if (callbackAppender->callbacks && callbackAppender->callbacks->package)
return callbackAppender->callbacks->package(message);
{
wLogMessage message = *cmessage;
message.PrefixString = prefix;
return callbackAppender->callbacks->package(&message);
}
else
return FALSE;
}
@@ -149,22 +156,20 @@ static void WLog_CallbackAppender_Free(wLogAppender* appender)
wLogAppender* WLog_CallbackAppender_New(WINPR_ATTR_UNUSED wLog* log)
{
wLogCallbackAppender* CallbackAppender = NULL;
CallbackAppender = (wLogCallbackAppender*)calloc(1, sizeof(wLogCallbackAppender));
wLogCallbackAppender* CallbackAppender =
(wLogCallbackAppender*)calloc(1, sizeof(wLogCallbackAppender));
if (!CallbackAppender)
return NULL;
CallbackAppender->Type = WLOG_APPENDER_CALLBACK;
CallbackAppender->common.Type = WLOG_APPENDER_CALLBACK;
CallbackAppender->common.Open = WLog_CallbackAppender_Open;
CallbackAppender->common.Close = WLog_CallbackAppender_Close;
CallbackAppender->common.WriteMessage = WLog_CallbackAppender_WriteMessage;
CallbackAppender->common.WriteDataMessage = WLog_CallbackAppender_WriteDataMessage;
CallbackAppender->common.WriteImageMessage = WLog_CallbackAppender_WriteImageMessage;
CallbackAppender->common.WritePacketMessage = WLog_CallbackAppender_WritePacketMessage;
CallbackAppender->common.Free = WLog_CallbackAppender_Free;
CallbackAppender->common.Set = WLog_CallbackAppender_Set;
CallbackAppender->Open = WLog_CallbackAppender_Open;
CallbackAppender->Close = WLog_CallbackAppender_Close;
CallbackAppender->WriteMessage = WLog_CallbackAppender_WriteMessage;
CallbackAppender->WriteDataMessage = WLog_CallbackAppender_WriteDataMessage;
CallbackAppender->WriteImageMessage = WLog_CallbackAppender_WriteImageMessage;
CallbackAppender->WritePacketMessage = WLog_CallbackAppender_WritePacketMessage;
CallbackAppender->Free = WLog_CallbackAppender_Free;
CallbackAppender->Set = WLog_CallbackAppender_Set;
return (wLogAppender*)CallbackAppender;
return &CallbackAppender->common;
}

View File

@@ -23,6 +23,6 @@
#include "wlog.h"
WINPR_ATTR_MALLOC(WLog_Appender_Free, 2)
wLogAppender* WLog_CallbackAppender_New(wLog* log);
WINPR_LOCAL wLogAppender* WLog_CallbackAppender_New(wLog* log);
#endif /* WINPR_WLOG_CALLBACK_APPENDER_PRIVATE_H */

View File

@@ -33,7 +33,7 @@
typedef struct
{
WLOG_APPENDER_COMMON();
wLogAppender common;
int outputStream;
} wLogConsoleAppender;
@@ -51,33 +51,29 @@ static BOOL WLog_ConsoleAppender_Close(WINPR_ATTR_UNUSED wLog* log,
}
static BOOL WLog_ConsoleAppender_WriteMessage(wLog* log, wLogAppender* appender,
wLogMessage* message)
const wLogMessage* cmessage)
{
FILE* fp = NULL;
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
wLogConsoleAppender* consoleAppender = NULL;
if (!appender)
return FALSE;
consoleAppender = (wLogConsoleAppender*)appender;
wLogConsoleAppender* consoleAppender = (wLogConsoleAppender*)appender;
message->PrefixString = prefix;
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix));
#ifdef _WIN32
if (consoleAppender->outputStream == WLOG_CONSOLE_DEBUG)
{
OutputDebugStringA(message->PrefixString);
OutputDebugStringA(message->TextString);
OutputDebugStringA(prefix);
OutputDebugStringA(cmessage->TextString);
OutputDebugStringA("\n");
return TRUE;
}
#endif
#ifdef ANDROID
(void)fp;
android_LogPriority level;
switch (message->Level)
switch (cmessage->Level)
{
case WLOG_TRACE:
level = ANDROID_LOG_VERBOSE;
@@ -106,9 +102,10 @@ static BOOL WLog_ConsoleAppender_WriteMessage(wLog* log, wLogAppender* appender,
}
if (level != ANDROID_LOG_SILENT)
__android_log_print(level, log->Name, "%s%s", message->PrefixString, message->TextString);
__android_log_print(level, log->Name, "%s%s", prefix, cmessage->TextString);
#else
FILE* fp = NULL;
switch (consoleAppender->outputStream)
{
case WLOG_CONSOLE_STDOUT:
@@ -118,7 +115,7 @@ static BOOL WLog_ConsoleAppender_WriteMessage(wLog* log, wLogAppender* appender,
fp = stderr;
break;
default:
switch (message->Level)
switch (cmessage->Level)
{
case WLOG_TRACE:
case WLOG_DEBUG:
@@ -132,8 +129,8 @@ static BOOL WLog_ConsoleAppender_WriteMessage(wLog* log, wLogAppender* appender,
break;
}
if (message->Level != WLOG_OFF)
(void)fprintf(fp, "%s%s\n", message->PrefixString, message->TextString);
if (cmessage->Level != WLOG_OFF)
(void)fprintf(fp, "%s%s\n", prefix, cmessage->TextString);
#endif
return TRUE;
}
@@ -142,7 +139,7 @@ static int g_DataId = 0;
static BOOL WLog_ConsoleAppender_WriteDataMessage(WINPR_ATTR_UNUSED wLog* log,
WINPR_ATTR_UNUSED wLogAppender* appender,
wLogMessage* message)
const wLogMessage* message)
{
#if defined(ANDROID)
return FALSE;
@@ -165,7 +162,7 @@ static int g_ImageId = 0;
static BOOL WLog_ConsoleAppender_WriteImageMessage(WINPR_ATTR_UNUSED wLog* log,
WINPR_ATTR_UNUSED wLogAppender* appender,
wLogMessage* message)
const wLogMessage* message)
{
#if defined(ANDROID)
return FALSE;
@@ -188,7 +185,8 @@ static BOOL WLog_ConsoleAppender_WriteImageMessage(WINPR_ATTR_UNUSED wLog* log,
static int g_PacketId = 0;
static BOOL WLog_ConsoleAppender_WritePacketMessage(WINPR_ATTR_UNUSED wLog* log,
wLogAppender* appender, wLogMessage* message)
wLogAppender* appender,
const wLogMessage* message)
{
#if defined(ANDROID)
return FALSE;
@@ -251,23 +249,21 @@ static void WLog_ConsoleAppender_Free(wLogAppender* appender)
wLogAppender* WLog_ConsoleAppender_New(WINPR_ATTR_UNUSED wLog* log)
{
wLogConsoleAppender* ConsoleAppender = NULL;
ConsoleAppender = (wLogConsoleAppender*)calloc(1, sizeof(wLogConsoleAppender));
wLogConsoleAppender* ConsoleAppender =
(wLogConsoleAppender*)calloc(1, sizeof(wLogConsoleAppender));
if (!ConsoleAppender)
return NULL;
ConsoleAppender->Type = WLOG_APPENDER_CONSOLE;
ConsoleAppender->Open = WLog_ConsoleAppender_Open;
ConsoleAppender->Close = WLog_ConsoleAppender_Close;
ConsoleAppender->WriteMessage = WLog_ConsoleAppender_WriteMessage;
ConsoleAppender->WriteDataMessage = WLog_ConsoleAppender_WriteDataMessage;
ConsoleAppender->WriteImageMessage = WLog_ConsoleAppender_WriteImageMessage;
ConsoleAppender->WritePacketMessage = WLog_ConsoleAppender_WritePacketMessage;
ConsoleAppender->Set = WLog_ConsoleAppender_Set;
ConsoleAppender->Free = WLog_ConsoleAppender_Free;
ConsoleAppender->common.Type = WLOG_APPENDER_CONSOLE;
ConsoleAppender->common.Open = WLog_ConsoleAppender_Open;
ConsoleAppender->common.Close = WLog_ConsoleAppender_Close;
ConsoleAppender->common.WriteMessage = WLog_ConsoleAppender_WriteMessage;
ConsoleAppender->common.WriteDataMessage = WLog_ConsoleAppender_WriteDataMessage;
ConsoleAppender->common.WriteImageMessage = WLog_ConsoleAppender_WriteImageMessage;
ConsoleAppender->common.WritePacketMessage = WLog_ConsoleAppender_WritePacketMessage;
ConsoleAppender->common.Set = WLog_ConsoleAppender_Set;
ConsoleAppender->common.Free = WLog_ConsoleAppender_Free;
ConsoleAppender->outputStream = WLOG_CONSOLE_DEFAULT;
@@ -276,5 +272,5 @@ wLogAppender* WLog_ConsoleAppender_New(WINPR_ATTR_UNUSED wLog* log)
ConsoleAppender->outputStream = WLOG_CONSOLE_DEBUG;
#endif
return (wLogAppender*)ConsoleAppender;
return &ConsoleAppender->common;
}

View File

@@ -23,6 +23,6 @@
#include "wlog.h"
WINPR_ATTR_MALLOC(WLog_Appender_Free, 2)
wLogAppender* WLog_ConsoleAppender_New(wLog* log);
WINPR_LOCAL wLogAppender* WLog_ConsoleAppender_New(wLog* log);
#endif /* WINPR_WLOG_CONSOLE_APPENDER_PRIVATE_H */

View File

@@ -29,7 +29,7 @@
typedef struct
{
WLOG_APPENDER_COMMON();
wLogAppender common;
char* FileName;
char* FilePath;
@@ -126,24 +126,21 @@ static BOOL WLog_FileAppender_Close(wLog* log, wLogAppender* appender)
return TRUE;
}
static BOOL WLog_FileAppender_WriteMessage(wLog* log, wLogAppender* appender, wLogMessage* message)
static BOOL WLog_FileAppender_WriteMessage(wLog* log, wLogAppender* appender,
const wLogMessage* cmessage)
{
FILE* fp = NULL;
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
wLogFileAppender* fileAppender = NULL;
if (!log || !appender || !message)
if (!log || !appender || !cmessage)
return FALSE;
fileAppender = (wLogFileAppender*)appender;
fp = fileAppender->FileDescriptor;
wLogFileAppender* fileAppender = (wLogFileAppender*)appender;
FILE* fp = fileAppender->FileDescriptor;
if (!fp)
return FALSE;
message->PrefixString = prefix;
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
(void)fprintf(fp, "%s%s\n", message->PrefixString, message->TextString);
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix));
(void)fprintf(fp, "%s%s\n", prefix, cmessage->TextString);
(void)fflush(fp); /* slow! */
return TRUE;
}
@@ -151,7 +148,7 @@ static BOOL WLog_FileAppender_WriteMessage(wLog* log, wLogAppender* appender, wL
static int g_DataId = 0;
static BOOL WLog_FileAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
wLogMessage* message)
const wLogMessage* message)
{
int DataId = 0;
char* FullFileName = NULL;
@@ -169,7 +166,7 @@ static BOOL WLog_FileAppender_WriteDataMessage(wLog* log, wLogAppender* appender
static int g_ImageId = 0;
static BOOL WLog_FileAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
wLogMessage* message)
const wLogMessage* message)
{
int ImageId = 0;
char* FullFileName = NULL;
@@ -227,14 +224,14 @@ wLogAppender* WLog_FileAppender_New(WINPR_ATTR_UNUSED wLog* log)
if (!FileAppender)
return NULL;
FileAppender->Type = WLOG_APPENDER_FILE;
FileAppender->Open = WLog_FileAppender_Open;
FileAppender->Close = WLog_FileAppender_Close;
FileAppender->WriteMessage = WLog_FileAppender_WriteMessage;
FileAppender->WriteDataMessage = WLog_FileAppender_WriteDataMessage;
FileAppender->WriteImageMessage = WLog_FileAppender_WriteImageMessage;
FileAppender->Free = WLog_FileAppender_Free;
FileAppender->Set = WLog_FileAppender_Set;
FileAppender->common.Type = WLOG_APPENDER_FILE;
FileAppender->common.Open = WLog_FileAppender_Open;
FileAppender->common.Close = WLog_FileAppender_Close;
FileAppender->common.WriteMessage = WLog_FileAppender_WriteMessage;
FileAppender->common.WriteDataMessage = WLog_FileAppender_WriteDataMessage;
FileAppender->common.WriteImageMessage = WLog_FileAppender_WriteImageMessage;
FileAppender->common.Free = WLog_FileAppender_Free;
FileAppender->common.Set = WLog_FileAppender_Set;
name = "WLOG_FILEAPPENDER_OUTPUT_FILE_PATH";
nSize = GetEnvironmentVariableA(name, NULL, 0);

View File

@@ -23,6 +23,6 @@
#include "wlog.h"
WINPR_ATTR_MALLOC(WLog_Appender_Free, 2)
wLogAppender* WLog_FileAppender_New(wLog* log);
WINPR_LOCAL wLogAppender* WLog_FileAppender_New(wLog* log);
#endif /* WINPR_WLOG_FILE_APPENDER_PRIVATE_H */

View File

@@ -31,7 +31,7 @@
typedef struct
{
WLOG_APPENDER_COMMON();
wLogAppender common;
char* identifier;
FILE* stream;
} wLogJournaldAppender;
@@ -72,18 +72,15 @@ static BOOL WLog_JournaldAppender_Close(wLog* log, wLogAppender* appender)
}
static BOOL WLog_JournaldAppender_WriteMessage(wLog* log, wLogAppender* appender,
wLogMessage* message)
const wLogMessage* cmessage)
{
char* formatStr = NULL;
wLogJournaldAppender* journaldAppender = NULL;
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
if (!log || !appender || !message)
if (!log || !appender || !cmessage)
return FALSE;
journaldAppender = (wLogJournaldAppender*)appender;
wLogJournaldAppender* journaldAppender = (wLogJournaldAppender*)appender;
switch (message->Level)
const char* formatStr = NULL;
switch (cmessage->Level)
{
case WLOG_TRACE:
case WLOG_DEBUG:
@@ -104,25 +101,25 @@ static BOOL WLog_JournaldAppender_WriteMessage(wLog* log, wLogAppender* appender
case WLOG_OFF:
return TRUE;
default:
(void)fprintf(stderr, "%s: unknown level %" PRIu32 "\n", __func__, message->Level);
(void)fprintf(stderr, "%s: unknown level %" PRIu32 "\n", __func__, cmessage->Level);
return FALSE;
}
message->PrefixString = prefix;
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix));
if (message->Level != WLOG_OFF)
if (cmessage->Level != WLOG_OFF)
{
WINPR_PRAGMA_DIAG_PUSH
WINPR_PRAGMA_DIAG_IGNORED_FORMAT_NONLITERAL(void)
fprintf(journaldAppender->stream, formatStr, message->PrefixString, message->TextString);
fprintf(journaldAppender->stream, formatStr, prefix, cmessage->TextString);
WINPR_PRAGMA_DIAG_POP
}
return TRUE;
}
static BOOL WLog_JournaldAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
wLogMessage* message)
const wLogMessage* message)
{
if (!log || !appender || !message)
return FALSE;
@@ -131,7 +128,7 @@ static BOOL WLog_JournaldAppender_WriteDataMessage(wLog* log, wLogAppender* appe
}
static BOOL WLog_JournaldAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
wLogMessage* message)
const wLogMessage* message)
{
if (!log || !appender || !message)
return FALSE;
@@ -175,24 +172,22 @@ static void WLog_JournaldAppender_Free(wLogAppender* appender)
wLogAppender* WLog_JournaldAppender_New(wLog* log)
{
wLogJournaldAppender* appender = NULL;
DWORD nSize = 0;
LPCSTR name = "WLOG_JOURNALD_ID";
appender = (wLogJournaldAppender*)calloc(1, sizeof(wLogJournaldAppender));
wLogJournaldAppender* appender = (wLogJournaldAppender*)calloc(1, sizeof(wLogJournaldAppender));
if (!appender)
return NULL;
appender->Type = WLOG_APPENDER_JOURNALD;
appender->Open = WLog_JournaldAppender_Open;
appender->Close = WLog_JournaldAppender_Close;
appender->WriteMessage = WLog_JournaldAppender_WriteMessage;
appender->WriteDataMessage = WLog_JournaldAppender_WriteDataMessage;
appender->WriteImageMessage = WLog_JournaldAppender_WriteImageMessage;
appender->Set = WLog_JournaldAppender_Set;
appender->Free = WLog_JournaldAppender_Free;
appender->common.Type = WLOG_APPENDER_JOURNALD;
appender->common.Open = WLog_JournaldAppender_Open;
appender->common.Close = WLog_JournaldAppender_Close;
appender->common.WriteMessage = WLog_JournaldAppender_WriteMessage;
appender->common.WriteDataMessage = WLog_JournaldAppender_WriteDataMessage;
appender->common.WriteImageMessage = WLog_JournaldAppender_WriteImageMessage;
appender->common.Set = WLog_JournaldAppender_Set;
appender->common.Free = WLog_JournaldAppender_Free;
nSize = GetEnvironmentVariableA(name, NULL, 0);
const DWORD nSize = GetEnvironmentVariableA(name, NULL, 0);
if (nSize)
{
appender->identifier = (LPSTR)malloc(nSize);

View File

@@ -26,6 +26,6 @@
#include "wlog.h"
wLogAppender* WLog_JournaldAppender_New(wLog* log);
WINPR_LOCAL wLogAppender* WLog_JournaldAppender_New(wLog* log);
#endif /* WINPR_LIBWINPR_UTILS_WLOG_JOURNALDAPPENDER_H_ */

View File

@@ -56,7 +56,12 @@ struct format_option
const char* replace;
size_t replacelen;
const char* (*fkt)(void*);
void* arg;
union
{
void* pv;
const void* cpv;
size_t s;
} arg;
const char* (*ext)(const struct format_option* opt, const char* str, size_t* preplacelen,
size_t* pskiplen);
struct format_option_recurse* recurse;
@@ -68,7 +73,7 @@ struct format_option_recurse
size_t nroptions;
wLog* log;
wLogLayout* layout;
wLogMessage* message;
const wLogMessage* message;
char buffer[WLOG_MAX_PREFIX_SIZE];
};
@@ -76,20 +81,19 @@ struct format_option_recurse
* Log Layout
*/
WINPR_ATTR_FORMAT_ARG(3, 0)
static void WLog_PrintMessagePrefixVA(WINPR_ATTR_UNUSED wLog* log, wLogMessage* message,
static void WLog_PrintMessagePrefixVA(char* prefix, size_t prefixlen,
WINPR_FORMAT_ARG const char* format, va_list args)
{
WINPR_ASSERT(message);
(void)vsnprintf(message->PrefixString, WLOG_MAX_PREFIX_SIZE - 1, format, args);
(void)vsnprintf(prefix, prefixlen, format, args);
}
WINPR_ATTR_FORMAT_ARG(3, 4)
static void WLog_PrintMessagePrefix(wLog* log, wLogMessage* message,
static void WLog_PrintMessagePrefix(char* prefix, size_t prefixlen,
WINPR_FORMAT_ARG const char* format, ...)
{
va_list args;
va_start(args, format);
WLog_PrintMessagePrefixVA(log, message, format, args);
WLog_PrintMessagePrefixVA(prefix, prefixlen, format, args);
va_end(args);
}
@@ -158,7 +162,7 @@ static const char* skip_if_null(const struct format_option* opt, const char* fmt
return NULL;
*pskiplen = WINPR_ASSERTING_INT_CAST(size_t, end - fmt) + opt->replacelen;
if (!opt->arg)
if (!opt->arg.cpv)
return NULL;
const size_t replacelen = WINPR_ASSERTING_INT_CAST(size_t, end - str);
@@ -192,12 +196,12 @@ static BOOL replace_format_string(const char* FormatString, struct format_option
size_t replacelen = opt->replacelen;
size_t fmtlen = opt->fmtlen;
const char* replace = opt->replace;
const void* arg = opt->arg;
const void* arg = opt->arg.cpv;
if (opt->ext)
replace = opt->ext(opt, FormatString, &replacelen, &fmtlen);
if (opt->fkt)
arg = opt->fkt(opt->arg);
arg = opt->fkt(opt->arg.pv);
if (replace && (replacelen > 0))
{
@@ -231,12 +235,14 @@ static BOOL replace_format_string(const char* FormatString, struct format_option
return TRUE;
}
BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout, wLogMessage* message)
BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout, const wLogMessage* message,
char* prefix, size_t prefixlen)
{
char format[WLOG_MAX_PREFIX_SIZE] = { 0 };
WINPR_ASSERT(layout);
WINPR_ASSERT(message);
WINPR_ASSERT(prefix);
struct format_tid_arg targ = { 0 };
@@ -249,37 +255,77 @@ BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout, wLogMessage* me
#define ENTRY(x) x, sizeof(x) - 1
struct format_option options[] = {
{ ENTRY("%ctx"), ENTRY("%s"), log->custom, log->context, NULL, &recurse }, /* log context */
{ ENTRY("%dw"), ENTRY("%u"), NULL, (void*)(size_t)localTime.wDayOfWeek, NULL,
{ ENTRY("%ctx"),
ENTRY("%s"),
log->custom,
{ .pv = log->context },
NULL,
&recurse }, /* log context */
{ ENTRY("%dw"),
ENTRY("%u"),
NULL,
{ .s = localTime.wDayOfWeek },
NULL,
&recurse }, /* day of week */
{ ENTRY("%dy"), ENTRY("%u"), NULL, (void*)(size_t)localTime.wDay, NULL,
&recurse }, /* day of year */
{ ENTRY("%fl"), ENTRY("%s"), NULL, WINPR_CAST_CONST_PTR_AWAY(message->FileName, void*),
NULL, &recurse }, /* file */
{ ENTRY("%fn"), ENTRY("%s"), NULL, WINPR_CAST_CONST_PTR_AWAY(message->FunctionName, void*),
NULL, &recurse }, /* function */
{ ENTRY("%hr"), ENTRY("%02u"), NULL, (void*)(size_t)localTime.wHour, NULL,
&recurse }, /* hours */
{ ENTRY("%ln"), ENTRY("%" PRIuz), NULL, (void*)message->LineNumber, NULL,
{ ENTRY("%dy"), ENTRY("%u"), NULL, { .s = localTime.wDay }, NULL, &recurse }, /* day of year
*/
{ ENTRY("%fl"), ENTRY("%s"), NULL, { .cpv = message->FileName }, NULL, &recurse }, /* file
*/
{ ENTRY("%fn"),
ENTRY("%s"),
NULL,
{ .cpv = message->FunctionName },
NULL,
&recurse }, /* function
*/
{ ENTRY("%hr"), ENTRY("%02u"), NULL, { .s = localTime.wHour }, NULL, &recurse }, /* hours */
{ ENTRY("%ln"),
ENTRY("%" PRIuz),
NULL,
{ .s = message->LineNumber },
NULL,
&recurse }, /* line number */
{ ENTRY("%lv"), ENTRY("%s"), NULL,
WINPR_CAST_CONST_PTR_AWAY(WLOG_LEVELS[message->Level], void*), NULL,
{ ENTRY("%lv"),
ENTRY("%s"),
NULL,
{ .cpv = WLOG_LEVELS[message->Level] },
NULL,
&recurse }, /* log level */
{ ENTRY("%mi"), ENTRY("%02u"), NULL, (void*)(size_t)localTime.wMinute, NULL,
&recurse }, /* minutes */
{ ENTRY("%ml"), ENTRY("%03u"), NULL, (void*)(size_t)localTime.wMilliseconds, NULL,
&recurse }, /* milliseconds */
{ ENTRY("%mn"), ENTRY("%s"), NULL, log->Name, NULL, &recurse }, /* module name */
{ ENTRY("%mo"), ENTRY("%u"), NULL, (void*)(size_t)localTime.wMonth, NULL,
&recurse }, /* month */
{ ENTRY("%pid"), ENTRY("%u"), NULL, (void*)(size_t)GetCurrentProcessId(), NULL,
{ ENTRY("%mi"),
ENTRY("%02u"),
NULL,
{ .s = localTime.wMinute },
NULL,
&recurse }, /* minutes
*/
{ ENTRY("%ml"),
ENTRY("%03u"),
NULL,
{ .s = localTime.wMilliseconds },
NULL,
&recurse }, /* milliseconds */
{ ENTRY("%mn"), ENTRY("%s"), NULL, { .cpv = log->Name }, NULL, &recurse }, /* module name */
{ ENTRY("%mo"), ENTRY("%u"), NULL, { .s = localTime.wMonth }, NULL, &recurse }, /* month */
{ ENTRY("%pid"),
ENTRY("%u"),
NULL,
{ .s = GetCurrentProcessId() },
NULL,
&recurse }, /* process id */
{ ENTRY("%se"), ENTRY("%02u"), NULL, (void*)(size_t)localTime.wSecond, NULL,
&recurse }, /* seconds */
{ ENTRY("%tid"), ENTRY("%s"), get_tid, &targ, NULL, &recurse }, /* thread id */
{ ENTRY("%yr"), ENTRY("%u"), NULL, (void*)(size_t)localTime.wYear, NULL,
&recurse }, /* year */
{ ENTRY("%{"), ENTRY("%}"), NULL, log->context, skip_if_null,
{ ENTRY("%se"),
ENTRY("%02u"),
NULL,
{ .s = localTime.wSecond },
NULL,
&recurse }, /* seconds
*/
{ ENTRY("%tid"), ENTRY("%s"), get_tid, { .pv = &targ }, NULL, &recurse }, /* thread id */
{ ENTRY("%yr"), ENTRY("%u"), NULL, { .s = localTime.wYear }, NULL, &recurse }, /* year */
{ ENTRY("%{"),
ENTRY("%}"),
NULL,
{ .pv = log->context },
skip_if_null,
&recurse }, /* skip if no context */
};
@@ -292,7 +338,7 @@ BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout, wLogMessage* me
WINPR_PRAGMA_DIAG_PUSH
WINPR_PRAGMA_DIAG_IGNORED_FORMAT_SECURITY
WLog_PrintMessagePrefix(log, message, format);
WLog_PrintMessagePrefix(prefix, prefixlen, format);
WINPR_PRAGMA_DIAG_POP

View File

@@ -33,9 +33,9 @@ struct s_wLogLayout
LPSTR FormatString;
};
void WLog_Layout_Free(wLog* log, wLogLayout* layout);
WINPR_LOCAL void WLog_Layout_Free(wLog* log, wLogLayout* layout);
WINPR_ATTR_MALLOC(WLog_Layout_Free, 2)
wLogLayout* WLog_Layout_New(wLog* log);
WINPR_LOCAL wLogLayout* WLog_Layout_New(wLog* log);
#endif /* WINPR_WLOG_LAYOUT_PRIVATE_H */

View File

@@ -25,7 +25,7 @@
typedef struct
{
WLOG_APPENDER_COMMON();
wLogAppender common;
} wLogSyslogAppender;
static int getSyslogLevel(DWORD level)
@@ -66,7 +66,7 @@ static BOOL WLog_SyslogAppender_Close(wLog* log, wLogAppender* appender)
}
static BOOL WLog_SyslogAppender_WriteMessage(wLog* log, wLogAppender* appender,
wLogMessage* message)
const wLogMessage* message)
{
int syslogLevel = 0;
@@ -81,7 +81,7 @@ static BOOL WLog_SyslogAppender_WriteMessage(wLog* log, wLogAppender* appender,
}
static BOOL WLog_SyslogAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
wLogMessage* message)
const wLogMessage* message)
{
int syslogLevel = 0;
@@ -96,7 +96,7 @@ static BOOL WLog_SyslogAppender_WriteDataMessage(wLog* log, wLogAppender* append
}
static BOOL WLog_SyslogAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
wLogMessage* message)
const wLogMessage* message)
{
int syslogLevel = 0;
@@ -118,20 +118,18 @@ static void WLog_SyslogAppender_Free(wLogAppender* appender)
wLogAppender* WLog_SyslogAppender_New(WINPR_ATTR_UNUSED wLog* log)
{
wLogSyslogAppender* appender = NULL;
appender = (wLogSyslogAppender*)calloc(1, sizeof(wLogSyslogAppender));
wLogSyslogAppender* appender = (wLogSyslogAppender*)calloc(1, sizeof(wLogSyslogAppender));
if (!appender)
return NULL;
appender->Type = WLOG_APPENDER_SYSLOG;
appender->common.Type = WLOG_APPENDER_SYSLOG;
appender->Open = WLog_SyslogAppender_Open;
appender->Close = WLog_SyslogAppender_Close;
appender->WriteMessage = WLog_SyslogAppender_WriteMessage;
appender->WriteDataMessage = WLog_SyslogAppender_WriteDataMessage;
appender->WriteImageMessage = WLog_SyslogAppender_WriteImageMessage;
appender->Free = WLog_SyslogAppender_Free;
appender->common.Open = WLog_SyslogAppender_Open;
appender->common.Close = WLog_SyslogAppender_Close;
appender->common.WriteMessage = WLog_SyslogAppender_WriteMessage;
appender->common.WriteDataMessage = WLog_SyslogAppender_WriteDataMessage;
appender->common.WriteImageMessage = WLog_SyslogAppender_WriteImageMessage;
appender->common.Free = WLog_SyslogAppender_Free;
return (wLogAppender*)appender;
return &appender->common;
}

View File

@@ -27,6 +27,6 @@
#include "wlog.h"
WINPR_ATTR_MALLOC(WLog_Appender_Free, 2)
wLogAppender* WLog_SyslogAppender_New(wLog* log);
WINPR_LOCAL wLogAppender* WLog_SyslogAppender_New(wLog* log);
#endif /* WINPR_LIBWINPR_UTILS_WLOG_SYSLOGAPPENDER_H_ */

View File

@@ -28,7 +28,7 @@
typedef struct
{
WLOG_APPENDER_COMMON();
wLogAppender common;
char* host;
struct sockaddr targetAddr;
int targetAddrLen;
@@ -87,22 +87,21 @@ static BOOL WLog_UdpAppender_Close(wLog* log, wLogAppender* appender)
return TRUE;
}
static BOOL WLog_UdpAppender_WriteMessage(wLog* log, wLogAppender* appender, wLogMessage* message)
static BOOL WLog_UdpAppender_WriteMessage(wLog* log, wLogAppender* appender,
const wLogMessage* cmessage)
{
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
wLogUdpAppender* udpAppender = NULL;
if (!log || !appender || !message)
if (!log || !appender || !cmessage)
return FALSE;
udpAppender = (wLogUdpAppender*)appender;
message->PrefixString = prefix;
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
(void)_sendto(udpAppender->sock, message->PrefixString,
(int)strnlen(message->PrefixString, INT_MAX), 0, &udpAppender->targetAddr,
udpAppender->targetAddrLen);
(void)_sendto(udpAppender->sock, message->TextString,
(int)strnlen(message->TextString, INT_MAX), 0, &udpAppender->targetAddr,
wLogUdpAppender* udpAppender = (wLogUdpAppender*)appender;
char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 };
WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix));
(void)_sendto(udpAppender->sock, prefix, (int)strnlen(prefix, ARRAYSIZE(prefix)), 0,
&udpAppender->targetAddr, udpAppender->targetAddrLen);
(void)_sendto(udpAppender->sock, cmessage->TextString,
(int)strnlen(cmessage->TextString, INT_MAX), 0, &udpAppender->targetAddr,
udpAppender->targetAddrLen);
(void)_sendto(udpAppender->sock, "\n", 1, 0, &udpAppender->targetAddr,
udpAppender->targetAddrLen);
@@ -110,7 +109,7 @@ static BOOL WLog_UdpAppender_WriteMessage(wLog* log, wLogAppender* appender, wLo
}
static BOOL WLog_UdpAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
wLogMessage* message)
const wLogMessage* message)
{
if (!log || !appender || !message)
return FALSE;
@@ -119,7 +118,7 @@ static BOOL WLog_UdpAppender_WriteDataMessage(wLog* log, wLogAppender* appender,
}
static BOOL WLog_UdpAppender_WriteImageMessage(wLog* log, wLogAppender* appender,
wLogMessage* message)
const wLogMessage* message)
{
if (!log || !appender || !message)
return FALSE;
@@ -169,22 +168,21 @@ static void WLog_UdpAppender_Free(wLogAppender* appender)
wLogAppender* WLog_UdpAppender_New(wLog* log)
{
wLogUdpAppender* appender = NULL;
DWORD nSize = 0;
LPCSTR name = NULL;
appender = (wLogUdpAppender*)calloc(1, sizeof(wLogUdpAppender));
wLogUdpAppender* appender = (wLogUdpAppender*)calloc(1, sizeof(wLogUdpAppender));
if (!appender)
return NULL;
appender->Type = WLOG_APPENDER_UDP;
appender->Open = WLog_UdpAppender_Open;
appender->Close = WLog_UdpAppender_Close;
appender->WriteMessage = WLog_UdpAppender_WriteMessage;
appender->WriteDataMessage = WLog_UdpAppender_WriteDataMessage;
appender->WriteImageMessage = WLog_UdpAppender_WriteImageMessage;
appender->Free = WLog_UdpAppender_Free;
appender->Set = WLog_UdpAppender_Set;
appender->common.Type = WLOG_APPENDER_UDP;
appender->common.Open = WLog_UdpAppender_Open;
appender->common.Close = WLog_UdpAppender_Close;
appender->common.WriteMessage = WLog_UdpAppender_WriteMessage;
appender->common.WriteDataMessage = WLog_UdpAppender_WriteDataMessage;
appender->common.WriteImageMessage = WLog_UdpAppender_WriteImageMessage;
appender->common.Free = WLog_UdpAppender_Free;
appender->common.Set = WLog_UdpAppender_Set;
appender->sock = _socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (appender->sock == INVALID_SOCKET)
@@ -214,7 +212,7 @@ wLogAppender* WLog_UdpAppender_New(wLog* log)
goto error_open;
}
return (wLogAppender*)appender;
return &appender->common;
error_open:
free(appender->host);
closesocket(appender->sock);

View File

@@ -29,6 +29,6 @@
#include "wlog.h"
WINPR_ATTR_MALLOC(WLog_Appender_Free, 2)
wLogAppender* WLog_UdpAppender_New(wLog* log);
WINPR_LOCAL wLogAppender* WLog_UdpAppender_New(wLog* log);
#endif /* WINPR_LIBWINPR_UTILS_WLOG_UDPAPPENDER_H_ */

View File

@@ -38,6 +38,8 @@
#include "wlog.h"
#define WLOG_MAX_STRING_SIZE 16384
typedef struct
{
DWORD Level;
@@ -225,11 +227,10 @@ out:
return status;
}
static BOOL WLog_Write(wLog* log, wLogMessage* message)
static BOOL WLog_Write(wLog* log, const wLogMessage* message)
{
BOOL status = FALSE;
wLogAppender* appender = NULL;
appender = WLog_GetLogAppender(log);
wLogAppender* appender = WLog_GetLogAppender(log);
if (!appender)
return FALSE;
@@ -256,11 +257,10 @@ static BOOL WLog_Write(wLog* log, wLogMessage* message)
return status;
}
static BOOL WLog_WriteData(wLog* log, wLogMessage* message)
static BOOL WLog_WriteData(wLog* log, const wLogMessage* message)
{
BOOL status = 0;
wLogAppender* appender = NULL;
appender = WLog_GetLogAppender(log);
wLogAppender* appender = WLog_GetLogAppender(log);
if (!appender)
return FALSE;
@@ -349,6 +349,24 @@ static BOOL WLog_WritePacket(wLog* log, wLogMessage* message)
return status;
}
static BOOL WLog_PrintTextMessageInternal(wLog* log, const wLogMessage* cmessage, va_list args)
{
assert(cmessage);
char formattedLogMessage[WLOG_MAX_STRING_SIZE] = { 0 };
wLogMessage message = *cmessage;
message.TextString = formattedLogMessage;
WINPR_PRAGMA_DIAG_PUSH
WINPR_PRAGMA_DIAG_IGNORED_FORMAT_NONLITERAL
if (vsnprintf(formattedLogMessage, ARRAYSIZE(formattedLogMessage) - 1, cmessage->FormatString,
args) < 0)
return FALSE;
WINPR_PRAGMA_DIAG_POP
return WLog_Write(log, &message);
}
BOOL WLog_PrintMessageVA(wLog* log, DWORD type, DWORD level, size_t line, const char* file,
const char* function, va_list args)
{
@@ -365,26 +383,7 @@ BOOL WLog_PrintMessageVA(wLog* log, DWORD type, DWORD level, size_t line, const
case WLOG_MESSAGE_TEXT:
message.FormatString = va_arg(args, const char*);
if (!strchr(message.FormatString, '%'))
{
message.TextString = message.FormatString;
status = WLog_Write(log, &message);
}
else
{
char formattedLogMessage[WLOG_MAX_STRING_SIZE] = { 0 };
WINPR_PRAGMA_DIAG_PUSH
WINPR_PRAGMA_DIAG_IGNORED_FORMAT_NONLITERAL
if (vsnprintf(formattedLogMessage, WLOG_MAX_STRING_SIZE - 1, message.FormatString,
args) < 0)
return FALSE;
WINPR_PRAGMA_DIAG_POP
message.TextString = formattedLogMessage;
status = WLog_Write(log, &message);
}
status = WLog_PrintTextMessageInternal(log, &message, args);
break;
case WLOG_MESSAGE_DATA:
@@ -418,7 +417,6 @@ BOOL WLog_PrintMessageVA(wLog* log, DWORD type, DWORD level, size_t line, const
BOOL WLog_PrintTextMessageVA(wLog* log, DWORD level, size_t line, const char* file,
const char* function, const char* fmt, va_list args)
{
BOOL status = FALSE;
wLogMessage message = { 0 };
message.Type = WLOG_MESSAGE_TEXT;
message.Level = level;
@@ -428,27 +426,7 @@ BOOL WLog_PrintTextMessageVA(wLog* log, DWORD level, size_t line, const char* fi
message.FormatString = fmt;
if (!strchr(message.FormatString, '%'))
{
message.TextString = message.FormatString;
status = WLog_Write(log, &message);
}
else
{
char formattedLogMessage[WLOG_MAX_STRING_SIZE] = { 0 };
WINPR_PRAGMA_DIAG_PUSH
WINPR_PRAGMA_DIAG_IGNORED_FORMAT_NONLITERAL
if (vsnprintf(formattedLogMessage, WLOG_MAX_STRING_SIZE - 1, message.FormatString, args) <
0)
return FALSE;
WINPR_PRAGMA_DIAG_POP
message.TextString = formattedLogMessage;
status = WLog_Write(log, &message);
}
return status;
return WLog_PrintTextMessageInternal(log, &message, args);
}
BOOL WLog_PrintMessage(wLog* log, DWORD type, DWORD level, size_t line, const char* file,

View File

@@ -23,43 +23,39 @@
#include <winpr/wlog.h>
#define WLOG_MAX_PREFIX_SIZE 512
#define WLOG_MAX_STRING_SIZE 8192
typedef BOOL (*WLOG_APPENDER_OPEN_FN)(wLog* log, wLogAppender* appender);
typedef BOOL (*WLOG_APPENDER_CLOSE_FN)(wLog* log, wLogAppender* appender);
typedef BOOL (*WLOG_APPENDER_WRITE_MESSAGE_FN)(wLog* log, wLogAppender* appender,
wLogMessage* message);
const wLogMessage* message);
typedef BOOL (*WLOG_APPENDER_WRITE_DATA_MESSAGE_FN)(wLog* log, wLogAppender* appender,
wLogMessage* message);
const wLogMessage* message);
typedef BOOL (*WLOG_APPENDER_WRITE_IMAGE_MESSAGE_FN)(wLog* log, wLogAppender* appender,
wLogMessage* message);
const wLogMessage* message);
typedef BOOL (*WLOG_APPENDER_WRITE_PACKET_MESSAGE_FN)(wLog* log, wLogAppender* appender,
wLogMessage* message);
const wLogMessage* message);
typedef BOOL (*WLOG_APPENDER_SET)(wLogAppender* appender, const char* setting, void* value);
typedef void (*WLOG_APPENDER_FREE)(wLogAppender* appender);
#define WLOG_APPENDER_COMMON() \
DWORD Type; \
BOOL active; \
wLogLayout* Layout; \
CRITICAL_SECTION lock; \
BOOL recursive; \
void* TextMessageContext; \
void* DataMessageContext; \
void* ImageMessageContext; \
void* PacketMessageContext; \
WLOG_APPENDER_OPEN_FN Open; \
WLOG_APPENDER_CLOSE_FN Close; \
WLOG_APPENDER_WRITE_MESSAGE_FN WriteMessage; \
WLOG_APPENDER_WRITE_DATA_MESSAGE_FN WriteDataMessage; \
WLOG_APPENDER_WRITE_IMAGE_MESSAGE_FN WriteImageMessage; \
WLOG_APPENDER_WRITE_PACKET_MESSAGE_FN WritePacketMessage; \
WLOG_APPENDER_FREE Free; \
WLOG_APPENDER_SET Set
struct s_wLogAppender
{
WLOG_APPENDER_COMMON();
DWORD Type;
BOOL active;
wLogLayout* Layout;
CRITICAL_SECTION lock;
BOOL recursive;
void* TextMessageContext;
void* DataMessageContext;
void* ImageMessageContext;
void* PacketMessageContext;
WLOG_APPENDER_OPEN_FN Open;
WLOG_APPENDER_CLOSE_FN Close;
WLOG_APPENDER_WRITE_MESSAGE_FN WriteMessage;
WLOG_APPENDER_WRITE_DATA_MESSAGE_FN WriteDataMessage;
WLOG_APPENDER_WRITE_IMAGE_MESSAGE_FN WriteImageMessage;
WLOG_APPENDER_WRITE_PACKET_MESSAGE_FN WritePacketMessage;
WLOG_APPENDER_FREE Free;
WLOG_APPENDER_SET Set;
};
struct s_wLog
@@ -83,8 +79,10 @@ struct s_wLog
void* context;
};
extern const char* WLOG_LEVELS[7];
BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout, wLogMessage* message);
WINPR_LOCAL extern const char* WLOG_LEVELS[7];
WINPR_LOCAL BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout,
const wLogMessage* message, char* prefix,
size_t prefixlen);
#include "Layout.h"
#include "Appender.h"