The Initiate Multitransport Request PDU is sent by the server to the client and is used to bootstrap the creation of a side-band channel ([MS-RDPEMT] section 1.3).
Наследование: RdpbcgrServerPdu
        /// <summary>
        /// Decode Server Initiate multitransport request
        /// </summary>
        /// <param name="data">data to be parsed</param>
        /// <param name="decryptedUserData">decrypted user data</param>
        /// <param name="type">security header type</param>
        /// <returns>decoded Server Initiate multitransport request</returns>
        public StackPacket DecodeServerInitiateMultitransportRequest(
            byte[] data,
            byte[] decryptedUserData,
            SecurityHeaderType type)
        {
            Server_Initiate_Multitransport_Request_PDU pdu = new Server_Initiate_Multitransport_Request_PDU();

            // data index
            int dataIndex = 0;

            // Virtual_Channel_RAW_Pdu: commonHeader
            pdu.commonHeader = ParseMcsCommonHeader(data, ref dataIndex, type);

            // user data index
            int userDataIndex = 0;

            if (type == SecurityHeaderType.None)
            {
                pdu.commonHeader.securityHeader = ParseTsSecurityHeaderBasic(decryptedUserData, ref userDataIndex);
            }

            // requestId
            pdu.requestId = ParseUInt32(decryptedUserData, ref userDataIndex, false);

            // request protocol
            pdu.requestedProtocol = (Multitransport_Protocol_value)ParseUInt16(decryptedUserData, ref userDataIndex, false);

            // reserved
            pdu.reserved = ParseUInt16(decryptedUserData, ref userDataIndex, false);

            // security cookie
            pdu.securityCookie = GetBytes(decryptedUserData, ref userDataIndex, 16);

            // Check if data length exceeded expectation
            VerifyDataLength(decryptedUserData.Length, userDataIndex, ConstValue.ERROR_MESSAGE_DATA_LENGTH_EXCEEDED);
            return pdu;
        }
Пример #2
0
        public override StackPacket Clone()
        {
            Server_Initiate_Multitransport_Request_PDU requestPDU = new Server_Initiate_Multitransport_Request_PDU(serverSessionContext);
            requestPDU.commonHeader = commonHeader.Clone();
            requestPDU.requestId = requestId;
            requestPDU.requestedProtocol = requestedProtocol;
            requestPDU.reserved = reserved;
            requestPDU.securityCookie = RdpbcgrUtility.CloneByteArray(securityCookie);

            return requestPDU;
        }