Microsoft.Protocols.TestTools.StackSdk.RemoteDesktop.Rdpeudp.RdpeudpSocket.RetransmitPacket C# (CSharp) Method

RetransmitPacket() public method

public RetransmitPacket ( RdpeudpPacket packet ) : bool
packet RdpeudpPacket
return bool
        public bool RetransmitPacket(RdpeudpPacket packet)
        {
            if (!connected ||
                packet.sourceHeader == null) return false;

            if (!outPacketDic.ContainsKey(packet.sourceHeader.Value.snSourceStart))
            {
                return false;
            }

            if (outPacketDic[packet.sourceHeader.Value.snSourceStart].retransmitTimes >= this.SocketConfig.retransmitLimit)
            {
                //If a datagram has been retransmitted five times without a response, the sender terminates the connection
                this.Close();
            }
            RDPUDP_SOURCE_PAYLOAD_HEADER sourceHeader = packet.sourceHeader.Value;
            Monitor.Enter(sequenceNumberLock);
            sourceHeader.snCoded = ++CurSnCoded;
            Monitor.Exit(sequenceNumberLock);
            packet.sourceHeader = sourceHeader;

            byte[] data = PduMarshaler.Marshal(packet, false);
            SendBytesByUDP(data);

            lock (outPacketDic)         // Deal with outPacketDic and retransmit packet.
            {
                if (outPacketDic.ContainsKey(packet.sourceHeader.Value.snSourceStart))
                {
                    outPacketDic[packet.sourceHeader.Value.snSourceStart].retransmitTimes++;
                    outPacketDic[packet.sourceHeader.Value.snSourceStart].SendTime = DateTime.Now;
                }
            }
            return true;
        }