[core] add logger to rdpContext

Add a dynamic logger for rdpContext
This commit is contained in:
akallabeth 2023-04-06 11:27:28 +02:00 committed by akallabeth
parent efcacda24c
commit 182f15e475
3 changed files with 40 additions and 24 deletions

View File

@ -315,8 +315,9 @@ extern "C"
UINT64 paddingC[64 - 46]; /* 46 */ UINT64 paddingC[64 - 46]; /* 46 */
ALIGN64 rdpStreamDumpContext* dump; /* 64 */ ALIGN64 rdpStreamDumpContext* dump; /* 64 */
ALIGN64 wLog* log; /* 65 */
UINT64 paddingD[96 - 65]; /* 65 */ UINT64 paddingD[96 - 66]; /* 66 */
UINT64 paddingE[128 - 96]; /* 96 */ UINT64 paddingE[128 - 96]; /* 96 */
}; };

View File

@ -148,9 +148,11 @@ static int freerdp_connect_begin(freerdp* instance)
if (!status || (status2 != CHANNEL_RC_OK)) if (!status || (status2 != CHANNEL_RC_OK))
{ {
freerdp_set_last_error_if_not(instance->context, FREERDP_ERROR_PRE_CONNECT_FAILED); rdpContext* context = instance->context;
WINPR_ASSERT(context);
freerdp_set_last_error_if_not(context, FREERDP_ERROR_PRE_CONNECT_FAILED);
WLog_ERR(TAG, "freerdp_pre_connect failed"); WLog_Print(context->log, WLOG_ERROR, "freerdp_pre_connect failed");
return 0; return 0;
} }
@ -159,7 +161,9 @@ static int freerdp_connect_begin(freerdp* instance)
/* --authonly tests the connection without a UI */ /* --authonly tests the connection without a UI */
if (freerdp_settings_get_bool(rdp->settings, FreeRDP_AuthenticationOnly)) if (freerdp_settings_get_bool(rdp->settings, FreeRDP_AuthenticationOnly))
{ {
WLog_ERR(TAG, "Authentication only, exit status %" PRId32 "", rc); rdpContext* context = rdp->context;
WINPR_ASSERT(context);
WLog_Print(context->log, WLOG_ERROR, "Authentication only, exit status %" PRId32 "", rc);
return 0; return 0;
} }
@ -221,9 +225,11 @@ BOOL freerdp_connect(freerdp* instance)
if (!status || (status2 != CHANNEL_RC_OK) || !update_post_connect(instance->context->update)) if (!status || (status2 != CHANNEL_RC_OK) || !update_post_connect(instance->context->update))
{ {
WLog_ERR(TAG, "freerdp_post_connect failed"); rdpContext* context = instance->context;
WINPR_ASSERT(context);
WLog_Print(context->log, WLOG_ERROR, "freerdp_post_connect failed");
freerdp_set_last_error_if_not(instance->context, FREERDP_ERROR_POST_CONNECT_FAILED); freerdp_set_last_error_if_not(context, FREERDP_ERROR_POST_CONNECT_FAILED);
status = FALSE; status = FALSE;
goto freerdp_connect_finally; goto freerdp_connect_finally;
@ -349,7 +355,9 @@ BOOL freerdp_check_fds(freerdp* instance)
{ {
TerminateEventArgs e; TerminateEventArgs e;
rdpContext* context = instance->context; rdpContext* context = instance->context;
WLog_DBG(TAG, "rdp_check_fds() - %i", status); WINPR_ASSERT(context);
WLog_Print(context->log, WLOG_DEBUG, "rdp_check_fds() - %i", status);
EventArgsInit(&e, "freerdp"); EventArgsInit(&e, "freerdp");
e.code = 0; e.code = 0;
PubSub_OnTerminate(rdp->pubSub, context, &e); PubSub_OnTerminate(rdp->pubSub, context, &e);
@ -395,7 +403,8 @@ BOOL freerdp_check_event_handles(rdpContext* context)
if (!status) if (!status)
{ {
if (freerdp_get_last_error(context) == FREERDP_ERROR_SUCCESS) if (freerdp_get_last_error(context) == FREERDP_ERROR_SUCCESS)
WLog_ERR(TAG, "freerdp_check_fds() failed - %" PRIi32 "", status); WLog_Print(context->log, WLOG_ERROR, "freerdp_check_fds() failed - %" PRIi32 "",
status);
return FALSE; return FALSE;
} }
@ -405,7 +414,8 @@ BOOL freerdp_check_event_handles(rdpContext* context)
if (!status) if (!status)
{ {
if (freerdp_get_last_error(context) == FREERDP_ERROR_SUCCESS) if (freerdp_get_last_error(context) == FREERDP_ERROR_SUCCESS)
WLog_ERR(TAG, "freerdp_channels_check_fds() failed - %" PRIi32 "", status); WLog_Print(context->log, WLOG_ERROR,
"freerdp_channels_check_fds() failed - %" PRIi32 "", status);
return FALSE; return FALSE;
} }
@ -415,7 +425,8 @@ BOOL freerdp_check_event_handles(rdpContext* context)
if (!status) if (!status)
{ {
if (freerdp_get_last_error(context) == FREERDP_ERROR_SUCCESS) if (freerdp_get_last_error(context) == FREERDP_ERROR_SUCCESS)
WLog_ERR(TAG, "checkChannelErrorEvent() failed - %" PRIi32 "", status); WLog_Print(context->log, WLOG_ERROR, "checkChannelErrorEvent() failed - %" PRIi32 "",
status);
return FALSE; return FALSE;
} }
@ -723,6 +734,10 @@ BOOL freerdp_context_new_ex(freerdp* instance, rdpSettings* settings)
if (!context) if (!context)
return FALSE; return FALSE;
context->log = WLog_Get(TAG);
if (!context->log)
goto fail;
/* Set to external settings, prevents rdp_new from creating its own instance */ /* Set to external settings, prevents rdp_new from creating its own instance */
context->settings = settings; context->settings = settings;
context->instance = instance; context->instance = instance;
@ -767,13 +782,13 @@ BOOL freerdp_context_new_ex(freerdp* instance, rdpSettings* settings)
if (!(context->errorDescription = calloc(1, 500))) if (!(context->errorDescription = calloc(1, 500)))
{ {
WLog_ERR(TAG, "calloc failed!"); WLog_Print(context->log, WLOG_ERROR, "calloc failed!");
goto fail; goto fail;
} }
if (!(context->channelErrorEvent = CreateEvent(NULL, TRUE, FALSE, NULL))) if (!(context->channelErrorEvent = CreateEvent(NULL, TRUE, FALSE, NULL)))
{ {
WLog_ERR(TAG, "CreateEvent failed!"); WLog_Print(context->log, WLOG_ERROR, "CreateEvent failed!");
goto fail; goto fail;
} }
@ -993,17 +1008,13 @@ const char* freerdp_get_last_error_category(UINT32 code)
void freerdp_set_last_error_ex(rdpContext* context, UINT32 lastError, const char* fkt, void freerdp_set_last_error_ex(rdpContext* context, UINT32 lastError, const char* fkt,
const char* file, int line) const char* file, int line)
{ {
static wLog* _log = NULL;
if (_log)
_log = WLog_Get(TAG);
WINPR_ASSERT(context); WINPR_ASSERT(context);
if (lastError) if (lastError)
{ {
if (WLog_IsLevelActive(_log, WLOG_ERROR)) if (WLog_IsLevelActive(context->log, WLOG_ERROR))
{ {
WLog_PrintMessage(_log, WLOG_MESSAGE_TEXT, WLOG_ERROR, line, file, fkt, WLog_PrintMessage(context->log, WLOG_MESSAGE_TEXT, WLOG_ERROR, line, file, fkt,
"%s [0x%08" PRIX32 "]", freerdp_get_last_error_name(lastError), "%s [0x%08" PRIX32 "]", freerdp_get_last_error_name(lastError),
lastError); lastError);
} }
@ -1011,15 +1022,15 @@ void freerdp_set_last_error_ex(rdpContext* context, UINT32 lastError, const char
if (lastError == FREERDP_ERROR_SUCCESS) if (lastError == FREERDP_ERROR_SUCCESS)
{ {
if (WLog_IsLevelActive(_log, WLOG_DEBUG)) if (WLog_IsLevelActive(context->log, WLOG_DEBUG))
WLog_PrintMessage(_log, WLOG_MESSAGE_TEXT, WLOG_DEBUG, line, file, fkt, WLog_PrintMessage(context->log, WLOG_MESSAGE_TEXT, WLOG_DEBUG, line, file, fkt,
"resetting error state"); "resetting error state");
} }
else if (context->LastError != FREERDP_ERROR_SUCCESS) else if (context->LastError != FREERDP_ERROR_SUCCESS)
{ {
if (WLog_IsLevelActive(_log, WLOG_ERROR)) if (WLog_IsLevelActive(context->log, WLOG_ERROR))
{ {
WLog_PrintMessage(_log, WLOG_MESSAGE_TEXT, WLOG_ERROR, line, file, fkt, WLog_PrintMessage(context->log, WLOG_MESSAGE_TEXT, WLOG_ERROR, line, file, fkt,
"TODO: Trying to set error code %s, but %s already set!", "TODO: Trying to set error code %s, but %s already set!",
freerdp_get_last_error_name(lastError), freerdp_get_last_error_name(lastError),
freerdp_get_last_error_name(context->LastError)); freerdp_get_last_error_name(context->LastError));
@ -1169,8 +1180,8 @@ BOOL checkChannelErrorEvent(rdpContext* context)
if (WaitForSingleObject(context->channelErrorEvent, 0) == WAIT_OBJECT_0) if (WaitForSingleObject(context->channelErrorEvent, 0) == WAIT_OBJECT_0)
{ {
WLog_ERR(TAG, "%s. Error was %" PRIu32 "", context->errorDescription, WLog_Print(context->log, WLOG_ERROR, "%s. Error was %" PRIu32 "", context->errorDescription,
context->channelErrorNum); context->channelErrorNum);
return FALSE; return FALSE;
} }

View File

@ -1511,6 +1511,10 @@ BOOL freerdp_peer_context_new_ex(freerdp_peer* client, const rdpSettings* settin
if (!(context = (rdpContext*)calloc(1, client->ContextSize))) if (!(context = (rdpContext*)calloc(1, client->ContextSize)))
goto fail; goto fail;
context->log = WLog_Get(TAG);
if (!context->log)
goto fail;
client->context = context; client->context = context;
context->peer = client; context->peer = client;
context->ServerMode = TRUE; context->ServerMode = TRUE;