コード例 #1
0
        internal void ReceiveDataAck(DataAck ack)
        {
            this.send_queue.Acknowledge(ack.AcknowledgementNumber);

            this.sending = false;

            foreach (var payload in this.send_queue.Read(1))
            {
                this.socket.Send(this.endpoint, payload.Serialize());
            }
        }
コード例 #2
0
        internal void ReceiveDataSyn(DataSyn syn)
        {
            this.recv_queue.Write(syn);

            var data = this.recv_queue.Dequeue();

            this.OnData(Reactor.Buffer.Create(data));

            var ack = new DataAck(this.recv_queue.SequenceNumber, this.recv_queue.WindowSize);

            this.socket.Send(this.endpoint, ack.Serialize());
        }
コード例 #3
0
        //=====================================================================
        public void MACsandACK(string Destination, Guid _DataGuid, int TXrate)
        {
            DataAck da = new DataAck(CreatePacket());

            da.Destination   = Destination;
            da.PacketChannel = this.getOperateChannel();
            //da.PacketBand = this.getOperateBand();
            da.PacketBandWith    = this.BandWidth;
            da.PacketStandart    = this.Stand80211;
            da.PacketFrequency   = this.Freq;
            da.Source            = this.getMACAddress();//.ToString();
            da.GuiDforDataPacket = _DataGuid;
            da.setTransmitRate(TXrate);
            this.SendData(da);
        }
コード例 #4
0
ファイル: AP.cs プロジェクト: anshamis/smart-link-selection
 //=====================================================================
 /// <summary>
 /// DataAck routine
 /// </summary>
 /// <param name="dataAckPacket">DataAck packet</param>
 private void DataAckRoutine(DataAck dataAckPacket)
 {
     //Queue<Packets.Data> temporaryQ = (Queue<Packets.Data>)_packet_queues[_wp.Source];
     try
     {
         if (((Queue <Data>)_packet_queues[dataAckPacket.Source]).Count > 0)
         {
             lock (Sync)
             {
                 var temp = ((Queue <Data>)_packet_queues[dataAckPacket.Source]).First();
                 if (temp.GuidD.Equals(dataAckPacket.GuiDforDataPacket))
                 {
                     ((Queue <Data>)_packet_queues[dataAckPacket.Source]).Dequeue();
                 }
                 Monitor.PulseAll(Sync);
             }
         }
     }
     catch (Exception ex) { AddToLog("DataAckRoutine: " + ex.Message); }
     DataAckReceived++;
 }
コード例 #5
0
        //*********************************************************************
        public void ParseReceivedPacket(IPacket pack)
        {
            Type Pt = pack.GetType();

            if (Pt == typeof(Connect))
            {
                Connect _conn = (Connect)pack;
                if (!_AssociatedDevices.Contains(_conn.Source))
                {
                    _AssociatedDevices.Add(_conn.Source);
                }
                SendConnectionACK(_conn.Source);
            }
            else if (Pt == typeof(KeepAlive))
            {
                KeepAlive _wp = (KeepAlive)pack;


                Thread newThread = new Thread(() => UpdateSTAKeepAliveInfoOnReceive(_wp.Source));
                newThread.Start();
            }
            else if (Pt == typeof(Data))
            {
                Data _wp = (Data)pack;
                // Update Keep Alive
                //Thread newThread = new Thread(() => UpdateSTAKeepAliveInfoOnReceive(_wp.Source));
                //newThread.Start();

                DataAck ack = new DataAck(CreatePacket());
                ack.Destination = _wp.Source;
                ack.X           = this.x;
                ack.Y           = this.y;
                ack.PacketID    = _wp.PacketID;
                SendData(ack);
                _wp.Destination = _wp.Reciver;
                _wp.X           = this.x;
                _wp.Y           = this.y;
                AddTXPacket(_wp);
                //SendData(_wp);
                DataReceived++;
            }
            else if (Pt == typeof(DataAck))
            {
                DataAck _wp = (DataAck)pack;

                // Update Keep Alive
                //Thread newThread = new Thread(() => UpdateSTAKeepAliveInfoOnReceive(_wp.Source));
                //newThread.Start();

                //_wp.Destination = _wp.Reciver;
                //_wp.X = this.x;
                //_wp.Y = this.y;
                DeleteTXpacketByID(_wp.PacketID);
                //SendData(_wp);
                DataAckReceived++;
            }
            else
            {
                //Console.WriteLine("[" + getMACAddress() + "]" + " listening.");
            }
        }
コード例 #6
0
        //*********************************************************************
        public void ParseReceivedPacket(IPacket pack)
        {
            Type _Pt = pack.GetType();

            if (_Pt == typeof(Packets.ConnectionACK))
            {
                Packets.ConnectionACK _ack = (Packets.ConnectionACK)pack;
                if (!_AssociatedWithAPList.Contains(_ack.SSID))
                {
                    _AssociatedWithAPList.Add(_ack.SSID);

                    Thread.Sleep(5);
                }
            }
            else if (_Pt == typeof(Packets.Beacon))
            {
                Packets.Beacon bec = (Packets.Beacon)pack;
                if (!_AccessPoint.Contains(bec.SSID))
                {
                    _AccessPoint.Add(bec.SSID);
                }
                _AccessPoint.Increase(bec.SSID);
                //Thread.Sleep(2);
            }

            else if (_Pt == typeof(Packets.Data))
            {
                Packets.Data dat     = (Packets.Data)pack;
                bool         recieve = dat.PacketID != PrevDataID;

                if (recieve)
                {
                    _DataReceived++;


                    DataAck da = new DataAck(CreatePacket());
                    PrevDataID = dat.PacketID;
                    AP _connecttoAP = GetAPBySSID(_AccessPoint[0].ToString());
                    da.Destination   = _connecttoAP.getMACAddress();
                    da.PacketChannel = this.getOperateChannel();
                    da.PacketBand    = this.getOperateBand();
                    da.Reciver       = dat.Source;
                    DataReceivedContainer.Append(dat.getData() + "\r\n");
                    //Thread.Sleep(2);
                    da.PacketID = dat.PacketID;
                    SendData(da);
                }
                else
                {
                    //  ACK Not received
                    AddToLog("ACK Not received :" + dat.PacketID);
                    DataAck da = new DataAck(CreatePacket());
                    //PrevDataID = dat.PacketID;
                    AP _connecttoAP = GetAPBySSID(_AccessPoint[0].ToString());
                    da.Destination   = _connecttoAP.getMACAddress();
                    da.PacketChannel = this.getOperateChannel();
                    da.PacketBand    = this.getOperateBand();
                    da.Reciver       = dat.Source;
                    //DataReceivedContainer.Append(dat.getData() + "\r\n");
                    //Thread.Sleep(2);
                    DataAckRetransmitted++;
                    da.PacketID = dat.PacketID;
                    SendData(da);
                }
            }
            else if (_Pt == typeof(Packets.DataAck))
            {
                Packets.DataAck dat = (Packets.DataAck)pack;

                if (PrevDataAckID != dat.PacketID)
                {
                    _DataAckReceived++;
                    ackReceived   = true;
                    PrevDataAckID = dat.PacketID;
                }
            }
            else
            {
                //Console.WriteLine("[" + getMACAddress() + "]" + " listening.");
            }
        }