From: Marc-André Moreau Date: Mon, 21 Apr 2014 01:28:09 +0000 (-0400) Subject: libfreerdp-codec: fix handling of PACKET_AT_FRONT, PACKET_FLUSHED in MPPC compression X-Git-Tag: 1.2.0-beta1+android7~53^2~15^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d08b6fe4bd1eb46c0118751d8debe8631bed5ddc;p=platform%2Fupstream%2Ffreerdp.git libfreerdp-codec: fix handling of PACKET_AT_FRONT, PACKET_FLUSHED in MPPC compression --- diff --git a/include/freerdp/codec/mppc.h b/include/freerdp/codec/mppc.h index d7112a4..6577e62 100644 --- a/include/freerdp/codec/mppc.h +++ b/include/freerdp/codec/mppc.h @@ -46,7 +46,7 @@ typedef struct _MPPC_CONTEXT MPPC_CONTEXT; extern "C" { #endif -FREERDP_API int mppc_compress(MPPC_CONTEXT* mppc, BYTE* pSrcData, UINT32 SrcSize, BYTE* pDstData, UINT32* pDstSize, UINT32* pFlags); +FREERDP_API int mppc_compress(MPPC_CONTEXT* mppc, BYTE* pSrcData, UINT32 SrcSize, BYTE** ppDstData, UINT32* pDstSize, UINT32* pFlags); FREERDP_API int mppc_decompress(MPPC_CONTEXT* mppc, BYTE* pSrcData, UINT32 SrcSize, BYTE** ppDstData, UINT32* pDstSize, UINT32 flags); FREERDP_API void mppc_set_compression_level(MPPC_CONTEXT* mppc, DWORD CompressionLevel); diff --git a/libfreerdp/codec/mppc.c b/libfreerdp/codec/mppc.c index 0b8abbf..d234472 100644 --- a/libfreerdp/codec/mppc.c +++ b/libfreerdp/codec/mppc.c @@ -458,14 +458,18 @@ int mppc_decompress(MPPC_CONTEXT* mppc, BYTE* pSrcData, UINT32 SrcSize, BYTE** p return 1; } -int mppc_compress(MPPC_CONTEXT* mppc, BYTE* pSrcData, UINT32 SrcSize, BYTE* pDstData, UINT32* pDstSize, UINT32* pFlags) +int mppc_compress(MPPC_CONTEXT* mppc, BYTE* pSrcData, UINT32 SrcSize, BYTE** ppDstData, UINT32* pDstSize, UINT32* pFlags) { BYTE* pSrcPtr; BYTE* pSrcEnd; BYTE* pDstEnd; BYTE* MatchPtr; + UINT32 DstSize; + BYTE* pDstData; UINT32 MatchIndex; UINT32 accumulator; + BOOL PacketFlushed; + BOOL PacketAtFront; DWORD CopyOffset; DWORD LengthOfMatch; BYTE* HistoryBuffer; @@ -483,23 +487,41 @@ int mppc_compress(MPPC_CONTEXT* mppc, BYTE* pSrcData, UINT32 SrcSize, BYTE* pDst HistoryPtr = mppc->HistoryPtr; HistoryOffset = mppc->HistoryOffset; - BitStream_Attach(bs, pDstData, SrcSize); + *pFlags = 0; + PacketFlushed = FALSE; if (((HistoryOffset + SrcSize) < (HistoryBufferSize - 3)) && HistoryOffset) { - *pFlags = 0; + PacketAtFront = FALSE; } else { + if (HistoryOffset == (HistoryBufferSize + 1)) + PacketFlushed = TRUE; + HistoryOffset = 0; - *pFlags = PACKET_AT_FRONT; + PacketAtFront = TRUE; } HistoryPtr = &(HistoryBuffer[HistoryOffset]); + pDstData = *ppDstData; + + if (!pDstData) + return -1; + + DstSize = *pDstSize; + + if (DstSize < SrcSize) + return -1; + + DstSize = SrcSize; + + BitStream_Attach(bs, pDstData, DstSize); + pSrcPtr = pSrcData; pSrcEnd = &(pSrcData[SrcSize - 1]); - pDstEnd = &(pDstData[*pDstSize - 1]); + pDstEnd = &(pDstData[DstSize - 1]); while (pSrcPtr < (pSrcEnd - 2)) { @@ -522,11 +544,14 @@ int mppc_compress(MPPC_CONTEXT* mppc, BYTE* pSrcData, UINT32 SrcSize, BYTE* pDst (&MatchPtr[1] > mppc->HistoryPtr) || (MatchPtr == HistoryBuffer) || (MatchPtr == (HistoryPtr - 1)) || (MatchPtr == HistoryPtr)) { - if ((((bs->position + 7) / 8) + 2) > (*pDstSize - 1)) + if (((bs->position / 8) + 2) > (DstSize - 1)) { - *pFlags |= PACKET_FLUSHED; ZeroMemory(HistoryBuffer, HistoryBufferSize); ZeroMemory(mppc->MatchBuffer, sizeof(mppc->MatchBuffer)); + mppc->HistoryOffset = HistoryBufferSize + 1; + *pFlags |= PACKET_FLUSHED; + *pFlags |= CompressionLevel; + *ppDstData = pSrcData; *pDstSize = SrcSize; return 1; } @@ -573,11 +598,14 @@ int mppc_compress(MPPC_CONTEXT* mppc, BYTE* pSrcData, UINT32 SrcSize, BYTE* pDst /* Encode CopyOffset */ - if ((((bs->position + 7) / 8) + 7) > (*pDstSize - 1)) + if (((bs->position / 8) + 7) > (DstSize - 1)) { - *pFlags = PACKET_FLUSHED; ZeroMemory(HistoryBuffer, HistoryBufferSize); ZeroMemory(mppc->MatchBuffer, sizeof(mppc->MatchBuffer)); + mppc->HistoryOffset = HistoryBufferSize + 1; + *pFlags |= PACKET_FLUSHED; + *pFlags |= CompressionLevel; + *ppDstData = pSrcData; *pDstSize = SrcSize; return 1; } @@ -729,11 +757,14 @@ int mppc_compress(MPPC_CONTEXT* mppc, BYTE* pSrcData, UINT32 SrcSize, BYTE* pDst while (pSrcPtr <= pSrcEnd) { - if ((((bs->position + 7) / 8) + 2) > (*pDstSize - 1)) + if (((bs->position / 8) + 2) > (DstSize - 1)) { - *pFlags |= PACKET_FLUSHED; ZeroMemory(HistoryBuffer, HistoryBufferSize); ZeroMemory(mppc->MatchBuffer, sizeof(mppc->MatchBuffer)); + mppc->HistoryOffset = HistoryBufferSize + 1; + *pFlags |= PACKET_FLUSHED; + *pFlags |= CompressionLevel; + *ppDstData = pSrcData; *pDstSize = SrcSize; return 1; } @@ -763,6 +794,13 @@ int mppc_compress(MPPC_CONTEXT* mppc, BYTE* pSrcData, UINT32 SrcSize, BYTE* pDst *pFlags |= PACKET_COMPRESSED; *pFlags |= CompressionLevel; + + if (PacketAtFront) + *pFlags |= PACKET_AT_FRONT; + + if (PacketFlushed) + *pFlags |= PACKET_FLUSHED; + *pDstSize = ((bs->position + 7) / 8); mppc->HistoryPtr = HistoryPtr; diff --git a/libfreerdp/codec/test/TestFreeRDPCodecMppc.c b/libfreerdp/codec/test/TestFreeRDPCodecMppc.c index 60be7d3..b1e309b 100644 --- a/libfreerdp/codec/test/TestFreeRDPCodecMppc.c +++ b/libfreerdp/codec/test/TestFreeRDPCodecMppc.c @@ -711,6 +711,7 @@ int test_MppcCompressBellsRdp5() UINT32 SrcSize; BYTE* pSrcData; UINT32 DstSize; + BYTE* pDstData; MPPC_CONTEXT* mppc; UINT32 expectedSize; BYTE OutputBuffer[65536]; @@ -719,10 +720,12 @@ int test_MppcCompressBellsRdp5() SrcSize = sizeof(TEST_MPPC_BELLS) - 1; pSrcData = (BYTE*) TEST_MPPC_BELLS; - DstSize = sizeof(OutputBuffer); expectedSize = sizeof(TEST_MPPC_BELLS_RDP5) - 1; - status = mppc_compress(mppc, pSrcData, SrcSize, OutputBuffer, &DstSize, &Flags); + DstSize = sizeof(OutputBuffer); + pDstData = OutputBuffer; + + status = mppc_compress(mppc, pSrcData, SrcSize, &pDstData, &DstSize, &Flags); printf("Flags: 0x%04X DstSize: %d\n", Flags, DstSize); @@ -732,12 +735,12 @@ int test_MppcCompressBellsRdp5() return -1; } - if (memcmp(OutputBuffer, TEST_MPPC_BELLS_RDP5, DstSize) != 0) + if (memcmp(pDstData, TEST_MPPC_BELLS_RDP5, DstSize) != 0) { printf("MppcCompressBellsRdp5: output mismatch\n"); printf("Actual\n"); - BitDump(OutputBuffer, DstSize * 8, 0); + BitDump(pDstData, DstSize * 8, 0); printf("Expected\n"); BitDump(TEST_MPPC_BELLS_RDP5, DstSize * 8, 0); @@ -757,6 +760,7 @@ int test_MppcCompressBellsRdp4() BYTE* pSrcData; UINT32 SrcSize; UINT32 DstSize; + BYTE* pDstData; MPPC_CONTEXT* mppc; UINT32 expectedSize; BYTE OutputBuffer[65536]; @@ -766,9 +770,11 @@ int test_MppcCompressBellsRdp4() SrcSize = sizeof(TEST_MPPC_BELLS) - 1; pSrcData = (BYTE*) TEST_MPPC_BELLS; expectedSize = sizeof(TEST_MPPC_BELLS_RDP4) - 1; + DstSize = sizeof(OutputBuffer); + pDstData = OutputBuffer; - status = mppc_compress(mppc, pSrcData, SrcSize, OutputBuffer, &DstSize, &Flags); + status = mppc_compress(mppc, pSrcData, SrcSize, &pDstData, &DstSize, &Flags); printf("flags: 0x%04X size: %d\n", Flags, DstSize); @@ -778,12 +784,12 @@ int test_MppcCompressBellsRdp4() return -1; } - if (memcmp(OutputBuffer, TEST_MPPC_BELLS_RDP4, DstSize) != 0) + if (memcmp(pDstData, TEST_MPPC_BELLS_RDP4, DstSize) != 0) { printf("MppcCompressBellsRdp4: output mismatch\n"); printf("Actual\n"); - BitDump(OutputBuffer, DstSize * 8, 0); + BitDump(pDstData, DstSize * 8, 0); printf("Expected\n"); BitDump(TEST_MPPC_BELLS_RDP4, DstSize * 8, 0); @@ -879,20 +885,22 @@ int test_MppcCompressBufferRdp5() BYTE* pSrcData; UINT32 SrcSize; UINT32 DstSize; + BYTE* pDstData; MPPC_CONTEXT* mppc; UINT32 expectedSize; BYTE OutputBuffer[65536]; - BYTE* pDstData = NULL; mppc = mppc_context_new(1, TRUE); SrcSize = sizeof(TEST_RDP5_UNCOMPRESSED_DATA); pSrcData = (BYTE*) TEST_RDP5_UNCOMPRESSED_DATA; expectedSize = sizeof(TEST_RDP5_COMPRESSED_DATA); + DstSize = sizeof(OutputBuffer); pDstData = OutputBuffer; - status = mppc_compress(mppc, pSrcData, SrcSize, pDstData, &DstSize, &Flags); + status = mppc_compress(mppc, pSrcData, SrcSize, &pDstData, &DstSize, &Flags); + printf("flags: 0x%04X size: %d\n", Flags, DstSize); if (DstSize != expectedSize) @@ -901,7 +909,7 @@ int test_MppcCompressBufferRdp5() return -1; } - if (memcmp(OutputBuffer, TEST_RDP5_COMPRESSED_DATA, DstSize) != 0) + if (memcmp(pDstData, TEST_RDP5_COMPRESSED_DATA, DstSize) != 0) { printf("MppcCompressBufferRdp5: output mismatch: compressed output does not match Microsoft implementation\n"); return -1; diff --git a/libfreerdp/core/bulk.c b/libfreerdp/core/bulk.c index 4956b00..2b94f75 100644 --- a/libfreerdp/core/bulk.c +++ b/libfreerdp/core/bulk.c @@ -25,6 +25,30 @@ //#define WITH_BULK_DEBUG 1 +const char* bulk_get_compression_flags_string(UINT32 flags) +{ + flags &= BULK_COMPRESSION_FLAGS_MASK; + + if (flags == 0) + return "PACKET_UNCOMPRESSED"; + else if (flags == PACKET_COMPRESSED) + return "PACKET_COMPRESSED"; + else if (flags == PACKET_AT_FRONT) + return "PACKET_AT_FRONT"; + else if (flags == PACKET_FLUSHED) + return "PACKET_FLUSHED"; + else if (flags == (PACKET_COMPRESSED | PACKET_AT_FRONT)) + return "PACKET_COMPRESSED | PACKET_AT_FRONT"; + else if (flags == (PACKET_COMPRESSED | PACKET_FLUSHED)) + return "PACKET_COMPRESSED | PACKET_FLUSHED"; + else if (flags == (PACKET_AT_FRONT | PACKET_FLUSHED)) + return "PACKET_AT_FRONT | PACKET_FLUSHED"; + else if (flags == (PACKET_COMPRESSED | PACKET_AT_FRONT | PACKET_FLUSHED)) + return "PACKET_COMPRESSED | PACKET_AT_FRONT | PACKET_FLUSHED"; + + return "PACKET_UNKNOWN"; +} + UINT32 bulk_compression_level(rdpBulk* bulk) { rdpSettings* settings = bulk->context->settings; @@ -39,14 +63,60 @@ UINT32 bulk_compression_max_size(rdpBulk* bulk) return bulk->CompressionMaxSize; } +int bulk_compress_validate(rdpBulk* bulk, BYTE* pSrcData, UINT32 SrcSize, BYTE** ppDstData, UINT32* pDstSize, UINT32* pFlags) +{ + int status; + BYTE* _pSrcData = NULL; + BYTE* _pDstData = NULL; + UINT32 _SrcSize = 0; + UINT32 _DstSize = 0; + UINT32 _Flags = 0; + + _pSrcData = *ppDstData; + _SrcSize = *pDstSize; + _Flags = *pFlags | bulk->CompressionLevel; + + status = bulk_decompress(bulk, _pSrcData, _SrcSize, &_pDstData, &_DstSize, _Flags); + + if (status < 0) + { + printf("compression/decompression failure\n"); + return status; + } + + if (_DstSize != SrcSize) + { + printf("compression/decompression size mismatch: Actual: %d, Expected: %d\n", _DstSize, SrcSize); + return -1; + } + + if (memcmp(_pDstData, pSrcData, SrcSize) != 0) + { + printf("compression/decompression input/output mismatch! flags: 0x%04X\n", _Flags); + + printf("Actual:\n"); + winpr_HexDump(_pDstData, SrcSize); + + printf("Expected:\n"); + winpr_HexDump(pSrcData, SrcSize); + + return -1; + } + + return status; +} + int bulk_decompress(rdpBulk* bulk, BYTE* pSrcData, UINT32 SrcSize, BYTE** ppDstData, UINT32* pDstSize, UINT32 flags) { + UINT32 type; int status = -1; UINT32 CompressedBytes; UINT32 UncompressedBytes; - UINT32 type = flags & 0x0F; - if (flags & PACKET_COMPRESSED) + bulk_compression_max_size(bulk); + type = flags & BULK_COMPRESSION_TYPE_MASK; + + if (flags & BULK_COMPRESSION_FLAGS_MASK) { switch (type) { @@ -96,8 +166,10 @@ int bulk_decompress(rdpBulk* bulk, BYTE* pSrcData, UINT32 SrcSize, BYTE** ppDstD CompressionRatio = ((double) CompressedBytes) / ((double) UncompressedBytes); TotalCompressionRatio = ((double) bulk->TotalCompressedBytes) / ((double) bulk->TotalUncompressedBytes); - printf("Type: %d Flags: 0x%04X Compression Ratio: %f Total: %f %d / %d\n", - type, flags, CompressionRatio, TotalCompressionRatio, CompressedBytes, UncompressedBytes); + printf("Type: %d Flags: %s (0x%04X) Compression Ratio: %f (%d / %d), Total: %f (%d / %d)\n", + type, bulk_get_compression_flags_string(flags), flags, + CompressionRatio, CompressedBytes, UncompressedBytes, + TotalCompressionRatio, bulk->TotalCompressedBytes, bulk->TotalUncompressedBytes); } #endif } @@ -115,12 +187,21 @@ int bulk_compress(rdpBulk* bulk, BYTE* pSrcData, UINT32 SrcSize, BYTE** ppDstDat UINT32 CompressedBytes; UINT32 UncompressedBytes; + if ((SrcSize <= 50) || (SrcSize >= 16384)) + { + *ppDstData = pSrcData; + *pDstSize = SrcSize; + return 0; + } + *ppDstData = bulk->OutputBuffer; *pDstSize = sizeof(bulk->OutputBuffer); bulk_compression_level(bulk); + bulk_compression_max_size(bulk); mppc_set_compression_level(bulk->mppcSend, bulk->CompressionLevel); - status = mppc_compress(bulk->mppcSend, pSrcData, SrcSize, *ppDstData, pDstSize, pFlags); + + status = mppc_compress(bulk->mppcSend, pSrcData, SrcSize, ppDstData, pDstSize, pFlags); if (status >= 0) { @@ -141,12 +222,19 @@ int bulk_compress(rdpBulk* bulk, BYTE* pSrcData, UINT32 SrcSize, BYTE** ppDstDat CompressionRatio = ((double) CompressedBytes) / ((double) UncompressedBytes); TotalCompressionRatio = ((double) bulk->TotalCompressedBytes) / ((double) bulk->TotalUncompressedBytes); - printf("Type: %d Flags: 0x%04X Compression Ratio: %f Total: %f %d / %d\n", - type, *pFlags, CompressionRatio, TotalCompressionRatio, CompressedBytes, UncompressedBytes); + printf("Type: %d Flags: %s (0x%04X) Compression Ratio: %f (%d / %d), Total: %f (%d / %d)\n", + type, bulk_get_compression_flags_string(*pFlags), *pFlags, + CompressionRatio, CompressedBytes, UncompressedBytes, + TotalCompressionRatio, bulk->TotalCompressedBytes, bulk->TotalUncompressedBytes); } #endif } +#if 0 + if (bulk_compress_validate(bulk, pSrcData, SrcSize, ppDstData, pDstSize, pFlags) < 0) + status = -1; +#endif + return status; } diff --git a/libfreerdp/core/bulk.h b/libfreerdp/core/bulk.h index 9c8a635..b998a9a 100644 --- a/libfreerdp/core/bulk.h +++ b/libfreerdp/core/bulk.h @@ -36,11 +36,13 @@ struct rdp_bulk MPPC_CONTEXT* mppcRecv; NCRUSH_CONTEXT* ncrushRecv; BYTE OutputBuffer[65536]; - UINT64 TotalCompressedBytes; UINT64 TotalUncompressedBytes; }; +#define BULK_COMPRESSION_FLAGS_MASK 0xE0 +#define BULK_COMPRESSION_TYPE_MASK 0x0F + UINT32 bulk_compression_level(rdpBulk* bulk); UINT32 bulk_compression_max_size(rdpBulk* bulk); diff --git a/libfreerdp/core/fastpath.c b/libfreerdp/core/fastpath.c index 31d96cc..9efe289 100644 --- a/libfreerdp/core/fastpath.c +++ b/libfreerdp/core/fastpath.c @@ -932,7 +932,7 @@ BOOL fastpath_send_update_pdu(rdpFastPath* fastpath, BYTE updateCode, wStream* s { if (bulk_compress(rdp->bulk, pSrcData, SrcSize, &pDstData, &DstSize, &compressionFlags) >= 0) { - if (compressionFlags & PACKET_COMPRESSED) + if (compressionFlags) { fpUpdateHeader.compressionFlags = compressionFlags; fpUpdateHeader.compression = FASTPATH_OUTPUT_COMPRESSION_USED; diff --git a/server/Sample/server.crt b/server/Sample/server.crt index 7ce931c..142c509 100644 --- a/server/Sample/server.crt +++ b/server/Sample/server.crt @@ -1,17 +1,17 @@ -----BEGIN CERTIFICATE----- -MIICyzCCAbOgAwIBAgIJANbqtAWwlQZuMA0GCSqGSIb3DQEBBQUAMBIxEDAOBgNV -BAMTB0ZyZWVSRFAwHhcNMDkxMDI5MDA0MTQ5WhcNMDkxMTI4MDA0MTQ5WjASMRAw -DgYDVQQDEwdGcmVlUkRQMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -q7mxFgRbS2FYJZX7BzpNd4T/n4nEVDBY6YaObLjGpaB1TptzXTcmfDrDslTGwcEY -hTFAC4ZvY6yOURExqbph4LSgvkoa6J722RjVPfshGa4mlh2SXvTiaV26VPPxddGb -o6fbs2u029lbtBlpIVbhx5RN9vstNkll26oSZ6wfEdBNHQJLd2SU4ItWHj8zjz1f -eGxjgChHihUlwcBYKDJsKFkzHZmLrMgB37KsGlXi/WV+eEsjgvz4yP7I3TL8+GsN -MjV8fRGVEKTbKSmgunO67d5u+IaqUQb0Ad1ha1jzDQ+a6hdymrulJSIhoOVfKkwi -ptTe43FgwxVRIygJP9HjHQIDAQABoyQwIjATBgNVHSUEDDAKBggrBgEFBQcDATAL -BgNVHQ8EBAMCBDAwDQYJKoZIhvcNAQEFBQADggEBAIOdEDhOX2kbl02znltd9hCr -nV4kRPKm979RKwBNkrEuwYSlcsjAHg5MZ5itH3wFOUo2s5pjt7/vMOAg+6rOBbIa -nqr22/gKBtOmuaJLG1yjxDC2vfez7f3B26pKgxa/krM8oxiFdT9n8QbdxdkN7/D9 -3RLU/aCfgrMzXxRus7eq3kR00jnSs6ggnAfE1E9gric3vFgr1wCzdcriRXmXDfUb -hRq+4VG+ZWk16TwCofV5GVU39XWCv5HNO2swAdjkNXgI5e3tQbV3wWLZLqqYzBco -iWulAXtoCGmE81+u1Ms7hLLzpXitLZSGPu1r+sDdkKPLCmOvkAaljDQ4nBz7fIA= +MIICyjCCAbKgAwIBAgIEIZtPcjANBgkqhkiG9w0BAQUFADAUMRIwEAYDVQQDEwlj +aGFtZWxlb24wHhcNMTQwNDE4MDMzNDIyWhcNMTUwNDE4MDMzNDIyWjAUMRIwEAYD +VQQDEwljaGFtZWxlb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz +oGjWnPFjPPPi/iJOooPgmf1IMwQHY7VWrMegtrotnuSteW/m4r0QWSceYM8+oeIV +iU71AzNi074GR9EVbtXZCSgxn00jpPK+tgDBjbLmmqeCcwRkqpbBrS77/+Mq7UZM +lSRLPv74R01vUM5DyeII4WHf0C4T07BDiOnfFvs3T2AaLMEawfWT2408sXCZxgbY +IHp0WKnRXHQcG2Ys0iOSewe0iqhw8ODY/ze/eFtJ/5vdwCpN8AUOdU9PCXIA639d +ni9hKn7EXUvUZQ/SliBSaXsTfEw2Iu8Bo0/dcUfOwrPK8G2MOROi9GW80Prxtj+w +PTp7Z7h/JJCpygMkzmohAgMBAAGjJDAiMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAsG +A1UdDwQEAwIEMDANBgkqhkiG9w0BAQUFAAOCAQEAaq84r/SZaUZYlpDnE/V3cJI2 +Uzh8B81DqgVTgMqeuVAKAcgOEVf04Cp0oQ3+nS90a+afiqrT3A1eX5Wa1gxNkAIa +m26cSysGVl4I1xoXyddjZOIRy6GYVjdchdOGkE/lBy+NtuP0xwCkscUIQ6N8Es7r +DY8yMxtERYG2FHvnvZaw9oqstDpQtXoqzrl1JHz1nMcaVuFzyzdJdZrGvgQdMR7g +X1OT6dvmUYrUFGDxdPg+HHVeB4S5rUpvQUpqX/PGTwl8PIhahaqdPwHGsHfqp9Rk +ttjPkAw1fn7CUMj+OuNmF3WDSh4k+3chNyz/bkJqpPxjPXCYSXrlgJLwcmlKXA== -----END CERTIFICATE----- diff --git a/server/Sample/server.key b/server/Sample/server.key index 5c2f2c8..e7030b6 100644 --- a/server/Sample/server.key +++ b/server/Sample/server.key @@ -1,27 +1,28 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEogIBAAKCAQEAq7mxFgRbS2FYJZX7BzpNd4T/n4nEVDBY6YaObLjGpaB1Tptz -XTcmfDrDslTGwcEYhTFAC4ZvY6yOURExqbph4LSgvkoa6J722RjVPfshGa4mlh2S -XvTiaV26VPPxddGbo6fbs2u029lbtBlpIVbhx5RN9vstNkll26oSZ6wfEdBNHQJL -d2SU4ItWHj8zjz1feGxjgChHihUlwcBYKDJsKFkzHZmLrMgB37KsGlXi/WV+eEsj -gvz4yP7I3TL8+GsNMjV8fRGVEKTbKSmgunO67d5u+IaqUQb0Ad1ha1jzDQ+a6hdy -mrulJSIhoOVfKkwiptTe43FgwxVRIygJP9HjHQIDAQABAoIBAAVv5K54xtc1JtBR -1lfdPbSqDlnjx8aOnVIPg5TnqMp3sR8jBt0NsPc/+RA9ZOmfjoIxFAEJaZ9zSDJC -5BqmnxC5R1mfCQkSd2haQ+4pdFvWyrv4Bblh8YU6hXrJGn0LfO0KlIcywtAvKpsi -LtTyZkWmaW2HeF/+pO32jYygw38R1wd8Tl6GwjOXwTF6lFACJXOT4YAzcfp3FKSB -AiKBIGuMzozoSND7KPFNRrhGhNumJpdS5A8Fb8D2c/ZMv6Cq5IbwOgTfKun+Bz+s -mFbnzeb1uWRqQbsVXOBBW/zHfuG3SU5qeZsaAyuu4DTy+LE1oAHF9uhBSHuT5C6i -vCJ8A8ECgYEA1iaOmiEJYBrs25iAc4SjCKqhY0mwR3wtu3I06vmgUoML5fhPMv36 -SvYQIqDyNw3p7TE6mZtw9+G+kK3PqhuJhogwSwg0a6o51RdKnhXH3/68oNWtKCLC -1AmR8q/Gd3FwAR3b49CuOIZ9uOiJrc/ejzKdFEJTDR1/TX1frWfZznECgYEAzUiz -XxFf7YrGel7JgmfRD2eZRYngOoteFlg5Tee42UjeAY2Pt2aiDLk+2TqQEdI9+Xg7 -LcFdBqcSNd8bh33xSzgNthIkX+lTDzx0SmKGfyxfFBJcY8nzsLvvnNt3YeuMeaJQ -CPszwoZ0jcD46jTCjbrKhaLyEWmUkDp1O71NTW0CgYAXKF49Xpsz8FVyvcAOPeaf -dkwzf3F3mX8ciRId4taqdY9g1AREgGCDoK5IAF2RBIkqZCtxFvUVaS0BWjpdq9Ko -YKvQQVfh2KueVoF0LOjLWTGutsydzXyCD3Lf6pAstHCnPkJcFWHxrOGFkGfrCtKH -a7K+0RlIDsuIZqllCBjukQKBgA31+MTpYJW+D1t5IMkumEgs6n6RLt+sZLyuSU9k -B+03CGogn3qAj1rAKmcJlYywuKhDpfqpoNL3/8QMJUokpYlRCZWtTC39pzltCheY -9b6mXNz3lrLupBUL4vLO9iKBq28GO90wgEelbz3ItuTuq6CJ6IYIG+BVRtY8M4bZ -i+1NAoGANXZjYnJYDnh8Je9SDxDSc5byzK7ddkQoId64RCIfNHqNKH63P81vjgnH -YBIPtagY75ZVVNxujCF7m8Rety+d8tEFwfQKDin2EVI7PD2rOJra385/izp7HuBR -vqxvLzG9Xv3cNOU2l7PttVw4Pa2i5E37atKi3V3Zp2kMW+KaKPQ= ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCzoGjWnPFjPPPi +/iJOooPgmf1IMwQHY7VWrMegtrotnuSteW/m4r0QWSceYM8+oeIViU71AzNi074G +R9EVbtXZCSgxn00jpPK+tgDBjbLmmqeCcwRkqpbBrS77/+Mq7UZMlSRLPv74R01v +UM5DyeII4WHf0C4T07BDiOnfFvs3T2AaLMEawfWT2408sXCZxgbYIHp0WKnRXHQc +G2Ys0iOSewe0iqhw8ODY/ze/eFtJ/5vdwCpN8AUOdU9PCXIA639dni9hKn7EXUvU +ZQ/SliBSaXsTfEw2Iu8Bo0/dcUfOwrPK8G2MOROi9GW80Prxtj+wPTp7Z7h/JJCp +ygMkzmohAgMBAAECggEBAJxXJIiOxuZZ+ef6yz9n4aKORM4fYQVRela7QXEXOYpV +frGiPYxWkrn07sBZAGiCG7Yk8Wz9YS9GHmF3BntCIayqdKpj/Y7llUX6QUQ1oZ1m +xB8dHpjDhT2DD57UBBOruwES2ikH5oGQBcy6Jx0HTM3v5PEZT9F/8S2GsA+0/+gN +n5RKGds9nMN+GhGJoCPZTPqHxxsW7p0+W8Sqnv6dQ/lN9E8Iesag4H5my1+lpEWb +kI6h4Llk2xHUrcb3wL3+ttYLkkd8DGn7O/URKVbFwxPZLkx2kR2LFwL9wx88+HJ+ ++zPBaQ5JBBvJ7s94iZPW1/rfbiVn8jZJHbzs4IrsvVUCgYEA3fciYy5BHVsNMmFW +NBxgLaNbMDjaCcN7bBItCpzpBKp/INDLIX31u6MH/OxcFCZGwuW0Tq85PXsgFfJW +rjFouqeGQDy0MFw1aSwz1Y6h+J0OM4Xtqh3wQtqrQKRJi4JjR8Nrw8NwfBZnQXwe +XrlgMSwqev0NbvVpYVTZHsDRs+MCgYEAzytXGiBnqG7micj2Ic+gABBiD9pkYFCa +LMAiFn7JqWTyvBL9Yte7QO6S5sxfuCxV0/tcanehP6KqQEC1cOenefy4JTM8M1pi +Osp+WPokxRGEN+enhDxA7IKAtIC5lV8vPFYpxel3ALwzQyIB11a7QwyZ0HV9DGyD +SWgqMV16cSsCgYEApKmznvQvZgGn9pnzA1GRoAmxmkJyrg+Qvgl11Iu26bk5+jQq +nTv+UiaNxHnrjR8gG3Ggo0amJg/zK5TN7QfGc8HXfEwMOFwPW2hpQ6I+UlrgsCRI +vYzcMhxaMugtjws5b4FvrpiMF+He09uqBAdtbs0e7oJPtuLkPEpfj8rnRpUCgYEA +l1TgdoxPTCFetC2hZgdlqEZPa6crhZO7W48qF2acZun/ylTQ1WAjQAZGNuP50+5G +7+eAlaE3n+VyGidqosQFeb2awknP4u9WK/35F4P6Uh4+iBvnKVheUKXv4Grbpfp2 +5ctHDnRBYr8XbyWrVKLdfdf5j+YS531o1bmKgK75HysCgYAi1jqD5KSG5sLhO0kF +7BD9qYTIzW6Ocn4x1FRY6kxyGrE7Vb7VGNW2ULVexyn73pxhueuS4Qy5xHVDmdhO +ibolvvEr2TnSC0XR7QfOeXjmyV0m5Uvz97QNxoMnAHA60LWy8isj97LRAXuoSLEp +f2wfaMPwVN0WlBwa2PWAVm3zWA== +-----END PRIVATE KEY----- diff --git a/server/Sample/sfreerdp.c b/server/Sample/sfreerdp.c index 68d4b36..4a16554 100644 --- a/server/Sample/sfreerdp.c +++ b/server/Sample/sfreerdp.c @@ -325,7 +325,7 @@ static BOOL test_sleep_tsdiff(UINT32 *old_sec, UINT32 *old_usec, UINT32 new_sec, { INT32 sec, usec; - if (*old_sec==0 && *old_usec==0) + if ((*old_sec == 0) && (*old_usec == 0)) { *old_sec = new_sec; *old_usec = new_usec; @@ -335,7 +335,7 @@ static BOOL test_sleep_tsdiff(UINT32 *old_sec, UINT32 *old_usec, UINT32 new_sec, sec = new_sec - *old_sec; usec = new_usec - *old_usec; - if (sec<0 || (sec==0 && usec<0)) + if ((sec < 0) || ((sec == 0) && (usec < 0))) { printf("Invalid time stamp detected.\n"); return FALSE; @@ -393,6 +393,9 @@ void tf_peer_dump_rfx(freerdp_peer* client) break; update->SurfaceCommand(update->context, s); + + if (client->CheckFileDescriptor(client) != TRUE) + break; } } @@ -528,6 +531,9 @@ BOOL tf_peer_activate(freerdp_peer* client) rfx_context_reset(context->rfx_context); context->activated = TRUE; + //client->settings->CompressionLevel = PACKET_COMPR_TYPE_8K; + client->settings->CompressionLevel = PACKET_COMPR_TYPE_64K; + if (test_pcap_file != NULL) { client->update->dump_rfx = TRUE;