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()); } }
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()); }
//===================================================================== 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); }
//===================================================================== /// <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++; }
//********************************************************************* 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."); } }
//********************************************************************* 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."); } }