Beispiel #1
0
        protected void ProcessUDTPacket(IUDTPacket p)
        {
            //(3).Check the packet type and process it according to this.

            if (!p.IsControlPacket())
            {
                DataPacket dp = (DataPacket)p;
                if (storeStatistics)
                {
                    dataPacketInterval.End();
                    dataProcessTime.Begin();
                }
                OnDataPacketReceived(dp);
                if (storeStatistics)
                {
                    dataProcessTime.End();
                    dataPacketInterval.Begin();
                }
            }

            else if (p.GetControlPacketType() == (int)ControlPacketType.ACK2)
            {
                Acknowledgment2 ack2 = (Acknowledgment2)p;
                onAck2PacketReceived(ack2);
            }

            else if (p is Shutdown)
            {
                OnShutdown();
            }
        }
Beispiel #2
0
        protected void SendAck2(long ackSequenceNumber)
        {
            Acknowledgment2 ackOfAckPkt = new Acknowledgment2();

            ackOfAckPkt.AckSequenceNumber = ackSequenceNumber;
            ackOfAckPkt.SetSession(session);
            ackOfAckPkt.DestinationID = session.Destination.SocketID;
            endpoint.DoSend(ackOfAckPkt);
        }
Beispiel #3
0
 protected void sendAck2(long ackSequenceNumber)
 {
     try
     {
         Acknowledgment2 ackOfAckPkt = new Acknowledgment2();
         ackOfAckPkt.setAckSequenceNumber(ackSequenceNumber);
         ackOfAckPkt.setSession(session);
         ackOfAckPkt.setDestinationID(session.getDestination().getSocketID());
         endpoint.doSend(ackOfAckPkt);
     }
     catch (Exception ex)
     {
         Log.Write(this.ToString(), ex);
     }
 }
Beispiel #4
0
        /**
         * spec p. 13: <br/>
         * 1) Locate the related ACK in the ACK History Window according to the
         * ACK sequence number in this ACK2.  <br/>
         * 2) Update the largest ACK number ever been acknowledged. <br/>
         * 3) Calculate new rtt according to the ACK2 arrival time and the ACK
         * departure time, and update the RTT value as: RTT = (RTT * 7 +
         * rtt) / 8.  <br/>
         * 4) Update RTTVar by: RTTVar = (RTTVar * 3 + abs(RTT - rtt)) / 4.  <br/>
         * 5) Update both ACK and NAK period to 4 * RTT + RTTVar + SYN.  <br/>
         */
        protected void onAck2PacketReceived(Acknowledgment2 ack2)
        {
            AckHistoryEntry entry = ackHistoryWindow.getEntry(ack2.AckSequenceNumber);

            if (entry != null)
            {
                long ackNumber = entry.getAckNumber();
                largestAcknowledgedAckNumber = Math.Max(ackNumber, largestAcknowledgedAckNumber);
                long rtt = entry.getAge();
                if (roundTripTime > 0)
                {
                    roundTripTime = (roundTripTime * 7 + rtt) / 8;
                }
                else
                {
                    roundTripTime = rtt;
                }
                roundTripTimeVar = (roundTripTimeVar * 3 + Math.Abs(roundTripTimeVar - rtt)) / 4;
                ackTimerInterval = 4 * roundTripTime + roundTripTimeVar + Util.GetSYNTime();
                nakTimerInterval = ackTimerInterval;
                statistics.setRTT(roundTripTime, roundTripTimeVar);
            }
        }
Beispiel #5
0
        protected void processUDTPacket(UDTPacket p)
        {
            //(3).Check the packet type and process it according to this.
            try
            {
                if (!p.isControlPacket())
                {
                    DataPacket dp = (DataPacket)p;
                    if (storeStatistics)
                    {
                        dataPacketInterval.end();
                        dataProcessTime.begin();
                    }
                    onDataPacketReceived(dp);//解析数据包将数据存在AppData类中
                    if (storeStatistics)
                    {
                        dataProcessTime.end();
                        dataPacketInterval.begin();
                    }
                }
                else if (p.getControlPacketType() == (int)ControlPacketType.ACK2)
                {
                    Acknowledgment2 ack2 = (Acknowledgment2)p;
                    onAck2PacketReceived(ack2);
                }

                else if (p is Shutdown)
                {
                    onShutdown();
                }
            }
            catch (Exception exc)
            {
                Log.Write(this.ToString(), exc);
            }
        }