diff --git a/libfreerdp/core/info.c b/libfreerdp/core/info.c index e8a04af9b..0d8606bc5 100644 --- a/libfreerdp/core/info.c +++ b/libfreerdp/core/info.c @@ -120,6 +120,7 @@ BOOL rdp_read_extended_info_packet(wStream* s, rdpSettings* settings) if (Stream_GetRemainingLength(s) < 4) return FALSE; + Stream_Read_UINT16(s, clientAddressFamily); /* clientAddressFamily */ Stream_Read_UINT16(s, cbClientAddress); /* cbClientAddress */ @@ -149,6 +150,7 @@ BOOL rdp_read_extended_info_packet(wStream* s, rdpSettings* settings) if (Stream_GetRemainingLength(s) < 10) return FALSE; + Stream_Seek_UINT32(s); /* clientSessionId, should be set to 0 */ Stream_Read_UINT32(s, settings->PerformanceFlags); /* performanceFlags */ diff --git a/libfreerdp/core/license.c b/libfreerdp/core/license.c index 88d039eb8..04de4d81e 100644 --- a/libfreerdp/core/license.c +++ b/libfreerdp/core/license.c @@ -191,11 +191,15 @@ BOOL license_send(rdpLicense* license, wStream* s, BYTE type) sec_flags = SEC_LICENSE_PKT; wMsgSize = length - LICENSE_PACKET_HEADER_MAX_LENGTH + 4; + flags = PREAMBLE_VERSION_3_0; + /** * Using EXTENDED_ERROR_MSG_SUPPORTED here would cause mstsc to crash when * running in server mode! This flag seems to be incorrectly documented. */ - flags = PREAMBLE_VERSION_3_0 | EXTENDED_ERROR_MSG_SUPPORTED; + + if (!license->rdp->settings->ServerMode) + flags |= EXTENDED_ERROR_MSG_SUPPORTED; rdp_write_header(license->rdp, s, length, MCS_GLOBAL_CHANNEL_ID); rdp_write_security_header(s, sec_flags); diff --git a/libfreerdp/core/peer.c b/libfreerdp/core/peer.c index 5b38c905e..64a54ff4b 100644 --- a/libfreerdp/core/peer.c +++ b/libfreerdp/core/peer.c @@ -30,6 +30,10 @@ #include "peer.h" +#ifdef WITH_DEBUG_RDP +extern const char* DATA_PDU_TYPE_STRINGS[80]; +#endif + static BOOL freerdp_peer_initialize(freerdp_peer* client) { client->context->rdp->settings->ServerMode = TRUE; @@ -85,6 +89,11 @@ static BOOL peer_recv_data_pdu(freerdp_peer* client, wStream* s) if (!rdp_read_share_data_header(s, &length, &type, &share_id, &compressed_type, &compressed_len)) return FALSE; +#ifdef WITH_DEBUG_RDP + printf("recv %s Data PDU (0x%02X), length: %d\n", + type < ARRAYSIZE(DATA_PDU_TYPE_STRINGS) ? DATA_PDU_TYPE_STRINGS[type] : "???", type, length); +#endif + switch (type) { case DATA_PDU_TYPE_SYNCHRONIZE: diff --git a/libfreerdp/core/rdp.c b/libfreerdp/core/rdp.c index 867fd5c1b..61a0f8cba 100644 --- a/libfreerdp/core/rdp.c +++ b/libfreerdp/core/rdp.c @@ -31,7 +31,7 @@ #include #ifdef WITH_DEBUG_RDP -static const char* const DATA_PDU_TYPE_STRINGS[] = +const char* DATA_PDU_TYPE_STRINGS[80] = { "?", "?", /* 0x00 - 0x01 */ "Update", /* 0x02 */ @@ -65,7 +65,7 @@ static const char* const DATA_PDU_TYPE_STRINGS[] = "?", "?", "?", /* 0x33 - 0x35 */ "Status Info", /* 0x36 */ "Monitor Layout" /* 0x37 */ - "?", "?", "?", /* 0x38 - 0x40 */ + "FrameAcknowledge", "?", "?", /* 0x38 - 0x40 */ "?", "?", "?", "?", "?", "?" /* 0x41 - 0x46 */ }; #endif @@ -133,20 +133,21 @@ void rdp_write_share_control_header(wStream* s, UINT16 length, UINT16 type, UINT Stream_Write_UINT16(s, channel_id); /* pduSource */ } -BOOL rdp_read_share_data_header(wStream* s, UINT16* length, BYTE* type, UINT32* share_id, - BYTE *compressed_type, UINT16 *compressed_len) +BOOL rdp_read_share_data_header(wStream* s, UINT16* length, BYTE* type, UINT32* shareId, + BYTE *compressedType, UINT16 *compressedLen) { if (Stream_GetRemainingLength(s) < 12) return FALSE; /* Share Data Header */ - Stream_Read_UINT32(s, *share_id); /* shareId (4 bytes) */ + Stream_Read_UINT32(s, *shareId); /* shareId (4 bytes) */ Stream_Seek_UINT8(s); /* pad1 (1 byte) */ Stream_Seek_UINT8(s); /* streamId (1 byte) */ Stream_Read_UINT16(s, *length); /* uncompressedLength (2 bytes) */ Stream_Read_UINT8(s, *type); /* pduType2, Data PDU Type (1 byte) */ - Stream_Read_UINT8(s, *compressed_type); /* compressedType (1 byte) */ - Stream_Read_UINT16(s, *compressed_len); /* compressedLength (2 bytes) */ + Stream_Read_UINT8(s, *compressedType); /* compressedType (1 byte) */ + Stream_Read_UINT16(s, *compressedLen); /* compressedLength (2 bytes) */ + return TRUE; } @@ -567,9 +568,8 @@ int rdp_recv_data_pdu(rdpRdp* rdp, wStream* s) } #ifdef WITH_DEBUG_RDP - /* if (type != DATA_PDU_TYPE_UPDATE) */ - DEBUG_RDP("recv %s Data PDU (0x%02X), length:%d", - type < ARRAYSIZE(DATA_PDU_TYPE_STRINGS) ? DATA_PDU_TYPE_STRINGS[type] : "???", type, length); + printf("recv %s Data PDU (0x%02X), length: %d\n", + type < ARRAYSIZE(DATA_PDU_TYPE_STRINGS) ? DATA_PDU_TYPE_STRINGS[type] : "???", type, length); #endif switch (type)