/// <summary> /// Parse NETWORK_DETECTION_REQUEST /// </summary> /// <param name="data"></param> /// <param name="currentIndex"></param> /// <returns></returns> public NETWORK_DETECTION_REQUEST ParseNetworkDectectRequest(byte[] data, ref int currentIndex) { NETWORK_DETECTION_REQUEST detectRequest = null; byte headerLength = ParseByte(data, ref currentIndex); HeaderTypeId_Values headerTypeId = (HeaderTypeId_Values)ParseByte(data, ref currentIndex); ushort sequenceNumber = ParseUInt16(data, ref currentIndex, false); AUTO_DETECT_REQUEST_TYPE requestType = (AUTO_DETECT_REQUEST_TYPE)ParseUInt16(data, ref currentIndex, false); if (requestType == AUTO_DETECT_REQUEST_TYPE.RDP_RTT_REQUEST_IN_CONNECTTIME || requestType == AUTO_DETECT_REQUEST_TYPE.RDP_RTT_REQUEST_AFTER_CONNECTTIME) { RDP_RTT_REQUEST req = new RDP_RTT_REQUEST(); req.headerLength = headerLength; req.headerTypeId = headerTypeId; req.sequenceNumber = sequenceNumber; req.requestType = requestType; detectRequest = req; } else if (requestType == AUTO_DETECT_REQUEST_TYPE.RDP_BW_START_IN_CONNECTTIME || requestType == AUTO_DETECT_REQUEST_TYPE.RDP_BW_START_AFTER_CONNECTTIME_OR_RELIABLEUDP || requestType == AUTO_DETECT_REQUEST_TYPE.RDP_BW_START_AFTER_CONNECTTIME_OR_LOSSYUDP) { RDP_BW_START req = new RDP_BW_START(); req.headerLength = headerLength; req.headerTypeId = headerTypeId; req.sequenceNumber = sequenceNumber; req.requestType = requestType; detectRequest = req; } else if (requestType == AUTO_DETECT_REQUEST_TYPE.RDP_BW_PAYLOAD) { RDP_BW_PAYLOAD req = new RDP_BW_PAYLOAD(); req.headerLength = headerLength; req.headerTypeId = headerTypeId; req.sequenceNumber = sequenceNumber; req.requestType = requestType; req.payloadLength = ParseUInt16(data, ref currentIndex, false); req.payload = GetBytes(data, ref currentIndex, req.payloadLength); detectRequest = req; } else if (requestType == AUTO_DETECT_REQUEST_TYPE.RDP_BW_STOP_IN_CONNECTTIME || requestType == AUTO_DETECT_REQUEST_TYPE.RDP_BW_STOP_AFTER_CONNECTTIME_OR_RELIABLEUDP || requestType == AUTO_DETECT_REQUEST_TYPE.RDP_BW_STOP_AFTER_CONNECTTIME_OR_LOSSYUDP) { RDP_BW_STOP req = new RDP_BW_STOP(); req.headerLength = headerLength; req.headerTypeId = headerTypeId; req.sequenceNumber = sequenceNumber; req.requestType = requestType; if (req.headerLength > 0x06) { req.payloadLength = ParseUInt16(data, ref currentIndex, false); req.payload = GetBytes(data, ref currentIndex, req.payloadLength); } detectRequest = req; } else { RDP_NETCHAR_RESULT req = new RDP_NETCHAR_RESULT(); req.headerLength = headerLength; req.headerTypeId = headerTypeId; req.sequenceNumber = sequenceNumber; req.requestType = requestType; if (requestType == AUTO_DETECT_REQUEST_TYPE.RDP_NETCHAR_RESULT_BANDWIDTH_AVERAGERTT) { req.bandwidth = ParseUInt32(data, ref currentIndex, false); req.averageRTT = ParseUInt32(data, ref currentIndex, false); } else if (requestType == AUTO_DETECT_REQUEST_TYPE.RDP_NETCHAR_RESULT_BASERTT_AVERAGERTT) { req.baseRTT = ParseUInt32(data, ref currentIndex, false); req.averageRTT = ParseUInt32(data, ref currentIndex, false); } else if (requestType == AUTO_DETECT_REQUEST_TYPE.RDP_NETCHAR_RESULT_BASERTT_BANDWIDTH_AVERAGERTT) { req.baseRTT = ParseUInt32(data, ref currentIndex, false); req.bandwidth = ParseUInt32(data, ref currentIndex, false); req.averageRTT = ParseUInt32(data, ref currentIndex, false); } detectRequest = req; } return detectRequest; }
public override NETWORK_DETECTION_REQUEST Clone() { RDP_BW_PAYLOAD bwPayload = new RDP_BW_PAYLOAD(); bwPayload.headerLength = this.headerLength; bwPayload.headerTypeId = this.headerTypeId; bwPayload.requestType = this.requestType; bwPayload.sequenceNumber = this.sequenceNumber; bwPayload.payloadLength = this.payloadLength; bwPayload.payload = RdpbcgrUtility.CloneByteArray(this.payload); return bwPayload; }