/// <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; }
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; }