static void cliprdr_process_receive(rdpSvcPlugin* plugin, wStream* s) { UINT16 msgType; UINT16 msgFlags; UINT32 dataLen; cliprdrPlugin* cliprdr = (cliprdrPlugin*) plugin; Stream_Read_UINT16(s, msgType); Stream_Read_UINT16(s, msgFlags); Stream_Read_UINT32(s, dataLen); DEBUG_CLIPRDR("msgType: %s (%d), msgFlags: %d dataLen: %d", CB_MSG_TYPE_STRINGS[msgType], msgType, msgFlags, dataLen); #ifdef WITH_DEBUG_CLIPRDR winpr_HexDump(TAG, WLOG_DEBUG, Stream_Buffer(s), dataLen + 8); #endif switch (msgType) { case CB_CLIP_CAPS: cliprdr_process_clip_caps(cliprdr, s, dataLen, msgFlags); break; case CB_MONITOR_READY: cliprdr_process_monitor_ready(cliprdr, s, dataLen, msgFlags); break; case CB_FORMAT_LIST: cliprdr_process_format_list(cliprdr, s, dataLen, msgFlags); break; case CB_FORMAT_LIST_RESPONSE: cliprdr_process_format_list_response(cliprdr, s, dataLen, msgFlags); break; case CB_FORMAT_DATA_REQUEST: cliprdr_process_format_data_request(cliprdr, s, dataLen, msgFlags); break; case CB_FORMAT_DATA_RESPONSE: cliprdr_process_format_data_response(cliprdr, s, dataLen, msgFlags); break; case CB_FILECONTENTS_REQUEST: cliprdr_process_filecontents_request(cliprdr, s, dataLen, msgFlags); break; case CB_FILECONTENTS_RESPONSE: cliprdr_process_filecontents_response(cliprdr, s, dataLen, msgFlags); break; case CB_LOCK_CLIPDATA: cliprdr_process_lock_clipdata(cliprdr, s, dataLen, msgFlags); break; case CB_UNLOCK_CLIPDATA: cliprdr_process_unlock_clipdata(cliprdr, s, dataLen, msgFlags); break; default: WLog_ERR(TAG, "unknown msgType %d", msgType); break; } }
static void cliprdr_process_receive(rdpSvcPlugin* plugin, wStream* s) { UINT16 msgType; UINT16 msgFlags; UINT32 dataLen; cliprdrPlugin* cliprdr = (cliprdrPlugin*) plugin; Stream_Read_UINT16(s, msgType); Stream_Read_UINT16(s, msgFlags); Stream_Read_UINT32(s, dataLen); DEBUG_CLIPRDR("msgType: %s (%d), msgFlags: %d dataLen: %d", CB_MSG_TYPE_STRINGS[msgType], msgType, msgFlags, dataLen); #ifdef WITH_DEBUG_CLIPRDR winpr_HexDump(Stream_Buffer(s), dataLen + 8); #endif switch (msgType) { case CB_CLIP_CAPS: cliprdr_process_clip_caps(cliprdr, s, dataLen, msgFlags); break; case CB_MONITOR_READY: cliprdr_process_monitor_ready(cliprdr, s, dataLen, msgFlags); break; case CB_FORMAT_LIST: cliprdr_process_format_list(cliprdr, s, dataLen, msgFlags); break; case CB_FORMAT_LIST_RESPONSE: cliprdr_process_format_list_response(cliprdr, s, dataLen, msgFlags); break; case CB_FORMAT_DATA_REQUEST: cliprdr_process_format_data_request(cliprdr, s, dataLen, msgFlags); break; case CB_FORMAT_DATA_RESPONSE: cliprdr_process_format_data_response(cliprdr, s, dataLen, msgFlags); break; default: DEBUG_WARN("unknown msgType %d", msgType); break; } Stream_Free(s, TRUE); }
static void cliprdr_process_receive(rdpSvcPlugin* plugin, STREAM* s) { uint16 msgType; uint16 msgFlags; uint32 dataLen; cliprdrPlugin* cliprdr = (cliprdrPlugin*) plugin; stream_read_uint16(s, msgType); stream_read_uint16(s, msgFlags); stream_read_uint32(s, dataLen); DEBUG_CLIPRDR("msgType: %s (%d), msgFlags: %d dataLen: %d", CB_MSG_TYPE_STRINGS[msgType], msgType, msgFlags, dataLen); switch (msgType) { case CB_CLIP_CAPS: cliprdr_process_clip_caps(cliprdr, s, dataLen, msgFlags); break; case CB_MONITOR_READY: cliprdr_process_monitor_ready(cliprdr, s, dataLen, msgFlags); break; case CB_FORMAT_LIST: cliprdr_process_format_list(cliprdr, s, dataLen, msgFlags); break; case CB_FORMAT_LIST_RESPONSE: cliprdr_process_format_list_response(cliprdr, s, dataLen, msgFlags); break; case CB_FORMAT_DATA_REQUEST: cliprdr_process_format_data_request(cliprdr, s, dataLen, msgFlags); break; case CB_FORMAT_DATA_RESPONSE: cliprdr_process_format_data_response(cliprdr, s, dataLen, msgFlags); break; default: DEBUG_WARN("unknown msgType %d", msgType); break; } stream_free(s); }
static void cliprdr_process_receive(rdpSvcPlugin* plugin, STREAM* data_in) { cliprdrPlugin* cliprdr = (cliprdrPlugin*)plugin; uint16 msgType; uint16 msgFlags; uint32 dataLen; stream_read_uint16(data_in, msgType); stream_read_uint16(data_in, msgFlags); stream_read_uint32(data_in, dataLen); DEBUG_SVC("msgType %d msgFlags %d dataLen %d", msgType, msgFlags, dataLen); switch (msgType) { case CB_CLIP_CAPS: cliprdr_process_clip_caps(cliprdr, data_in); break; case CB_MONITOR_READY: cliprdr_process_monitor_ready(cliprdr); break; case CB_FORMAT_LIST: cliprdr_process_format_list(cliprdr, data_in, dataLen); break; case CB_FORMAT_LIST_RESPONSE: break; case CB_FORMAT_DATA_REQUEST: cliprdr_process_format_data_request(cliprdr, data_in); break; case CB_FORMAT_DATA_RESPONSE: cliprdr_process_format_data_response(cliprdr, data_in, dataLen); break; default: DEBUG_WARN("unknown msgType %d", msgType); break; } stream_free(data_in); }
void cliprdr_process_message(struct stream* packet, int length, int total_length) { log_message(l_config, LOG_LEVEL_DEBUG, "vchannel_cliprdr[process_message]: " "New message for clipchannel"); int msg_type; int msg_flags; int msg_size; struct stream* s; if(length != total_length) { log_message(l_config, LOG_LEVEL_DEBUG_PLUS, "vchannel_cliprdr[cliprdr_process_message]: " "Packet is fragmented"); if(is_fragmented_packet == 0) { log_message(l_config, LOG_LEVEL_DEBUG_PLUS, "vchannel_cliprdr[cliprdr_process_message]: " "Packet is fragmented : first part"); is_fragmented_packet = 1; fragment_size = length; make_stream(splitted_packet); init_stream(splitted_packet, total_length); g_memcpy(splitted_packet->p, packet->p, length); return; } else { g_memcpy(splitted_packet->p+fragment_size, packet->p, length); fragment_size += length; if (fragment_size == total_length) { log_message(l_config, LOG_LEVEL_DEBUG, "vchannel_cliprdr[cliprdr_process_message]: " "Packet is fragmented : last part"); s = splitted_packet; } else { log_message(l_config, LOG_LEVEL_DEBUG, "vchannel_cliprdr[cliprdr_process_message]: " "Packet is fragmented : next part"); return; } } } else { s = packet; } in_uint16_le(s, msg_type); log_message(l_config, LOG_LEVEL_DEBUG, "vchannel_cliprdr[process_message]: " "Message type : %04x", msg_type); in_uint16_le(s, msg_flags); log_message(l_config, LOG_LEVEL_DEBUG, "vchannel_cliprdr[process_message]: " "Message flags : %04x", msg_flags); in_uint32_le(s, msg_size); log_message(l_config, LOG_LEVEL_DEBUG, "vchannel_cliprdr[process_message]: " "Message size : %i", msg_size); switch (msg_type) { case CB_FORMAT_LIST : log_message(l_config, LOG_LEVEL_DEBUG, "vchannel_cliprdr[process_message]: " "Client format list announce"); cliprdr_process_format_list(s, msg_flags, msg_size); //cliprdr_send_format_list(); break; case CB_FORMAT_DATA_RESPONSE : log_message(l_config, LOG_LEVEL_DEBUG, "vchannel_cliprdr[process_message]: " "Client data request response"); cliprdr_process_data_request_response(s, msg_flags, msg_size); pthread_cond_signal(&reply_cond); break; case CB_FORMAT_LIST_RESPONSE : log_message(l_config, LOG_LEVEL_DEBUG, "vchannel_cliprdr[process_message]: " "Client format list response"); break; case CB_FORMAT_DATA_REQUEST : log_message(l_config, LOG_LEVEL_DEBUG, "vchannel_cliprdr[process_message]: " "Client data request"); cliprdr_process_data_request(s, msg_flags, msg_size); break; default: log_message(l_config, LOG_LEVEL_DEBUG, "vchannel_cliprdr[process_message]: " "Unknow message type : %i", msg_type); } if(is_fragmented_packet == 1) { is_fragmented_packet = 0; fragment_size = 0; free_stream(s); } }
/** * Function description * * @return 0 on success, otherwise a Win32 error code */ static UINT cliprdr_order_recv(cliprdrPlugin* cliprdr, wStream* s) { UINT16 msgType; UINT16 msgFlags; UINT32 dataLen; UINT error; Stream_Read_UINT16(s, msgType); /* msgType (2 bytes) */ Stream_Read_UINT16(s, msgFlags); /* msgFlags (2 bytes) */ Stream_Read_UINT32(s, dataLen); /* dataLen (4 bytes) */ #ifdef WITH_DEBUG_CLIPRDR WLog_DBG(TAG, "msgType: %s (%d), msgFlags: %d dataLen: %d", CB_MSG_TYPE_STRINGS[msgType], msgType, msgFlags, dataLen); winpr_HexDump(TAG, WLOG_DEBUG, Stream_Buffer(s), dataLen + 8); #endif switch (msgType) { case CB_CLIP_CAPS: if ((error = cliprdr_process_clip_caps(cliprdr, s, dataLen, msgFlags))) WLog_ERR(TAG, "cliprdr_process_clip_caps failed with error %lu!", error); break; case CB_MONITOR_READY: if ((error = cliprdr_process_monitor_ready(cliprdr, s, dataLen, msgFlags))) WLog_ERR(TAG, "cliprdr_process_monitor_ready failed with error %lu!", error); break; case CB_FORMAT_LIST: if ((error = cliprdr_process_format_list(cliprdr, s, dataLen, msgFlags))) WLog_ERR(TAG, "cliprdr_process_format_list failed with error %lu!", error); break; case CB_FORMAT_LIST_RESPONSE: if ((error = cliprdr_process_format_list_response(cliprdr, s, dataLen, msgFlags))) WLog_ERR(TAG, "cliprdr_process_format_list_response failed with error %lu!", error); break; case CB_FORMAT_DATA_REQUEST: if ((error = cliprdr_process_format_data_request(cliprdr, s, dataLen, msgFlags))) WLog_ERR(TAG, "cliprdr_process_format_data_request failed with error %lu!", error); break; case CB_FORMAT_DATA_RESPONSE: if ((error = cliprdr_process_format_data_response(cliprdr, s, dataLen, msgFlags))) WLog_ERR(TAG, "cliprdr_process_format_data_response failed with error %lu!", error); break; case CB_FILECONTENTS_REQUEST: if ((error = cliprdr_process_filecontents_request(cliprdr, s, dataLen, msgFlags))) WLog_ERR(TAG, "cliprdr_process_filecontents_request failed with error %lu!", error); break; case CB_FILECONTENTS_RESPONSE: if ((error = cliprdr_process_filecontents_response(cliprdr, s, dataLen, msgFlags))) WLog_ERR(TAG, "cliprdr_process_filecontents_response failed with error %lu!", error); break; case CB_LOCK_CLIPDATA: if ((error = cliprdr_process_lock_clipdata(cliprdr, s, dataLen, msgFlags))) WLog_ERR(TAG, "cliprdr_process_lock_clipdata failed with error %lu!", error); break; case CB_UNLOCK_CLIPDATA: if ((error = cliprdr_process_unlock_clipdata(cliprdr, s, dataLen, msgFlags))) WLog_ERR(TAG, "cliprdr_process_lock_clipdata failed with error %lu!", error); break; default: error = CHANNEL_RC_BAD_PROC; WLog_ERR(TAG, "unknown msgType %d", msgType); break; } Stream_Free(s, TRUE); return error; }