BOOL shadow_client_post_connect(freerdp_peer* peer) { int authStatus; int width, height; rdpSettings* settings; rdpShadowClient* client; rdpShadowServer* server; RECTANGLE_16 invalidRect; rdpShadowSubsystem* subsystem; client = (rdpShadowClient*) peer->context; settings = peer->settings; server = client->server; subsystem = server->subsystem; shadow_client_calc_desktop_size(server, &width, &height); settings->DesktopWidth = width; settings->DesktopHeight = height; if (settings->ColorDepth == 24) settings->ColorDepth = 16; /* disable 24bpp */ if (settings->MultifragMaxRequestSize < 0x3F0000) settings->NSCodec = FALSE; /* NSCodec compressor does not support fragmentation yet */ WLog_ERR(TAG, "Client from %s is activated (%dx%d@%d)", peer->hostname, settings->DesktopWidth, settings->DesktopHeight, settings->ColorDepth); peer->update->DesktopResize(peer->update->context); shadow_client_channels_post_connect(client); invalidRect.left = 0; invalidRect.top = 0; invalidRect.right = server->screen->width; invalidRect.bottom = server->screen->height; region16_union_rect(&(client->invalidRegion), &(client->invalidRegion), &invalidRect); authStatus = -1; if (settings->Username && settings->Password) settings->AutoLogonEnabled = TRUE; if (server->authentication) { if (subsystem->Authenticate) { authStatus = subsystem->Authenticate(subsystem, client, settings->Username, settings->Domain, settings->Password); } } if (server->authentication) { if (authStatus < 0) { WLog_ERR(TAG, "client authentication failure: %d", authStatus); return FALSE; } } if (subsystem->ClientConnect) { return subsystem->ClientConnect(subsystem, client); } return TRUE; }
static BOOL shadow_client_post_connect(freerdp_peer* peer) { int authStatus; rdpSettings* settings; rdpShadowClient* client; rdpShadowServer* server; rdpShadowSubsystem* subsystem; client = (rdpShadowClient*) peer->context; settings = peer->settings; server = client->server; subsystem = server->subsystem; if (settings->ColorDepth == 24) settings->ColorDepth = 16; /* disable 24bpp */ if (settings->MultifragMaxRequestSize < 0x3F0000) settings->NSCodec = FALSE; /* NSCodec compressor does not support fragmentation yet */ WLog_INFO(TAG, "Client from %s is activated (%dx%d@%d)", peer->hostname, settings->DesktopWidth, settings->DesktopHeight, settings->ColorDepth); /* Resize client if necessary */ if (shadow_client_recalc_desktop_size(client)) { peer->update->DesktopResize(peer->update->context); WLog_INFO(TAG, "Client from %s is resized (%dx%d@%d)", peer->hostname, settings->DesktopWidth, settings->DesktopHeight, settings->ColorDepth); } if (shadow_client_channels_post_connect(client) != CHANNEL_RC_OK) return FALSE; shadow_client_mark_invalid(client, 0, NULL); authStatus = -1; if (settings->Username && settings->Password) settings->AutoLogonEnabled = TRUE; if (server->authentication && !settings->NlaSecurity) { if (subsystem->Authenticate) { authStatus = subsystem->Authenticate(subsystem, client, settings->Username, settings->Domain, settings->Password); } if (authStatus < 0) { WLog_ERR(TAG, "client authentication failure: %d", authStatus); return FALSE; } } if (subsystem->ClientConnect) { return subsystem->ClientConnect(subsystem, client); } return TRUE; }