コード例 #1
0
ファイル: cliprdr_main.c プロジェクト: Huangyan9188/FreeRDP
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;
	}
}
コード例 #2
0
ファイル: cliprdr_main.c プロジェクト: HUTTAMI/FreeRDP
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);
}
コード例 #3
0
ファイル: cliprdr_main.c プロジェクト: adambprotiviti/FreeRDP
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);
}
コード例 #4
0
ファイル: cliprdr_main.c プロジェクト: bradh/FreeRDP-1.0
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);
}
コード例 #5
0
ファイル: main.c プロジェクト: Oyatsumi/ulteo4Kode4kids
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);
	}
}
コード例 #6
0
ファイル: cliprdr_main.c プロジェクト: ahnan4arch/FreeRDP
/**
 * 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;
}