//*********************************************************************
        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.");
            }
        }
Пример #2
0
 //=====================================================================
 /// <summary>
 /// Function for send Beacons to Medium
 /// </summary>
 public void SendBeacon()
 {
     while (_Enabled)
     {
         var beac = new Beacon(CreatePacket())
             {
                 Destination         = "FF:FF:FF:FF:FF:FF",
                 FrequencySupport    = this.FrequencySupport,
                 BandWithSupport     = this.BandWithSupport,
                 StandartSupport     = this.StandartSupport
             };
         beac.setTransmitRate(6);
         this.SendData(beac);
         Thread.Sleep(_BeaconPeriod);
     }
 }