From 90ce22283df958b0daff595aaabcdf1e6f97e038 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Wed, 22 Jun 2022 12:42:48 +0200 Subject: [PATCH] Replaced direct settings access with getter/setter --- channels/printer/client/printer_main.c | 2 +- .../src/main/cpp/android_freerdp.c | 2 +- client/Windows/wf_gdi.c | 5 ++-- client/X11/xf_gdi.c | 9 ++++--- client/X11/xf_graphics.c | 2 +- client/iOS/Models/RDPSession.m | 2 +- server/Mac/mf_peer.c | 6 +++-- server/Sample/sfreerdp.c | 8 +++--- server/Windows/wf_peer.c | 6 +++-- server/proxy/modules/capture/cap_main.c | 8 +++--- server/proxy/modules/capture/cap_protocol.c | 3 ++- server/proxy/pf_server.c | 3 ++- server/shadow/Win/win_rdp.c | 6 +++-- server/shadow/shadow_client.c | 27 ++++++++++++------- 14 files changed, 56 insertions(+), 33 deletions(-) diff --git a/channels/printer/client/printer_main.c b/channels/printer/client/printer_main.c index 69ac02e5f..9167bfd74 100644 --- a/channels/printer/client/printer_main.c +++ b/channels/printer/client/printer_main.c @@ -75,7 +75,7 @@ static const char* filemap[] = { "PortDosName", "PnPName", "DriverName", static char* get_printer_config_path(const rdpSettings* settings, const WCHAR* name, size_t length) { - const char* path = settings->ConfigPath; + const char* path = freerdp_settings_get_string(settings, FreeRDP_ConfigPath); char* dir = GetCombinedPath(path, "printers"); char* bname = crypto_base64_encode((const BYTE*)name, length); char* config = GetCombinedPath(dir, bname); diff --git a/client/Android/Studio/freeRDPCore/src/main/cpp/android_freerdp.c b/client/Android/Studio/freeRDPCore/src/main/cpp/android_freerdp.c index 29bd7a35c..80c74226e 100644 --- a/client/Android/Studio/freeRDPCore/src/main/cpp/android_freerdp.c +++ b/client/Android/Studio/freeRDPCore/src/main/cpp/android_freerdp.c @@ -177,7 +177,7 @@ static BOOL android_desktop_resize(rdpContext* context) freerdp_callback("OnGraphicsResize", "(JIII)V", (jlong)context->instance, context->settings->DesktopWidth, context->settings->DesktopHeight, - context->freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth)); + freerdp_settings_get_uint32(context->settings, FreeRDP_ColorDepth)); return TRUE; } diff --git a/client/Windows/wf_gdi.c b/client/Windows/wf_gdi.c index 4384f5d43..30e02080f 100644 --- a/client/Windows/wf_gdi.c +++ b/client/Windows/wf_gdi.c @@ -75,7 +75,7 @@ static BOOL wf_decode_color(wfContext* wfc, const UINT32 srcColor, COLORREF* col if (!gdi || !settings) return FALSE; - SrcFormat = gdi_get_pixel_format(gdi->context->settings->ColorDepth); + SrcFormat = gdi_get_pixel_format(freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth)); if (format) *format = SrcFormat; @@ -494,7 +494,8 @@ static BOOL wf_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) if (!wf_decode_color(wfc, patblt->backColor, &bgcolor, NULL)) return FALSE; - brush = wf_create_brush(wfc, &patblt->brush, fgcolor, context->settings->ColorDepth); + brush = wf_create_brush(wfc, &patblt->brush, fgcolor, + freerdp_settings_get_uint32(context->settings, FreeRDP_ColorDepth)); org_bkmode = SetBkMode(wfc->drawing->hdc, OPAQUE); org_bkcolor = SetBkColor(wfc->drawing->hdc, bgcolor); org_textcolor = SetTextColor(wfc->drawing->hdc, fgcolor); diff --git a/client/X11/xf_gdi.c b/client/X11/xf_gdi.c index 11c6cb563..a9df74b31 100644 --- a/client/X11/xf_gdi.c +++ b/client/X11/xf_gdi.c @@ -376,7 +376,8 @@ static BOOL xf_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { UINT32 bpp = brush->bpp; - if ((bpp == 16) && (context->settings->ColorDepth == 15)) + if ((bpp == 16) && + (freerdp_settings_get_uint32(context->settings, FreeRDP_ColorDepth) == 15)) bpp = 15; Pixmap pattern = xf_brush_new(xfc, 8, 8, bpp, brush->data); @@ -683,7 +684,8 @@ static BOOL xf_gdi_mem3blt(rdpContext* context, MEM3BLT_ORDER* mem3blt) { UINT32 bpp = brush->bpp; - if ((bpp == 16) && (context->settings->ColorDepth == 15)) + if ((bpp == 16) && + (freerdp_settings_get_uint32(context->settings, FreeRDP_ColorDepth) == 15)) bpp = 15; pattern = xf_brush_new(xfc, 8, 8, bpp, brush->data); @@ -858,7 +860,8 @@ static BOOL xf_gdi_polygon_cb(rdpContext* context, POLYGON_CB_ORDER* polygon_cb) { UINT32 bpp = brush->bpp; - if ((bpp == 16) && (context->settings->ColorDepth == 15)) + if ((bpp == 16) && + (freerdp_settings_get_uint32(context->settings, FreeRDP_ColorDepth) == 15)) bpp = 15; pattern = xf_brush_new(xfc, 8, 8, bpp, brush->data); diff --git a/client/X11/xf_graphics.c b/client/X11/xf_graphics.c index 07a776a27..851a84dc5 100644 --- a/client/X11/xf_graphics.c +++ b/client/X11/xf_graphics.c @@ -61,7 +61,7 @@ BOOL xf_decode_color(xfContext* xfc, const UINT32 srcColor, XColor* color) if (!settings) return FALSE; - switch (settings->ColorDepth) + switch (freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth)) { case 32: case 24: diff --git a/client/iOS/Models/RDPSession.m b/client/iOS/Models/RDPSession.m index 4ccbf0b8a..137985f21 100644 --- a/client/iOS/Models/RDPSession.m +++ b/client/iOS/Models/RDPSession.m @@ -318,7 +318,7 @@ out_free: // TODO: This is a hack to ensure connections to RDVH with 16bpp don't have an odd screen // resolution width // Otherwise this could result in screen corruption .. - if (settings->ColorDepth <= 16) + if (freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth) <= 16) settings->DesktopWidth &= (~1); [self performSelectorInBackground:@selector(runSession) withObject:nil]; diff --git a/server/Mac/mf_peer.c b/server/Mac/mf_peer.c index 6dcd499df..aa1e62faa 100644 --- a/server/Mac/mf_peer.c +++ b/server/Mac/mf_peer.c @@ -285,7 +285,8 @@ static BOOL mf_peer_post_connect(freerdp_peer* client) settings->DesktopWidth = mfi->servscreen_width; settings->DesktopHeight = mfi->servscreen_height; - settings->ColorDepth = bitsPerPixel; + if (!freerdp_settings_set_uint32(settings, FreeRDP_ColorDepth, bitsPerPixel)) + return FALSE; WINPR_ASSERT(client->context->update); WINPR_ASSERT(client->context->update->DesktopResize); @@ -381,7 +382,8 @@ static void* mf_peer_main_loop(void* arg) settings->NlaSecurity = FALSE; settings->RemoteFxCodec = TRUE; - settings->ColorDepth = 32; + if (!freerdp_settings_set_uint32(settings, FreeRDP_ColorDepth, 32)) + return FALSE; settings->SuppressOutput = TRUE; settings->RefreshRect = FALSE; diff --git a/server/Sample/sfreerdp.c b/server/Sample/sfreerdp.c index 6f24e38d1..aa8e2240d 100644 --- a/server/Sample/sfreerdp.c +++ b/server/Sample/sfreerdp.c @@ -648,7 +648,8 @@ static BOOL tf_peer_post_connect(freerdp_peer* client) WLog_DBG(TAG, ""); WLog_DBG(TAG, "Client requested desktop: %" PRIu32 "x%" PRIu32 "x%" PRIu32 "", - settings->DesktopWidth, settings->DesktopHeight, settings->ColorDepth); + settings->DesktopWidth, settings->DesktopHeight, + freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth)); #if (SAMPLE_SERVER_USE_CLIENT_RESOLUTION == 1) if (!rfx_context_reset(context->rfx_context, settings->DesktopWidth, settings->DesktopHeight)) @@ -1036,8 +1037,9 @@ static DWORD WINAPI test_peer_mainloop(LPVOID arg) /* settings->EncryptionLevel = ENCRYPTION_LEVEL_LOW; */ /* settings->EncryptionLevel = ENCRYPTION_LEVEL_FIPS; */ settings->RemoteFxCodec = TRUE; - freerdp_settings_set_bool(settings, FreeRDP_NSCodec, TRUE); - settings->ColorDepth = 32; + if (!freerdp_settings_set_bool(settings, FreeRDP_NSCodec, TRUE) || + !freerdp_settings_set_uint32(settings, FreeRDP_ColorDepth, 32)) + return FALSE; settings->SuppressOutput = TRUE; settings->RefreshRect = TRUE; diff --git a/server/Windows/wf_peer.c b/server/Windows/wf_peer.c index 17d0db96c..c9f539eb0 100644 --- a/server/Windows/wf_peer.c +++ b/server/Windows/wf_peer.c @@ -125,7 +125,8 @@ static BOOL wf_peer_post_connect(freerdp_peer* client) */ settings->DesktopWidth = wfi->servscreen_width; settings->DesktopHeight = wfi->servscreen_height; - settings->ColorDepth = wfi->bitsPerPixel; + if (!freerdp_settings_set_uint32(settings, FreeRDP_ColorDepth, wfi->bitsPerPixel)) + return FALSE; WINPR_ASSERT(client->context->update); WINPR_ASSERT(client->context->update->DesktopResize); @@ -263,7 +264,8 @@ DWORD WINAPI wf_peer_main_loop(LPVOID lpParam) WINPR_ASSERT(settings); settings->RemoteFxCodec = TRUE; - settings->ColorDepth = 32; + if (!freerdp_settings_set_uint32(settings, FreeRDP_ColorDepth, 32)) + goto fail_peer_init; settings->NSCodec = FALSE; settings->JpegCodec = FALSE; diff --git a/server/proxy/modules/capture/cap_main.c b/server/proxy/modules/capture/cap_main.c index 080644fc9..d334fb204 100644 --- a/server/proxy/modules/capture/cap_main.c +++ b/server/proxy/modules/capture/cap_main.c @@ -162,9 +162,11 @@ static BOOL capture_plugin_send_frame(pClientContext* pc, SOCKET socket, const B settings = pc->context.settings; WINPR_ASSERT(settings); - frame_size = settings->DesktopWidth * settings->DesktopHeight * (settings->ColorDepth / 8); - bmp_header = winpr_bitmap_construct_header(settings->DesktopWidth, settings->DesktopHeight, - settings->ColorDepth); + frame_size = settings->DesktopWidth * settings->DesktopHeight * + (freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth) / 8); + bmp_header = + winpr_bitmap_construct_header(settings->DesktopWidth, settings->DesktopHeight, + freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth)); if (!bmp_header) return FALSE; diff --git a/server/proxy/modules/capture/cap_protocol.c b/server/proxy/modules/capture/cap_protocol.c index dcf797a4d..59e8f91a7 100644 --- a/server/proxy/modules/capture/cap_protocol.c +++ b/server/proxy/modules/capture/cap_protocol.c @@ -58,7 +58,8 @@ wStream* capture_plugin_create_session_info_packet(pClientContext* pc) Stream_Write(s, settings->Username, username_length); /* username */ Stream_Write_UINT32(s, settings->DesktopWidth); /* desktop width (4 bytes) */ Stream_Write_UINT32(s, settings->DesktopHeight); /* desktop height (4 bytes) */ - Stream_Write_UINT32(s, settings->ColorDepth); /* color depth (4 bytes) */ + Stream_Write_UINT32( + s, freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth)); /* color depth (4 bytes) */ Stream_Write(s, pc->pdata->session_id, PROXY_SESSION_ID_LENGTH); /* color depth (32 bytes) */ return s; } diff --git a/server/proxy/pf_server.c b/server/proxy/pf_server.c index a77a4bfe0..bf1cc3171 100644 --- a/server/proxy/pf_server.c +++ b/server/proxy/pf_server.c @@ -512,7 +512,8 @@ static BOOL pf_server_initialize_peer_connection(freerdp_peer* peer) settings->TlsSecurity = config->ServerTlsSecurity; settings->NlaSecurity = config->ServerNlaSecurity; settings->EncryptionLevel = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE; - settings->ColorDepth = 32; + if (!freerdp_settings_set_uint32(settings, FreeRDP_ColorDepth, 32)) + return FALSE; settings->SuppressOutput = TRUE; settings->RefreshRect = TRUE; settings->DesktopResize = TRUE; diff --git a/server/shadow/Win/win_rdp.c b/server/shadow/Win/win_rdp.c index b63fc1be0..170d562c2 100644 --- a/server/shadow/Win/win_rdp.c +++ b/server/shadow/Win/win_rdp.c @@ -306,7 +306,8 @@ static BOOL shw_freerdp_client_new(freerdp* instance, rdpContext* context) settings->FrameMarkerCommandEnabled = TRUE; settings->SurfaceFrameMarkerEnabled = TRUE; settings->AltSecFrameMarkerSupport = TRUE; - settings->ColorDepth = 32; + if (!freerdp_settings_set_uint32(settings, FreeRDP_ColorDepth, 32)) + return FALSE; settings->NSCodec = TRUE; settings->RemoteFxCodec = TRUE; settings->FastPathInput = TRUE; @@ -314,7 +315,8 @@ static BOOL shw_freerdp_client_new(freerdp* instance, rdpContext* context) settings->LargePointerFlag = TRUE; settings->CompressionEnabled = FALSE; settings->AutoReconnectionEnabled = FALSE; - settings->NetworkAutoDetect = FALSE; + if (!freerdp_settings_set_bool(settings, FreeRDP_NetworkAutoDetect, FALSE)) + return FALSE; settings->SupportHeartbeatPdu = FALSE; settings->SupportMultitransport = FALSE; settings->ConnectionType = CONNECTION_TYPE_LAN; diff --git a/server/shadow/shadow_client.c b/server/shadow/shadow_client.c index 61e7e965a..53c887052 100644 --- a/server/shadow/shadow_client.c +++ b/server/shadow/shadow_client.c @@ -180,7 +180,9 @@ static BOOL shadow_client_context_new(freerdp_peer* peer, rdpContext* context) settings = peer->context->settings; WINPR_ASSERT(settings); - settings->ColorDepth = srvSettings->ColorDepth; + if (!freerdp_settings_set_uint32(settings, FreeRDP_ColorDepth, + freerdp_settings_get_uint32(srvSettings, FreeRDP_ColorDepth))) + return FALSE; NSCodec = freerdp_settings_get_bool(srvSettings, FreeRDP_NSCodec); freerdp_settings_set_bool(settings, FreeRDP_NSCodec, NSCodec); settings->RemoteFxCodec = srvSettings->RemoteFxCodec; @@ -406,8 +408,11 @@ static BOOL shadow_client_post_connect(freerdp_peer* peer) subsystem = server->subsystem; WINPR_ASSERT(subsystem); - if (settings->ColorDepth == 24) - settings->ColorDepth = 16; /* disable 24bpp */ + if (freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth) == 24) + { + if (!freerdp_settings_set_uint32(settings, FreeRDP_ColorDepth, 16)) /* disable 24bpp */ + return FALSE; + } if (settings->MultifragMaxRequestSize < 0x3F0000) { @@ -419,19 +424,21 @@ static BOOL shadow_client_post_connect(freerdp_peer* peer) WLog_INFO(TAG, "Client from %s is activated (%" PRIu32 "x%" PRIu32 "@%" PRIu32 ")", peer->hostname, settings->DesktopWidth, settings->DesktopHeight, - settings->ColorDepth); + freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth)); /* Resize client if necessary */ if (shadow_client_recalc_desktop_size(client)) { + BOOL rc; rdpUpdate* update = peer->context->update; WINPR_ASSERT(update); WINPR_ASSERT(update->DesktopResize); - update->DesktopResize(update->context); + rc = update->DesktopResize(update->context); WLog_INFO(TAG, "Client from %s is resized (%" PRIu32 "x%" PRIu32 "@%" PRIu32 ")", peer->hostname, settings->DesktopWidth, settings->DesktopHeight, - settings->ColorDepth); + freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth)); + return FALSE; } if (shadow_client_channels_post_connect(client) != CHANNEL_RC_OK) @@ -1499,7 +1506,7 @@ static BOOL shadow_client_send_bitmap_update(rdpShadowClient* client, BYTE* pSrc maxUpdateSize = settings->MultifragMaxRequestSize; - if (settings->ColorDepth < 32) + if (freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth) < 32) { if (shadow_encoder_prepare(encoder, FREERDP_CODEC_INTERLEAVED) < 0) { @@ -1574,9 +1581,9 @@ static BOOL shadow_client_send_bitmap_update(rdpShadowClient* client, BYTE* pSrc if ((bitmap->width < 4) || (bitmap->height < 4)) continue; - if (settings->ColorDepth < 32) + if (freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth) < 32) { - UINT32 bitsPerPixel = settings->ColorDepth; + UINT32 bitsPerPixel = freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth); UINT32 bytesPerPixel = (bitsPerPixel + 7) / 8; DstSize = 64 * 64 * 4; buffer = encoder->grid[k]; @@ -1887,7 +1894,7 @@ static BOOL shadow_client_send_resize(rdpShadowClient* client, SHADOW_GFX_STATUS LeaveCriticalSection(&(client->lock)); WLog_INFO(TAG, "Client from %s is resized (%" PRIu32 "x%" PRIu32 "@%" PRIu32 ")", peer->hostname, settings->DesktopWidth, settings->DesktopHeight, - settings->ColorDepth); + freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth)); return TRUE; }