From b3203cf96122a2887401abcecadee36c6b006b29 Mon Sep 17 00:00:00 2001 From: Joshua Gutenplan Date: Mon, 18 Feb 2019 15:49:45 -0800 Subject: [PATCH 1/3] updated the secure and non secure servers and added clients that are meant to be used with our server classes. The clients add the shared key and other stability features when we manage the server. --- .../Pepperdash Core/Comm/EventArgs.cs | 74 +- .../Comm/GenericSecureTcpIpClient.cs | 371 -------- .../GenericSecureTcpIpClient_ForServer.cs | 739 ++++++++++++++++ .../Comm/GenericSecureTcpIpServer.cs | 823 +++++++++++++---- .../Comm/GenericTcpIpClient_ForServer.cs | 739 ++++++++++++++++ .../Comm/GenericTcpIpServer.cs | 827 ++++++++++++++---- .../Comm/TcpServerConfigObject.cs | 22 + .../Pepperdash Core/PepperDash_Core.csproj | 4 +- .../Properties/AssemblyInfo.cs | 2 +- 9 files changed, 2858 insertions(+), 743 deletions(-) delete mode 100644 Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpClient.cs create mode 100644 Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpClient_ForServer.cs create mode 100644 Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpClient_ForServer.cs create mode 100644 Pepperdash Core/Pepperdash Core/Comm/TcpServerConfigObject.cs diff --git a/Pepperdash Core/Pepperdash Core/Comm/EventArgs.cs b/Pepperdash Core/Pepperdash Core/Comm/EventArgs.cs index 3732e0d..ed43c62 100644 --- a/Pepperdash Core/Pepperdash Core/Comm/EventArgs.cs +++ b/Pepperdash Core/Pepperdash Core/Comm/EventArgs.cs @@ -18,9 +18,7 @@ using Crestron.SimplSharp.CrestronSockets; namespace PepperDash.Core { - #region GenericSocketStatusChangeEventArgs public delegate void GenericSocketStatusChangeEventDelegate(ISocketStatus client); - public class GenericSocketStatusChageEventArgs : EventArgs { public ISocketStatus Client { get; private set; } @@ -32,44 +30,68 @@ namespace PepperDash.Core Client = client; } } - #endregion - #region DynamicTCPServerStateChangedEventArgs - public delegate void DynamicTCPServerStateChangedEventDelegate(object server); - - public class DynamicTCPServerStateChangedEventArgs : EventArgs + public delegate void GenericTcpServerStateChangedEventDelegate(ServerState state); + public class GenericTcpServerStateChangedEventArgs : EventArgs { - public bool Secure { get; private set; } - public object Server { get; private set; } + public ServerState State { get; private set; } - public DynamicTCPServerStateChangedEventArgs() { } + public GenericTcpServerStateChangedEventArgs() { } - public DynamicTCPServerStateChangedEventArgs(object server, bool secure) + public GenericTcpServerStateChangedEventArgs(ServerState state) { - Secure = secure; - Server = server; + State = state; } } - #endregion - #region DynamicTCPSocketStatusChangeEventDelegate - public delegate void DynamicTCPSocketStatusChangeEventDelegate(object server); - - public class DynamicTCPSocketStatusChangeEventArgs : EventArgs + public delegate void GenericTcpServerSocketStatusChangeEventDelegate(object socket, uint clientIndex, SocketStatus clientStatus); + public class GenericTcpServerSocketStatusChangeEventArgs : EventArgs { - public bool Secure { get; private set; } - public object Server { get; private set; } + public object Socket { get; private set; } + public uint ReceivedFromClientIndex { get; private set; } + public SocketStatus ClientStatus { get; set; } + + public GenericTcpServerSocketStatusChangeEventArgs() { } - public DynamicTCPSocketStatusChangeEventArgs() { } - - public DynamicTCPSocketStatusChangeEventArgs(object server, bool secure) + public GenericTcpServerSocketStatusChangeEventArgs(object socket, SocketStatus clientStatus) { - Secure = secure; - Server = server; + Socket = socket; + ClientStatus = clientStatus; + } + + public GenericTcpServerSocketStatusChangeEventArgs(object socket, uint clientIndex, SocketStatus clientStatus) + { + Socket = socket; + ReceivedFromClientIndex = clientIndex; + ClientStatus = clientStatus; } } - #endregion + public class GenericTcpServerCommMethodReceiveTextArgs : EventArgs + { + public uint ReceivedFromClientIndex { get; private set; } + public string Text { get; private set; } + + public GenericTcpServerCommMethodReceiveTextArgs(string text) + { + Text = text; + } + + public GenericTcpServerCommMethodReceiveTextArgs(string text, uint clientIndex) + { + Text = text; + ReceivedFromClientIndex = clientIndex; + } + } + + public class GenericTcpServerClientReadyForcommunicationsEventArgs : EventArgs + { + public bool IsReady; + public GenericTcpServerClientReadyForcommunicationsEventArgs(bool isReady) + { + IsReady = isReady; + } + } diff --git a/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpClient.cs b/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpClient.cs deleted file mode 100644 index 82305ad..0000000 --- a/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpClient.cs +++ /dev/null @@ -1,371 +0,0 @@ -/*PepperDash Technology Corp. -JAG -Copyright: 2017 ------------------------------------- -***Notice of Ownership and Copyright*** -The material in which this notice appears is the property of PepperDash Technology Corporation, -which claims copyright under the laws of the United States of America in the entire body of material -and in all parts thereof, regardless of the use to which it is being put. Any use, in whole or in part, -of this material by another party without the express written permission of PepperDash Technology Corporation is prohibited. -PepperDash Technology Corporation reserves all rights under applicable laws. ------------------------------------- */ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using Crestron.SimplSharp; -using Crestron.SimplSharp.CrestronSockets; - -namespace PepperDash.Core -{ - public class GenericSecureTcpIpClient : Device, ISocketStatus, IAutoReconnect - { - #region Events - - public event EventHandler BytesReceived; - - public event EventHandler TextReceived; - - public event EventHandler ConnectionChange; - - #endregion - - #region Properties & Variables - /// - /// Address of server - /// - public string Hostname { get; set; } - - /// - /// Port on server - /// - public int Port { get; set; } - - /// - /// S+ helper - /// - public ushort UPort - { - get { return Convert.ToUInt16(Port); } - set { Port = Convert.ToInt32(value); } - } - - /// - /// Bool to show whether the server requires a preshared key. This is used in the DynamicTCPServer class - /// - public bool SharedKeyRequired { get; set; } - - /// - /// S+ helper for requires shared key bool - /// - public ushort USharedKeyRequired - { - set - { - if (value == 1) - SharedKeyRequired = true; - else - SharedKeyRequired = false; - } - } - - /// - /// SharedKey is sent for varification to the server. Shared key can be any text (255 char limit in SIMPL+ Module), but must match the Shared Key on the Server module - /// - public string SharedKey { get; set; } - - /// - /// flag to show the client is waiting for the server to send the shared key - /// - private bool WaitingForSharedKeyResponse { get; set; } - - /// - /// Defaults to 2000 - /// - public int BufferSize { get; set; } - - /// - /// Bool showing if socket is connected - /// - public bool IsConnected - { - get - { - return (Client != null) && (Client.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED); - } - } - - /// - /// S+ helper for IsConnected - /// - public ushort UIsConnected - { - get { return (ushort)(IsConnected ? 1 : 0); } - } - - /// - /// Client socket status Read only - /// - public SocketStatus ClientStatus - { - get - { - if (Client == null) - return SocketStatus.SOCKET_STATUS_NO_CONNECT; - return Client.ClientStatus; - } - } - - /// - /// Contains the familiar Simpl analog status values. This drives the ConnectionChange event - /// and IsConnected would be true when this == 2. - /// - public ushort UStatus - { - get { return (ushort)ClientStatus; } - } - - /// - /// Status text shows the message associated with socket status - /// - public string ClientStatusText { get { return ClientStatus.ToString(); } } - - /// - /// bool to track if auto reconnect should be set on the socket - /// - public bool AutoReconnect { get; set; } - - /// - /// S+ helper for AutoReconnect - /// - public ushort UAutoReconnect - { - get { return (ushort)(AutoReconnect ? 1 : 0); } - set { AutoReconnect = value == 1; } - } - /// - /// Milliseconds to wait before attempting to reconnect. Defaults to 5000 - /// - public int AutoReconnectIntervalMs { get; set; } - - /// - /// Flag Set only when the disconnect method is called. - /// - bool DisconnectCalledByUser; - - /// - /// Connected bool - /// - public bool Connected - { - get { return (Client != null) && (Client.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED); } - } - - CTimer RetryTimer; //private Timer for auto reconnect - - SecureTCPClient Client; //Secure Client Class - - #endregion - - #region Constructors - - //Base class constructor - public GenericSecureTcpIpClient(string key, string address, int port, int bufferSize) - : base(key) - { - Hostname = address; - Port = port; - BufferSize = bufferSize; - AutoReconnectIntervalMs = 5000; - } - - //base class constructor - public GenericSecureTcpIpClient() - : base("Uninitialized DynamicTcpClient") - { - CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); - AutoReconnectIntervalMs = 5000; - BufferSize = 2000; - } - #endregion - - #region Methods - /// - /// Just to help S+ set the key - /// - public void Initialize(string key) - { - Key = key; - } - - /// - /// Handles closing this up when the program shuts down - /// - void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType) - { - if (programEventType == eProgramStatusEventType.Stopping) - { - if (Client != null) - { - Debug.Console(1, this, "Program stopping. Closing connection"); - Client.DisconnectFromServer(); - Client.Dispose(); - } - } - } - - /// - /// Connect Method. Will return if already connected. Will write errors if missing address, port, or unique key/name. - /// - public void Connect() - { - if (IsConnected) - return; - - if (string.IsNullOrEmpty(Hostname)) - { - Debug.Console(1, Debug.ErrorLogLevel.Warning, "DynamicTcpClient '{0}': No address set", Key); - ErrorLog.Warn(string.Format("DynamicTcpClient '{0}': No address set", Key)); - return; - } - if (Port < 1 || Port > 65535) - { - Debug.Console(1, Debug.ErrorLogLevel.Warning, "DynamicTcpClient '{0}': Invalid port", Key); - ErrorLog.Warn(string.Format("DynamicTcpClient '{0}': Invalid port", Key)); - return; - } - if (string.IsNullOrEmpty(SharedKey) && SharedKeyRequired) - { - Debug.Console(1, Debug.ErrorLogLevel.Warning, "DynamicTcpClient '{0}': No Shared Key set", Key); - ErrorLog.Warn(string.Format("DynamicTcpClient '{0}': No Shared Key set", Key)); - return; - } - Client = new SecureTCPClient(Hostname, Port, BufferSize); - Client.SocketStatusChange += SecureClient_SocketStatusChange; - DisconnectCalledByUser = false; - if (SharedKeyRequired) - WaitingForSharedKeyResponse = true; - Client.ConnectToServer(); - } - - /// - /// Disconnect client. Does not dispose. - /// - public void Disconnect() - { - DisconnectCalledByUser = true; - if(Client != null) - Client.DisconnectFromServer(); - } - - /// - /// callback after connection made - /// - /// - void ConnectToServerCallback(object o) - { - Client.ConnectToServer(); - if (Client.ClientStatus != SocketStatus.SOCKET_STATUS_CONNECTED) - WaitAndTryReconnect(); - } - - /// - /// Called from Socket Status change if auto reconnect and socket disconnected (Not disconnected by user) - /// - void WaitAndTryReconnect() - { - Client.DisconnectFromServer(); - Debug.Console(2, "Attempting reconnect, status={0}", Client.ClientStatus); - - if (!DisconnectCalledByUser) - RetryTimer = new CTimer(ConnectToServerCallback, AutoReconnectIntervalMs); - } - - /// - /// Receive callback - /// - /// - /// - void SecureReceive(SecureTCPClient client, int numBytes) - { - if (numBytes > 0) - { - var bytes = client.IncomingDataBuffer.Take(numBytes).ToArray(); - var str = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length); - if (WaitingForSharedKeyResponse && SharedKeyRequired) - { - if (str != (SharedKey + "\n")) - { - WaitingForSharedKeyResponse = false; - client.DisconnectFromServer(); - CrestronConsole.PrintLine("Client {0} was disconnected from server because the server did not respond with a matching shared key after connection", Key); - ErrorLog.Error("Client {0} was disconnected from server because the server did not respond with a matching shared key after connection", Key); - return; - } - else - { - WaitingForSharedKeyResponse = false; - CrestronConsole.PrintLine("Client {0} successfully connected to the server and received the Shared Key. Ready for communication", Key); - } - } - else - { - var bytesHandler = BytesReceived; - if (bytesHandler != null) - bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes)); - var textHandler = TextReceived; - if (textHandler != null) - { - - textHandler(this, new GenericCommMethodReceiveTextArgs(str)); - } - } - } - client.ReceiveDataAsync(SecureReceive); - } - - /// - /// General send method - /// - public void SendText(string text) - { - var bytes = Encoding.GetEncoding(28591).GetBytes(text); - Client.SendData(bytes, bytes.Length); - } - - public void SendBytes(byte[] bytes) - { - Client.SendData(bytes, bytes.Length); - } - - /// - /// SocketStatusChange Callback - /// - /// - /// - void SecureClient_SocketStatusChange(SecureTCPClient client, SocketStatus clientSocketStatus) - { - Debug.Console(2, this, "Socket status change {0} ({1})", clientSocketStatus, ClientStatusText); - if (client.ClientStatus != SocketStatus.SOCKET_STATUS_CONNECTED && !DisconnectCalledByUser && AutoReconnect) - WaitAndTryReconnect(); - - // Probably doesn't need to be a switch since all other cases were eliminated - switch (clientSocketStatus) - { - case SocketStatus.SOCKET_STATUS_CONNECTED: - client.ReceiveDataAsync(SecureReceive); - if(SharedKeyRequired) - SendText(SharedKey + "\n"); - DisconnectCalledByUser = false; - break; - } - - var handler = ConnectionChange; - if (handler != null) - ConnectionChange(this, new GenericSocketStatusChageEventArgs(this)); - } - #endregion - } -} \ No newline at end of file diff --git a/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpClient_ForServer.cs b/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpClient_ForServer.cs new file mode 100644 index 0000000..13e1c66 --- /dev/null +++ b/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpClient_ForServer.cs @@ -0,0 +1,739 @@ +/*PepperDash Technology Corp. +JAG +Copyright: 2017 +------------------------------------ +***Notice of Ownership and Copyright*** +The material in which this notice appears is the property of PepperDash Technology Corporation, +which claims copyright under the laws of the United States of America in the entire body of material +and in all parts thereof, regardless of the use to which it is being put. Any use, in whole or in part, +of this material by another party without the express written permission of PepperDash Technology Corporation is prohibited. +PepperDash Technology Corporation reserves all rights under applicable laws. +------------------------------------ */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronSockets; + +namespace PepperDash.Core +{ + public class GenericSecureTcpIpClient_ForServer : Device, IAutoReconnect + { + /// + /// Band aid delegate for choked server + /// + internal delegate void ConnectionHasHungCallbackDelegate(); + + #region Events + + //public event EventHandler BytesReceived; + + public event EventHandler TextReceived; + + public event EventHandler ConnectionChange; + + + /// + /// This is something of a band-aid callback. If the client times out during the connection process, because the server + /// is stuck, this will fire. It is intended to be used by the Server class monitor client, to help + /// keep a watch on the server and reset it if necessary. + /// + internal ConnectionHasHungCallbackDelegate ConnectionHasHungCallback; + + /// + /// For a client with a pre shared key, this will fire after the communication is established and the key exchange is complete. If you require + /// a key and subscribe to the socket change event and try to send data on a connection the data sent will interfere with the key exchange and disconnect. + /// + public event EventHandler ClientReadyForCommunications; + + #endregion + + #region Properties & Variables + + /// + /// Address of server + /// + public string Hostname { get; set; } + + /// + /// Port on server + /// + public int Port { get; set; } + + /// + /// S+ helper + /// + public ushort UPort + { + get { return Convert.ToUInt16(Port); } + set { Port = Convert.ToInt32(value); } + } + + /// + /// Bool to show whether the server requires a preshared key. This is used in the DynamicTCPServer class + /// + public bool SharedKeyRequired { get; set; } + + /// + /// S+ helper for requires shared key bool + /// + public ushort USharedKeyRequired + { + set + { + if (value == 1) + SharedKeyRequired = true; + else + SharedKeyRequired = false; + } + } + + /// + /// SharedKey is sent for varification to the server. Shared key can be any text (255 char limit in SIMPL+ Module), but must match the Shared Key on the Server module + /// + public string SharedKey { get; set; } + + /// + /// flag to show the client is waiting for the server to send the shared key + /// + private bool WaitingForSharedKeyResponse { get; set; } + + /// + /// Defaults to 2000 + /// + public int BufferSize { get; set; } + + /// + /// Semaphore on connect method + /// + bool IsTryingToConnect; + + /// + /// Bool showing if socket is connected + /// + public bool IsConnected + { + get + { + if (Client != null) + return Client.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED; + else + return false; + } + } + + /// + /// S+ helper for IsConnected + /// + public ushort UIsConnected + { + get { return (ushort)(IsConnected ? 1 : 0); } + } + + /// + /// Bool showing if socket is ready for communication after shared key exchange + /// + public bool IsReadyForCommunication { get; set; } + + /// + /// S+ helper for IsReadyForCommunication + /// + public ushort UIsReadyForCommunication + { + get { return (ushort)(IsReadyForCommunication ? 1 : 0); } + } + + /// + /// Client socket status Read only + /// + public SocketStatus ClientStatus + { + get + { + if (Client != null) + return Client.ClientStatus; + else + return SocketStatus.SOCKET_STATUS_NO_CONNECT; + } + } + + /// + /// Contains the familiar Simpl analog status values. This drives the ConnectionChange event + /// and IsConnected would be true when this == 2. + /// + public ushort UStatus + { + get { return (ushort)ClientStatus; } + } + + /// + /// Status text shows the message associated with socket status + /// + public string ClientStatusText { get { return ClientStatus.ToString(); } } + + /// + /// bool to track if auto reconnect should be set on the socket + /// + public bool AutoReconnect { get; set; } + + /// + /// S+ helper for AutoReconnect + /// + public ushort UAutoReconnect + { + get { return (ushort)(AutoReconnect ? 1 : 0); } + set { AutoReconnect = value == 1; } + } + /// + /// Milliseconds to wait before attempting to reconnect. Defaults to 5000 + /// + public int AutoReconnectIntervalMs { get; set; } + + /// + /// Flag Set only when the disconnect method is called. + /// + bool DisconnectCalledByUser; + + /// + /// private Timer for auto reconnect + /// + CTimer RetryTimer; + + + public bool HeartbeatEnabled { get; set; } + public ushort UHeartbeatEnabled + { + get { return (ushort)(HeartbeatEnabled ? 1 : 0); } + set { HeartbeatEnabled = value == 1; } + } + public string HeartbeatString = "heartbeat"; + public int HeartbeatInterval = 50000; + CTimer HeartbeatSendTimer; + CTimer HeartbeatAckTimer; + /// + /// Used to force disconnection on a dead connect attempt + /// + CTimer ConnectFailTimer; + CTimer WaitForSharedKey; + private int ConnectionCount; + /// + /// Internal secure client + /// + SecureTCPClient Client; + + bool ProgramIsStopping; + + #endregion + + #region Constructors + + //Base class constructor + public GenericSecureTcpIpClient_ForServer(string key, string address, int port, int bufferSize) + : base(key) + { + CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); + Hostname = address; + Port = port; + BufferSize = bufferSize; + AutoReconnectIntervalMs = 5000; + + } + + //base class constructor + public GenericSecureTcpIpClient_ForServer() + : base("Uninitialized DynamicTcpClient") + { + CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); + AutoReconnectIntervalMs = 5000; + BufferSize = 2000; + } + #endregion + + #region Methods + + /// + /// Just to help S+ set the key + /// + public void Initialize(string key) + { + Key = key; + } + + /// + /// Handles closing this up when the program shuts down + /// + void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType) + { + if (programEventType == eProgramStatusEventType.Stopping || programEventType == eProgramStatusEventType.Paused) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Program stopping. Closing Client connection"); + ProgramIsStopping = true; + Disconnect(); + } + + } + + /// + /// Connect Method. Will return if already connected. Will write errors if missing address, port, or unique key/name. + /// + public void Connect() + { + ConnectionCount++; + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Attempting connect Count:{0}", ConnectionCount); + + + if (IsConnected) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Already connected. Ignoring."); + return; + } + if (IsTryingToConnect) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Already trying to connect. Ignoring."); + return; + } + try + { + IsTryingToConnect = true; + if (RetryTimer != null) + { + RetryTimer.Stop(); + RetryTimer = null; + } + if (string.IsNullOrEmpty(Hostname)) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Warning, "DynamicTcpClient: No address set"); + return; + } + if (Port < 1 || Port > 65535) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Warning, "DynamicTcpClient: Invalid port"); + return; + } + if (string.IsNullOrEmpty(SharedKey) && SharedKeyRequired) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Warning, "DynamicTcpClient: No Shared Key set"); + return; + } + + // clean up previous client + if (Client != null) + { + Cleanup(); + } + DisconnectCalledByUser = false; + + Client = new SecureTCPClient(Hostname, Port, BufferSize); + Client.SocketStatusChange += Client_SocketStatusChange; + Client.SocketSendOrReceiveTimeOutInMs = (HeartbeatInterval * 5); + Client.AddressClientConnectedTo = Hostname; + Client.PortNumber = Port; + // SecureClient = c; + + //var timeOfConnect = DateTime.Now.ToString("HH:mm:ss.fff"); + + ConnectFailTimer = new CTimer(o => + { + Debug.Console(1, this, Debug.ErrorLogLevel.Error, "Connect attempt has not finished after 30sec Count:{0}", ConnectionCount); + if (IsTryingToConnect) + { + IsTryingToConnect = false; + + //if (ConnectionHasHungCallback != null) + //{ + // ConnectionHasHungCallback(); + //} + //SecureClient.DisconnectFromServer(); + //CheckClosedAndTryReconnect(); + } + }, 30000); + + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Making Connection Count:{0}", ConnectionCount); + Client.ConnectToServerAsync(o => + { + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "ConnectToServerAsync Count:{0} Ran!", ConnectionCount); + + if (ConnectFailTimer != null) + { + ConnectFailTimer.Stop(); + } + IsTryingToConnect = false; + + if (o.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED) + { + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Client connected to {0} on port {1}", o.AddressClientConnectedTo, o.LocalPortNumberOfClient); + o.ReceiveDataAsync(Receive); + + if (SharedKeyRequired) + { + WaitingForSharedKeyResponse = true; + WaitForSharedKey = new CTimer(timer => + { + + Debug.Console(1, this, Debug.ErrorLogLevel.Warning, "Shared key exchange timer expired. IsReadyForCommunication={0}", IsReadyForCommunication); + // Debug.Console(1, this, "Connect attempt failed {0}", c.ClientStatus); + // This is the only case where we should call DisconectFromServer...Event handeler will trigger the cleanup + o.DisconnectFromServer(); + //CheckClosedAndTryReconnect(); + //OnClientReadyForcommunications(false); // Should send false event + }, 15000); + } + } + else + { + Debug.Console(1, this, "Connect attempt failed {0}", o.ClientStatus); + CheckClosedAndTryReconnect(); + } + }); + } + catch (Exception ex) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Client connection exception: {0}", ex.Message); + IsTryingToConnect = false; + CheckClosedAndTryReconnect(); + } + } + + /// + /// + /// + public void Disconnect() + { + Debug.Console(2, "Disconnect Called"); + + DisconnectCalledByUser = true; + if (IsConnected) + { + Client.DisconnectFromServer(); + + } + if (RetryTimer != null) + { + RetryTimer.Stop(); + RetryTimer = null; + } + Cleanup(); + } + + /// + /// Internal call to close up client. ALWAYS use this when disconnecting. + /// + void Cleanup() + { + IsTryingToConnect = false; + + if (Client != null) + { + //SecureClient.DisconnectFromServer(); + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Disconnecting Client {0}", DisconnectCalledByUser ? ", Called by user" : ""); + Client.SocketStatusChange -= Client_SocketStatusChange; + Client.Dispose(); + Client = null; + } + if (ConnectFailTimer != null) + { + ConnectFailTimer.Stop(); + ConnectFailTimer.Dispose(); + ConnectFailTimer = null; + } + } + + + /// ff + /// Called from Connect failure or Socket Status change if + /// auto reconnect and socket disconnected (Not disconnected by user) + /// + void CheckClosedAndTryReconnect() + { + if (Client != null) + { + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Cleaning up remotely closed/failed connection."); + Cleanup(); + } + if (!DisconnectCalledByUser && AutoReconnect) + { + var halfInterval = AutoReconnectIntervalMs / 2; + var rndTime = new Random().Next(-halfInterval, halfInterval) + AutoReconnectIntervalMs; + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Attempting reconnect in {0} ms, randomized", rndTime); + if (RetryTimer != null) + { + RetryTimer.Stop(); + RetryTimer = null; + } + RetryTimer = new CTimer(o => Connect(), rndTime); + } + } + + /// + /// Receive callback + /// + /// + /// + void Receive(SecureTCPClient client, int numBytes) + { + if (numBytes > 0) + { + string str = string.Empty; + + try + { + var bytes = client.IncomingDataBuffer.Take(numBytes).ToArray(); + str = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length); + Debug.Console(2, this, "Client Received:\r--------\r{0}\r--------", str); + if (!string.IsNullOrEmpty(checkHeartbeat(str))) + { + + if (SharedKeyRequired && str == "SharedKey:") + { + Debug.Console(1, this, "Server asking for shared key, sending"); + SendText(SharedKey + "\n"); + } + else if (SharedKeyRequired && str == "Shared Key Match") + { + StopWaitForSharedKeyTimer(); + + + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Shared key confirmed. Ready for communication"); + OnClientReadyForcommunications(true); // Successful key exchange + } + else if (SharedKeyRequired == false && IsReadyForCommunication == false) + { + OnClientReadyForcommunications(true); // Key not required + } + + else + { + + //var bytesHandler = BytesReceived; + //if (bytesHandler != null) + // bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes)); + var textHandler = TextReceived; + if (textHandler != null) + textHandler(this, new GenericTcpServerCommMethodReceiveTextArgs(str)); + } + } + } + catch (Exception ex) + { + Debug.Console(1, this, "Error receiving data: {1}. Error: {0}", ex.Message, str); + } + } + if (client.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED) + client.ReceiveDataAsync(Receive); + } + + void HeartbeatStart() + { + if (HeartbeatEnabled) + { + Debug.Console(2, this, Debug.ErrorLogLevel.Notice, "Starting Heartbeat"); + if (HeartbeatSendTimer == null) + { + + HeartbeatSendTimer = new CTimer(this.SendHeartbeat, null, HeartbeatInterval, HeartbeatInterval); + } + if (HeartbeatAckTimer == null) + { + HeartbeatAckTimer = new CTimer(HeartbeatAckTimerFail, null, (HeartbeatInterval * 2), (HeartbeatInterval * 2)); + } + } + + } + void HeartbeatStop() + { + + if (HeartbeatSendTimer != null) + { + Debug.Console(2, this, Debug.ErrorLogLevel.Notice, "Stoping Heartbeat Send"); + HeartbeatSendTimer.Stop(); + HeartbeatSendTimer = null; + } + if (HeartbeatAckTimer != null) + { + Debug.Console(2, this, Debug.ErrorLogLevel.Notice, "Stoping Heartbeat Ack"); + HeartbeatAckTimer.Stop(); + HeartbeatAckTimer = null; + } + + } + void SendHeartbeat(object notused) + { + this.SendText(HeartbeatString); + Debug.Console(2, this, "Sending Heartbeat"); + + } + + //private method to check heartbeat requirements and start or reset timer + string checkHeartbeat(string received) + { + try + { + if (HeartbeatEnabled) + { + if (!string.IsNullOrEmpty(HeartbeatString)) + { + var remainingText = received.Replace(HeartbeatString, ""); + var noDelimiter = received.Trim(new char[] { '\r', '\n' }); + if (noDelimiter.Contains(HeartbeatString)) + { + if (HeartbeatAckTimer != null) + { + HeartbeatAckTimer.Reset(HeartbeatInterval * 2); + } + else + { + HeartbeatAckTimer = new CTimer(HeartbeatAckTimerFail, null, (HeartbeatInterval * 2), (HeartbeatInterval * 2)); + } + Debug.Console(1, this, "Heartbeat Received: {0}, from Server", HeartbeatString); + return remainingText; + } + } + } + } + catch (Exception ex) + { + Debug.Console(1, this, "Error checking heartbeat: {0}", ex.Message); + } + return received; + } + + + + void HeartbeatAckTimerFail(object o) + { + try + { + + if (IsConnected) + { + Debug.Console(1, Debug.ErrorLogLevel.Warning, "Heartbeat not received from Server...DISCONNECTING BECAUSE HEARTBEAT REQUIRED IS TRUE"); + SendText("Heartbeat not received by server, closing connection"); + CheckClosedAndTryReconnect(); + } + + } + catch (Exception ex) + { + ErrorLog.Error("Heartbeat timeout Error on Client: {0}, {1}", Key, ex); + } + } + + /// + /// + /// + void StopWaitForSharedKeyTimer() + { + if (WaitForSharedKey != null) + { + WaitForSharedKey.Stop(); + WaitForSharedKey = null; + } + } + + /// + /// General send method + /// + public void SendText(string text) + { + if (!string.IsNullOrEmpty(text)) + { + try + { + var bytes = Encoding.GetEncoding(28591).GetBytes(text); + if (Client != null && Client.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED) + { + Client.SendDataAsync(bytes, bytes.Length, (c, n) => + { + // HOW IN THE HELL DO WE CATCH AN EXCEPTION IN SENDING????? + if (n <= 0) + { + Debug.Console(1, Debug.ErrorLogLevel.Warning, "[{0}] Sent zero bytes. Was there an error?", this.Key); + } + }); + } + } + catch (Exception ex) + { + Debug.Console(0, this, "Error sending text: {1}. Error: {0}", ex.Message, text); + } + } + } + + /// + /// + /// + public void SendBytes(byte[] bytes) + { + if (bytes.Length > 0) + { + try + { + if (Client != null && Client.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED) + Client.SendData(bytes, bytes.Length); + } + catch (Exception ex) + { + Debug.Console(0, this, "Error sending bytes. Error: {0}", ex.Message); + } + } + } + + /// + /// SocketStatusChange Callback + /// + /// + /// + void Client_SocketStatusChange(SecureTCPClient client, SocketStatus clientSocketStatus) + { + if (ProgramIsStopping) + { + ProgramIsStopping = false; + return; + } + try + { + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Socket status change: {0} ({1})", client.ClientStatus, (ushort)(client.ClientStatus)); + + OnConnectionChange(); + // The client could be null or disposed by this time... + if (Client == null || Client.ClientStatus != SocketStatus.SOCKET_STATUS_CONNECTED) + { + HeartbeatStop(); + OnClientReadyForcommunications(false); // socket has gone low + CheckClosedAndTryReconnect(); + } + } + catch (Exception ex) + { + Debug.Console(1, this, Debug.ErrorLogLevel.Error, "Error in socket status change callback. Error: {0}\r\r{1}", ex, ex.InnerException); + } + } + + /// + /// Helper for ConnectionChange event + /// + void OnConnectionChange() + { + var handler = ConnectionChange; + if (handler != null) + ConnectionChange(this, new GenericTcpServerSocketStatusChangeEventArgs(this, Client.ClientStatus)); + } + + /// + /// Helper to fire ClientReadyForCommunications event + /// + void OnClientReadyForcommunications(bool isReady) + { + IsReadyForCommunication = isReady; + if (this.IsReadyForCommunication) { HeartbeatStart(); } + var handler = ClientReadyForCommunications; + if (handler != null) + handler(this, new GenericTcpServerClientReadyForcommunicationsEventArgs(IsReadyForCommunication)); + } + #endregion + } + +} \ No newline at end of file diff --git a/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpServer.cs b/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpServer.cs index 365cbcb..58f46c8 100644 --- a/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpServer.cs +++ b/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpServer.cs @@ -15,6 +15,8 @@ using System.Linq; using System.Text; using Crestron.SimplSharp; using Crestron.SimplSharp.CrestronSockets; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; namespace PepperDash.Core { @@ -24,20 +26,61 @@ namespace PepperDash.Core /// /// Event for Receiving text /// - public event EventHandler TextReceived; + public event EventHandler TextReceived; /// /// Event for client connection socket status change /// - public event EventHandler ClientConnectionChange; + public event EventHandler ClientConnectionChange; /// /// Event for Server State Change /// - public event EventHandler ServerStateChange; + public event EventHandler ServerStateChange; + + /// + /// For a server with a pre shared key, this will fire after the communication is established and the key exchange is complete. If no shared key, this will fire + /// after connection is successful. Use this event to know when the client is ready for communication to avoid stepping on shared key. + /// + public event EventHandler ServerClientReadyForCommunications; + + /// + /// A band aid event to notify user that the server has choked. + /// + public ServerHasChokedCallbackDelegate ServerHasChoked { get; set; } + + public delegate void ServerHasChokedCallbackDelegate(); + #endregion #region Properties/Variables + + /// + /// + /// + CCriticalSection ServerCCSection = new CCriticalSection(); + + + /// + /// A bandaid client that monitors whether the server is reachable + /// + GenericSecureTcpIpClient_ForServer MonitorClient; + + /// + /// Timer to operate the bandaid monitor client in a loop. + /// + CTimer MonitorClientTimer; + + /// + /// + /// + int MonitorClientFailureCount; + + /// + /// 3 by default + /// + public int MonitorClientMaxFailureCount { get; set; } + /// /// Text representation of the Socket Status enum values for the server /// @@ -45,10 +88,10 @@ namespace PepperDash.Core { get { - if (Server != null) - return Server.State.ToString(); - else - return ServerState.SERVER_NOT_LISTENING.ToString(); + if (SecureServer != null) + return SecureServer.State.ToString(); + return ServerState.SERVER_NOT_LISTENING.ToString(); + } } @@ -58,7 +101,16 @@ namespace PepperDash.Core /// public bool IsConnected { - get { return (Server != null) && (Server.State == ServerState.SERVER_CONNECTED); } + get + { + if (SecureServer != null) + return (SecureServer.State & ServerState.SERVER_CONNECTED) == ServerState.SERVER_CONNECTED; + return false; + + //return (Secure ? SecureServer != null : UnsecureServer != null) && + //(Secure ? (SecureServer.State & ServerState.SERVER_CONNECTED) == ServerState.SERVER_CONNECTED : + // (UnsecureServer.State & ServerState.SERVER_CONNECTED) == ServerState.SERVER_CONNECTED); + } } /// @@ -74,7 +126,16 @@ namespace PepperDash.Core /// public bool IsListening { - get { return (Server != null) && (Server.State == ServerState.SERVER_LISTENING); } + get + { + if (SecureServer != null) + return (SecureServer.State & ServerState.SERVER_LISTENING) == ServerState.SERVER_LISTENING; + else + return false; + //return (Secure ? SecureServer != null : UnsecureServer != null) && + //(Secure ? (SecureServer.State & ServerState.SERVER_LISTENING) == ServerState.SERVER_LISTENING : + // (UnsecureServer.State & ServerState.SERVER_LISTENING) == ServerState.SERVER_LISTENING); + } } /// @@ -93,8 +154,8 @@ namespace PepperDash.Core { get { - if (Server != null) - return (ushort)Server.NumberOfClientsConnected; + if (SecureServer != null) + return (ushort)SecureServer.NumberOfClientsConnected; return 0; } } @@ -175,11 +236,13 @@ namespace PepperDash.Core //private timers for Heartbeats per client Dictionary HeartbeatTimerDictionary = new Dictionary(); - //flags to show the server is waiting for client at index to send the shared key + //flags to show the secure server is waiting for client at index to send the shared key List WaitingForSharedKey = new List(); + List ClientReadyAfterKeyExchange = new List(); + //Store the connected client indexes - List ConnectedClientsIndexes = new List(); + public List ConnectedClientsIndexes = new List(); /// /// Defaults to 2000 @@ -192,23 +255,72 @@ namespace PepperDash.Core private bool ServerStopped { get; set; } //Servers - SecureTCPServer Server; + SecureTCPServer SecureServer; + + /// + /// + /// + bool ProgramIsStopping; #endregion #region Constructors /// - /// constructor + /// constructor S+ Does not accept a key. Use initialze with key to set the debug key on this device. If using with + make sure to set all properties manually. /// public GenericSecureTcpIpServer() : base("Uninitialized Dynamic TCP Server") { + HeartbeatRequiredIntervalInSeconds = 15; CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); BufferSize = 2000; + MonitorClientMaxFailureCount = 3; + } + + /// + /// constructor with debug key set at instantiation. Make sure to set all properties before listening. + /// + /// + public GenericSecureTcpIpServer(string key) + : base("Uninitialized Dynamic TCP Server") + { + HeartbeatRequiredIntervalInSeconds = 15; + CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); + BufferSize = 2000; + MonitorClientMaxFailureCount = 3; + Key = key; + } + + /// + /// Contstructor that sets all properties by calling the initialize method with a config object. + /// + /// + public GenericSecureTcpIpServer(TcpServerConfigObject serverConfigObject) + : base("Uninitialized Dynamic TCP Server") + { + HeartbeatRequiredIntervalInSeconds = 15; + CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); + BufferSize = 2000; + MonitorClientMaxFailureCount = 3; + Initialize(serverConfigObject); } #endregion #region Methods - Server Actions + /// + /// Disconnects all clients and stops the server + /// + public void KillServer() + { + ServerStopped = true; + if (MonitorClient != null) + { + MonitorClient.Disconnect(); + } + DisconnectAllClientsForShutdown(); + StopListening(); + } + /// /// Initialize Key for device using client name from SIMPL+. Called on Listen from SIMPL+ /// @@ -218,37 +330,83 @@ namespace PepperDash.Core Key = key; } + public void Initialize(TcpServerConfigObject serverConfigObject) + { + try + { + if (serverConfigObject != null || string.IsNullOrEmpty(serverConfigObject.Key)) + { + Key = serverConfigObject.Key; + MaxClients = serverConfigObject.MaxClients; + Port = serverConfigObject.Port; + SharedKeyRequired = serverConfigObject.SharedKeyRequired; + SharedKey = serverConfigObject.SharedKey; + HeartbeatRequired = serverConfigObject.HeartbeatRequired; + HeartbeatRequiredIntervalInSeconds = serverConfigObject.HeartbeatRequiredIntervalInSeconds; + HeartbeatStringToMatch = serverConfigObject.HeartbeatStringToMatch; + BufferSize = serverConfigObject.BufferSize; + + } + else + { + ErrorLog.Error("Could not initialize server with key: {0}", serverConfigObject.Key); + } + } + catch + { + ErrorLog.Error("Could not initialize server with key: {0}", serverConfigObject.Key); + } + } + /// /// Start listening on the specified port /// public void Listen() { + ServerCCSection.Enter(); try { if (Port < 1 || Port > 65535) { - Debug.Console(1, Debug.ErrorLogLevel.Warning, "Server '{0}': Invalid port", Key); + Debug.Console(1, this, Debug.ErrorLogLevel.Error, "Server '{0}': Invalid port", Key); ErrorLog.Warn(string.Format("Server '{0}': Invalid port", Key)); return; } if (string.IsNullOrEmpty(SharedKey) && SharedKeyRequired) { - Debug.Console(1, Debug.ErrorLogLevel.Warning, "Server '{0}': No Shared Key set", Key); + Debug.Console(1, this, Debug.ErrorLogLevel.Error, "Server '{0}': No Shared Key set", Key); ErrorLog.Warn(string.Format("Server '{0}': No Shared Key set", Key)); return; } if (IsListening) return; - Server = new SecureTCPServer(Port, MaxClients); - Server.SocketStatusChange += new SecureTCPServerSocketStatusChangeEventHandler(SocketStatusChange); + + if (SecureServer == null) + { + SecureServer = new SecureTCPServer(Port, MaxClients); + SecureServer.SocketSendOrReceiveTimeOutInMs = (this.HeartbeatRequiredIntervalMs * 5); + SecureServer.HandshakeTimeout = 30; + SecureServer.SocketStatusChange += new SecureTCPServerSocketStatusChangeEventHandler(SecureServer_SocketStatusChange); + } + else + { + KillServer(); + SecureServer.PortNumber = Port; + } ServerStopped = false; - Server.WaitForConnectionAsync(IPAddress.Any, ConnectCallback); - onServerStateChange(); - Debug.Console(2, "Server Status: {0}, Socket Status: {1}\r\n", Server.State.ToString(), Server.ServerSocketStatus); + SecureServer.WaitForConnectionAsync(IPAddress.Any, SecureConnectCallback); + OnServerStateChange(SecureServer.State); + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Secure Server Status: {0}, Socket Status: {1}", SecureServer.State, SecureServer.ServerSocketStatus); + + // StartMonitorClient(); + + + ServerCCSection.Leave(); } catch (Exception ex) { - ErrorLog.Error("Error with Dynamic Server: {0}", ex.ToString()); + ServerCCSection.Leave(); + ErrorLog.Error("{1} Error with Dynamic Server: {0}", ex.ToString(), Key); } } @@ -257,23 +415,80 @@ namespace PepperDash.Core /// public void StopListening() { - Debug.Console(2, "Stopping Listener"); - if (Server != null) - Server.Stop(); - ServerStopped = true; - onServerStateChange(); + try + { + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Stopping Listener"); + if (SecureServer != null) + { + SecureServer.Stop(); + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Server State: {0}", SecureServer.State); + //SecureServer = null; + } + + ServerStopped = true; + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Server Stopped"); + + OnServerStateChange(SecureServer.State); + } + catch (Exception ex) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error stopping server. Error: {0}", ex); + } } + /// + /// Disconnects Client + /// + /// + public void DisconnectClient(uint client) + { + try + { + SecureServer.Disconnect(client); + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Disconnected client index: {0}", client); + } + catch (Exception ex) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error Disconnecting client index: {0}. Error: {1}", client, ex); + } + } /// /// Disconnect All Clients /// - public void DisconnectAllClients() + public void DisconnectAllClientsForShutdown() { - Debug.Console(2, "Disconnecting All Clients"); - if (Server != null) - Server.DisconnectAll(); - onConnectionChange(); - onServerStateChange(); //State shows both listening and connected + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Disconnecting All Clients"); + if (SecureServer != null) + { + SecureServer.SocketStatusChange -= SecureServer_SocketStatusChange; + foreach (var index in ConnectedClientsIndexes.ToList()) // copy it here so that it iterates properly + { + var i = index; + if (!SecureServer.ClientConnected(index)) + continue; + try + { + SecureServer.Disconnect(i); + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Disconnected client index: {0}", i); + } + catch (Exception ex) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error Disconnecting client index: {0}. Error: {1}", i, ex); + } + } + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Server Status: {0}", SecureServer.ServerSocketStatus); + } + + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Disconnected All Clients"); + ConnectedClientsIndexes.Clear(); + + if (!ProgramIsStopping) + { + OnConnectionChange(); + OnServerStateChange(SecureServer.State); //State shows both listening and connected + } + + // var o = new { }; } /// @@ -282,11 +497,29 @@ namespace PepperDash.Core /// public void BroadcastText(string text) { - if (ConnectedClientsIndexes.Count > 0) + CCriticalSection CCBroadcast = new CCriticalSection(); + CCBroadcast.Enter(); + try { - byte[] b = Encoding.GetEncoding(28591).GetBytes(text); - foreach (uint i in ConnectedClientsIndexes) - Server.SendDataAsync(i, b, b.Length, SendDataAsyncCallback); + if (ConnectedClientsIndexes.Count > 0) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes(text); + foreach (uint i in ConnectedClientsIndexes) + { + if (!SharedKeyRequired || (SharedKeyRequired && ClientReadyAfterKeyExchange.Contains(i))) + { + SocketErrorCodes error = SecureServer.SendDataAsync(i, b, b.Length, (x, y, z) => { }); + if (error != SocketErrorCodes.SOCKET_OK && error != SocketErrorCodes.SOCKET_OPERATION_PENDING) + Debug.Console(0, error.ToString()); + } + } + } + CCBroadcast.Leave(); + } + catch (Exception ex) + { + CCBroadcast.Leave(); + Debug.Console(2, this, Debug.ErrorLogLevel.Error, "Error Broadcasting messages from server. Error: {0}", ex.Message); } } @@ -297,18 +530,48 @@ namespace PepperDash.Core /// public void SendTextToClient(string text, uint clientIndex) { - byte[] b = Encoding.GetEncoding(28591).GetBytes(text); - Server.SendDataAsync(clientIndex, b, b.Length, SendDataAsyncCallback); + try + { + byte[] b = Encoding.GetEncoding(28591).GetBytes(text); + if (SecureServer != null && SecureServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) + { + if (!SharedKeyRequired || (SharedKeyRequired && ClientReadyAfterKeyExchange.Contains(clientIndex))) + SecureServer.SendDataAsync(clientIndex, b, b.Length, (x, y, z) => { }); + } + } + catch (Exception ex) + { + Debug.Console(0, this, "Error sending text to client. Text: {1}. Error: {0}", ex.Message, text); + } } //private method to check heartbeat requirements and start or reset timer - void checkHeartbeat(uint clientIndex, string received) + string checkHeartbeat(uint clientIndex, string received) { - if (HeartbeatRequired) + try { - if (!string.IsNullOrEmpty(HeartbeatStringToMatch)) + if (HeartbeatRequired) { - if (received == HeartbeatStringToMatch) + if (!string.IsNullOrEmpty(HeartbeatStringToMatch)) + { + var remainingText = received.Replace(HeartbeatStringToMatch, ""); + var noDelimiter = received.Trim(new char[] { '\r', '\n' }); + if (noDelimiter.Contains(HeartbeatStringToMatch)) + { + if (HeartbeatTimerDictionary.ContainsKey(clientIndex)) + HeartbeatTimerDictionary[clientIndex].Reset(HeartbeatRequiredIntervalMs); + else + { + CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); + HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); + } + Debug.Console(1, this, "Heartbeat Received: {0}, from client index: {1}", HeartbeatStringToMatch, clientIndex); + // Return Heartbeat + SendTextToClient(HeartbeatStringToMatch, clientIndex); + return remainingText; + } + } + else { if (HeartbeatTimerDictionary.ContainsKey(clientIndex)) HeartbeatTimerDictionary[clientIndex].Reset(HeartbeatRequiredIntervalMs); @@ -317,187 +580,405 @@ namespace PepperDash.Core CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); } + Debug.Console(1, this, "Heartbeat Received: {0}, from client index: {1}", received, clientIndex); + } + } + } + catch (Exception ex) + { + Debug.Console(1, this, "Error checking heartbeat: {0}", ex.Message); + } + return received; + } + + public string GetClientIPAddress(uint clientIndex) + { + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "GetClientIPAddress Index: {0}", clientIndex); + if (!SharedKeyRequired || (SharedKeyRequired && ClientReadyAfterKeyExchange.Contains(clientIndex))) + { + var ipa = this.SecureServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex); + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "GetClientIPAddress IPAddreess: {0}", ipa); + return ipa; + + } + else + { + return ""; + } + } + + #endregion + + #region Methods - HeartbeatTimer Callback + + void HeartbeatTimer_CallbackFunction(object o) + { + uint clientIndex = 99999; + string address = string.Empty; + try + { + clientIndex = (uint)o; + address = SecureServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex); + + Debug.Console(1, this, Debug.ErrorLogLevel.Warning, "Heartbeat not received for Client index {2} IP: {0}, DISCONNECTING BECAUSE HEARTBEAT REQUIRED IS TRUE {1}", + address, string.IsNullOrEmpty(HeartbeatStringToMatch) ? "" : ("HeartbeatStringToMatch: " + HeartbeatStringToMatch), clientIndex); + + if (SecureServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) + SendTextToClient("Heartbeat not received by server, closing connection", clientIndex); + + var discoResult = SecureServer.Disconnect(clientIndex); + //Debug.Console(1, this, "{0}", discoResult); + + if (HeartbeatTimerDictionary.ContainsKey(clientIndex)) + { + HeartbeatTimerDictionary[clientIndex].Stop(); + HeartbeatTimerDictionary[clientIndex].Dispose(); + HeartbeatTimerDictionary.Remove(clientIndex); + } + } + catch (Exception ex) + { + ErrorLog.Error("{3}: Heartbeat timeout Error on Client Index: {0}, at address: {1}, error: {2}", clientIndex, address, ex.Message, Key); + } + } + + #endregion + + #region Methods - Socket Status Changed Callbacks + /// + /// Secure Server Socket Status Changed Callback + /// + /// + /// + /// + void SecureServer_SocketStatusChange(SecureTCPServer server, uint clientIndex, SocketStatus serverSocketStatus) + { + try + { + + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "SecureServerSocketStatusChange Index:{0} status:{1} Port:{2} IP:{3}", clientIndex, serverSocketStatus, this.SecureServer.GetPortNumberServerAcceptedConnectionFromForSpecificClient(clientIndex), this.SecureServer.GetLocalAddressServerAcceptedConnectionFromForSpecificClient(clientIndex)); + if (serverSocketStatus != SocketStatus.SOCKET_STATUS_CONNECTED) + { + if (ConnectedClientsIndexes.Contains(clientIndex)) + ConnectedClientsIndexes.Remove(clientIndex); + if (HeartbeatRequired && HeartbeatTimerDictionary.ContainsKey(clientIndex)) + { + HeartbeatTimerDictionary[clientIndex].Stop(); + HeartbeatTimerDictionary[clientIndex].Dispose(); + HeartbeatTimerDictionary.Remove(clientIndex); + } + if (ClientReadyAfterKeyExchange.Contains(clientIndex)) + ClientReadyAfterKeyExchange.Remove(clientIndex); + } + } + catch (Exception ex) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error in Socket Status Change Callback. Error: {0}", ex); + } + onConnectionChange(clientIndex, server.GetServerSocketStatusForSpecificClient(clientIndex)); + } + + #endregion + + #region Methods Connected Callbacks + /// + /// Secure TCP Client Connected to Secure Server Callback + /// + /// + /// + void SecureConnectCallback(SecureTCPServer server, uint clientIndex) + { + try + { + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "ConnectCallback: IPAddress: {0}. Index: {1}. Status: {2}", + server.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex), + clientIndex, server.GetServerSocketStatusForSpecificClient(clientIndex)); + if (clientIndex != 0) + { + if (server.ClientConnected(clientIndex)) + { + + if (!ConnectedClientsIndexes.Contains(clientIndex)) + { + ConnectedClientsIndexes.Add(clientIndex); + } + if (SharedKeyRequired) + { + if (!WaitingForSharedKey.Contains(clientIndex)) + { + WaitingForSharedKey.Add(clientIndex); + } + byte[] b = Encoding.GetEncoding(28591).GetBytes("SharedKey:"); + server.SendDataAsync(clientIndex, b, b.Length, (x, y, z) => { }); + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Sent Shared Key Request to client at {0}", server.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex)); + } + else + { + OnServerClientReadyForCommunications(clientIndex); + } + if (HeartbeatRequired) + { + if (!HeartbeatTimerDictionary.ContainsKey(clientIndex)) + { + HeartbeatTimerDictionary.Add(clientIndex, new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs)); + } + } + + server.ReceiveDataAsync(clientIndex, SecureReceivedDataAsyncCallback); } } else { - if (HeartbeatTimerDictionary.ContainsKey(clientIndex)) - HeartbeatTimerDictionary[clientIndex].Reset(HeartbeatRequiredIntervalMs); - else + Debug.Console(1, this, Debug.ErrorLogLevel.Error, "Client attempt faulty."); + if (!ServerStopped) { - CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); - HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); + server.WaitForConnectionAsync(IPAddress.Any, SecureConnectCallback); + return; } } } + catch (Exception ex) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error in Socket Status Connect Callback. Error: {0}", ex); + } + //Debug.Console(1, this, Debug.ErrorLogLevel, "((((((Server State bitfield={0}; maxclient={1}; ServerStopped={2}))))))", + // server.State, + // MaxClients, + // ServerStopped); + if ((server.State & ServerState.SERVER_LISTENING) != ServerState.SERVER_LISTENING && MaxClients > 1 && !ServerStopped) + { + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Waiting for next connection"); + server.WaitForConnectionAsync(IPAddress.Any, SecureConnectCallback); + + } } + #endregion - #region Methods - Callbacks + #region Methods - Send/Receive Callbacks /// - /// Callback to disconnect if heartbeat timer finishes without being reset - /// - /// - void HeartbeatTimer_CallbackFunction(object o) - { - uint clientIndex = (uint)o; - - string address = Server.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex); - - ErrorLog.Error("Heartbeat not received for Client at IP: {0}, DISCONNECTING BECAUSE HEARTBEAT REQUIRED IS TRUE", address); - Debug.Console(2, "Heartbeat not received for Client at IP: {0}, DISCONNECTING BECAUSE HEARTBEAT REQUIRED IS TRUE", address); - - SendTextToClient("Heartbeat not received by server, closing connection", clientIndex); - Server.Disconnect(clientIndex); - HeartbeatTimerDictionary.Remove(clientIndex); - } - - /// - /// TCP Server Socket Status Change Callback - /// - /// - /// - /// - void SocketStatusChange(SecureTCPServer server, uint clientIndex, SocketStatus serverSocketStatus) - { - Debug.Console(2, "Client at {0} ServerSocketStatus {1}", - server.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex), serverSocketStatus.ToString()); - if (server.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) - { - if (SharedKeyRequired && !WaitingForSharedKey.Contains(clientIndex)) - WaitingForSharedKey.Add(clientIndex); - if (!ConnectedClientsIndexes.Contains(clientIndex)) - ConnectedClientsIndexes.Add(clientIndex); - } - else - { - if (ConnectedClientsIndexes.Contains(clientIndex)) - ConnectedClientsIndexes.Remove(clientIndex); - if (HeartbeatRequired && HeartbeatTimerDictionary.ContainsKey(clientIndex)) - HeartbeatTimerDictionary.Remove(clientIndex); - } - if (Server.ServerSocketStatus.ToString() != Status) - onConnectionChange(); - } - - /// - /// TCP Client Connected to Server Callback - /// - /// - /// - void ConnectCallback(SecureTCPServer mySecureTCPServer, uint clientIndex) - { - if (mySecureTCPServer.ClientConnected(clientIndex)) - { - if (SharedKeyRequired) - { - byte[] b = Encoding.GetEncoding(28591).GetBytes(SharedKey + "\n"); - mySecureTCPServer.SendDataAsync(clientIndex, b, b.Length, SendDataAsyncCallback); - Debug.Console(2, "Sent Shared Key to client at {0}", mySecureTCPServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex)); - } - if (HeartbeatRequired) - { - CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); - HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); - } - mySecureTCPServer.ReceiveDataAsync(clientIndex, ReceivedDataAsyncCallback); - if (mySecureTCPServer.State != ServerState.SERVER_LISTENING && MaxClients > 1 && !ServerStopped) - mySecureTCPServer.WaitForConnectionAsync(IPAddress.Any, ConnectCallback); - } - if (mySecureTCPServer.State != ServerState.SERVER_LISTENING && MaxClients > 1 && !ServerStopped) - mySecureTCPServer.WaitForConnectionAsync(IPAddress.Any, ConnectCallback); - } - - /// - /// Send Data Asyc Callback - /// - /// - /// - /// - void SendDataAsyncCallback(SecureTCPServer mySecureTCPServer, uint clientIndex, int numberOfBytesSent) - { - //Seems there is nothing to do here - } - - /// - /// Received Data Async Callback + /// Secure Received Data Async Callback /// /// /// /// - void ReceivedDataAsyncCallback(SecureTCPServer mySecureTCPServer, uint clientIndex, int numberOfBytesReceived) + void SecureReceivedDataAsyncCallback(SecureTCPServer mySecureTCPServer, uint clientIndex, int numberOfBytesReceived) { if (numberOfBytesReceived > 0) { string received = "Nothing"; - byte[] bytes = mySecureTCPServer.GetIncomingDataBufferForSpecificClient(clientIndex); - received = System.Text.Encoding.GetEncoding(28591).GetString(bytes, 0, numberOfBytesReceived); - if (WaitingForSharedKey.Contains(clientIndex)) + try { - received = received.Replace("\r", ""); - received = received.Replace("\n", ""); - if (received != SharedKey) + byte[] bytes = mySecureTCPServer.GetIncomingDataBufferForSpecificClient(clientIndex); + received = System.Text.Encoding.GetEncoding(28591).GetString(bytes, 0, numberOfBytesReceived); + if (WaitingForSharedKey.Contains(clientIndex)) { - byte[] b = Encoding.GetEncoding(28591).GetBytes("Shared key did not match server. Disconnecting"); - Debug.Console(2, "Client at index {0} Shared key did not match the server, disconnecting client", clientIndex); - ErrorLog.Error("Client at index {0} Shared key did not match the server, disconnecting client", clientIndex); - mySecureTCPServer.SendDataAsync(clientIndex, b, b.Length, null); - mySecureTCPServer.Disconnect(clientIndex); + received = received.Replace("\r", ""); + received = received.Replace("\n", ""); + if (received != SharedKey) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes("Shared key did not match server. Disconnecting"); + Debug.Console(1, this, Debug.ErrorLogLevel.Warning, "Client at index {0} Shared key did not match the server, disconnecting client. Key: {1}", clientIndex, received); + mySecureTCPServer.SendData(clientIndex, b, b.Length); + mySecureTCPServer.Disconnect(clientIndex); + WaitingForSharedKey.Remove(clientIndex); + return; + } + if (mySecureTCPServer.NumberOfClientsConnected > 0) + mySecureTCPServer.ReceiveDataAsync(clientIndex, SecureReceivedDataAsyncCallback); + WaitingForSharedKey.Remove(clientIndex); + byte[] success = Encoding.GetEncoding(28591).GetBytes("Shared Key Match"); + mySecureTCPServer.SendDataAsync(clientIndex, success, success.Length, null); + OnServerClientReadyForCommunications(clientIndex); + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Client with index {0} provided the shared key and successfully connected to the server", clientIndex); + return; } - if (mySecureTCPServer.NumberOfClientsConnected > 0) - mySecureTCPServer.ReceiveDataAsync(ReceivedDataAsyncCallback); - WaitingForSharedKey.Remove(clientIndex); - byte[] skResponse = Encoding.GetEncoding(28591).GetBytes("Shared Key Match, Connected and ready for communication"); - mySecureTCPServer.SendDataAsync(clientIndex, skResponse, skResponse.Length, null); - mySecureTCPServer.ReceiveDataAsync(ReceivedDataAsyncCallback); + //var address = mySecureTCPServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex); + //Debug.Console(1, this, "Secure Server Listening on Port: {0}, client IP: {1}, Client Index: {4}, NumberOfBytesReceived: {2}, Received: {3}\r\n", + // mySecureTCPServer.PortNumber.ToString(), address , numberOfBytesReceived.ToString(), received, clientIndex.ToString()); + if (!string.IsNullOrEmpty(checkHeartbeat(clientIndex, received))) + onTextReceived(received, clientIndex); } - else + catch (Exception ex) { - mySecureTCPServer.ReceiveDataAsync(ReceivedDataAsyncCallback); - Debug.Console(2, "Server Listening on Port: {0}, client IP: {1}, NumberOfBytesReceived: {2}, Received: {3}\r\n", - mySecureTCPServer.PortNumber, mySecureTCPServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex), numberOfBytesReceived, received); - onTextReceived(received); + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error Receiving data: {0}. Error: {1}", received, ex); } - checkHeartbeat(clientIndex, received); } if (mySecureTCPServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) - mySecureTCPServer.ReceiveDataAsync(clientIndex, ReceivedDataAsyncCallback); + mySecureTCPServer.ReceiveDataAsync(clientIndex, SecureReceivedDataAsyncCallback); } + #endregion #region Methods - EventHelpers/Callbacks + //Private Helper method to call the Connection Change Event - void onConnectionChange() + void onConnectionChange(uint clientIndex, SocketStatus clientStatus) { + if (clientIndex != 0) //0 is error not valid client change + { + var handler = ClientConnectionChange; + if (handler != null) + { + handler(this, new GenericTcpServerSocketStatusChangeEventArgs(SecureServer, clientIndex, clientStatus)); + } + } + } + + //Private Helper method to call the Connection Change Event + void OnConnectionChange() + { + if (ProgramIsStopping) + { + return; + } var handler = ClientConnectionChange; if (handler != null) - handler(this, new DynamicTCPSocketStatusChangeEventArgs(Server, false)); + { + handler(this, new GenericTcpServerSocketStatusChangeEventArgs()); + } } //Private Helper Method to call the Text Received Event - void onTextReceived(string text) + void onTextReceived(string text, uint clientIndex) { var handler = TextReceived; if (handler != null) - handler(this, new GenericCommMethodReceiveTextArgs(text)); + handler(this, new GenericTcpServerCommMethodReceiveTextArgs(text, clientIndex)); } //Private Helper Method to call the Server State Change Event - void onServerStateChange() + void OnServerStateChange(ServerState state) { + if (ProgramIsStopping) + { + return; + } var handler = ServerStateChange; if (handler != null) - handler(this, new DynamicTCPServerStateChangedEventArgs(Server, false)); + { + handler(this, new GenericTcpServerStateChangedEventArgs(state)); + } } - //Private Event Handler method to handle the closing of connections when the program stops + /// + /// Private Event Handler method to handle the closing of connections when the program stops + /// + /// void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType) { if (programEventType == eProgramStatusEventType.Stopping) { - Debug.Console(1, this, "Program stopping. Closing server"); - DisconnectAllClients(); - StopListening(); + ProgramIsStopping = true; + // kill bandaid things + if (MonitorClientTimer != null) + MonitorClientTimer.Stop(); + if (MonitorClient != null) + MonitorClient.Disconnect(); + + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Program stopping. Closing server"); + KillServer(); + } + } + + //Private event handler method to raise the event that the server is ready to send data after a successful client shared key negotiation + void OnServerClientReadyForCommunications(uint clientIndex) + { + ClientReadyAfterKeyExchange.Add(clientIndex); + var handler = ServerClientReadyForCommunications; + if (handler != null) + handler(this, new GenericTcpServerSocketStatusChangeEventArgs( + this, clientIndex, SecureServer.GetServerSocketStatusForSpecificClient(clientIndex))); + } + #endregion + + #region Monitor Client + /// + /// Starts the monitor client cycle. Timed wait, then call RunMonitorClient + /// + void StartMonitorClient() + { + if (MonitorClientTimer != null) + { + return; + } + MonitorClientTimer = new CTimer(o => RunMonitorClient(), 60000); + } + + /// + /// + /// + void RunMonitorClient() + { + MonitorClient = new GenericSecureTcpIpClient_ForServer(Key + "-MONITOR", "127.0.0.1", Port, 2000); + MonitorClient.SharedKeyRequired = this.SharedKeyRequired; + MonitorClient.SharedKey = this.SharedKey; + MonitorClient.ConnectionHasHungCallback = MonitorClientHasHungCallback; + //MonitorClient.ConnectionChange += MonitorClient_ConnectionChange; + MonitorClient.ClientReadyForCommunications += MonitorClient_IsReadyForComm; + + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Starting monitor check"); + + MonitorClient.Connect(); + // From here MonitorCLient either connects or hangs, MonitorClient will call back + + } + + /// + /// + /// + void StopMonitorClient() + { + if (MonitorClient == null) + return; + + MonitorClient.ClientReadyForCommunications -= MonitorClient_IsReadyForComm; + MonitorClient.Disconnect(); + MonitorClient = null; + } + + /// + /// On monitor connect, restart the operation + /// + void MonitorClient_IsReadyForComm(object sender, GenericTcpServerClientReadyForcommunicationsEventArgs args) + { + if (args.IsReady) + { + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Monitor client connection success. Disconnecting in 2s"); + MonitorClientTimer.Stop(); + MonitorClientTimer = null; + MonitorClientFailureCount = 0; + CrestronEnvironment.Sleep(2000); + StopMonitorClient(); + StartMonitorClient(); + } + } + + /// + /// If the client hangs, add to counter and maybe fire the choke event + /// + void MonitorClientHasHungCallback() + { + MonitorClientFailureCount++; + MonitorClientTimer.Stop(); + MonitorClientTimer = null; + StopMonitorClient(); + if (MonitorClientFailureCount < MonitorClientMaxFailureCount) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Warning, "Monitor client connection has hung {0} time{1}, maximum {2}", + MonitorClientFailureCount, MonitorClientFailureCount > 1 ? "s" : "", MonitorClientMaxFailureCount); + StartMonitorClient(); + } + else + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, + "\r***************************\rMonitor client connection has hung a maximum of {0} times. \r***************************", + MonitorClientMaxFailureCount); + + var handler = ServerHasChoked; + if (handler != null) + handler(); + // Some external thing is in charge here. Expected reset of program } } #endregion diff --git a/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpClient_ForServer.cs b/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpClient_ForServer.cs new file mode 100644 index 0000000..820f5bb --- /dev/null +++ b/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpClient_ForServer.cs @@ -0,0 +1,739 @@ +/*PepperDash Technology Corp. +JAG +Copyright: 2017 +------------------------------------ +***Notice of Ownership and Copyright*** +The material in which this notice appears is the property of PepperDash Technology Corporation, +which claims copyright under the laws of the United States of America in the entire body of material +and in all parts thereof, regardless of the use to which it is being put. Any use, in whole or in part, +of this material by another party without the express written permission of PepperDash Technology Corporation is prohibited. +PepperDash Technology Corporation reserves all rights under applicable laws. +------------------------------------ */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronSockets; + +namespace PepperDash.Core +{ + public class GenericTcpIpClient_ForServer : Device, IAutoReconnect + { + /// + /// Band aid delegate for choked server + /// + internal delegate void ConnectionHasHungCallbackDelegate(); + + #region Events + + //public event EventHandler BytesReceived; + + public event EventHandler TextReceived; + + public event EventHandler ConnectionChange; + + + /// + /// This is something of a band-aid callback. If the client times out during the connection process, because the server + /// is stuck, this will fire. It is intended to be used by the Server class monitor client, to help + /// keep a watch on the server and reset it if necessary. + /// + internal ConnectionHasHungCallbackDelegate ConnectionHasHungCallback; + + /// + /// For a client with a pre shared key, this will fire after the communication is established and the key exchange is complete. If you require + /// a key and subscribe to the socket change event and try to send data on a connection the data sent will interfere with the key exchange and disconnect. + /// + public event EventHandler ClientReadyForCommunications; + + #endregion + + #region Properties & Variables + + /// + /// Address of server + /// + public string Hostname { get; set; } + + /// + /// Port on server + /// + public int Port { get; set; } + + /// + /// S+ helper + /// + public ushort UPort + { + get { return Convert.ToUInt16(Port); } + set { Port = Convert.ToInt32(value); } + } + + /// + /// Bool to show whether the server requires a preshared key. This is used in the DynamicTCPServer class + /// + public bool SharedKeyRequired { get; set; } + + /// + /// S+ helper for requires shared key bool + /// + public ushort USharedKeyRequired + { + set + { + if (value == 1) + SharedKeyRequired = true; + else + SharedKeyRequired = false; + } + } + + /// + /// SharedKey is sent for varification to the server. Shared key can be any text (255 char limit in SIMPL+ Module), but must match the Shared Key on the Server module + /// + public string SharedKey { get; set; } + + /// + /// flag to show the client is waiting for the server to send the shared key + /// + private bool WaitingForSharedKeyResponse { get; set; } + + /// + /// Defaults to 2000 + /// + public int BufferSize { get; set; } + + /// + /// Semaphore on connect method + /// + bool IsTryingToConnect; + + /// + /// Bool showing if socket is connected + /// + public bool IsConnected + { + get + { + if (Client != null) + return Client.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED; + else + return false; + } + } + + /// + /// S+ helper for IsConnected + /// + public ushort UIsConnected + { + get { return (ushort)(IsConnected ? 1 : 0); } + } + + /// + /// Bool showing if socket is ready for communication after shared key exchange + /// + public bool IsReadyForCommunication { get; set; } + + /// + /// S+ helper for IsReadyForCommunication + /// + public ushort UIsReadyForCommunication + { + get { return (ushort)(IsReadyForCommunication ? 1 : 0); } + } + + /// + /// Client socket status Read only + /// + public SocketStatus ClientStatus + { + get + { + if (Client != null) + return Client.ClientStatus; + else + return SocketStatus.SOCKET_STATUS_NO_CONNECT; + } + } + + /// + /// Contains the familiar Simpl analog status values. This drives the ConnectionChange event + /// and IsConnected would be true when this == 2. + /// + public ushort UStatus + { + get { return (ushort)ClientStatus; } + } + + /// + /// Status text shows the message associated with socket status + /// + public string ClientStatusText { get { return ClientStatus.ToString(); } } + + /// + /// bool to track if auto reconnect should be set on the socket + /// + public bool AutoReconnect { get; set; } + + /// + /// S+ helper for AutoReconnect + /// + public ushort UAutoReconnect + { + get { return (ushort)(AutoReconnect ? 1 : 0); } + set { AutoReconnect = value == 1; } + } + /// + /// Milliseconds to wait before attempting to reconnect. Defaults to 5000 + /// + public int AutoReconnectIntervalMs { get; set; } + + /// + /// Flag Set only when the disconnect method is called. + /// + bool DisconnectCalledByUser; + + /// + /// private Timer for auto reconnect + /// + CTimer RetryTimer; + + + public bool HeartbeatEnabled { get; set; } + public ushort UHeartbeatEnabled + { + get { return (ushort)(HeartbeatEnabled ? 1 : 0); } + set { HeartbeatEnabled = value == 1; } + } + public string HeartbeatString = "heartbeat"; + public int HeartbeatInterval = 50000; + CTimer HeartbeatSendTimer; + CTimer HeartbeatAckTimer; + /// + /// Used to force disconnection on a dead connect attempt + /// + CTimer ConnectFailTimer; + CTimer WaitForSharedKey; + private int ConnectionCount; + /// + /// Internal secure client + /// + TCPClient Client; + + bool ProgramIsStopping; + + #endregion + + #region Constructors + + //Base class constructor + public GenericTcpIpClient_ForServer(string key, string address, int port, int bufferSize) + : base(key) + { + CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); + Hostname = address; + Port = port; + BufferSize = bufferSize; + AutoReconnectIntervalMs = 5000; + + } + + //base class constructor + public GenericTcpIpClient_ForServer() + : base("Uninitialized DynamicTcpClient") + { + CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); + AutoReconnectIntervalMs = 5000; + BufferSize = 2000; + } + #endregion + + #region Methods + + /// + /// Just to help S+ set the key + /// + public void Initialize(string key) + { + Key = key; + } + + /// + /// Handles closing this up when the program shuts down + /// + void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType) + { + if (programEventType == eProgramStatusEventType.Stopping || programEventType == eProgramStatusEventType.Paused) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Program stopping. Closing Client connection"); + ProgramIsStopping = true; + Disconnect(); + } + + } + + /// + /// Connect Method. Will return if already connected. Will write errors if missing address, port, or unique key/name. + /// + public void Connect() + { + ConnectionCount++; + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Attempting connect Count:{0}", ConnectionCount); + + + if (IsConnected) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Already connected. Ignoring."); + return; + } + if (IsTryingToConnect) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Already trying to connect. Ignoring."); + return; + } + try + { + IsTryingToConnect = true; + if (RetryTimer != null) + { + RetryTimer.Stop(); + RetryTimer = null; + } + if (string.IsNullOrEmpty(Hostname)) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Warning, "DynamicTcpClient: No address set"); + return; + } + if (Port < 1 || Port > 65535) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Warning, "DynamicTcpClient: Invalid port"); + return; + } + if (string.IsNullOrEmpty(SharedKey) && SharedKeyRequired) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Warning, "DynamicTcpClient: No Shared Key set"); + return; + } + + // clean up previous client + if (Client != null) + { + Cleanup(); + } + DisconnectCalledByUser = false; + + Client = new TCPClient(Hostname, Port, BufferSize); + Client.SocketStatusChange += Client_SocketStatusChange; + Client.SocketSendOrReceiveTimeOutInMs = (HeartbeatInterval * 5); + Client.AddressClientConnectedTo = Hostname; + Client.PortNumber = Port; + // SecureClient = c; + + //var timeOfConnect = DateTime.Now.ToString("HH:mm:ss.fff"); + + ConnectFailTimer = new CTimer(o => + { + Debug.Console(1, this, Debug.ErrorLogLevel.Error, "Connect attempt has not finished after 30sec Count:{0}", ConnectionCount); + if (IsTryingToConnect) + { + IsTryingToConnect = false; + + //if (ConnectionHasHungCallback != null) + //{ + // ConnectionHasHungCallback(); + //} + //SecureClient.DisconnectFromServer(); + //CheckClosedAndTryReconnect(); + } + }, 30000); + + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Making Connection Count:{0}", ConnectionCount); + Client.ConnectToServerAsync(o => + { + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "ConnectToServerAsync Count:{0} Ran!", ConnectionCount); + + if (ConnectFailTimer != null) + { + ConnectFailTimer.Stop(); + } + IsTryingToConnect = false; + + if (o.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED) + { + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Client connected to {0} on port {1}", o.AddressClientConnectedTo, o.LocalPortNumberOfClient); + o.ReceiveDataAsync(Receive); + + if (SharedKeyRequired) + { + WaitingForSharedKeyResponse = true; + WaitForSharedKey = new CTimer(timer => + { + + Debug.Console(1, this, Debug.ErrorLogLevel.Warning, "Shared key exchange timer expired. IsReadyForCommunication={0}", IsReadyForCommunication); + // Debug.Console(1, this, "Connect attempt failed {0}", c.ClientStatus); + // This is the only case where we should call DisconectFromServer...Event handeler will trigger the cleanup + o.DisconnectFromServer(); + //CheckClosedAndTryReconnect(); + //OnClientReadyForcommunications(false); // Should send false event + }, 15000); + } + } + else + { + Debug.Console(1, this, "Connect attempt failed {0}", o.ClientStatus); + CheckClosedAndTryReconnect(); + } + }); + } + catch (Exception ex) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Client connection exception: {0}", ex.Message); + IsTryingToConnect = false; + CheckClosedAndTryReconnect(); + } + } + + /// + /// + /// + public void Disconnect() + { + Debug.Console(2, "Disconnect Called"); + + DisconnectCalledByUser = true; + if (IsConnected) + { + Client.DisconnectFromServer(); + + } + if (RetryTimer != null) + { + RetryTimer.Stop(); + RetryTimer = null; + } + Cleanup(); + } + + /// + /// Internal call to close up client. ALWAYS use this when disconnecting. + /// + void Cleanup() + { + IsTryingToConnect = false; + + if (Client != null) + { + //SecureClient.DisconnectFromServer(); + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Disconnecting Client {0}", DisconnectCalledByUser ? ", Called by user" : ""); + Client.SocketStatusChange -= Client_SocketStatusChange; + Client.Dispose(); + Client = null; + } + if (ConnectFailTimer != null) + { + ConnectFailTimer.Stop(); + ConnectFailTimer.Dispose(); + ConnectFailTimer = null; + } + } + + + /// ff + /// Called from Connect failure or Socket Status change if + /// auto reconnect and socket disconnected (Not disconnected by user) + /// + void CheckClosedAndTryReconnect() + { + if (Client != null) + { + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Cleaning up remotely closed/failed connection."); + Cleanup(); + } + if (!DisconnectCalledByUser && AutoReconnect) + { + var halfInterval = AutoReconnectIntervalMs / 2; + var rndTime = new Random().Next(-halfInterval, halfInterval) + AutoReconnectIntervalMs; + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Attempting reconnect in {0} ms, randomized", rndTime); + if (RetryTimer != null) + { + RetryTimer.Stop(); + RetryTimer = null; + } + RetryTimer = new CTimer(o => Connect(), rndTime); + } + } + + /// + /// Receive callback + /// + /// + /// + void Receive(TCPClient client, int numBytes) + { + if (numBytes > 0) + { + string str = string.Empty; + + try + { + var bytes = client.IncomingDataBuffer.Take(numBytes).ToArray(); + str = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length); + Debug.Console(2, this, "Client Received:\r--------\r{0}\r--------", str); + if (!string.IsNullOrEmpty(checkHeartbeat(str))) + { + + if (SharedKeyRequired && str == "SharedKey:") + { + Debug.Console(1, this, "Server asking for shared key, sending"); + SendText(SharedKey + "\n"); + } + else if (SharedKeyRequired && str == "Shared Key Match") + { + StopWaitForSharedKeyTimer(); + + + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Shared key confirmed. Ready for communication"); + OnClientReadyForcommunications(true); // Successful key exchange + } + else if (SharedKeyRequired == false && IsReadyForCommunication == false) + { + OnClientReadyForcommunications(true); // Key not required + } + + else + { + + //var bytesHandler = BytesReceived; + //if (bytesHandler != null) + // bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes)); + var textHandler = TextReceived; + if (textHandler != null) + textHandler(this, new GenericTcpServerCommMethodReceiveTextArgs(str)); + } + } + } + catch (Exception ex) + { + Debug.Console(1, this, "Error receiving data: {1}. Error: {0}", ex.Message, str); + } + } + if (client.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED) + client.ReceiveDataAsync(Receive); + } + + void HeartbeatStart() + { + if (HeartbeatEnabled) + { + Debug.Console(2, this, Debug.ErrorLogLevel.Notice, "Starting Heartbeat"); + if (HeartbeatSendTimer == null) + { + + HeartbeatSendTimer = new CTimer(this.SendHeartbeat, null, HeartbeatInterval, HeartbeatInterval); + } + if (HeartbeatAckTimer == null) + { + HeartbeatAckTimer = new CTimer(HeartbeatAckTimerFail, null, (HeartbeatInterval * 2), (HeartbeatInterval * 2)); + } + } + + } + void HeartbeatStop() + { + + if (HeartbeatSendTimer != null) + { + Debug.Console(2, this, Debug.ErrorLogLevel.Notice, "Stoping Heartbeat Send"); + HeartbeatSendTimer.Stop(); + HeartbeatSendTimer = null; + } + if (HeartbeatAckTimer != null) + { + Debug.Console(2, this, Debug.ErrorLogLevel.Notice, "Stoping Heartbeat Ack"); + HeartbeatAckTimer.Stop(); + HeartbeatAckTimer = null; + } + + } + void SendHeartbeat(object notused) + { + this.SendText(HeartbeatString); + Debug.Console(2, this, "Sending Heartbeat"); + + } + + //private method to check heartbeat requirements and start or reset timer + string checkHeartbeat(string received) + { + try + { + if (HeartbeatEnabled) + { + if (!string.IsNullOrEmpty(HeartbeatString)) + { + var remainingText = received.Replace(HeartbeatString, ""); + var noDelimiter = received.Trim(new char[] { '\r', '\n' }); + if (noDelimiter.Contains(HeartbeatString)) + { + if (HeartbeatAckTimer != null) + { + HeartbeatAckTimer.Reset(HeartbeatInterval * 2); + } + else + { + HeartbeatAckTimer = new CTimer(HeartbeatAckTimerFail, null, (HeartbeatInterval * 2), (HeartbeatInterval * 2)); + } + Debug.Console(1, this, "Heartbeat Received: {0}, from Server", HeartbeatString); + return remainingText; + } + } + } + } + catch (Exception ex) + { + Debug.Console(1, this, "Error checking heartbeat: {0}", ex.Message); + } + return received; + } + + + + void HeartbeatAckTimerFail(object o) + { + try + { + + if (IsConnected) + { + Debug.Console(1, Debug.ErrorLogLevel.Warning, "Heartbeat not received from Server...DISCONNECTING BECAUSE HEARTBEAT REQUIRED IS TRUE"); + SendText("Heartbeat not received by server, closing connection"); + CheckClosedAndTryReconnect(); + } + + } + catch (Exception ex) + { + ErrorLog.Error("Heartbeat timeout Error on Client: {0}, {1}", Key, ex); + } + } + + /// + /// + /// + void StopWaitForSharedKeyTimer() + { + if (WaitForSharedKey != null) + { + WaitForSharedKey.Stop(); + WaitForSharedKey = null; + } + } + + /// + /// General send method + /// + public void SendText(string text) + { + if (!string.IsNullOrEmpty(text)) + { + try + { + var bytes = Encoding.GetEncoding(28591).GetBytes(text); + if (Client != null && Client.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED) + { + Client.SendDataAsync(bytes, bytes.Length, (c, n) => + { + // HOW IN THE HELL DO WE CATCH AN EXCEPTION IN SENDING????? + if (n <= 0) + { + Debug.Console(1, Debug.ErrorLogLevel.Warning, "[{0}] Sent zero bytes. Was there an error?", this.Key); + } + }); + } + } + catch (Exception ex) + { + Debug.Console(0, this, "Error sending text: {1}. Error: {0}", ex.Message, text); + } + } + } + + /// + /// + /// + public void SendBytes(byte[] bytes) + { + if (bytes.Length > 0) + { + try + { + if (Client != null && Client.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED) + Client.SendData(bytes, bytes.Length); + } + catch (Exception ex) + { + Debug.Console(0, this, "Error sending bytes. Error: {0}", ex.Message); + } + } + } + + /// + /// SocketStatusChange Callback + /// + /// + /// + void Client_SocketStatusChange(TCPClient client, SocketStatus clientSocketStatus) + { + if (ProgramIsStopping) + { + ProgramIsStopping = false; + return; + } + try + { + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Socket status change: {0} ({1})", client.ClientStatus, (ushort)(client.ClientStatus)); + + OnConnectionChange(); + // The client could be null or disposed by this time... + if (Client == null || Client.ClientStatus != SocketStatus.SOCKET_STATUS_CONNECTED) + { + HeartbeatStop(); + OnClientReadyForcommunications(false); // socket has gone low + CheckClosedAndTryReconnect(); + } + } + catch (Exception ex) + { + Debug.Console(1, this, Debug.ErrorLogLevel.Error, "Error in socket status change callback. Error: {0}\r\r{1}", ex, ex.InnerException); + } + } + + /// + /// Helper for ConnectionChange event + /// + void OnConnectionChange() + { + var handler = ConnectionChange; + if (handler != null) + ConnectionChange(this, new GenericTcpServerSocketStatusChangeEventArgs(this, Client.ClientStatus)); + } + + /// + /// Helper to fire ClientReadyForCommunications event + /// + void OnClientReadyForcommunications(bool isReady) + { + IsReadyForCommunication = isReady; + if (this.IsReadyForCommunication) { HeartbeatStart(); } + var handler = ClientReadyForCommunications; + if (handler != null) + handler(this, new GenericTcpServerClientReadyForcommunicationsEventArgs(IsReadyForCommunication)); + } + #endregion + } + +} \ No newline at end of file diff --git a/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpServer.cs b/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpServer.cs index 5b96684..83add98 100644 --- a/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpServer.cs +++ b/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpServer.cs @@ -15,6 +15,8 @@ using System.Linq; using System.Text; using Crestron.SimplSharp; using Crestron.SimplSharp.CrestronSockets; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; namespace PepperDash.Core { @@ -24,20 +26,61 @@ namespace PepperDash.Core /// /// Event for Receiving text /// - public event EventHandler TextReceived; + public event EventHandler TextReceived; /// /// Event for client connection socket status change /// - public event EventHandler ClientConnectionChange; + public event EventHandler ClientConnectionChange; /// /// Event for Server State Change /// - public event EventHandler ServerStateChange; + public event EventHandler ServerStateChange; + + /// + /// For a server with a pre shared key, this will fire after the communication is established and the key exchange is complete. If no shared key, this will fire + /// after connection is successful. Use this event to know when the client is ready for communication to avoid stepping on shared key. + /// + public event EventHandler ServerClientReadyForCommunications; + + /// + /// A band aid event to notify user that the server has choked. + /// + public ServerHasChokedCallbackDelegate ServerHasChoked { get; set; } + + public delegate void ServerHasChokedCallbackDelegate(); + #endregion #region Properties/Variables + + /// + /// + /// + CCriticalSection ServerCCSection = new CCriticalSection(); + + + /// + /// A bandaid client that monitors whether the server is reachable + /// + GenericTcpIpClient_ForServer MonitorClient; + + /// + /// Timer to operate the bandaid monitor client in a loop. + /// + CTimer MonitorClientTimer; + + /// + /// + /// + int MonitorClientFailureCount; + + /// + /// 3 by default + /// + public int MonitorClientMaxFailureCount { get; set; } + /// /// Text representation of the Socket Status enum values for the server /// @@ -45,10 +88,10 @@ namespace PepperDash.Core { get { - if (Server != null) - return Server.State.ToString(); - else - return ServerState.SERVER_NOT_LISTENING.ToString(); + if (SecureServer != null) + return SecureServer.State.ToString(); + return ServerState.SERVER_NOT_LISTENING.ToString(); + } } @@ -58,7 +101,16 @@ namespace PepperDash.Core /// public bool IsConnected { - get { return (Server != null) && (Server.State == ServerState.SERVER_CONNECTED); } + get + { + if (SecureServer != null) + return (SecureServer.State & ServerState.SERVER_CONNECTED) == ServerState.SERVER_CONNECTED; + return false; + + //return (Secure ? SecureServer != null : UnsecureServer != null) && + //(Secure ? (SecureServer.State & ServerState.SERVER_CONNECTED) == ServerState.SERVER_CONNECTED : + // (UnsecureServer.State & ServerState.SERVER_CONNECTED) == ServerState.SERVER_CONNECTED); + } } /// @@ -74,7 +126,16 @@ namespace PepperDash.Core /// public bool IsListening { - get { return (Server != null) && (Server.State == ServerState.SERVER_LISTENING); } + get + { + if (SecureServer != null) + return (SecureServer.State & ServerState.SERVER_LISTENING) == ServerState.SERVER_LISTENING; + else + return false; + //return (Secure ? SecureServer != null : UnsecureServer != null) && + //(Secure ? (SecureServer.State & ServerState.SERVER_LISTENING) == ServerState.SERVER_LISTENING : + // (UnsecureServer.State & ServerState.SERVER_LISTENING) == ServerState.SERVER_LISTENING); + } } /// @@ -93,8 +154,8 @@ namespace PepperDash.Core { get { - if (Server != null) - return (ushort)Server.NumberOfClientsConnected; + if (SecureServer != null) + return (ushort)SecureServer.NumberOfClientsConnected; return 0; } } @@ -175,11 +236,13 @@ namespace PepperDash.Core //private timers for Heartbeats per client Dictionary HeartbeatTimerDictionary = new Dictionary(); - //flags to show the server is waiting for client at index to send the shared key + //flags to show the secure server is waiting for client at index to send the shared key List WaitingForSharedKey = new List(); + List ClientReadyAfterKeyExchange = new List(); + //Store the connected client indexes - List ConnectedClientsIndexes = new List(); + public List ConnectedClientsIndexes = new List(); /// /// Defaults to 2000 @@ -192,23 +255,72 @@ namespace PepperDash.Core private bool ServerStopped { get; set; } //Servers - TCPServer Server; + SecureTCPServer SecureServer; + + /// + /// + /// + bool ProgramIsStopping; #endregion #region Constructors /// - /// constructor + /// constructor S+ Does not accept a key. Use initialze with key to set the debug key on this device. If using with + make sure to set all properties manually. /// public GenericTcpIpServer() : base("Uninitialized Dynamic TCP Server") { + HeartbeatRequiredIntervalInSeconds = 15; CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); BufferSize = 2000; + MonitorClientMaxFailureCount = 3; + } + + /// + /// constructor with debug key set at instantiation. Make sure to set all properties before listening. + /// + /// + public GenericTcpIpServer(string key) + : base("Uninitialized Dynamic TCP Server") + { + HeartbeatRequiredIntervalInSeconds = 15; + CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); + BufferSize = 2000; + MonitorClientMaxFailureCount = 3; + Key = key; + } + + /// + /// Contstructor that sets all properties by calling the initialize method with a config object. + /// + /// + public GenericTcpIpServer(TcpServerConfigObject serverConfigObject) + : base("Uninitialized Dynamic TCP Server") + { + HeartbeatRequiredIntervalInSeconds = 15; + CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); + BufferSize = 2000; + MonitorClientMaxFailureCount = 3; + Initialize(serverConfigObject); } #endregion #region Methods - Server Actions + /// + /// Disconnects all clients and stops the server + /// + public void KillServer() + { + ServerStopped = true; + if (MonitorClient != null) + { + MonitorClient.Disconnect(); + } + DisconnectAllClientsForShutdown(); + StopListening(); + } + /// /// Initialize Key for device using client name from SIMPL+. Called on Listen from SIMPL+ /// @@ -218,37 +330,83 @@ namespace PepperDash.Core Key = key; } + public void Initialize(TcpServerConfigObject serverConfigObject) + { + try + { + if (serverConfigObject != null || string.IsNullOrEmpty(serverConfigObject.Key)) + { + Key = serverConfigObject.Key; + MaxClients = serverConfigObject.MaxClients; + Port = serverConfigObject.Port; + SharedKeyRequired = serverConfigObject.SharedKeyRequired; + SharedKey = serverConfigObject.SharedKey; + HeartbeatRequired = serverConfigObject.HeartbeatRequired; + HeartbeatRequiredIntervalInSeconds = serverConfigObject.HeartbeatRequiredIntervalInSeconds; + HeartbeatStringToMatch = serverConfigObject.HeartbeatStringToMatch; + BufferSize = serverConfigObject.BufferSize; + + } + else + { + ErrorLog.Error("Could not initialize server with key: {0}", serverConfigObject.Key); + } + } + catch + { + ErrorLog.Error("Could not initialize server with key: {0}", serverConfigObject.Key); + } + } + /// /// Start listening on the specified port /// public void Listen() { + ServerCCSection.Enter(); try { if (Port < 1 || Port > 65535) { - Debug.Console(1, Debug.ErrorLogLevel.Warning, "Server '{0}': Invalid port", Key); + Debug.Console(1, this, Debug.ErrorLogLevel.Error, "Server '{0}': Invalid port", Key); ErrorLog.Warn(string.Format("Server '{0}': Invalid port", Key)); return; } if (string.IsNullOrEmpty(SharedKey) && SharedKeyRequired) { - Debug.Console(1, Debug.ErrorLogLevel.Warning, "Server '{0}': No Shared Key set", Key); + Debug.Console(1, this, Debug.ErrorLogLevel.Error, "Server '{0}': No Shared Key set", Key); ErrorLog.Warn(string.Format("Server '{0}': No Shared Key set", Key)); return; } if (IsListening) return; - Server = new TCPServer(Port, MaxClients); - Server.SocketStatusChange += new TCPServerSocketStatusChangeEventHandler(SocketStatusChange); + + if (SecureServer == null) + { + SecureServer = new SecureTCPServer(Port, MaxClients); + SecureServer.SocketSendOrReceiveTimeOutInMs = (this.HeartbeatRequiredIntervalMs * 5); + SecureServer.HandshakeTimeout = 30; + SecureServer.SocketStatusChange += new SecureTCPServerSocketStatusChangeEventHandler(SecureServer_SocketStatusChange); + } + else + { + KillServer(); + SecureServer.PortNumber = Port; + } ServerStopped = false; - Server.WaitForConnectionAsync(IPAddress.Any, ConnectCallback); - onServerStateChange(); - Debug.Console(2, "Server Status: {0}, Socket Status: {1}\r\n", Server.State.ToString(), Server.ServerSocketStatus); + SecureServer.WaitForConnectionAsync(IPAddress.Any, SecureConnectCallback); + OnServerStateChange(SecureServer.State); + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Secure Server Status: {0}, Socket Status: {1}", SecureServer.State, SecureServer.ServerSocketStatus); + + // StartMonitorClient(); + + + ServerCCSection.Leave(); } catch (Exception ex) { - ErrorLog.Error("Error with Dynamic Server: {0}", ex.ToString()); + ServerCCSection.Leave(); + ErrorLog.Error("{1} Error with Dynamic Server: {0}", ex.ToString(), Key); } } @@ -257,23 +415,80 @@ namespace PepperDash.Core /// public void StopListening() { - Debug.Console(2, "Stopping Listener"); - if (Server != null) - Server.Stop(); - ServerStopped = true; - onServerStateChange(); + try + { + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Stopping Listener"); + if (SecureServer != null) + { + SecureServer.Stop(); + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Server State: {0}", SecureServer.State); + //SecureServer = null; + } + + ServerStopped = true; + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Server Stopped"); + + OnServerStateChange(SecureServer.State); + } + catch (Exception ex) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error stopping server. Error: {0}", ex); + } } + /// + /// Disconnects Client + /// + /// + public void DisconnectClient(uint client) + { + try + { + SecureServer.Disconnect(client); + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Disconnected client index: {0}", client); + } + catch (Exception ex) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error Disconnecting client index: {0}. Error: {1}", client, ex); + } + } /// /// Disconnect All Clients /// - public void DisconnectAllClients() + public void DisconnectAllClientsForShutdown() { - Debug.Console(2, "Disconnecting All Clients"); - if (Server != null) - Server.DisconnectAll(); - onConnectionChange(); - onServerStateChange(); //State shows both listening and connected + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Disconnecting All Clients"); + if (SecureServer != null) + { + SecureServer.SocketStatusChange -= SecureServer_SocketStatusChange; + foreach (var index in ConnectedClientsIndexes.ToList()) // copy it here so that it iterates properly + { + var i = index; + if (!SecureServer.ClientConnected(index)) + continue; + try + { + SecureServer.Disconnect(i); + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Disconnected client index: {0}", i); + } + catch (Exception ex) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error Disconnecting client index: {0}. Error: {1}", i, ex); + } + } + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Server Status: {0}", SecureServer.ServerSocketStatus); + } + + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Disconnected All Clients"); + ConnectedClientsIndexes.Clear(); + + if (!ProgramIsStopping) + { + OnConnectionChange(); + OnServerStateChange(SecureServer.State); //State shows both listening and connected + } + + // var o = new { }; } /// @@ -282,11 +497,29 @@ namespace PepperDash.Core /// public void BroadcastText(string text) { - if (ConnectedClientsIndexes.Count > 0) + CCriticalSection CCBroadcast = new CCriticalSection(); + CCBroadcast.Enter(); + try { - byte[] b = Encoding.GetEncoding(28591).GetBytes(text); - foreach (uint i in ConnectedClientsIndexes) - Server.SendDataAsync(i, b, b.Length, SendDataAsyncCallback); + if (ConnectedClientsIndexes.Count > 0) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes(text); + foreach (uint i in ConnectedClientsIndexes) + { + if (!SharedKeyRequired || (SharedKeyRequired && ClientReadyAfterKeyExchange.Contains(i))) + { + SocketErrorCodes error = SecureServer.SendDataAsync(i, b, b.Length, (x, y, z) => { }); + if (error != SocketErrorCodes.SOCKET_OK && error != SocketErrorCodes.SOCKET_OPERATION_PENDING) + Debug.Console(0, error.ToString()); + } + } + } + CCBroadcast.Leave(); + } + catch (Exception ex) + { + CCBroadcast.Leave(); + Debug.Console(2, this, Debug.ErrorLogLevel.Error, "Error Broadcasting messages from server. Error: {0}", ex.Message); } } @@ -297,18 +530,48 @@ namespace PepperDash.Core /// public void SendTextToClient(string text, uint clientIndex) { - byte[] b = Encoding.GetEncoding(28591).GetBytes(text); - Server.SendDataAsync(clientIndex, b, b.Length, SendDataAsyncCallback); + try + { + byte[] b = Encoding.GetEncoding(28591).GetBytes(text); + if (SecureServer != null && SecureServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) + { + if (!SharedKeyRequired || (SharedKeyRequired && ClientReadyAfterKeyExchange.Contains(clientIndex))) + SecureServer.SendDataAsync(clientIndex, b, b.Length, (x, y, z) => { }); + } + } + catch (Exception ex) + { + Debug.Console(0, this, "Error sending text to client. Text: {1}. Error: {0}", ex.Message, text); + } } //private method to check heartbeat requirements and start or reset timer - void checkHeartbeat(uint clientIndex, string received) + string checkHeartbeat(uint clientIndex, string received) { - if (HeartbeatRequired) + try { - if (!string.IsNullOrEmpty(HeartbeatStringToMatch)) + if (HeartbeatRequired) { - if (received == HeartbeatStringToMatch) + if (!string.IsNullOrEmpty(HeartbeatStringToMatch)) + { + var remainingText = received.Replace(HeartbeatStringToMatch, ""); + var noDelimiter = received.Trim(new char[] { '\r', '\n' }); + if (noDelimiter.Contains(HeartbeatStringToMatch)) + { + if (HeartbeatTimerDictionary.ContainsKey(clientIndex)) + HeartbeatTimerDictionary[clientIndex].Reset(HeartbeatRequiredIntervalMs); + else + { + CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); + HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); + } + Debug.Console(1, this, "Heartbeat Received: {0}, from client index: {1}", HeartbeatStringToMatch, clientIndex); + // Return Heartbeat + SendTextToClient(HeartbeatStringToMatch, clientIndex); + return remainingText; + } + } + else { if (HeartbeatTimerDictionary.ContainsKey(clientIndex)) HeartbeatTimerDictionary[clientIndex].Reset(HeartbeatRequiredIntervalMs); @@ -317,187 +580,405 @@ namespace PepperDash.Core CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); } + Debug.Console(1, this, "Heartbeat Received: {0}, from client index: {1}", received, clientIndex); + } + } + } + catch (Exception ex) + { + Debug.Console(1, this, "Error checking heartbeat: {0}", ex.Message); + } + return received; + } + + public string GetClientIPAddress(uint clientIndex) + { + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "GetClientIPAddress Index: {0}", clientIndex); + if (!SharedKeyRequired || (SharedKeyRequired && ClientReadyAfterKeyExchange.Contains(clientIndex))) + { + var ipa = this.SecureServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex); + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "GetClientIPAddress IPAddreess: {0}", ipa); + return ipa; + + } + else + { + return ""; + } + } + + #endregion + + #region Methods - HeartbeatTimer Callback + + void HeartbeatTimer_CallbackFunction(object o) + { + uint clientIndex = 99999; + string address = string.Empty; + try + { + clientIndex = (uint)o; + address = SecureServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex); + + Debug.Console(1, this, Debug.ErrorLogLevel.Warning, "Heartbeat not received for Client index {2} IP: {0}, DISCONNECTING BECAUSE HEARTBEAT REQUIRED IS TRUE {1}", + address, string.IsNullOrEmpty(HeartbeatStringToMatch) ? "" : ("HeartbeatStringToMatch: " + HeartbeatStringToMatch), clientIndex); + + if (SecureServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) + SendTextToClient("Heartbeat not received by server, closing connection", clientIndex); + + var discoResult = SecureServer.Disconnect(clientIndex); + //Debug.Console(1, this, "{0}", discoResult); + + if (HeartbeatTimerDictionary.ContainsKey(clientIndex)) + { + HeartbeatTimerDictionary[clientIndex].Stop(); + HeartbeatTimerDictionary[clientIndex].Dispose(); + HeartbeatTimerDictionary.Remove(clientIndex); + } + } + catch (Exception ex) + { + ErrorLog.Error("{3}: Heartbeat timeout Error on Client Index: {0}, at address: {1}, error: {2}", clientIndex, address, ex.Message, Key); + } + } + + #endregion + + #region Methods - Socket Status Changed Callbacks + /// + /// Secure Server Socket Status Changed Callback + /// + /// + /// + /// + void SecureServer_SocketStatusChange(SecureTCPServer server, uint clientIndex, SocketStatus serverSocketStatus) + { + try + { + + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "SecureServerSocketStatusChange Index:{0} status:{1} Port:{2} IP:{3}", clientIndex, serverSocketStatus, this.SecureServer.GetPortNumberServerAcceptedConnectionFromForSpecificClient(clientIndex), this.SecureServer.GetLocalAddressServerAcceptedConnectionFromForSpecificClient(clientIndex)); + if (serverSocketStatus != SocketStatus.SOCKET_STATUS_CONNECTED) + { + if (ConnectedClientsIndexes.Contains(clientIndex)) + ConnectedClientsIndexes.Remove(clientIndex); + if (HeartbeatRequired && HeartbeatTimerDictionary.ContainsKey(clientIndex)) + { + HeartbeatTimerDictionary[clientIndex].Stop(); + HeartbeatTimerDictionary[clientIndex].Dispose(); + HeartbeatTimerDictionary.Remove(clientIndex); + } + if (ClientReadyAfterKeyExchange.Contains(clientIndex)) + ClientReadyAfterKeyExchange.Remove(clientIndex); + } + } + catch (Exception ex) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error in Socket Status Change Callback. Error: {0}", ex); + } + onConnectionChange(clientIndex, server.GetServerSocketStatusForSpecificClient(clientIndex)); + } + + #endregion + + #region Methods Connected Callbacks + /// + /// Secure TCP Client Connected to Secure Server Callback + /// + /// + /// + void SecureConnectCallback(SecureTCPServer server, uint clientIndex) + { + try + { + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "ConnectCallback: IPAddress: {0}. Index: {1}. Status: {2}", + server.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex), + clientIndex, server.GetServerSocketStatusForSpecificClient(clientIndex)); + if (clientIndex != 0) + { + if (server.ClientConnected(clientIndex)) + { + + if (!ConnectedClientsIndexes.Contains(clientIndex)) + { + ConnectedClientsIndexes.Add(clientIndex); + } + if (SharedKeyRequired) + { + if (!WaitingForSharedKey.Contains(clientIndex)) + { + WaitingForSharedKey.Add(clientIndex); + } + byte[] b = Encoding.GetEncoding(28591).GetBytes("SharedKey:"); + server.SendDataAsync(clientIndex, b, b.Length, (x, y, z) => { }); + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Sent Shared Key Request to client at {0}", server.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex)); + } + else + { + OnServerClientReadyForCommunications(clientIndex); + } + if (HeartbeatRequired) + { + if (!HeartbeatTimerDictionary.ContainsKey(clientIndex)) + { + HeartbeatTimerDictionary.Add(clientIndex, new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs)); + } + } + + server.ReceiveDataAsync(clientIndex, SecureReceivedDataAsyncCallback); } } else { - if (HeartbeatTimerDictionary.ContainsKey(clientIndex)) - HeartbeatTimerDictionary[clientIndex].Reset(HeartbeatRequiredIntervalMs); - else + Debug.Console(1, this, Debug.ErrorLogLevel.Error, "Client attempt faulty."); + if (!ServerStopped) { - CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); - HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); + server.WaitForConnectionAsync(IPAddress.Any, SecureConnectCallback); + return; } } } + catch (Exception ex) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error in Socket Status Connect Callback. Error: {0}", ex); + } + //Debug.Console(1, this, Debug.ErrorLogLevel, "((((((Server State bitfield={0}; maxclient={1}; ServerStopped={2}))))))", + // server.State, + // MaxClients, + // ServerStopped); + if ((server.State & ServerState.SERVER_LISTENING) != ServerState.SERVER_LISTENING && MaxClients > 1 && !ServerStopped) + { + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Waiting for next connection"); + server.WaitForConnectionAsync(IPAddress.Any, SecureConnectCallback); + + } } + #endregion - #region Methods - Callbacks + #region Methods - Send/Receive Callbacks /// - /// Callback to disconnect if heartbeat timer finishes without being reset + /// Secure Received Data Async Callback /// - /// - void HeartbeatTimer_CallbackFunction(object o) - { - uint clientIndex = (uint)o; - - string address = Server.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex); - - ErrorLog.Error("Heartbeat not received for Client at IP: {0}, DISCONNECTING BECAUSE HEARTBEAT REQUIRED IS TRUE", address); - Debug.Console(2, "Heartbeat not received for Client at IP: {0}, DISCONNECTING BECAUSE HEARTBEAT REQUIRED IS TRUE", address); - - SendTextToClient("Heartbeat not received by server, closing connection", clientIndex); - Server.Disconnect(clientIndex); - HeartbeatTimerDictionary.Remove(clientIndex); - } - - /// - /// TCP Server Socket Status Change Callback - /// - /// - /// - /// - void SocketStatusChange(TCPServer server, uint clientIndex, SocketStatus serverSocketStatus) - { - Debug.Console(2, "Client at {0} ServerSocketStatus {1}", - server.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex), serverSocketStatus.ToString()); - if (server.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) - { - if (SharedKeyRequired && !WaitingForSharedKey.Contains(clientIndex)) - WaitingForSharedKey.Add(clientIndex); - if (!ConnectedClientsIndexes.Contains(clientIndex)) - ConnectedClientsIndexes.Add(clientIndex); - } - else - { - if (ConnectedClientsIndexes.Contains(clientIndex)) - ConnectedClientsIndexes.Remove(clientIndex); - if (HeartbeatRequired && HeartbeatTimerDictionary.ContainsKey(clientIndex)) - HeartbeatTimerDictionary.Remove(clientIndex); - } - if (Server.ServerSocketStatus.ToString() != Status) - onConnectionChange(); - } - - /// - /// TCP Client Connected to Server Callback - /// - /// - /// - void ConnectCallback(TCPServer myTCPServer, uint clientIndex) - { - if (myTCPServer.ClientConnected(clientIndex)) - { - if (SharedKeyRequired) - { - byte[] b = Encoding.GetEncoding(28591).GetBytes(SharedKey + "\n"); - myTCPServer.SendDataAsync(clientIndex, b, b.Length, SendDataAsyncCallback); - Debug.Console(2, "Sent Shared Key to client at {0}", myTCPServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex)); - } - if (HeartbeatRequired) - { - CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); - HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); - } - myTCPServer.ReceiveDataAsync(clientIndex, ReceivedDataAsyncCallback); - if (myTCPServer.State != ServerState.SERVER_LISTENING && MaxClients > 1 && !ServerStopped) - myTCPServer.WaitForConnectionAsync(IPAddress.Any, ConnectCallback); - } - if (myTCPServer.State != ServerState.SERVER_LISTENING && MaxClients > 1 && !ServerStopped) - myTCPServer.WaitForConnectionAsync(IPAddress.Any, ConnectCallback); - } - - /// - /// Send Data Asyc Callback - /// - /// - /// - /// - void SendDataAsyncCallback(TCPServer myTCPServer, uint clientIndex, int numberOfBytesSent) - { - //Seems there is nothing to do here - } - - /// - /// Received Data Async Callback - /// - /// + /// /// /// - void ReceivedDataAsyncCallback(TCPServer myTCPServer, uint clientIndex, int numberOfBytesReceived) + void SecureReceivedDataAsyncCallback(SecureTCPServer mySecureTCPServer, uint clientIndex, int numberOfBytesReceived) { if (numberOfBytesReceived > 0) { string received = "Nothing"; - byte[] bytes = myTCPServer.GetIncomingDataBufferForSpecificClient(clientIndex); - received = System.Text.Encoding.GetEncoding(28591).GetString(bytes, 0, numberOfBytesReceived); - if (WaitingForSharedKey.Contains(clientIndex)) + try { - received = received.Replace("\r", ""); - received = received.Replace("\n", ""); - if (received != SharedKey) + byte[] bytes = mySecureTCPServer.GetIncomingDataBufferForSpecificClient(clientIndex); + received = System.Text.Encoding.GetEncoding(28591).GetString(bytes, 0, numberOfBytesReceived); + if (WaitingForSharedKey.Contains(clientIndex)) { - byte[] b = Encoding.GetEncoding(28591).GetBytes("Shared key did not match server. Disconnecting"); - Debug.Console(2, "Client at index {0} Shared key did not match the server, disconnecting client", clientIndex); - ErrorLog.Error("Client at index {0} Shared key did not match the server, disconnecting client", clientIndex); - myTCPServer.SendDataAsync(clientIndex, b, b.Length, null); - myTCPServer.Disconnect(clientIndex); + received = received.Replace("\r", ""); + received = received.Replace("\n", ""); + if (received != SharedKey) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes("Shared key did not match server. Disconnecting"); + Debug.Console(1, this, Debug.ErrorLogLevel.Warning, "Client at index {0} Shared key did not match the server, disconnecting client. Key: {1}", clientIndex, received); + mySecureTCPServer.SendData(clientIndex, b, b.Length); + mySecureTCPServer.Disconnect(clientIndex); + WaitingForSharedKey.Remove(clientIndex); + return; + } + if (mySecureTCPServer.NumberOfClientsConnected > 0) + mySecureTCPServer.ReceiveDataAsync(clientIndex, SecureReceivedDataAsyncCallback); + WaitingForSharedKey.Remove(clientIndex); + byte[] success = Encoding.GetEncoding(28591).GetBytes("Shared Key Match"); + mySecureTCPServer.SendDataAsync(clientIndex, success, success.Length, null); + OnServerClientReadyForCommunications(clientIndex); + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Client with index {0} provided the shared key and successfully connected to the server", clientIndex); + return; } - if (myTCPServer.NumberOfClientsConnected > 0) - myTCPServer.ReceiveDataAsync(ReceivedDataAsyncCallback); - WaitingForSharedKey.Remove(clientIndex); - byte[] skResponse = Encoding.GetEncoding(28591).GetBytes("Shared Key Match, Connected and ready for communication"); - myTCPServer.SendDataAsync(clientIndex, skResponse, skResponse.Length, null); - myTCPServer.ReceiveDataAsync(ReceivedDataAsyncCallback); + //var address = mySecureTCPServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex); + //Debug.Console(1, this, "Secure Server Listening on Port: {0}, client IP: {1}, Client Index: {4}, NumberOfBytesReceived: {2}, Received: {3}\r\n", + // mySecureTCPServer.PortNumber.ToString(), address , numberOfBytesReceived.ToString(), received, clientIndex.ToString()); + if (!string.IsNullOrEmpty(checkHeartbeat(clientIndex, received))) + onTextReceived(received, clientIndex); } - else + catch (Exception ex) { - myTCPServer.ReceiveDataAsync(ReceivedDataAsyncCallback); - Debug.Console(2, "Server Listening on Port: {0}, client IP: {1}, NumberOfBytesReceived: {2}, Received: {3}\r\n", - myTCPServer.PortNumber, myTCPServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex), numberOfBytesReceived, received); - onTextReceived(received); + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error Receiving data: {0}. Error: {1}", received, ex); } - checkHeartbeat(clientIndex, received); } - if (myTCPServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) - myTCPServer.ReceiveDataAsync(clientIndex, ReceivedDataAsyncCallback); + if (mySecureTCPServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) + mySecureTCPServer.ReceiveDataAsync(clientIndex, SecureReceivedDataAsyncCallback); } + #endregion #region Methods - EventHelpers/Callbacks + //Private Helper method to call the Connection Change Event - void onConnectionChange() + void onConnectionChange(uint clientIndex, SocketStatus clientStatus) { + if (clientIndex != 0) //0 is error not valid client change + { + var handler = ClientConnectionChange; + if (handler != null) + { + handler(this, new GenericTcpServerSocketStatusChangeEventArgs(SecureServer, clientIndex, clientStatus)); + } + } + } + + //Private Helper method to call the Connection Change Event + void OnConnectionChange() + { + if (ProgramIsStopping) + { + return; + } var handler = ClientConnectionChange; if (handler != null) - handler(this, new DynamicTCPSocketStatusChangeEventArgs(Server, false)); + { + handler(this, new GenericTcpServerSocketStatusChangeEventArgs()); + } } //Private Helper Method to call the Text Received Event - void onTextReceived(string text) + void onTextReceived(string text, uint clientIndex) { var handler = TextReceived; if (handler != null) - handler(this, new GenericCommMethodReceiveTextArgs(text)); + handler(this, new GenericTcpServerCommMethodReceiveTextArgs(text, clientIndex)); } //Private Helper Method to call the Server State Change Event - void onServerStateChange() + void OnServerStateChange(ServerState state) { + if (ProgramIsStopping) + { + return; + } var handler = ServerStateChange; if (handler != null) - handler(this, new DynamicTCPServerStateChangedEventArgs(Server, false)); + { + handler(this, new GenericTcpServerStateChangedEventArgs(state)); + } } - //Private Event Handler method to handle the closing of connections when the program stops + /// + /// Private Event Handler method to handle the closing of connections when the program stops + /// + /// void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType) { if (programEventType == eProgramStatusEventType.Stopping) { - Debug.Console(1, this, "Program stopping. Closing server"); - DisconnectAllClients(); - StopListening(); + ProgramIsStopping = true; + // kill bandaid things + if (MonitorClientTimer != null) + MonitorClientTimer.Stop(); + if (MonitorClient != null) + MonitorClient.Disconnect(); + + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Program stopping. Closing server"); + KillServer(); + } + } + + //Private event handler method to raise the event that the server is ready to send data after a successful client shared key negotiation + void OnServerClientReadyForCommunications(uint clientIndex) + { + ClientReadyAfterKeyExchange.Add(clientIndex); + var handler = ServerClientReadyForCommunications; + if (handler != null) + handler(this, new GenericTcpServerSocketStatusChangeEventArgs( + this, clientIndex, SecureServer.GetServerSocketStatusForSpecificClient(clientIndex))); + } + #endregion + + #region Monitor Client + /// + /// Starts the monitor client cycle. Timed wait, then call RunMonitorClient + /// + void StartMonitorClient() + { + if (MonitorClientTimer != null) + { + return; + } + MonitorClientTimer = new CTimer(o => RunMonitorClient(), 60000); + } + + /// + /// + /// + void RunMonitorClient() + { + MonitorClient = new GenericTcpIpClient_ForServer(Key + "-MONITOR", "127.0.0.1", Port, 2000); + MonitorClient.SharedKeyRequired = this.SharedKeyRequired; + MonitorClient.SharedKey = this.SharedKey; + MonitorClient.ConnectionHasHungCallback = MonitorClientHasHungCallback; + //MonitorClient.ConnectionChange += MonitorClient_ConnectionChange; + MonitorClient.ClientReadyForCommunications += MonitorClient_IsReadyForComm; + + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Starting monitor check"); + + MonitorClient.Connect(); + // From here MonitorCLient either connects or hangs, MonitorClient will call back + + } + + /// + /// + /// + void StopMonitorClient() + { + if (MonitorClient == null) + return; + + MonitorClient.ClientReadyForCommunications -= MonitorClient_IsReadyForComm; + MonitorClient.Disconnect(); + MonitorClient = null; + } + + /// + /// On monitor connect, restart the operation + /// + void MonitorClient_IsReadyForComm(object sender, GenericTcpServerClientReadyForcommunicationsEventArgs args) + { + if (args.IsReady) + { + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Monitor client connection success. Disconnecting in 2s"); + MonitorClientTimer.Stop(); + MonitorClientTimer = null; + MonitorClientFailureCount = 0; + CrestronEnvironment.Sleep(2000); + StopMonitorClient(); + StartMonitorClient(); + } + } + + /// + /// If the client hangs, add to counter and maybe fire the choke event + /// + void MonitorClientHasHungCallback() + { + MonitorClientFailureCount++; + MonitorClientTimer.Stop(); + MonitorClientTimer = null; + StopMonitorClient(); + if (MonitorClientFailureCount < MonitorClientMaxFailureCount) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Warning, "Monitor client connection has hung {0} time{1}, maximum {2}", + MonitorClientFailureCount, MonitorClientFailureCount > 1 ? "s" : "", MonitorClientMaxFailureCount); + StartMonitorClient(); + } + else + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, + "\r***************************\rMonitor client connection has hung a maximum of {0} times.\r***************************", + MonitorClientMaxFailureCount); + + var handler = ServerHasChoked; + if (handler != null) + handler(); + // Some external thing is in charge here. Expected reset of program } } #endregion diff --git a/Pepperdash Core/Pepperdash Core/Comm/TcpServerConfigObject.cs b/Pepperdash Core/Pepperdash Core/Comm/TcpServerConfigObject.cs new file mode 100644 index 0000000..c7c1998 --- /dev/null +++ b/Pepperdash Core/Pepperdash Core/Comm/TcpServerConfigObject.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +namespace PepperDash.Core +{ + public class TcpServerConfigObject + { + public string Key { get; set; } + public bool Secure { get; set; } + public ushort MaxClients { get; set; } + public int Port { get; set; } + public bool SharedKeyRequired { get; set; } + public string SharedKey { get; set; } + public bool HeartbeatRequired { get; set; } + public ushort HeartbeatRequiredIntervalInSeconds { get; set; } + public string HeartbeatStringToMatch { get; set; } + public int BufferSize { get; set; } + } +} \ No newline at end of file diff --git a/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj b/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj index 5e509c5..13a79a5 100644 --- a/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj +++ b/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj @@ -64,9 +64,10 @@ + - + Code @@ -75,6 +76,7 @@ + diff --git a/Pepperdash Core/Pepperdash Core/Properties/AssemblyInfo.cs b/Pepperdash Core/Pepperdash Core/Properties/AssemblyInfo.cs index 61cd67e..de52999 100644 --- a/Pepperdash Core/Pepperdash Core/Properties/AssemblyInfo.cs +++ b/Pepperdash Core/Pepperdash Core/Properties/AssemblyInfo.cs @@ -4,4 +4,4 @@ [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Pepperdash_Core")] [assembly: AssemblyCopyright("Copyright © PepperDash 2019")] -[assembly: AssemblyVersion("1.0.13.*")] +[assembly: AssemblyVersion("1.0.14.*")] From 0d124ef93b00ab401029970883d725d3088b2794 Mon Sep 17 00:00:00 2001 From: Joshua Gutenplan Date: Mon, 18 Feb 2019 15:52:35 -0800 Subject: [PATCH 2/3] Updated clz and dll and tag to v1.14.27867 --- CLZ Builds/PepperDash_Core.clz | Bin 1239504 -> 1247744 bytes CLZ Builds/PepperDash_Core.dll | Bin 106680 -> 134328 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/CLZ Builds/PepperDash_Core.clz b/CLZ Builds/PepperDash_Core.clz index 58eb90ee62a7700ebe98382542e6aa3f176df7cb..b7d15e56fb78fc1ce59b3287f39dcfa0f74e76c8 100644 GIT binary patch delta 51870 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 tiuGO(5W*M^smkY7s`=UsF26K9Ux{R90A>R12( delta 43598 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 ayL|esk3R67_Qf+FSawJ4w*5a>fcQUQ!q83t literal 106680 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 K-rk$EUHm`cq;eww From 46c71d8f70a6f52b8ebc56b10094eab3513b5884 Mon Sep 17 00:00:00 2001 From: Jason T Alborough Date: Wed, 20 Feb 2019 11:30:32 -0500 Subject: [PATCH 3/3] Changes GenericTCPServer to use Non Secure TCPServer Classes. --- CLZ Builds/PepperDash_Core.clz | Bin 1247744 -> 1248533 bytes CLZ Builds/PepperDash_Core.dll | Bin 134328 -> 134840 bytes .../Comm/GenericTcpIpServer.cs | 95 +++++++++--------- 3 files changed, 48 insertions(+), 47 deletions(-) diff --git a/CLZ Builds/PepperDash_Core.clz b/CLZ Builds/PepperDash_Core.clz index b7d15e56fb78fc1ce59b3287f39dcfa0f74e76c8..ed8a69425f2693974a89e8682929780c20828251 100644 GIT binary patch delta 52767 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 G=Nn+q2JAoJU|`lzU|@(~6lr-d=y-q+0$20S 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�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 B+Vubc diff --git a/CLZ Builds/PepperDash_Core.dll b/CLZ Builds/PepperDash_Core.dll index c82aac564283655a3037fee4d8d20af920f25851..3e798d7a314ff0387498c112f01069e5e7996f20 100644 GIT binary patch literal 134840 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 A0RR91 literal 134328 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 ayL|esk3R67_Qf+FSawJ4w*5a>fcQUQ!q83t diff --git a/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpServer.cs b/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpServer.cs index 83add98..2ef2845 100644 --- a/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpServer.cs +++ b/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpServer.cs @@ -88,8 +88,8 @@ namespace PepperDash.Core { get { - if (SecureServer != null) - return SecureServer.State.ToString(); + if (myTcpServer != null) + return myTcpServer.State.ToString(); return ServerState.SERVER_NOT_LISTENING.ToString(); } @@ -103,8 +103,8 @@ namespace PepperDash.Core { get { - if (SecureServer != null) - return (SecureServer.State & ServerState.SERVER_CONNECTED) == ServerState.SERVER_CONNECTED; + if (myTcpServer != null) + return (myTcpServer.State & ServerState.SERVER_CONNECTED) == ServerState.SERVER_CONNECTED; return false; //return (Secure ? SecureServer != null : UnsecureServer != null) && @@ -128,8 +128,8 @@ namespace PepperDash.Core { get { - if (SecureServer != null) - return (SecureServer.State & ServerState.SERVER_LISTENING) == ServerState.SERVER_LISTENING; + if (myTcpServer != null) + return (myTcpServer.State & ServerState.SERVER_LISTENING) == ServerState.SERVER_LISTENING; else return false; //return (Secure ? SecureServer != null : UnsecureServer != null) && @@ -154,8 +154,8 @@ namespace PepperDash.Core { get { - if (SecureServer != null) - return (ushort)SecureServer.NumberOfClientsConnected; + if (myTcpServer != null) + return (ushort)myTcpServer.NumberOfClientsConnected; return 0; } } @@ -255,7 +255,7 @@ namespace PepperDash.Core private bool ServerStopped { get; set; } //Servers - SecureTCPServer SecureServer; + TCPServer myTcpServer; ///

/// @@ -381,22 +381,23 @@ namespace PepperDash.Core if (IsListening) return; - if (SecureServer == null) + if (myTcpServer == null) { - SecureServer = new SecureTCPServer(Port, MaxClients); - SecureServer.SocketSendOrReceiveTimeOutInMs = (this.HeartbeatRequiredIntervalMs * 5); - SecureServer.HandshakeTimeout = 30; - SecureServer.SocketStatusChange += new SecureTCPServerSocketStatusChangeEventHandler(SecureServer_SocketStatusChange); + myTcpServer = new TCPServer(Port, MaxClients); + myTcpServer.SocketSendOrReceiveTimeOutInMs = (this.HeartbeatRequiredIntervalMs * 5); + + // myTcpServer.HandshakeTimeout = 30; + myTcpServer.SocketStatusChange += new TCPServerSocketStatusChangeEventHandler(TcpServer_SocketStatusChange); } else { KillServer(); - SecureServer.PortNumber = Port; + myTcpServer.PortNumber = Port; } ServerStopped = false; - SecureServer.WaitForConnectionAsync(IPAddress.Any, SecureConnectCallback); - OnServerStateChange(SecureServer.State); - Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Secure Server Status: {0}, Socket Status: {1}", SecureServer.State, SecureServer.ServerSocketStatus); + myTcpServer.WaitForConnectionAsync(IPAddress.Any, TcpConnectCallback); + OnServerStateChange(myTcpServer.State); + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "TCP Server Status: {0}, Socket Status: {1}", myTcpServer.State, myTcpServer.ServerSocketStatus); // StartMonitorClient(); @@ -418,17 +419,17 @@ namespace PepperDash.Core try { Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Stopping Listener"); - if (SecureServer != null) + if (myTcpServer != null) { - SecureServer.Stop(); - Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Server State: {0}", SecureServer.State); + myTcpServer.Stop(); + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Server State: {0}", myTcpServer.State); //SecureServer = null; } ServerStopped = true; Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Server Stopped"); - OnServerStateChange(SecureServer.State); + OnServerStateChange(myTcpServer.State); } catch (Exception ex) { @@ -444,7 +445,7 @@ namespace PepperDash.Core { try { - SecureServer.Disconnect(client); + myTcpServer.Disconnect(client); Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Disconnected client index: {0}", client); } catch (Exception ex) @@ -458,17 +459,17 @@ namespace PepperDash.Core public void DisconnectAllClientsForShutdown() { Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Disconnecting All Clients"); - if (SecureServer != null) + if (myTcpServer != null) { - SecureServer.SocketStatusChange -= SecureServer_SocketStatusChange; + myTcpServer.SocketStatusChange -= TcpServer_SocketStatusChange; foreach (var index in ConnectedClientsIndexes.ToList()) // copy it here so that it iterates properly { var i = index; - if (!SecureServer.ClientConnected(index)) + if (!myTcpServer.ClientConnected(index)) continue; try { - SecureServer.Disconnect(i); + myTcpServer.Disconnect(i); Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Disconnected client index: {0}", i); } catch (Exception ex) @@ -476,7 +477,7 @@ namespace PepperDash.Core Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error Disconnecting client index: {0}. Error: {1}", i, ex); } } - Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Server Status: {0}", SecureServer.ServerSocketStatus); + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Server Status: {0}", myTcpServer.ServerSocketStatus); } Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Disconnected All Clients"); @@ -485,7 +486,7 @@ namespace PepperDash.Core if (!ProgramIsStopping) { OnConnectionChange(); - OnServerStateChange(SecureServer.State); //State shows both listening and connected + OnServerStateChange(myTcpServer.State); //State shows both listening and connected } // var o = new { }; @@ -508,7 +509,7 @@ namespace PepperDash.Core { if (!SharedKeyRequired || (SharedKeyRequired && ClientReadyAfterKeyExchange.Contains(i))) { - SocketErrorCodes error = SecureServer.SendDataAsync(i, b, b.Length, (x, y, z) => { }); + SocketErrorCodes error = myTcpServer.SendDataAsync(i, b, b.Length, (x, y, z) => { }); if (error != SocketErrorCodes.SOCKET_OK && error != SocketErrorCodes.SOCKET_OPERATION_PENDING) Debug.Console(0, error.ToString()); } @@ -533,10 +534,10 @@ namespace PepperDash.Core try { byte[] b = Encoding.GetEncoding(28591).GetBytes(text); - if (SecureServer != null && SecureServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) + if (myTcpServer != null && myTcpServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) { if (!SharedKeyRequired || (SharedKeyRequired && ClientReadyAfterKeyExchange.Contains(clientIndex))) - SecureServer.SendDataAsync(clientIndex, b, b.Length, (x, y, z) => { }); + myTcpServer.SendDataAsync(clientIndex, b, b.Length, (x, y, z) => { }); } } catch (Exception ex) @@ -596,7 +597,7 @@ namespace PepperDash.Core Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "GetClientIPAddress Index: {0}", clientIndex); if (!SharedKeyRequired || (SharedKeyRequired && ClientReadyAfterKeyExchange.Contains(clientIndex))) { - var ipa = this.SecureServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex); + var ipa = this.myTcpServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex); Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "GetClientIPAddress IPAddreess: {0}", ipa); return ipa; @@ -618,15 +619,15 @@ namespace PepperDash.Core try { clientIndex = (uint)o; - address = SecureServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex); + address = myTcpServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex); Debug.Console(1, this, Debug.ErrorLogLevel.Warning, "Heartbeat not received for Client index {2} IP: {0}, DISCONNECTING BECAUSE HEARTBEAT REQUIRED IS TRUE {1}", address, string.IsNullOrEmpty(HeartbeatStringToMatch) ? "" : ("HeartbeatStringToMatch: " + HeartbeatStringToMatch), clientIndex); - if (SecureServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) + if (myTcpServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) SendTextToClient("Heartbeat not received by server, closing connection", clientIndex); - var discoResult = SecureServer.Disconnect(clientIndex); + var discoResult = myTcpServer.Disconnect(clientIndex); //Debug.Console(1, this, "{0}", discoResult); if (HeartbeatTimerDictionary.ContainsKey(clientIndex)) @@ -651,12 +652,12 @@ namespace PepperDash.Core /// /// /// - void SecureServer_SocketStatusChange(SecureTCPServer server, uint clientIndex, SocketStatus serverSocketStatus) + void TcpServer_SocketStatusChange(TCPServer server, uint clientIndex, SocketStatus serverSocketStatus) { try { - Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "SecureServerSocketStatusChange Index:{0} status:{1} Port:{2} IP:{3}", clientIndex, serverSocketStatus, this.SecureServer.GetPortNumberServerAcceptedConnectionFromForSpecificClient(clientIndex), this.SecureServer.GetLocalAddressServerAcceptedConnectionFromForSpecificClient(clientIndex)); + Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "SecureServerSocketStatusChange Index:{0} status:{1} Port:{2} IP:{3}", clientIndex, serverSocketStatus, this.myTcpServer.GetPortNumberServerAcceptedConnectionFromForSpecificClient(clientIndex), this.myTcpServer.GetLocalAddressServerAcceptedConnectionFromForSpecificClient(clientIndex)); if (serverSocketStatus != SocketStatus.SOCKET_STATUS_CONNECTED) { if (ConnectedClientsIndexes.Contains(clientIndex)) @@ -686,7 +687,7 @@ namespace PepperDash.Core /// /// /// - void SecureConnectCallback(SecureTCPServer server, uint clientIndex) + void TcpConnectCallback(TCPServer server, uint clientIndex) { try { @@ -724,7 +725,7 @@ namespace PepperDash.Core } } - server.ReceiveDataAsync(clientIndex, SecureReceivedDataAsyncCallback); + server.ReceiveDataAsync(clientIndex, TcpServerReceivedDataAsyncCallback); } } else @@ -732,7 +733,7 @@ namespace PepperDash.Core Debug.Console(1, this, Debug.ErrorLogLevel.Error, "Client attempt faulty."); if (!ServerStopped) { - server.WaitForConnectionAsync(IPAddress.Any, SecureConnectCallback); + server.WaitForConnectionAsync(IPAddress.Any, TcpConnectCallback); return; } } @@ -748,7 +749,7 @@ namespace PepperDash.Core if ((server.State & ServerState.SERVER_LISTENING) != ServerState.SERVER_LISTENING && MaxClients > 1 && !ServerStopped) { Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Waiting for next connection"); - server.WaitForConnectionAsync(IPAddress.Any, SecureConnectCallback); + server.WaitForConnectionAsync(IPAddress.Any, TcpConnectCallback); } } @@ -762,7 +763,7 @@ namespace PepperDash.Core /// /// /// - void SecureReceivedDataAsyncCallback(SecureTCPServer mySecureTCPServer, uint clientIndex, int numberOfBytesReceived) + void TcpServerReceivedDataAsyncCallback(TCPServer mySecureTCPServer, uint clientIndex, int numberOfBytesReceived) { if (numberOfBytesReceived > 0) { @@ -785,7 +786,7 @@ namespace PepperDash.Core return; } if (mySecureTCPServer.NumberOfClientsConnected > 0) - mySecureTCPServer.ReceiveDataAsync(clientIndex, SecureReceivedDataAsyncCallback); + mySecureTCPServer.ReceiveDataAsync(clientIndex, TcpServerReceivedDataAsyncCallback); WaitingForSharedKey.Remove(clientIndex); byte[] success = Encoding.GetEncoding(28591).GetBytes("Shared Key Match"); mySecureTCPServer.SendDataAsync(clientIndex, success, success.Length, null); @@ -805,7 +806,7 @@ namespace PepperDash.Core } } if (mySecureTCPServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) - mySecureTCPServer.ReceiveDataAsync(clientIndex, SecureReceivedDataAsyncCallback); + mySecureTCPServer.ReceiveDataAsync(clientIndex, TcpServerReceivedDataAsyncCallback); } #endregion @@ -820,7 +821,7 @@ namespace PepperDash.Core var handler = ClientConnectionChange; if (handler != null) { - handler(this, new GenericTcpServerSocketStatusChangeEventArgs(SecureServer, clientIndex, clientStatus)); + handler(this, new GenericTcpServerSocketStatusChangeEventArgs(myTcpServer, clientIndex, clientStatus)); } } } @@ -888,7 +889,7 @@ namespace PepperDash.Core var handler = ServerClientReadyForCommunications; if (handler != null) handler(this, new GenericTcpServerSocketStatusChangeEventArgs( - this, clientIndex, SecureServer.GetServerSocketStatusForSpecificClient(clientIndex))); + this, clientIndex, myTcpServer.GetServerSocketStatusForSpecificClient(clientIndex))); } #endregion