diff --git a/Pepperdash Core/Pepperdash Core.suo b/Pepperdash Core/Pepperdash Core.suo
index 71a36d1..95872f0 100644
Binary files a/Pepperdash Core/Pepperdash Core.suo and b/Pepperdash Core/Pepperdash Core.suo differ
diff --git a/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpClient.cs b/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpClient.cs
index 0b584d0..829e8b0 100644
--- a/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpClient.cs
+++ b/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpClient.cs
@@ -47,6 +47,26 @@ namespace SecureTCP.SecureTCP.Client
set { Port = Convert.ToInt32(value); }
}
+ ///
+ /// 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
+ ///
+ 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; }
+
///
/// Defaults to 2000
///
@@ -195,17 +215,22 @@ namespace SecureTCP.SecureTCP.Client
}
if (Port < 1 || Port > 65535)
{
- {
- Debug.Console(1, Debug.ErrorLogLevel.Warning, "GenericSecureTcpClient '{0}': Invalid port", Key);
- return;
- }
+ Debug.Console(1, Debug.ErrorLogLevel.Warning, "GenericSecureTcpClient '{0}': Invalid port", Key);
+ 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.SocketStatusChange += Client_SocketStatusChange;
try
{
DisconnectCalledByUser = false;
+ WaitingForSharedKeyResponse = true;
SocketErrorCodes error = Client.ConnectToServer();
}
catch (Exception ex)
@@ -231,7 +256,7 @@ namespace SecureTCP.SecureTCP.Client
{
Client.DisconnectFromServer();
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)
@@ -239,15 +264,35 @@ namespace SecureTCP.SecureTCP.Client
if (numBytes > 0)
{
var bytes = client.IncomingDataBuffer.Take(numBytes).ToArray();
- var bytesHandler = BytesReceived;
- if (bytesHandler != null)
- bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes));
- var textHandler = TextReceived;
- if (textHandler != null)
- {
- var str = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length);
- textHandler(this, new GenericCommMethodReceiveTextArgs(str));
- }
+ var str = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length);
+ if (WaitingForSharedKeyResponse)
+ {
+ 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(Receive);
}
@@ -258,32 +303,15 @@ namespace SecureTCP.SecureTCP.Client
public void SendText(string 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);
- }
-
- ///
- /// This is useful from console and...?
- ///
- 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);
}
+ 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)
{
@@ -296,6 +324,7 @@ namespace SecureTCP.SecureTCP.Client
{
case SocketStatus.SOCKET_STATUS_CONNECTED:
Client.ReceiveDataAsync(Receive);
+ SendText(SharedKey + "\n");
DisconnectCalledByUser = false;
break;
}
diff --git a/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpClient.cs b/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpClient.cs
index 2921899..350a7a6 100644
--- a/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpClient.cs
+++ b/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpClient.cs
@@ -256,7 +256,7 @@ namespace PepperDash.Core
{
Client.DisconnectFromServer();
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)
diff --git a/Pepperdash Core/Pepperdash Core/PepperDash_Core.projectinfo b/Pepperdash Core/Pepperdash Core/PepperDash_Core.projectinfo
index a867796..c1f2b7a 100644
Binary files a/Pepperdash Core/Pepperdash Core/PepperDash_Core.projectinfo and b/Pepperdash Core/Pepperdash Core/PepperDash_Core.projectinfo differ
diff --git a/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.clz b/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.clz
index 748d9e4..3c11ef7 100644
Binary files a/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.clz and b/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.clz differ
diff --git a/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.config b/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.config
index 3a016a5..6e9762c 100644
--- a/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.config
+++ b/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.config
@@ -10,8 +10,8 @@
- 3/9/2017 11:48:28 PM
- 1.0.6277.42853
+ 3/10/2017 6:22:56 PM
+ 1.0.6278.33087
Crestron.SIMPLSharp, Version=2.0.52.0, Culture=neutral, PublicKeyToken=812d080f93e2de10
diff --git a/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.dll b/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.dll
index ea49e6d..1f7e14a 100644
Binary files a/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.dll and b/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.dll differ
diff --git a/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.pdb b/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.pdb
index b93f3d3..2dadba9 100644
Binary files a/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.pdb and b/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.pdb differ
diff --git a/Pepperdash Core/Pepperdash Core/bin/manifest.info b/Pepperdash Core/Pepperdash Core/bin/manifest.info
index 1ef813c..d834f12 100644
--- a/Pepperdash Core/Pepperdash Core/bin/manifest.info
+++ b/Pepperdash Core/Pepperdash Core/bin/manifest.info
@@ -1,4 +1,4 @@
-MainAssembly=PepperDash_Core.dll:27cdfa30fe4a62d52b62944b0c35d6e3
+MainAssembly=PepperDash_Core.dll:79619d005133babcf49ba6c3bbc3de28
MainAssemblyMinFirmwareVersion=1.007.0017
MainAssemblyResource=SimplSharpData.dat:315526abf906cded47fb0c7510266a7e
ü
diff --git a/Pepperdash Core/Pepperdash Core/bin/manifest.ser b/Pepperdash Core/Pepperdash Core/bin/manifest.ser
index bd17c41..218864b 100644
Binary files a/Pepperdash Core/Pepperdash Core/bin/manifest.ser and b/Pepperdash Core/Pepperdash Core/bin/manifest.ser differ
diff --git a/Pepperdash Core/Pepperdash Core/obj/Debug/PepperDash_Core.dll b/Pepperdash Core/Pepperdash Core/obj/Debug/PepperDash_Core.dll
index 393d09a..202c9a4 100644
Binary files a/Pepperdash Core/Pepperdash Core/obj/Debug/PepperDash_Core.dll and b/Pepperdash Core/Pepperdash Core/obj/Debug/PepperDash_Core.dll differ
diff --git a/Pepperdash Core/Pepperdash Core/obj/Debug/PepperDash_Core.pdb b/Pepperdash Core/Pepperdash Core/obj/Debug/PepperDash_Core.pdb
index c012a2a..920491b 100644
Binary files a/Pepperdash Core/Pepperdash Core/obj/Debug/PepperDash_Core.pdb and b/Pepperdash Core/Pepperdash Core/obj/Debug/PepperDash_Core.pdb differ