/// <summary> /// Process Source payload if the packet has source payload data /// </summary> /// <param name="eudpPacket"></param> public void ProcessSourceData(RdpeudpPacket eudpPacket) { if (eudpPacket.fecHeader.uFlags.HasFlag(RDPUDP_FLAG.RDPUDP_FLAG_DATA) && !eudpPacket.fecHeader.uFlags.HasFlag(RDPUDP_FLAG.RDPUDP_FLAG_FEC)) { lock (inPacketDic) { if (IsInReceiveWindow(eudpPacket.sourceHeader.Value.snSourceStart)) { SnSourceAck = Math.Max(SnSourceAck, eudpPacket.sourceHeader.Value.snSourceStart); InPacketState inPacketState = new InPacketState(); inPacketState.Packet = eudpPacket; inPacketDic[eudpPacket.sourceHeader.Value.snSourceStart] = inPacketState; UpdateReceiveWindow(); } // Increase received source packet numbers not be ack if (sourceNumNotAcked == 0) { ReceiveTimeForFirstNotACKSource = DateTime.Now; } sourceNumNotAcked++; } // Send ACK diagram if necessary. AckPacketReceived(); } }
/// <summary> /// Process Source payload if the packet has source payload data /// </summary> /// <param name="eudpPacket"></param> public void ProcessSourceData(RdpeudpPacket eudpPacket) { if (eudpPacket.fecHeader.uFlags.HasFlag(RDPUDP_FLAG.RDPUDP_FLAG_DATA) && !eudpPacket.fecHeader.uFlags.HasFlag(RDPUDP_FLAG.RDPUDP_FLAG_FEC)) { lock (inPacketDic) { if(IsInReceiveWindow(eudpPacket.sourceHeader.Value.snSourceStart)) { SnSourceAck = Math.Max(SnSourceAck, eudpPacket.sourceHeader.Value.snSourceStart); InPacketState inPacketState = new InPacketState(); inPacketState.Packet = eudpPacket; inPacketDic[eudpPacket.sourceHeader.Value.snSourceStart] = inPacketState; UpdateReceiveWindow(); } // Increase received source packet numbers not be ack if (sourceNumNotAcked == 0) { ReceiveTimeForFirstNotACKSource = DateTime.Now; } sourceNumNotAcked++; } // Send ACK diagram if necessary. AckPacketReceived(); } }