コード例 #1
0
ファイル: rdp.c プロジェクト: chenkaigithub/FreeRDP
void rdp_free(rdpRdp* rdp)
{
	if (rdp != NULL)
	{
		crypto_rc4_free(rdp->rc4_decrypt_key);
		crypto_rc4_free(rdp->rc4_encrypt_key);
		crypto_des3_free(rdp->fips_encrypt);
		crypto_des3_free(rdp->fips_decrypt);
		crypto_hmac_free(rdp->fips_hmac);
		freerdp_settings_free(rdp->settings);
		extension_free(rdp->extension);
		transport_free(rdp->transport);
		license_free(rdp->license);
		input_free(rdp->input);
		update_free(rdp->update);
		fastpath_free(rdp->fastpath);
		nego_free(rdp->nego);
		mcs_free(rdp->mcs);
		redirection_free(rdp->redirection);
		mppc_dec_free(rdp->mppc_dec);
		mppc_enc_free(rdp->mppc_enc);
		free(rdp);
	}
}
コード例 #2
0
ファイル: test_mppc_enc.c プロジェクト: felfert/FreeRDP
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);
}