Пример #1
0
        public void SendingNodeIsUpMessage(Socket socketout, string addressIP, short WhichRouter)
        {
            IPEndPoint ippoint = socketout.RemoteEndPoint as IPEndPoint;

            Console.WriteLine(ippoint.Address.ToString());

            try
            {
                lock (_syncRoot)
                {
                    // wiadomośc przesyłana do komunikacji z NMSem
                    string     message    = "Network node is up";
                    short      length     = (Int16)message.Length;
                    NMSPackage nmspackage = new NMSPackage(addressIP, WhichRouter, message, length);



                    byte[] bytemessage = nmspackage.toBytes();

                    // Send the data through the socket.
                    socketout.Send(bytemessage);
                }
            }
            catch (Exception)
            {
                Console.WriteLine("Lack connection with NMS");
            }
        }
Пример #2
0
        public void sendingMessageCommunication(string address, string communication, Socket socket)
        {
            try
            {
                short      length     = (Int16)communication.Length;
                NMSPackage nmspackage = new NMSPackage(address, communication, length);

                byte[] bytemessage = nmspackage.toBytes();

                // Send the data through the socket.
                socket.Send(bytemessage);
            }
            catch (Exception)
            {
                Console.WriteLine("Lack of connection with NMS");
            }
        }
Пример #3
0
        public void SendingKeepAliveMessage(string address, Socket socketout)
        {
            Task.Run(async() =>
            {
                try
                {
                    while (true)
                    {
                        if (!socketout.Connected)
                        {
                            Console.WriteLine("Lack connection NMS");
                            break;
                        }
                        string keep_alive_message = "Keep Alive";
                        short length          = (Int16)keep_alive_message.Length;
                        NMSPackage nmspackage = new NMSPackage(address, keep_alive_message, length);

                        byte[] bytemessage = nmspackage.toBytes();

                        // Send the data through the socket.
                        socketout.Send(bytemessage);

                        var delay = await Task.Run(async() =>
                        {
                            Stopwatch sw = Stopwatch.StartNew();
                            await Task.Delay(2000);
                            sw.Stop();
                            return(sw.ElapsedMilliseconds);
                        });
                    }
                }
                catch (Exception err)
                {
                    Console.WriteLine("Lack of connection with NMS");
                }
            });
        }
Пример #4
0
        /// <summary>
        /// funkcja obsługująca przychodzącą wiadomość
        /// </summary>
        /// <param name="listener"></param>
        private void ReceivedMessage(Socket listener)
        {
            string usableMessage = "";

            while (true)
            {
                // wyczyszczenie paczki przed jej wysłaniem oraz przed ponownym wysyłaniem
                usableMessage = string.Empty;

                //przypisywanie do paczki wiadomości przesłanej przez klienta, w tym przypadku przez agenta
                byte[] nmspackage = new byte[64];

                // tylko jeden wątek moze wykonywac ten kod w danym czasie
                //  lock (_syncRoot)
                //   {
                nmspackage = ls.ProcessRecivedByteMessage(listener);
                //   }
                // wykonuje się tylko wtedy jeśli agent nie  jest podłączony
                if (!listener.Connected)
                {
                    // pobranie indeksu socketu z listy soecketów
                    int index = listening_socket.IndexOf(listener);
                    UpdateListBoxReceived("Network Node" + getIPAddressRemote(sends_socket.ElementAt(index)) + " is disconnected");
                    // rozłączanie obu socketów
                    listener.Disconnect(true);
                    //send.Disconnect(true);

                    //usuwanie socketów, adresów z list by przy ponownym połączeniu dodawać je na ponownie
                    listening_socket.RemoveAt(index);
                    sends_socket.RemoveAt(index);
                    routers_IP.RemoveAt(index);

                    // wyświetlanie pobranego adresu IP z list podłączonych agentów
                    _Application.comboBoxRouters.Invoke(new Action(delegate()
                    {
                        comboBoxRouters.Items.RemoveAt(index);
                    }));
                    break;
                }
                // wykonuje się tylko wtedy jeśli agent jest podłączony
                else
                {
                    string sourceip;
                    //tylko jesli paczka nie jest nullem
                    if (nmspackage != null)
                    {
                        usableMessage = NMSPackage.extractUsableMessage(nmspackage, NMSPackage.extractUsableInfoLength(nmspackage));
                        //tylko w przypadku pierwszej wiadomości od danego agenta
                        if (usableMessage == "Network node is up")
                        {
                            sourceip = NMSPackage.exctractSourceIP(nmspackage).ToString();
                            //jesli lista z adresami IP routerów nie zawiera danego IP to je dodaje a następnie wyśwuietlam komunikat
                            if (!routers_IP.Contains(sourceip))
                            {
                                routers_IP.Add(sourceip);
                                UpdateListBoxReceived("Network Node: " + sourceip + " is up");
                                UpdateListBoxReceived(listening_socket.Count.ToString());
                            }
                            //tworze połączenie z socketem routera, który wysłał do mnie wiadomość
                            send = sS.ConnectToEndPoint(NMSPackage.exctractSourceIP(nmspackage).ToString());
                            // a następnie dodaje ten socket do listy socketów, by potem móc z nich korzystać
                            sends_socket.Add(send);

                            short numberOfRouter = NMSPackage.extractNumberOfRouterNumber(nmspackage);

                            List <string> configurationRouter = ReadingFromFile(paths.ElementAt(numberOfRouter - 1));
                            foreach (var line in configurationRouter)
                            {
                                short      length              = (Int16)line.Length;
                                NMSPackage tablePackage        = new NMSPackage(interfaces.ElementAt(numberOfRouter - 1), line, length);
                                byte[]     tablePackageInBytes = tablePackage.toBytes();
                                send.Send(tablePackageInBytes);
                                Task.Delay(10);
                            }



                            /* z kazdą wiadomością "Network node is up" dodaje IP routera do checkboca w celu mozliwości wybrania
                             * docelwoego punktu komunikacji */
                            _Application.comboBoxRouters.Invoke(new Action(delegate()
                            {
                                _Application.comboBoxRouters.Items.Add(sourceip);
                            }));
                        }
                        //jesli wiadmośc keep alive
                        else if (usableMessage == "Keep Alive")
                        {
                            // UpdateListBoxReceived(usableMessage);
                        }
                        else if (usableMessage == "ERROR")
                        {
                            UpdateListBoxReceived("Cannot send EON Table to the node agent");
                        }
                        else if (usableMessage.StartsWith("TOPOLOGY"))
                        {
                            UpdateListBoxReceived(usableMessage);
                        }
                    }
                    //jesli paczka jest nullem
                    else
                    {
                        int index = listening_socket.IndexOf(listener);
                        // stwierdzam, że agent nie odpowiada, a potem go rozłączam
                        UpdateListBoxReceived("Network Node" + getIPAddressRemote(sends_socket.ElementAt(index)) + " is not responding");
                        UpdateListBoxReceived("Network Node" + getIPAddressRemote(sends_socket.ElementAt(index)) + " is disconnected");

                        listening_socket.RemoveAt(index);
                        sends_socket.RemoveAt(index);
                        routers_IP.RemoveAt(index);
                        _Application.comboBoxRouters.Invoke(new Action(delegate()
                        {
                            comboBoxRouters.Items.RemoveAt(index);
                        }));
                        //odłączanie
                        listener.Disconnect(true);
                        //send.Disconnect(true);
                        //usuwanie socketów, adresów z list by przy ponownym połączeniu dodawać je na ponownie

                        break;
                    }
                }
            }
        }
Пример #5
0
        // tworzenie wiadomości w zalezności od zaznaczonego typu wiadomości w comboBocActions
        /// <summary>
        /// tworzenie wiadomości w zalezności od zaznaczonego typu wiadomości w comboBocActions
        /// </summary>
        /// <returns> byte[] </returns>
        private byte[] returnBytes()
        {
            byte[] table_in_bytes = new byte[128];
            try
            {
                if (comboBoxTables.GetItemText(comboBoxTables.SelectedItem) == "Commutation Table")
                {
                    if (comboBoxActions.GetItemText(comboBoxActions.SelectedItem) == "DELETE")
                    {
                        table_in_bytes = null;
                        string builder = string.Empty;;
                        string command = string.Empty;
                        string freq_in = string.Empty;
                        string port_in = string.Empty;
                        command = this.comboBoxActions.GetItemText(this.comboBoxActions.SelectedItem);
                        freq_in = (textBoxFrequencyIN.Text).ToString();
                        port_in = (textBox_Port_IN.Text).ToString();
                        builder = command + "#" + "3" + "#" + freq_in + "#" + port_in;
                        short      length            = (Int16)builder.Length;
                        NMSPackage commutation_table = new NMSPackage(interfaces.ElementAt(1 - 1), builder, length);
                        if (freq_in == "" || port_in == "")
                        {
                            table_in_bytes = null;
                        }
                        else
                        {
                            table_in_bytes = commutation_table.toBytes();
                        }
                    }
                    else if (this.comboBoxActions.GetItemText(this.comboBoxActions.SelectedItem) == "ADD")
                    {
                        table_in_bytes = null;
                        string builder  = string.Empty;
                        string command  = string.Empty;
                        string freq_in  = string.Empty;
                        string port_in  = string.Empty;
                        string freq_out = string.Empty;
                        string port_out = string.Empty;
                        command  = this.comboBoxActions.GetItemText(this.comboBoxActions.SelectedItem);
                        freq_in  = (textBoxFrequencyIN.Text).ToString();
                        port_in  = (textBox_Port_IN.Text).ToString();
                        freq_out = (textBoxFrequencyOUT.Text).ToString();
                        port_out = (textBoxPort_OUT.Text).ToString();
                        builder  = command + "#" + "3" + "#" + freq_in + "#" + port_in + "#" + freq_out + "#" + port_out;
                        short      length            = (Int16)builder.Length;
                        NMSPackage commutation_table = new NMSPackage(interfaces.ElementAt(1 - 1), builder, length);

                        if (freq_in == "" || port_in == "" || freq_out == "" || port_out == "")
                        {
                            table_in_bytes = null;
                        }
                        else
                        {
                            table_in_bytes = commutation_table.toBytes();
                        }
                    }
                    else if (this.comboBoxActions.GetItemText(this.comboBoxActions.SelectedItem) == "TOPOLOGY")
                    {
                        string builder = string.Empty;
                        string command = string.Empty;
                        command = "TOPOLOGY";
                        builder = command + "#" + "3";
                        short      length            = (Int16)builder.Length;
                        NMSPackage commutation_table = new NMSPackage(interfaces.ElementAt(1 - 1), builder, length);
                        table_in_bytes = commutation_table.toBytes();
                    }
                }
                if (this.comboBoxTables.GetItemText(this.comboBoxTables.SelectedItem) == "Border Node Commutation Table")
                {
                    if (this.comboBoxActions.GetItemText(this.comboBoxActions.SelectedItem) == "ADD")
                    {
                        table_in_bytes = null;
                        string builder        = string.Empty;
                        string port_in        = string.Empty;
                        string port_out       = string.Empty;
                        string Hops           = string.Empty;
                        string command        = string.Empty;
                        string band_out       = string.Empty;
                        string destination_IP = string.Empty;
                        string Modulation     = string.Empty;
                        string BitRate        = string.Empty;
                        string IP_IN          = string.Empty;
                        string Frequency_out  = string.Empty;
                        command        = this.comboBoxActions.GetItemText(this.comboBoxActions.SelectedItem);
                        IP_IN          = (textBox_IP_IN.Text).ToString();
                        port_in        = (textBox_Port_IN.Text).ToString();
                        band_out       = (textBoxBand_OUT.Text).ToString();
                        Frequency_out  = (textBoxFrequencyOUT.Text).ToString();
                        Modulation     = (textBoxModulation.Text).ToString();
                        BitRate        = (textBoxBitrate.Text).ToString();
                        destination_IP = (textBoxDestination_IP.Text).ToString();
                        port_out       = (textBoxPort_OUT.Text).ToString();
                        Hops           = (textBoxHops.Text).ToString();

                        builder = command + "#" + "1" + "#" + IP_IN + "#" + port_in + "#" + band_out + "#" + Frequency_out + "#" +
                                  Modulation + "#" + BitRate + "#" + destination_IP + "#" + port_out + "#" + Hops;
                        short      length            = (Int16)builder.Length;
                        NMSPackage commutation_table = new NMSPackage(interfaces.ElementAt(1 - 1), builder, length);
                        if (IP_IN == "" || port_in == "" || band_out == "" || port_out == "" || Frequency_out == "" || Modulation == "" || BitRate == "" || destination_IP == "" || Hops == "")
                        {
                            table_in_bytes = null;
                        }
                        else
                        {
                            table_in_bytes = commutation_table.toBytes();
                        }
                    }
                    if (this.comboBoxActions.GetItemText(this.comboBoxActions.SelectedItem) == "DELETE")
                    {
                        table_in_bytes = null;
                        string builder        = string.Empty;
                        string command        = string.Empty;
                        string IP_IN          = string.Empty;
                        string port_in        = string.Empty;
                        string destination_IP = string.Empty;
                        command        = this.comboBoxActions.GetItemText(this.comboBoxActions.SelectedItem);
                        IP_IN          = (textBox_IP_IN.Text).ToString();
                        port_in        = (textBox_Port_IN.Text).ToString();
                        destination_IP = (textBoxDestination_IP.Text).ToString();

                        builder = command + "#" + "1" + "#" + IP_IN + "#" + port_in + "#" + destination_IP;
                        short      length            = (Int16)builder.Length;
                        NMSPackage commutation_table = new NMSPackage(interfaces.ElementAt(1 - 1), builder, length);
                        if (IP_IN == "" || port_in == "" || destination_IP == "")
                        {
                            table_in_bytes = null;
                        }
                        else
                        {
                            table_in_bytes = commutation_table.toBytes();
                        }
                    }
                    else if (this.comboBoxActions.GetItemText(this.comboBoxActions.SelectedItem) == "TOPOLOGY")
                    {
                        table_in_bytes = null;
                        string builder = string.Empty;
                        string command = string.Empty;
                        command = "TOPOLOGY";
                        builder = command + "#" + "1";
                        short      length            = (Int16)builder.Length;
                        NMSPackage commutation_table = new NMSPackage(interfaces.ElementAt(1 - 1), builder, length);
                        table_in_bytes = commutation_table.toBytes();
                    }
                }
                if (this.comboBoxTables.GetItemText(this.comboBoxTables.SelectedItem) == "EON Table")
                {
                    if (this.comboBoxActions.GetItemText(this.comboBoxActions.SelectedItem) == "ADD")
                    {
                        table_in_bytes = null;
                        string builder       = string.Empty;
                        string command       = string.Empty;
                        string Band_out      = string.Empty;
                        string Band_in       = string.Empty;
                        string frequency_in  = string.Empty;
                        string Frequency_out = string.Empty;
                        command       = this.comboBoxActions.GetItemText(this.comboBoxActions.SelectedItem);
                        Band_out      = (textBoxBand_OUT.Text).ToString();
                        Frequency_out = (textBoxFrequencyOUT.Text).ToString();
                        Band_in       = (textBoxBand_IN.Text).ToString();
                        frequency_in  = (textBoxFrequencyIN.Text).ToString();

                        builder = command + "#" + "2" + "#" + frequency_in + "#" + Band_in + "#" + Frequency_out + "#" + Band_out;
                        short      length            = (Int16)builder.Length;
                        NMSPackage commutation_table = new NMSPackage(interfaces.ElementAt(1 - 1), builder, length);
                        if (Band_out == "" || Frequency_out == "" || Band_in == "" || frequency_in == "")
                        {
                            table_in_bytes = null;
                        }
                        else
                        {
                            table_in_bytes = commutation_table.toBytes();
                        }
                    }
                    else if (this.comboBoxActions.GetItemText(this.comboBoxActions.SelectedItem) == "DELETE")
                    {
                        table_in_bytes = null;
                        string builder       = string.Empty;
                        string command       = string.Empty;
                        string Band_out      = string.Empty;
                        string Band_in       = string.Empty;
                        string frequency_in  = string.Empty;
                        string Frequency_out = string.Empty;
                        command       = this.comboBoxActions.GetItemText(this.comboBoxActions.SelectedItem);
                        Band_out      = (textBoxBand_OUT.Text).ToString();
                        Frequency_out = (textBoxFrequencyOUT.Text).ToString();
                        Band_in       = (textBoxBand_IN.Text).ToString();
                        frequency_in  = (textBoxFrequencyIN.Text).ToString();

                        builder = command + "#" + "2" + "#" + frequency_in + "#" + Band_in + "#" + Frequency_out + "#" + Band_out;
                        short      length            = (Int16)builder.Length;
                        NMSPackage commutation_table = new NMSPackage(interfaces.ElementAt(1 - 1), builder, length);
                        if (Band_out == "" || Frequency_out == "" || Band_in == "" || frequency_in == "")
                        {
                            table_in_bytes = null;
                        }
                        else
                        {
                            table_in_bytes = commutation_table.toBytes();
                        }
                    }
                    else if (this.comboBoxActions.GetItemText(this.comboBoxActions.SelectedItem) == "TOPOLOGY")
                    {
                        table_in_bytes = null;
                        string builder = string.Empty;
                        string command = string.Empty;
                        command = "TOPOLOGY";
                        builder = command + "#" + "2";
                        short      length            = (Int16)builder.Length;
                        NMSPackage commutation_table = new NMSPackage(interfaces.ElementAt(1 - 1), builder, length);
                        table_in_bytes = commutation_table.toBytes();
                    }
                }
            }
            catch (Exception e)
            {
                listBoxReceived.Items.Add("Error occured with getting data for the agent");
                table_in_bytes = null;
            }
            return(table_in_bytes);
        }