static void drdynvc_process_receive(rdpSvcPlugin* plugin, wStream* s) { int value; int Cmd; int Sp; int cbChId; drdynvcPlugin* drdynvc = (drdynvcPlugin*) plugin; Stream_Read_UINT8(s, value); Cmd = (value & 0xf0) >> 4; Sp = (value & 0x0c) >> 2; cbChId = (value & 0x03) >> 0; DEBUG_DVC("Cmd=0x%x", Cmd); switch (Cmd) { case CAPABILITY_REQUEST_PDU: drdynvc_process_capability_request(drdynvc, Sp, cbChId, s); break; case CREATE_REQUEST_PDU: drdynvc_process_create_request(drdynvc, Sp, cbChId, s); break; case DATA_FIRST_PDU: drdynvc_process_data_first(drdynvc, Sp, cbChId, s); break; case DATA_PDU: drdynvc_process_data(drdynvc, Sp, cbChId, s); break; case CLOSE_REQUEST_PDU: drdynvc_process_close_request(drdynvc, Sp, cbChId, s); break; default: DEBUG_WARN("unknown drdynvc cmd 0x%x", Cmd); break; } Stream_Free(s, TRUE); }
/** * Function description * * @return 0 on success, otherwise a Win32 error code */ static UINT drdynvc_order_recv(drdynvcPlugin* drdynvc, wStream* s) { int value; int Cmd; int Sp; int cbChId; Stream_Read_UINT8(s, value); Cmd = (value & 0xf0) >> 4; Sp = (value & 0x0c) >> 2; cbChId = (value & 0x03) >> 0; WLog_DBG(TAG, "order_recv: Cmd=0x%x, Sp=%d cbChId=%d, ChannelId=%d", Cmd, Sp, cbChId); switch (Cmd) { case CAPABILITY_REQUEST_PDU: return drdynvc_process_capability_request(drdynvc, Sp, cbChId, s); break; case CREATE_REQUEST_PDU: return drdynvc_process_create_request(drdynvc, Sp, cbChId, s); break; case DATA_FIRST_PDU: return drdynvc_process_data_first(drdynvc, Sp, cbChId, s); break; case DATA_PDU: return drdynvc_process_data(drdynvc, Sp, cbChId, s); break; case CLOSE_REQUEST_PDU: return drdynvc_process_close_request(drdynvc, Sp, cbChId, s); break; default: WLog_ERR(TAG, "unknown drdynvc cmd 0x%x", Cmd); return ERROR_INTERNAL_ERROR; break; } }
static void drdynvc_process_receive(rdpSvcPlugin* plugin, STREAM* data_in) { drdynvcPlugin* drdynvc = (drdynvcPlugin*)plugin; int in_length; int value; int Cmd; int Sp; int cbChId; in_length = stream_get_length(data_in); stream_set_pos(data_in, 0); stream_read_uint8(data_in, value); Cmd = (value & 0xf0) >> 4; Sp = (value & 0x0c) >> 2; cbChId = (value & 0x03) >> 0; DEBUG_DVC("in_length=%d Cmd=0x%x", in_length, Cmd); switch (Cmd) { case CAPABILITY_REQUEST_PDU: drdynvc_process_capability_request(drdynvc, Sp, cbChId, data_in); break; case CREATE_REQUEST_PDU: drdynvc_process_create_request(drdynvc, Sp, cbChId, data_in); break; case DATA_FIRST_PDU: drdynvc_process_data_first(drdynvc, Sp, cbChId, data_in, in_length); break; case DATA_PDU: drdynvc_process_data(drdynvc, Sp, cbChId, data_in, in_length); break; case CLOSE_REQUEST_PDU: drdynvc_process_close_request(drdynvc, Sp, cbChId, data_in); break; default: DEBUG_WARN("unknown drdynvc cmd 0x%x", Cmd); break; } stream_free(data_in); }
/** * Function description * * @return 0 on success, otherwise a Win32 error code */ static UINT drdynvc_order_recv(drdynvcPlugin* drdynvc, wStream* s) { int value; int Cmd; int Sp; int cbChId; if (Stream_GetRemainingLength(s) < 1) return ERROR_INVALID_DATA; Stream_Read_UINT8(s, value); Cmd = (value & 0xf0) >> 4; Sp = (value & 0x0c) >> 2; cbChId = (value & 0x03) >> 0; WLog_Print(drdynvc->log, WLOG_DEBUG, "order_recv: Cmd=0x%x, Sp=%d cbChId=%d", Cmd, Sp, cbChId); switch (Cmd) { case CAPABILITY_REQUEST_PDU: return drdynvc_process_capability_request(drdynvc, Sp, cbChId, s); case CREATE_REQUEST_PDU: return drdynvc_process_create_request(drdynvc, Sp, cbChId, s); case DATA_FIRST_PDU: return drdynvc_process_data_first(drdynvc, Sp, cbChId, s); case DATA_PDU: return drdynvc_process_data(drdynvc, Sp, cbChId, s); case CLOSE_REQUEST_PDU: return drdynvc_process_close_request(drdynvc, Sp, cbChId, s); default: WLog_Print(drdynvc->log, WLOG_ERROR, "unknown drdynvc cmd 0x%x", Cmd); return ERROR_INTERNAL_ERROR; } }