[core,timezone] improve timezone logging

* Unify logging to single function
* Add helpers to format magic numbers as strings
This commit is contained in:
akallabeth 2024-06-26 20:37:19 +02:00
parent d1f0e2a0e2
commit 9b89d8fa23
No known key found for this signature in database
GPG Key ID: A49454A3FC909FD5
3 changed files with 104 additions and 24 deletions

View File

@ -443,6 +443,11 @@ static BOOL rdp_read_extended_info_packet(rdpRdp* rdp, wStream* s)
if (!freerdp_settings_set_bool(settings, FreeRDP_DynamicDaylightTimeDisabled, if (!freerdp_settings_set_bool(settings, FreeRDP_DynamicDaylightTimeDisabled,
DynamicDaylightTimeDisabled != 0)) DynamicDaylightTimeDisabled != 0))
return FALSE; return FALSE;
DEBUG_TIMEZONE("DynamicTimeZone=%s [%s]",
freerdp_settings_get_string(settings, FreeRDP_DynamicDSTTimeZoneKeyName),
freerdp_settings_get_bool(settings, FreeRDP_DynamicDaylightTimeDisabled)
? "no-DST"
: "DST");
} }
end: end:

View File

@ -29,6 +29,101 @@
#include <freerdp/log.h> #include <freerdp/log.h>
#define TAG FREERDP_TAG("core.timezone") #define TAG FREERDP_TAG("core.timezone")
#if !defined(WITH_DEBUG_TIMEZONE)
#define log_timezone(tzif, result)
#else
#define log_timezone(tzif, result) log_timezone_((tzif), (result), __FILE__, __func__, __LINE__)
static const char* weekday2str(WORD wDayOfWeek)
{
switch (wDayOfWeek)
{
case 0:
return "SUNDAY";
case 1:
return "MONDAY";
case 2:
return "TUESDAY";
case 3:
return "WEDNESDAY";
case 4:
return "THURSDAY";
case 5:
return "FRIDAY";
case 6:
return "SATURDAY";
default:
return "DAY-OF-MAGIC";
}
}
static char* systemtime2str(const SYSTEMTIME* t, char* buffer, size_t len)
{
const SYSTEMTIME empty = { 0 };
if (memcmp(t, &empty, sizeof(SYSTEMTIME)) == 0)
_snprintf(buffer, len, "{ not set }");
else
{
_snprintf(buffer, len,
"{ %" PRIu16 "-%" PRIu16 "-%" PRIu16 " [%s] %" PRIu16 ":%" PRIu16 ":%" PRIu16
".%" PRIu16 "}",
t->wYear, t->wMonth, t->wDay, weekday2str(t->wDayOfWeek), t->wHour, t->wMinute,
t->wSecond, t->wMilliseconds);
}
return buffer;
}
static void log_print(wLog* log, DWORD level, const char* file, const char* fkt, size_t line, ...)
{
if (!WLog_IsLevelActive(log, level))
return;
va_list ap;
va_start(ap, line);
WLog_PrintMessageVA(log, WLOG_MESSAGE_TEXT, level, line, file, fkt, ap);
va_end(ap);
}
static void log_timezone_(const TIME_ZONE_INFORMATION* tzif, DWORD result, const char* file,
const char* fkt, size_t line)
{
WINPR_ASSERT(tzif);
char buffer[64] = { 0 };
DWORD level = WLOG_TRACE;
wLog* log = WLog_Get(TIMEZONE_TAG);
log_print(log, level, file, fkt, line, "TIME_ZONE_INFORMATION {");
log_print(log, level, file, fkt, line, " Bias=%" PRIu32, tzif->Bias);
ConvertWCharNToUtf8(tzif->StandardName, ARRAYSIZE(tzif->StandardName), buffer,
ARRAYSIZE(buffer));
log_print(log, level, file, fkt, line, " StandardName=%s", buffer);
log_print(log, level, file, fkt, line, " StandardDate=%s",
systemtime2str(&tzif->StandardDate, buffer, sizeof(buffer)));
log_print(log, level, file, fkt, line, " StandardBias=%" PRIu32, tzif->StandardBias);
ConvertWCharNToUtf8(tzif->DaylightName, ARRAYSIZE(tzif->DaylightName), buffer,
ARRAYSIZE(buffer));
log_print(log, level, file, fkt, line, " DaylightName=%s", buffer);
log_print(log, level, file, fkt, line, " DaylightDate=%s",
systemtime2str(&tzif->DaylightDate, buffer, sizeof(buffer)));
log_print(log, level, file, fkt, line, " DaylightBias=%" PRIu32, tzif->DaylightBias);
switch (result)
{
case TIME_ZONE_ID_DAYLIGHT:
log_print(log, level, file, fkt, line, " DaylightDate in use");
break;
case TIME_ZONE_ID_STANDARD:
log_print(log, level, file, fkt, line, " StandardDate in use");
break;
default:
log_print(log, level, file, fkt, line, " UnknownDate in use");
break;
}
log_print(log, level, file, fkt, line, "}");
}
#endif
static BOOL rdp_read_system_time(wStream* s, SYSTEMTIME* system_time); static BOOL rdp_read_system_time(wStream* s, SYSTEMTIME* system_time);
static BOOL rdp_write_system_time(wStream* s, const SYSTEMTIME* system_time); static BOOL rdp_write_system_time(wStream* s, const SYSTEMTIME* system_time);
@ -78,11 +173,6 @@ BOOL rdp_write_system_time(wStream* s, const SYSTEMTIME* system_time)
Stream_Write_UINT16(s, system_time->wMinute); /* wMinute */ Stream_Write_UINT16(s, system_time->wMinute); /* wMinute */
Stream_Write_UINT16(s, system_time->wSecond); /* wSecond */ Stream_Write_UINT16(s, system_time->wSecond); /* wSecond */
Stream_Write_UINT16(s, system_time->wMilliseconds); /* wMilliseconds */ Stream_Write_UINT16(s, system_time->wMilliseconds); /* wMilliseconds */
DEBUG_TIMEZONE("Time: y=%" PRIu16 ",m=%" PRIu16 ",dow=%" PRIu16 ",d=%" PRIu16 ", %02" PRIu16
":%02" PRIu16 ":%02" PRIu16 ".%03" PRIu16 "",
system_time->wYear, system_time->wMonth, system_time->wDayOfWeek,
system_time->wDay, system_time->wHour, system_time->wMinute,
system_time->wSecond, system_time->wMilliseconds);
return TRUE; return TRUE;
} }
@ -121,6 +211,7 @@ BOOL rdp_read_client_time_zone(wStream* s, rdpSettings* settings)
if (!rdp_read_system_time(s, &tz->DaylightDate)) /* DaylightDate */ if (!rdp_read_system_time(s, &tz->DaylightDate)) /* DaylightDate */
return FALSE; return FALSE;
Stream_Read_UINT32(s, tz->DaylightBias); /* DaylightBias */ Stream_Read_UINT32(s, tz->DaylightBias); /* DaylightBias */
log_timezone(tz, 0);
return TRUE; return TRUE;
} }
@ -143,6 +234,7 @@ BOOL rdp_write_client_time_zone(wStream* s, rdpSettings* settings)
if (!tz) if (!tz)
return FALSE; return FALSE;
log_timezone(tz, 0);
if (!Stream_EnsureRemainingCapacity(s, 4ull + sizeof(tz->StandardName))) if (!Stream_EnsureRemainingCapacity(s, 4ull + sizeof(tz->StandardName)))
return FALSE; return FALSE;
@ -154,21 +246,12 @@ BOOL rdp_write_client_time_zone(wStream* s, rdpSettings* settings)
if (!rdp_write_system_time(s, &tz->StandardDate)) if (!rdp_write_system_time(s, &tz->StandardDate))
return FALSE; return FALSE;
#ifdef WITH_DEBUG_TIMEZONE
WLog_DBG(TIMEZONE_TAG, "bias=%" PRId32 "", tz->Bias);
WLog_DBG(TIMEZONE_TAG, "StandardName:");
winpr_HexDump(TIMEZONE_TAG, WLOG_DEBUG, (const BYTE*)tz->StandardName,
sizeof(tz->StandardName));
WLog_DBG(TIMEZONE_TAG, "DaylightName:");
winpr_HexDump(TIMEZONE_TAG, WLOG_DEBUG, (const BYTE*)tz->DaylightName,
sizeof(tz->DaylightName));
#endif
/* Note that StandardBias is ignored if no valid standardDate is provided. */ /* Note that StandardBias is ignored if no valid standardDate is provided. */
/* StandardBias */ /* StandardBias */
if (!Stream_EnsureRemainingCapacity(s, 4ull + sizeof(tz->DaylightName))) if (!Stream_EnsureRemainingCapacity(s, 4ull + sizeof(tz->DaylightName)))
return FALSE; return FALSE;
Stream_Write_UINT32(s, tz->StandardBias); Stream_Write_UINT32(s, tz->StandardBias);
DEBUG_TIMEZONE("StandardBias=%" PRId32 "", tz->StandardBias);
/* daylightName (64 bytes) */ /* daylightName (64 bytes) */
Stream_Write(s, tz->DaylightName, sizeof(tz->DaylightName)); Stream_Write(s, tz->DaylightName, sizeof(tz->DaylightName));
/* DaylightDate */ /* DaylightDate */
@ -179,6 +262,6 @@ BOOL rdp_write_client_time_zone(wStream* s, rdpSettings* settings)
if (!Stream_EnsureRemainingCapacity(s, 4ull)) if (!Stream_EnsureRemainingCapacity(s, 4ull))
return FALSE; return FALSE;
Stream_Write_UINT32(s, tz->DaylightBias); Stream_Write_UINT32(s, tz->DaylightBias);
DEBUG_TIMEZONE("DaylightBias=%" PRId32 "", tz->DaylightBias);
return TRUE; return TRUE;
} }

View File

@ -35,13 +35,5 @@
#endif #endif
#define TIMEZONE_TAG FREERDP_TAG("timezone") #define TIMEZONE_TAG FREERDP_TAG("timezone")
#ifdef WITH_DEBUG_TIMEZONE
#define DEBUG_TIMEZONE(...) WLog_DBG(TIMEZONE_TAG, __VA_ARGS__)
#else
#define DEBUG_TIMEZONE(...) \
do \
{ \
} while (0)
#endif
#endif /* FREERDP_LIB_LOCALE_LIB_H */ #endif /* FREERDP_LIB_LOCALE_LIB_H */