diff options
| author | Laxmikant Rashinkar <LK.Rashinkar@gmail.com> | 2013-11-06 19:48:22 -0800 |
|---|---|---|
| committer | Laxmikant Rashinkar <LK.Rashinkar@gmail.com> | 2013-11-06 19:48:22 -0800 |
| commit | 3a074450d7af4a80a8cdfc6b586da2b021fb0f37 (patch) | |
| tree | 457d64a73402e669d55436c8a4f7740990154464 /libxrdp/xrdp_mppc_enc.c | |
| parent | f51f9ce679656f576c74fd9d4e62cf67c9f16c1d (diff) | |
| download | xrdp-proprietary-3a074450d7af4a80a8cdfc6b586da2b021fb0f37.tar.gz xrdp-proprietary-3a074450d7af4a80a8cdfc6b586da2b021fb0f37.zip | |
changed bulk compression logic
Diffstat (limited to 'libxrdp/xrdp_mppc_enc.c')
| -rw-r--r-- | libxrdp/xrdp_mppc_enc.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/libxrdp/xrdp_mppc_enc.c b/libxrdp/xrdp_mppc_enc.c index 05aa6bb6..15125d54 100644 --- a/libxrdp/xrdp_mppc_enc.c +++ b/libxrdp/xrdp_mppc_enc.c @@ -573,18 +573,21 @@ compress_rdp_5(struct xrdp_mppc_enc *enc, tui8 *srcData, int len) outputBuffer = enc->outputBuffer; g_memset(outputBuffer, 0, len); enc->flags = PACKET_COMPR_TYPE_64K; + if (enc->first_pkt) { enc->first_pkt = 0; enc->flagsHold |= PACKET_AT_FRONT; } - if ((enc->historyOffset + len) > enc->buf_len) + if ((enc->historyOffset + len) >= enc->buf_len) { /* historyBuffer cannot hold srcData - rewind it */ enc->historyOffset = 0; - enc->flagsHold |= PACKET_AT_FRONT; g_memset(hash_table, 0, enc->buf_len * 2); + g_memset(enc->historyBuffer, 0, enc->buf_len); // added + enc->first_pkt = 0; + enc->flagsHold |= PACKET_AT_FRONT; } /* point to next free byte in historyBuffer */ @@ -602,7 +605,7 @@ compress_rdp_5(struct xrdp_mppc_enc *enc, tui8 *srcData, int len) /* first 2 bytes,because minimum LoM is 3 */ if (historyOffset == 0) { - /* encode first two bytes are literals */ + /* encode first two bytes as literals */ for (x = 0; x < 2; x++) { data = *(historyPointer + x); @@ -974,8 +977,14 @@ compress_rdp_5(struct xrdp_mppc_enc *enc, tui8 *srcData, int len) /* give up */ enc->historyOffset = 0; g_memset(hash_table, 0, enc->buf_len * 2); + g_memset(enc->historyBuffer, 0, enc->buf_len); enc->flagsHold |= PACKET_FLUSHED; enc->first_pkt = 1; + + g_memcpy(enc->outputBuffer, srcData, len); + enc->bytes_in_opb = len; + enc->flags = 0x81; + return 1; } else if (opb_index + 1 > len) @@ -984,8 +993,14 @@ compress_rdp_5(struct xrdp_mppc_enc *enc, tui8 *srcData, int len) /* give up */ enc->historyOffset = 0; g_memset(hash_table, 0, enc->buf_len * 2); + g_memset(enc->historyBuffer, 0, enc->buf_len); enc->flagsHold |= PACKET_FLUSHED; enc->first_pkt = 1; + + g_memcpy(enc->outputBuffer, srcData, len); + enc->bytes_in_opb = len; + enc->flags = 0x81; + return 1; } @@ -1000,8 +1015,14 @@ compress_rdp_5(struct xrdp_mppc_enc *enc, tui8 *srcData, int len) /* give up */ enc->historyOffset = 0; g_memset(hash_table, 0, enc->buf_len * 2); + g_memset(enc->historyBuffer, 0, enc->buf_len); enc->flagsHold |= PACKET_FLUSHED; enc->first_pkt = 1; + + g_memcpy(enc->outputBuffer, srcData, len); + enc->bytes_in_opb = len; + enc->flags = 0x81; + return 1; } enc->flags |= PACKET_COMPRESSED; @@ -1011,6 +1032,8 @@ compress_rdp_5(struct xrdp_mppc_enc *enc, tui8 *srcData, int len) enc->flagsHold = 0; DLOG(("\n")); + //g_writeln("compression ratio: %f", (float) len / (float) enc->bytes_in_opb); + return 1; } |
