libfreerdp-codec: fix handling of PACKET_AT_FRONT, PACKET_FLUSHED in MPPC compression
This commit is contained in:
parent
d893cee87a
commit
d08b6fe4bd
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
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 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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -1,17 +1,17 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
|
@ -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-----
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user