freerdp* freerdp_new() { freerdp* instance; instance = xzalloc(sizeof(freerdp)); if (instance != NULL) { rdpRdp* rdp = rdp_new(instance); instance->rdp = (void*) rdp; instance->input = rdp->input; instance->update = rdp->update; instance->settings = rdp->settings; instance->Connect = freerdp_connect; instance->GetFileDescriptor = freerdp_get_fds; instance->CheckFileDescriptor = freerdp_check_fds; instance->SendChannelData = freerdp_send_channel_data; instance->Disconnect = freerdp_disconnect; input_register_client_callbacks(rdp->input); } return instance; }
int rdp_client_connect_demand_active(rdpRdp* rdp, wStream* s) { BYTE* mark; UINT16 width; UINT16 height; width = rdp->settings->DesktopWidth; height = rdp->settings->DesktopHeight; Stream_GetPointer(s, mark); if (!rdp_recv_demand_active(rdp, s)) { UINT16 channelId; Stream_SetPointer(s, mark); rdp_recv_get_active_header(rdp, s, &channelId); /* Was Stream_Seek(s, RDP_PACKET_HEADER_MAX_LENGTH); * but the headers aren't always that length, * so that could result in a bad offset. */ return rdp_recv_out_of_sequence_pdu(rdp, s); } if (freerdp_shall_disconnect(rdp->instance)) return 0; if (!rdp_send_confirm_active(rdp)) return -1; if (!input_register_client_callbacks(rdp->input)) { WLog_ERR(TAG, "error registering client callbacks"); return -1; } /** * The server may request a different desktop size during Deactivation-Reactivation sequence. * In this case, the UI should be informed and do actual window resizing at this point. */ if (width != rdp->settings->DesktopWidth || height != rdp->settings->DesktopHeight) { BOOL status = TRUE; IFCALLRET(rdp->update->DesktopResize, status, rdp->update->context); if (!status) { WLog_ERR(TAG, "client desktop resize callback failed"); return -1; } } rdp_client_transition_to_state(rdp, CONNECTION_STATE_FINALIZATION); return rdp_client_connect_finalize(rdp); }
tbool rdp_client_connect_demand_active(rdpRdp* rdp, STREAM* s) { uint8* mark; uint16 width; uint16 height; uint16 channelId; width = rdp->settings->width; height = rdp->settings->height; stream_get_mark(s, mark); if (!rdp_recv_demand_active(rdp, s)) { stream_set_mark(s, mark); rdp_recv_get_active_header(rdp, s, &channelId); /* Was stream_seek(s, RDP_PACKET_HEADER_MAX_LENGTH); * but the headers aren't always that length, * so that could result in a bad offset. */ if (rdp_recv_out_of_sequence_pdu(rdp, s) == false) return false; return true; } if (rdp->disconnect) return true; if (!rdp_send_confirm_active(rdp)) return false; input_register_client_callbacks(rdp->input); /** * The server may request a different desktop size during Deactivation-Reactivation sequence. * In this case, the UI should be informed and do actual window resizing at this point. */ if (width != rdp->settings->width || height != rdp->settings->height) { IFCALL(rdp->update->DesktopResize, rdp->update->context); } rdp->state = CONNECTION_STATE_FINALIZATION; update_reset_state(rdp->update); rdp_client_connect_finalize(rdp); return true; }
BOOL rdp_client_connect_demand_active(rdpRdp* rdp, wStream* s) { BYTE* mark; UINT16 width; UINT16 height; width = rdp->settings->DesktopWidth; height = rdp->settings->DesktopHeight; Stream_GetPointer(s, mark); if (!rdp_recv_demand_active(rdp, s)) { UINT16 channelId; Stream_SetPointer(s, mark); rdp_recv_get_active_header(rdp, s, &channelId); /* Was Stream_Seek(s, RDP_PACKET_HEADER_MAX_LENGTH); * but the headers aren't always that length, * so that could result in a bad offset. */ if (rdp_recv_out_of_sequence_pdu(rdp, s) != TRUE) return FALSE; return TRUE; } if (rdp->disconnect) return TRUE; if (!rdp_send_confirm_active(rdp)) return FALSE; input_register_client_callbacks(rdp->input); /** * The server may request a different desktop size during Deactivation-Reactivation sequence. * In this case, the UI should be informed and do actual window resizing at this point. */ if (width != rdp->settings->DesktopWidth || height != rdp->settings->DesktopHeight) { IFCALL(rdp->update->DesktopResize, rdp->update->context); } rdp->state = CONNECTION_STATE_FINALIZATION; update_reset_state(rdp->update); return rdp_client_connect_finalize(rdp); }
void freerdp_context_new(freerdp* instance) { rdpRdp* rdp; rdp = rdp_new(instance); instance->input = rdp->input; instance->update = rdp->update; instance->settings = rdp->settings; instance->context = (rdpContext*) xzalloc(instance->context_size); instance->context->graphics = graphics_new(instance->context); instance->context->instance = instance; instance->context->rdp = rdp; instance->update->context = instance->context; instance->input->context = instance->context; input_register_client_callbacks(rdp->input); IFCALL(instance->ContextNew, instance, instance->context); }
void freerdp_context_new(freerdp* instance) { rdpRdp* rdp; uint32 size = sizeof(rdpContext); rdp = rdp_new(instance); instance->input = rdp->input; instance->update = rdp->update; instance->settings = rdp->settings; IFCALL(instance->ContextSize, instance, &size); instance->context = (rdpContext*) xzalloc(size); instance->context->instance = instance; instance->context->rdp = rdp; instance->update->context = instance->context; instance->input->context = instance->context; input_register_client_callbacks(rdp->input); IFCALL(instance->ContextNew, instance, instance->context); }