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); // проверяем правильность разбора пакета }
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(); }
public SmtpConnection(SmtpServer server, PortListener portBinding, TcpClient tcpClient) : base(portBinding, tcpClient) { if (server == null) throw new ArgumentNullException("server"); Server = server; }
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); } } }
public void ConstructorTest() { var portMock = new Mock<IBinaryPort>(); var loggerStub = new LoggerStub(); var target = new PortListener(portMock.Object, loggerStub); Assert.IsFalse(target.IsListen, "конструктор не запускает поток"); }
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()); } }
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); }
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}); }
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(); }
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); } }
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); } }
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 { } } }
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(); }
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(); }
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, "поток остановлен"); }
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); }
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); } }
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; }
public static void OnListenerEnded(PortListener listener) { ListenerEnded?.Invoke(listener, EventArgs.Empty); }