Exemplo n.º 1
0
        public void DataReceivingTest()
        {
            var portMock = new Mock<IBinaryPort>();
            portMock.Setup(foo => foo.ReadBytesBlock(1)).Returns(new byte[] {0xA}); // возвращаем сигнатуру
            // возвращаем тело пакета
            portMock.Setup(foo => foo.ReadBytesBlock(16)).Returns(new byte[]{0, 0, 0, 0, 0, 0, 52, 64, 0, 0, 0, 0, 0, 192, 82,192});
            var loggerStub = new LoggerStub();

            var target = new PortListener(portMock.Object, loggerStub);

            var expected = new AccelData(20.0, -75.0);
            var syncEvent = new AutoResetEvent(false);
            AccelData actual = null;

            target.AccelDataReceived += (sender, dataArgs) =>
                                       {
                                           syncEvent.Set();
                                           actual = dataArgs.Data;
                                       };

            target.StartListen();
            if (!syncEvent.WaitOne(5000)) // ждем события
            {
                Assert.Fail("Таймаут ожидания данных");
            }
            target.StopListen();

            Assert.AreEqual(expected.Ax, actual.Ax); // проверяем правильность разбора пакета
        }
Exemplo n.º 2
0
        public void ExceptionWorkTest()
        {
            var portMock = new Mock<IBinaryPort>();
            // выбрасываем исключение, например при чтении из закрытого порта
            portMock.Setup(foo => foo.ReadBytesBlock(1)).Throws<IOException>();
            var loggerStub = new LoggerStub();

            var target = new PortListener(portMock.Object, loggerStub);
            var syncEvent = new AutoResetEvent(false);
            EventHandler<ExceptionCoughtArgs> exceptionHandler = (sender, e) => syncEvent.Set();
            target.ExceptionCought += exceptionHandler;

            target.StartListen();
            if (!syncEvent.WaitOne(5000)) // ждем вызова обработчика
            {
                Assert.Fail("Таймаут ожидания исключения");
            }
            target.ExceptionCought -= exceptionHandler;

            // для примера: вызывающий код обработал исключение, открыл порт с валидными данными
            portMock.Setup(foo => foo.ReadBytesBlock(1)).Returns(new byte[] { 0xA });
            portMock.Setup(foo => foo.ReadBytesBlock(16)).Returns(new byte[] { 0, 0, 0, 0, 0, 0, 52, 64, 0, 0, 0, 0, 0, 192, 82, 192 });
            target.AccelDataReceived += (sender, args) => syncEvent.Set();
            target.StartListen(); // снова запускаем

            if (!syncEvent.WaitOne(5000)) // ждем вызова обработчика
            {
                Assert.Fail("Таймаут ожидания данных");
            }

            Assert.IsTrue(target.IsListen, "поток работает");
            target.StopListen();
        }
Exemplo n.º 3
0
        public SmtpConnection(SmtpServer server, PortListener portBinding, TcpClient tcpClient)
            : base(portBinding, tcpClient)
        {
            if (server == null) throw new ArgumentNullException("server");

            Server = server;
        }
Exemplo n.º 4
0
        public void StartListen_then_StopListen_could_not_be_able_to_connect()
        {
            var testPort = GetTestPort();
            using (var portListener = new PortListener(IPAddress.Loopback, testPort))
            {
                portListener.StartListen();
                portListener.StopListen();

                var task = Task<bool>.Factory.StartNew(() =>
                {
                    using (var client = new TcpClient())
                    {
                        try
                        {
                            client.Connect(IPAddress.Loopback.ToString(), testPort);
                        }
                        catch (Exception)
                        {
                            return false;
                        }
                        return true;
                    }
                }, TaskCreationOptions.LongRunning);

                if (task.Wait(200))
                {
                    Assert.False(task.Result);
                }
            }
        }
Exemplo n.º 5
0
        public void ConstructorTest()
        {
            var portMock = new Mock<IBinaryPort>();
            var loggerStub = new LoggerStub();

            var target = new PortListener(portMock.Object, loggerStub);
            Assert.IsFalse(target.IsListen, "конструктор не запускает поток");
        }
Exemplo n.º 6
0
 public void port_listener_cannot_start_twice()
 {
     var testPort = GetTestPort();
     using (var portListener = new PortListener(IPAddress.Loopback, testPort))
     {
         portListener.StartListen();
         Assert.Throws<InvalidOperationException>(() => portListener.StartListen());
     }
 }
        public void port_listener_cannot_start_twice()
        {
            var testPort = TestHelpers.GetTestPort();

            using (var portListener = new PortListener(IPAddress.Loopback, testPort))
            {
                portListener.StartListen();
                Assert.Throws <InvalidOperationException>(() => portListener.StartListen());
            }
        }
Exemplo n.º 8
0
        private async void PortBindingClientConnected(PortListener serverPortBinding, TcpClient newConnectedTcpClient)
        {
            var connection = new SmtpConnection(this, serverPortBinding, newConnectedTcpClient);

            connection.ClientDisconnected += (sender, args) => ClientDisconnected(this, new SmtpConnectionEventArgs(args.Connection));

            Connections[connection.RemoteEndPoint] = connection;
            ClientConnected(this, new SmtpConnectionEventArgs(connection));

            await CreateSessionAndProcessCommands(connection);
        }
Exemplo n.º 9
0
        public void port_listener_is_listening_to_port()
        {
            var testPort = GetTestPort();
            using (var portListener = new PortListener(IPAddress.Loopback, testPort))
            {
                var clientConnectedRaised = new ManualResetEventSlim();
                portListener.ClientConnected += (sender, client) => clientConnectedRaised.Set();
                portListener.StartListen();

                using (var client = new TcpClient())
                {
                    client.Connect(IPAddress.Loopback.ToString(), testPort);
                    Assert.True(clientConnectedRaised.Wait(200));
                }
            }
        }
        public void port_listener_is_listening_to_port()
        {
            var testPort = GetTestPort();

            using (var portListener = new PortListener(IPAddress.Loopback, testPort))
            {
                var clientConnectedRaised = new ManualResetEventSlim();
                portListener.ClientConnected += (sender, client) => clientConnectedRaised.Set();
                portListener.StartListen();

                using (var client = new TcpClient())
                {
                    client.Connect(IPAddress.Loopback.ToString(), testPort);
                    Assert.True(clientConnectedRaised.Wait(200));
                }
            }
        }
            public void SetUp()
            {
                _event = new ManualResetEvent(false);

                var endPoint = new IPEndPoint(IPAddress.Loopback, 17000);
                _listener = new PortListener(endPoint);
                _listener.ConnectionEstablished += (sender, args) =>
                    {
                        _eventRaised = true;
                        _clientStream = args.Client.GetStream();
                        args.Client.Dispose();
                        _event.Set();
                    };

                _tcpClient = new TcpClient();
                _listener.Started += (sender, args) => _tcpClient.Connect(endPoint);
                _listener.Start();

                WaitHandle.WaitAll(new WaitHandle[] {_event});
            }
Exemplo n.º 12
0
        public void Connect(string deviceName)
        {
            var detector = new PortDetector();
            var channels = detector.GetChannels("Tera");

            _device = CaptureDeviceList.Instance.Single(d => d.Name == deviceName);
            _device.Open(DeviceMode.Promiscuous, (int)TimeSpan.FromSeconds(1).TotalMilliseconds);

            foreach (var channel in channels)
            {
                IPortListener listener = new PortListener(_device, channel.Port, channel.Protocol);
                _listeners.Add(listener);
                listener.DataCaptured += OnDataCaptured;
                listener.Connect();
            }

            _device.StartCapture();

            Connected?.Invoke();
        }
Exemplo n.º 13
0
        private async void PortBindingClientConnected(PortListener serverPortBinding, TcpClient newConnectedTcpClient)
        {
            var connection = new SmtpConnection(this, serverPortBinding, newConnectedTcpClient);

            connection.ClientDisconnected += (sender, args) => ClientDisconnected(this, new SmtpConnectionEventArgs(args.Connection));

            SmtpConnection cnn;

            connection.ClientDisconnected += (sender, args) => Connections.TryRemove(connection.RemoteEndPoint, out cnn);

            Connections[connection.RemoteEndPoint] = connection;
            ClientConnected(this, new SmtpConnectionEventArgs(connection));

            try
            {
                await CreateSessionAndProcessCommands(connection);
            } catch (Exception ex)
            {
                MailServerLogger.Instance.Error(ex);
            }
        }
Exemplo n.º 14
0
        protected override void OnStart(string[] args)
        {
            _logger = new Logger();

            try
            {
                var contentServers = new List<IPEndPoint>
                    {
                        new IPEndPoint(new IPAddress(new byte[] {127, 0, 0, 1}), 8081),
                        new IPEndPoint(new IPAddress(new byte[] {127, 0, 0, 1}), 8082)
                    };
                var endPoint = new IPEndPoint(new IPAddress(new byte[] {127, 0, 0, 1}), 80);
                var portListener = new PortListener(endPoint);

                _httpProxy = new HttpProxy(contentServers, portListener, new RequestMessageBuilder(), new ResponseStreamWriter());
                _httpProxy.Start();
            }
            catch (Exception ex)
            {
                _logger.LogException(ex);
            }
        }
Exemplo n.º 15
0
        public static void main_run()
        {
            Protokoll protokoll    = new Protokoll();
            Debuger   debuger      = new Debuger();
            string    proto_gruppe = "main";

            /* Hier werden die gesamten Thread gstartet was benötigt werden im Backend */
            Host   host    = new Host();
            NocRun noc_run = new NocRun();

            PortZuweisung portzuweisung = new PortZuweisung();

            portzuweisung.portlist();        /* Port Liste erstellen */

            /* Netzwerk Daten Bereitstellen */
            Thread netzwerkDatenHolen = new Thread(host.netzwerk_daten_holen);

            netzwerkDatenHolen.Name         = "Netzwerk_Daten_Holen"; /* Thread Namen geben */
            netzwerkDatenHolen.Priority     = ThreadPriority.Highest; /* Höchste Priorität vergeben was Thread hat */
            netzwerkDatenHolen.IsBackground = true;
            netzwerkDatenHolen.Start();
            netzwerkDatenHolen.Join();                   /* Warte bis Alle Daten gesammelt wurden vom Netzwerk  */

            int port_anzahl = PortZuweisung.liste.Count; /* Anzahl ermitteln wieviel Port es gibt */

            int th_anzahl = 0;                           /* Variable spiegelt die Anzahl der Threads wieder */

            if (Einstellung.ip_adresse == "alle")
            {                                                          /* jetzt werden alle gefundenen IP adressen genommen was im System vorhanden waren */
                th_anzahl = (Host.netzwDaten.Count + 3) * port_anzahl; /* Wieviel Thread erzeugt werden sollen ermitteln plus standart Threads die immer aktiviert werden * der Port Adressen die benötigt werden  */
            }
            else                                                       /* Es wurde eine IP Adresse über die Config Datei eingetragen */
            {
                th_anzahl = (2 + 3) * port_anzahl;                     /* Wieviel Thread erzeugt werden sollen ermitteln plus standart Threads die immer aktiviert werden * der Port Adressen die benötigt werden  */
            }
            portlistener = new PortListener[th_anzahl];
            noc_thread   = new Thread[th_anzahl];          /* Threads erstellen */


            protokoll.erstellen(debuger.block(), proto_gruppe, "Thread werden vorbereitet.", debuger.klasse(), debuger.path(), debuger.dateiName(), debuger.funktion(), debuger.zeile(), false); /* Protokoll erstellen */

            noc_thread[0]              = new Thread(noc_run.rennen);                                                                                                                             /* Thread Objekt erzeugen  aus Klasse - Standart Thread - */
            noc_thread[0].Name         = "Hauptfunktion_main_run";                                                                                                                               /* Thread Namen geben */
            noc_thread[0].Priority     = ThreadPriority.Highest;                                                                                                                                 /* Höchste Priorität vergeben was Thread hat */
            noc_thread[0].IsBackground = true;                                                                                                                                                   /* Thread läuft im Backround  deklarieren ( System räumt bei nicht beenden des Thread selber diesen auf )  */
            noc_thread[1]              = new Thread(mysqldatenimport.rennen);                                                                                                                    /* Thread Objekt erzeugen  aus Klasse - Standart Thread - */
            noc_thread[1].Name         = "CFY_zu_Mysql_Datenimport";                                                                                                                             /* Thread Namen geben */
            noc_thread[1].Priority     = ThreadPriority.BelowNormal;                                                                                                                             /* eine stufe unter Normale Priorität vergeben was Thread hat */
            noc_thread[1].IsBackground = true;                                                                                                                                                   /* Thread läuft im Backround  deklarieren ( System räumt bei nicht beenden des Thread selber diesen auf )  */
            noc_thread[2]              = new Thread(protokoll.rennen);                                                                                                                           /* Thread Objekt erzeugen  aus Klasse - Standart Thread - */
            noc_thread[2].Name         = "Protokoll_in_Daten_Schreiben";                                                                                                                         /* Thread Namen geben */
            noc_thread[2].Priority     = ThreadPriority.Highest;                                                                                                                                 /* Höchste Priorität vergeben was Thread hat */
            noc_thread[2].IsBackground = true;                                                                                                                                                   /* Thread läuft im Backround  deklarieren ( System räumt bei nicht beenden des Thread selber diesen auf )  */

            int    port_i      = 0;
            int    pos         = 3;
            string thread_name = string.Empty;

            /* Port Schleife */
            Thread.Sleep(1000);
            foreach (PortZuweisung.Port_List port_liste in PortZuweisung.liste)
            {
                if (Einstellung.ip_adresse == "alle")
                {    /* Alle gefundene IP Adressen vom System nehmen */
                    /* Aktive Verbindungen lauschen lassen  - Start - */
                    foreach (Host.Neztwerk_List netz in Host.netzwDaten)
                    {
                        if (netz.aktiv_ip == "ja")
                        {
                            protokoll.erstellen(debuger.block(), proto_gruppe, "TCP Vorbereitung für " + netz.ip_adresse + ":" + port_liste.port + " zum Lauschen.", debuger.klasse(), debuger.path(), debuger.dateiName(), debuger.funktion(), debuger.zeile(), false); /* Protokoll erstellen */
                            thread_name          = "PortListener_" + netz.ip_adresse + ":" + port_liste.port;                                                                                                                                                            /* Thread Namen zuweisen */
                            portlistener[port_i] = new PortListener();
                            portlistener[port_i].ipport(netz.ip_adresse, port_liste.port, port_liste.bezeichnung, port_liste.max_verbindung, thread_name);
                            noc_thread[pos]              = new Thread(portlistener[port_i].rennen);
                            noc_thread[pos].Name         = thread_name;
                            noc_thread[pos].Priority     = ThreadPriority.AboveNormal; /* eine Stufe unter Höchste Priorität vergeben was Thread hat */
                            noc_thread[pos].IsBackground = true;                       /* Thread läuft im Backround  deklarieren ( System räumt bei nicht beenden des Thread selber diesen auf )  */
                            pos++;
                            port_i++;
                        }
                        else
                        {
                        }
                    }
                    /* Aktive Verbindungen lauschen lassen  - Ende - */
                }
                else
                {
                    thread_name          = "PortListener_" + Einstellung.ip_adresse + ":" + port_liste.port;        /* Thread Namen zuweisen */
                    portlistener[port_i] = new PortListener();
                    portlistener[port_i].ipport(Einstellung.ip_adresse, port_liste.port, port_liste.bezeichnung, port_liste.max_verbindung, thread_name);
                    noc_thread[pos]              = new Thread(portlistener[port_i].rennen);
                    noc_thread[pos].Name         = thread_name;
                    noc_thread[pos].Priority     = ThreadPriority.AboveNormal; /* eine Stufe unter Höchste Priorität vergeben was Thread hat */
                    noc_thread[pos].IsBackground = true;                       /* Thread läuft im Backround  deklarieren ( System räumt bei nicht beenden des Thread selber diesen auf )  */
                    pos++;
                    port_i++;
                }
            }


            protokoll.erstellen(debuger.block(), proto_gruppe, "Thread werden jetzt alle gestartet. Anzahl: " + pos, debuger.klasse(), debuger.path(), debuger.dateiName(), debuger.funktion(), debuger.zeile(), false);                   /* Protokoll erstellen */

            for (int i = 0; i < pos; i++)
            {
                noc_thread[i].Start();         /* Alle Thread starten */
            }

            protokoll.erstellen(debuger.block(), proto_gruppe, "Thread werden alle jetzt Überwacht bis diese Beendet werden. ( Join() )", debuger.klasse(), debuger.path(), debuger.dateiName(), debuger.funktion(), debuger.zeile(), false); /* Protokoll erstellen */

            Thread.Sleep(2000);                                                                                                                                                                                                               /* 2 Secunden Warden bis Überwachung erneut gestartet wird */

            for (int i = 0; i < pos; i++)
            {
                if (noc_thread[i].IsAlive == false)
                {                                                                                                                                                                                                                        /* Fehlerhafte Thread finden und Protokolieren und Info ausgeben */
                    Console.BackgroundColor = ConsoleColor.Magenta;                                                                                                                                                                      /* Hintergrund Farbe zuweisen */
                    Console.ForegroundColor = ConsoleColor.Black;                                                                                                                                                                        /* Text Frabe zuweisen */
                    Console.WriteLine("\n\n Thread wure unerwartet Beendet. Name: " + noc_thread[i].Name + "\n");
                    Console.ResetColor();                                                                                                                                                                                                /* auf Standart Farbzuweisung gehen zurückgehen */
                    protokoll.erstellen(debuger.block(), proto_gruppe, "Thread wure unerwartet Beendet. Name: " + noc_thread[i].Name, debuger.klasse(), debuger.path(), debuger.dateiName(), debuger.funktion(), debuger.zeile(), true); /* Protokoll erstellen */
                }
                else
                {
                }
            }

            for (int i = 0; i < pos; i++)
            {
                if (noc_thread[i].IsAlive)
                {                         /* Nur Aktive überwachen wo alles OK war */
                    noc_thread[i].Join(); /* Prüft ob Thread beendet wurden wenn nicht Wartet System bis Threads ALLE beendet wurden  */
                }
                else
                {
                }
            }
        }
Exemplo n.º 16
0
        public void UnexpectedExceptionTest()
        {
            var portMock = new Mock<IBinaryPort>();
            // выбрасываем неожидаемое потоком исключение
            portMock.Setup(foo => foo.ReadBytesBlock(1)).Throws<NullReferenceException>();
            var loggerStub = new LoggerStub();

            var target = new PortListener(portMock.Object, loggerStub);
            var syncEvent = new AutoResetEvent(false);
            Exception actual = null;
            target.ExceptionCought += (sender, e) =>
                                          {
                                              actual = e.Ex;
                                              syncEvent.Set();
                                          };

            target.StartListen();
            if (!syncEvent.WaitOne(5000))
            {
                Assert.Fail("Таймаут ожидания исключения");
            }

            Assert.IsFalse(target.IsListen, "поток остановлен");
            Assert.IsNotNull(actual as NullReferenceException, "передано правильно исключение");
            target.StopListen();
        }
Exemplo n.º 17
0
        public void TimeoutTest()
        {
            var portMock = new Mock<IBinaryPort>();
            // выбрасываем исключение ожидаемое потоком
            portMock.Setup(foo => foo.ReadBytesBlock(1)).Throws<TimeoutException>();
            var silentLogger = new Mock<ILogger>();

            var target = new PortListener(portMock.Object, silentLogger.Object);
            target.StartListen();

            Assert.IsTrue(target.IsListen, "поток не был остановлен");
            target.StopListen();
        }
Exemplo n.º 18
0
        public void StopListenTest()
        {
            var portMock = new Mock<IBinaryPort>();
            portMock.Setup(foo => foo.ReadBytesBlock(1)).Returns(new byte[] {0xA}); // возвращаем сигнатуру
            portMock.Setup(foo => foo.ReadBytesBlock(16)).Returns(new byte[]
                                                                      {
                                                                          0, 0, 0, 0, 0, 0, 52, 64, 0, 0, 0, 0, 0, 192, 82,
                                                                          192
                                                                      }); // возвращаем тело пакета
            var loggerStub = new LoggerStub();

            var target = new PortListener(portMock.Object, loggerStub);
            target.StartListen();
            target.StopListen();
            Assert.IsFalse(target.IsListen, "поток остановлен");
        }
Exemplo n.º 19
0
        private async void PortBindingClientConnected(PortListener serverPortBinding, TcpClient newConnectedTcpClient)
        {
            var connection = new SmtpConnection(this, serverPortBinding, newConnectedTcpClient);
            connection.ClientDisconnected += (sender, args) => ClientDisconnected(this, new SmtpConnectionEventArgs(args.Connection));

            Connections[connection.RemoteEndPoint] = connection;
            ClientConnected(this, new SmtpConnectionEventArgs(connection));

            await CreateSessionAndProcessCommands(connection);
        }
Exemplo n.º 20
0
        private async void PortBindingClientConnected(PortListener serverPortBinding, TcpClient newConnectedTcpClient)
        {
            var connection = new SmtpConnection(this, serverPortBinding, newConnectedTcpClient);
            connection.ClientDisconnected += (sender, args) => ClientDisconnected(this, new SmtpConnectionEventArgs(args.Connection));

            SmtpConnection cnn;
            connection.ClientDisconnected += (sender, args) => Connections.TryRemove(connection.RemoteEndPoint, out cnn);

            Connections[connection.RemoteEndPoint] = connection;
            ClientConnected(this, new SmtpConnectionEventArgs(connection));

            try
            {
                await CreateSessionAndProcessCommands(connection);
            } catch(Exception ex)
            {
                MailServerLogger.Instance.Error(ex);
            }
        }
Exemplo n.º 21
0
 private PortListener CreateNewPortBindingAndStartListen(IPAddress serverListenAddress, int serverPort)
 {
     var portBinding = new PortListener(serverListenAddress ?? IPAddress.Any, serverPort);
     portBinding.ClientConnected += PortBindingClientConnected;
     portBinding.StartListen();
     MailServerLogger.Instance.Info(String.Format("Started listening to {0}:{1}", serverListenAddress, serverPort));
     return portBinding;
 }
Exemplo n.º 22
0
 public static void OnListenerEnded(PortListener listener)
 {
     ListenerEnded?.Invoke(listener, EventArgs.Empty);
 }