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); } }
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); }