Пример #1
0
rdpRdp* rdp_new(freerdp* instance)
{
	rdpRdp* rdp;

	rdp = (rdpRdp*) malloc(sizeof(rdpRdp));

	if (rdp != NULL)
	{
		ZeroMemory(rdp, sizeof(rdpRdp));

		rdp->instance = instance;
		rdp->settings = freerdp_settings_new((void*) instance);

		if (instance != NULL)
			instance->settings = rdp->settings;

		rdp->extension = extension_new(instance);
		rdp->transport = transport_new(rdp->settings);
		rdp->license = license_new(rdp);
		rdp->input = input_new(rdp);
		rdp->update = update_new(rdp);
		rdp->fastpath = fastpath_new(rdp);
		rdp->nego = nego_new(rdp->transport);
		rdp->mcs = mcs_new(rdp->transport);
		rdp->redirection = redirection_new();
		rdp->mppc_dec = mppc_dec_new();
		rdp->mppc_enc = mppc_enc_new(PROTO_RDP_50);
	}

	return rdp;
}
Пример #2
0
void test_mppc_enc(void)
{
	int data_len;
	int fd;
	int bytes_read;
	int total = 0;
	int clen = 0;
	int block_num = 0;

	/* needed by encoder */
	struct rdp_mppc_enc* enc;
	char buf[BUF_SIZE];

	/* needed by decoder */
	struct rdp_mppc_dec* rmppc;
	uint32 roff;
	uint32 rlen;

	/* required for timing the test */
	struct timeval start_time;
	struct timeval end_time;
	long int dur;

	/* setup decoder */
	rmppc = mppc_dec_new();

	/* setup encoder for RDP 5.0 */
	CU_ASSERT((enc = mppc_enc_new(PROTO_RDP_50)) != NULL);

	srand(time(0));

	/* open image file with pixel data */
	fd = open("nature.bmp", O_RDONLY);
	if (fd > 0)
	{
		printf("\ntest_mppc_enc: compressing data from file nature.bmp\n");

		/* save starting time */
		gettimeofday(&start_time, NULL);

		/* compress block, decompress it then compare with original data */
		while ((bytes_read = read(fd, buf, get_random(BUF_SIZE))) > 0)
		{
			block_num++;
			total += bytes_read;
			DLOG(("block_num=%d\n", block_num));
			CU_ASSERT(compress_rdp(enc, (uint8*) buf, bytes_read) != false);
			if (enc->flags & PACKET_COMPRESSED)
			{
				DLOG(("%d bytes compressed to %d\n", bytes_read, enc->bytes_in_opb));
				clen += enc->bytes_in_opb;
				CU_ASSERT(decompress_rdp_5(rmppc, (uint8 *) enc->outputBuffer,
						enc->bytes_in_opb, enc->flags, &roff, &rlen) != false);
				CU_ASSERT(bytes_read == rlen);
				CU_ASSERT(memcmp(buf, &rmppc->history_buf[roff], rlen) == 0);
			}
			else
			{
				clen += bytes_read;
				DLOG(("not compressed\n"));
			}
		}

		/* get end time */
		gettimeofday(&end_time, NULL);

		/* print compression stats */
		printf("test_mppc_enc: raw_len=%d compressed_len=%d compression_ratio=%f\n",
			total, clen, (float) total / (float) clen);

		/* print time taken */
		dur = ((end_time.tv_sec - start_time.tv_sec) * 1000000) + (end_time.tv_usec - start_time.tv_usec);
		printf("test_mppc_enc: compressed %d bytes in %f seconds\n", total, (float) (dur) / 1000000.0F);
	}
	else
	{
		data_len = sizeof(decompressed_rd5_data);
		printf("\ntest_mppc_enc: testing with embedded data of %d bytes\n", data_len);

		/* save starting time */
		gettimeofday(&start_time, NULL);

		CU_ASSERT(compress_rdp(enc, (uint8*) decompressed_rd5_data, data_len) != false);
		if (enc->flags & PACKET_COMPRESSED)
		{
			CU_ASSERT(decompress_rdp_5(rmppc, (uint8 *) enc->outputBuffer,
					enc->bytes_in_opb, enc->flags, &roff, &rlen) != false);
			CU_ASSERT(data_len == rlen);
			CU_ASSERT(memcmp(decompressed_rd5_data, &rmppc->history_buf[roff], rlen) == 0);
		}
		else
		{
			DLOG(("not compressed\n"));
		}

		/* get end time */
		gettimeofday(&end_time, NULL);

		/* print time taken */
		dur = ((end_time.tv_sec - start_time.tv_sec) * 1000000) + (end_time.tv_usec - start_time.tv_usec);
		printf("test_mppc_enc: compressed %d bytes in %f seconds\n", data_len, (float) (dur) / 1000000.0F);
	}

	if (fd > 0)
	{
		close(fd);
	}

	mppc_enc_free(enc);
	mppc_dec_free(rmppc);
}