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);
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;
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))
{
(&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;
}
/* 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;
}
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;
}
*pFlags |= PACKET_COMPRESSED;
*pFlags |= CompressionLevel;
+
+ if (PacketAtFront)
+ *pFlags |= PACKET_AT_FRONT;
+
+ if (PacketFlushed)
+ *pFlags |= PACKET_FLUSHED;
+
*pDstSize = ((bs->position + 7) / 8);
mppc->HistoryPtr = HistoryPtr;
UINT32 SrcSize;
BYTE* pSrcData;
UINT32 DstSize;
+ BYTE* pDstData;
MPPC_CONTEXT* mppc;
UINT32 expectedSize;
BYTE OutputBuffer[65536];
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);
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);
BYTE* pSrcData;
UINT32 SrcSize;
UINT32 DstSize;
+ BYTE* pDstData;
MPPC_CONTEXT* mppc;
UINT32 expectedSize;
BYTE OutputBuffer[65536];
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);
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);
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)
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;
//#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;
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)
{
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
}
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)
{
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;
}
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);
{
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;
-----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-----
------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-----
{
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;
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;
break;
update->SurfaceCommand(update->context, s);
+
+ if (client->CheckFileDescriptor(client) != TRUE)
+ break;
}
}
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;