mirror of
https://github.com/PepperDash/PepperDashCore.git
synced 2026-02-16 05:04:48 +00:00
Updated secure client, I think this is the final version for the Secure Client, will be adding the server from Pro next.
This commit is contained in:
Binary file not shown.
@@ -47,6 +47,26 @@ namespace SecureTCP.SecureTCP.Client
|
|||||||
set { Port = Convert.ToInt32(value); }
|
set { Port = Convert.ToInt32(value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 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
|
||||||
|
/// </summary>
|
||||||
|
private string _SharedKey;
|
||||||
|
public string SharedKey
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _SharedKey;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (Client.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED)
|
||||||
|
Client.DisconnectFromServer();
|
||||||
|
_SharedKey = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool WaitingForSharedKeyResponse { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Defaults to 2000
|
/// Defaults to 2000
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -195,17 +215,22 @@ namespace SecureTCP.SecureTCP.Client
|
|||||||
}
|
}
|
||||||
if (Port < 1 || Port > 65535)
|
if (Port < 1 || Port > 65535)
|
||||||
{
|
{
|
||||||
{
|
Debug.Console(1, Debug.ErrorLogLevel.Warning, "GenericSecureTcpClient '{0}': Invalid port", Key);
|
||||||
Debug.Console(1, Debug.ErrorLogLevel.Warning, "GenericSecureTcpClient '{0}': Invalid port", Key);
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (string.IsNullOrEmpty(SharedKey))
|
||||||
|
{
|
||||||
|
Debug.Console(1, Debug.ErrorLogLevel.Warning, "GenericSecureTcpClient '{0}': No Shared Key set", Key);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (Client != null)
|
||||||
|
Client.Dispose();
|
||||||
Client = new SecureTCPClient(Hostname, Port, BufferSize);
|
Client = new SecureTCPClient(Hostname, Port, BufferSize);
|
||||||
Client.SocketStatusChange += Client_SocketStatusChange;
|
Client.SocketStatusChange += Client_SocketStatusChange;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
DisconnectCalledByUser = false;
|
DisconnectCalledByUser = false;
|
||||||
|
WaitingForSharedKeyResponse = true;
|
||||||
SocketErrorCodes error = Client.ConnectToServer();
|
SocketErrorCodes error = Client.ConnectToServer();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -231,7 +256,7 @@ namespace SecureTCP.SecureTCP.Client
|
|||||||
{
|
{
|
||||||
Client.DisconnectFromServer();
|
Client.DisconnectFromServer();
|
||||||
Debug.Console(2, "Attempting reconnect, status={0}", Client.ClientStatus);
|
Debug.Console(2, "Attempting reconnect, status={0}", Client.ClientStatus);
|
||||||
RetryTimer = new CTimer(ConnectToServerCallback, 1000);
|
RetryTimer = new CTimer(ConnectToServerCallback, AutoReconnectIntervalMs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Receive(SecureTCPClient client, int numBytes)
|
void Receive(SecureTCPClient client, int numBytes)
|
||||||
@@ -239,15 +264,35 @@ namespace SecureTCP.SecureTCP.Client
|
|||||||
if (numBytes > 0)
|
if (numBytes > 0)
|
||||||
{
|
{
|
||||||
var bytes = client.IncomingDataBuffer.Take(numBytes).ToArray();
|
var bytes = client.IncomingDataBuffer.Take(numBytes).ToArray();
|
||||||
var bytesHandler = BytesReceived;
|
var str = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length);
|
||||||
if (bytesHandler != null)
|
if (WaitingForSharedKeyResponse)
|
||||||
bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes));
|
{
|
||||||
var textHandler = TextReceived;
|
if (str != (SharedKey + "\n"))
|
||||||
if (textHandler != null)
|
{
|
||||||
{
|
WaitingForSharedKeyResponse = false;
|
||||||
var str = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length);
|
Client.DisconnectFromServer();
|
||||||
textHandler(this, new GenericCommMethodReceiveTextArgs(str));
|
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(Receive);
|
Client.ReceiveDataAsync(Receive);
|
||||||
}
|
}
|
||||||
@@ -258,32 +303,15 @@ namespace SecureTCP.SecureTCP.Client
|
|||||||
public void SendText(string text)
|
public void SendText(string text)
|
||||||
{
|
{
|
||||||
var bytes = Encoding.GetEncoding(28591).GetBytes(text);
|
var bytes = Encoding.GetEncoding(28591).GetBytes(text);
|
||||||
// Check debug level before processing byte array
|
|
||||||
//if (Debug.Level == 2)
|
|
||||||
// Debug.Console(2, this, "Sending {0} bytes: '{1}'", bytes.Length, ComTextHelper.GetEscapedText(bytes));
|
|
||||||
Client.SendData(bytes, bytes.Length);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This is useful from console and...?
|
|
||||||
/// </summary>
|
|
||||||
public void SendEscapedText(string text)
|
|
||||||
{
|
|
||||||
var unescapedText = Regex.Replace(text, @"\\x([0-9a-fA-F][0-9a-fA-F])", s =>
|
|
||||||
{
|
|
||||||
var hex = s.Groups[1].Value;
|
|
||||||
return ((char)Convert.ToByte(hex, 16)).ToString();
|
|
||||||
});
|
|
||||||
SendText(unescapedText);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SendBytes(byte[] bytes)
|
|
||||||
{
|
|
||||||
//if (Debug.Level == 2)
|
|
||||||
// Debug.Console(2, this, "Sending {0} bytes: '{1}'", bytes.Length, ComTextHelper.GetEscapedText(bytes));
|
|
||||||
Client.SendData(bytes, bytes.Length);
|
Client.SendData(bytes, bytes.Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendBytes(byte[] bytes)
|
||||||
|
{
|
||||||
|
//if (Debug.Level == 2)
|
||||||
|
// Debug.Console(2, this, "Sending {0} bytes: '{1}'", bytes.Length, ComTextHelper.GetEscapedText(bytes));
|
||||||
|
Client.SendData(bytes, bytes.Length);
|
||||||
|
}
|
||||||
|
|
||||||
void Client_SocketStatusChange(SecureTCPClient client, SocketStatus clientSocketStatus)
|
void Client_SocketStatusChange(SecureTCPClient client, SocketStatus clientSocketStatus)
|
||||||
{
|
{
|
||||||
@@ -296,6 +324,7 @@ namespace SecureTCP.SecureTCP.Client
|
|||||||
{
|
{
|
||||||
case SocketStatus.SOCKET_STATUS_CONNECTED:
|
case SocketStatus.SOCKET_STATUS_CONNECTED:
|
||||||
Client.ReceiveDataAsync(Receive);
|
Client.ReceiveDataAsync(Receive);
|
||||||
|
SendText(SharedKey + "\n");
|
||||||
DisconnectCalledByUser = false;
|
DisconnectCalledByUser = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ namespace PepperDash.Core
|
|||||||
{
|
{
|
||||||
Client.DisconnectFromServer();
|
Client.DisconnectFromServer();
|
||||||
Debug.Console(2, "Attempting reconnect, status={0}", Client.ClientStatus);
|
Debug.Console(2, "Attempting reconnect, status={0}", Client.ClientStatus);
|
||||||
RetryTimer = new CTimer(o => { Client.ConnectToServerAsync(ConnectToServerCallback); }, 1000);
|
RetryTimer = new CTimer(o => { Client.ConnectToServerAsync(ConnectToServerCallback); }, AutoReconnectIntervalMs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Receive(TCPClient client, int numBytes)
|
void Receive(TCPClient client, int numBytes)
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -10,8 +10,8 @@
|
|||||||
<ArchiveName />
|
<ArchiveName />
|
||||||
</RequiredInfo>
|
</RequiredInfo>
|
||||||
<OptionalInfo>
|
<OptionalInfo>
|
||||||
<CompiledOn>3/9/2017 11:48:28 PM</CompiledOn>
|
<CompiledOn>3/10/2017 6:22:56 PM</CompiledOn>
|
||||||
<CompilerRev>1.0.6277.42853</CompilerRev>
|
<CompilerRev>1.0.6278.33087</CompilerRev>
|
||||||
</OptionalInfo>
|
</OptionalInfo>
|
||||||
<Plugin>
|
<Plugin>
|
||||||
<Version>Crestron.SIMPLSharp, Version=2.0.52.0, Culture=neutral, PublicKeyToken=812d080f93e2de10</Version>
|
<Version>Crestron.SIMPLSharp, Version=2.0.52.0, Culture=neutral, PublicKeyToken=812d080f93e2de10</Version>
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
MainAssembly=PepperDash_Core.dll:27cdfa30fe4a62d52b62944b0c35d6e3
|
MainAssembly=PepperDash_Core.dll:79619d005133babcf49ba6c3bbc3de28
|
||||||
MainAssemblyMinFirmwareVersion=1.007.0017
|
MainAssemblyMinFirmwareVersion=1.007.0017
|
||||||
MainAssemblyResource=SimplSharpData.dat:315526abf906cded47fb0c7510266a7e
|
MainAssemblyResource=SimplSharpData.dat:315526abf906cded47fb0c7510266a7e
|
||||||
ü
|
ü
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user