Indicate the state of received source packet.
Example #1
0
        /// <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();
            }
        }