Merged in maintenance/PR-1 (pull request #14)

Maintenance/PR-1

Approved-by: Neil Dorin <ndorin@pepperdash.com>
This commit is contained in:
Neil Dorin
2019-05-23 20:17:52 +00:00
7 changed files with 92 additions and 68 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -669,6 +669,8 @@ namespace PepperDash.Core
} }
if (ClientReadyAfterKeyExchange.Contains(clientIndex)) if (ClientReadyAfterKeyExchange.Contains(clientIndex))
ClientReadyAfterKeyExchange.Remove(clientIndex); ClientReadyAfterKeyExchange.Remove(clientIndex);
if (WaitingForSharedKey.Contains(clientIndex))
WaitingForSharedKey.Remove(clientIndex);
} }
} }
catch (Exception ex) catch (Exception ex)
@@ -781,31 +783,33 @@ namespace PepperDash.Core
Debug.Console(1, this, Debug.ErrorLogLevel.Warning, "Client at index {0} Shared key did not match the server, disconnecting client. Key: {1}", clientIndex, received); 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.SendData(clientIndex, b, b.Length);
mySecureTCPServer.Disconnect(clientIndex); mySecureTCPServer.Disconnect(clientIndex);
WaitingForSharedKey.Remove(clientIndex);
return; return;
} }
if (mySecureTCPServer.NumberOfClientsConnected > 0)
mySecureTCPServer.ReceiveDataAsync(clientIndex, SecureReceivedDataAsyncCallback);
WaitingForSharedKey.Remove(clientIndex); WaitingForSharedKey.Remove(clientIndex);
byte[] success = Encoding.GetEncoding(28591).GetBytes("Shared Key Match"); byte[] success = Encoding.GetEncoding(28591).GetBytes("Shared Key Match");
mySecureTCPServer.SendDataAsync(clientIndex, success, success.Length, null); mySecureTCPServer.SendDataAsync(clientIndex, success, success.Length, null);
OnServerClientReadyForCommunications(clientIndex); OnServerClientReadyForCommunications(clientIndex);
Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Client with index {0} provided the shared key and successfully connected to the server", clientIndex); Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Client with index {0} provided the shared key and successfully connected to the server", clientIndex);
return;
} }
//var address = mySecureTCPServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex); else if (!string.IsNullOrEmpty(checkHeartbeat(clientIndex, received)))
//Debug.Console(1, this, "Secure Server Listening on Port: {0}, client IP: {1}, Client Index: {4}, NumberOfBytesReceived: {2}, Received: {3}\r\n", onTextReceived(received, clientIndex);
// mySecureTCPServer.PortNumber.ToString(), address , numberOfBytesReceived.ToString(), received, clientIndex.ToString());
if (!string.IsNullOrEmpty(checkHeartbeat(clientIndex, received)))
onTextReceived(received, clientIndex);
} }
catch (Exception ex) catch (Exception ex)
{ {
Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error Receiving data: {0}. Error: {1}", received, ex); Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error Receiving data: {0}. Error: {1}", received, ex);
} }
if (mySecureTCPServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED)
mySecureTCPServer.ReceiveDataAsync(clientIndex, SecureReceivedDataAsyncCallback);
} }
if (mySecureTCPServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) else
mySecureTCPServer.ReceiveDataAsync(clientIndex, SecureReceivedDataAsyncCallback); {
// If numberOfBytesReceived <= 0
mySecureTCPServer.Disconnect(clientIndex);
}
} }
#endregion #endregion

View File

@@ -673,6 +673,8 @@ namespace PepperDash.Core
} }
if (ClientReadyAfterKeyExchange.Contains(clientIndex)) if (ClientReadyAfterKeyExchange.Contains(clientIndex))
ClientReadyAfterKeyExchange.Remove(clientIndex); ClientReadyAfterKeyExchange.Remove(clientIndex);
if (WaitingForSharedKey.Contains(clientIndex))
WaitingForSharedKey.Remove(clientIndex);
} }
} }
catch (Exception ex) catch (Exception ex)
@@ -766,50 +768,51 @@ namespace PepperDash.Core
/// <param name="mySecureTCPServer"></param> /// <param name="mySecureTCPServer"></param>
/// <param name="clientIndex"></param> /// <param name="clientIndex"></param>
/// <param name="numberOfBytesReceived"></param> /// <param name="numberOfBytesReceived"></param>
void TcpServerReceivedDataAsyncCallback(TCPServer mySecureTCPServer, uint clientIndex, int numberOfBytesReceived) void TcpServerReceivedDataAsyncCallback(TCPServer myTCPServer, uint clientIndex, int numberOfBytesReceived)
{ {
if (numberOfBytesReceived > 0) if (numberOfBytesReceived > 0)
{ {
string received = "Nothing"; string received = "Nothing";
try try
{ {
byte[] bytes = mySecureTCPServer.GetIncomingDataBufferForSpecificClient(clientIndex); byte[] bytes = myTCPServer.GetIncomingDataBufferForSpecificClient(clientIndex);
received = System.Text.Encoding.GetEncoding(28591).GetString(bytes, 0, numberOfBytesReceived); received = System.Text.Encoding.GetEncoding(28591).GetString(bytes, 0, numberOfBytesReceived);
if (WaitingForSharedKey.Contains(clientIndex)) if (WaitingForSharedKey.Contains(clientIndex))
{ {
received = received.Replace("\r", ""); received = received.Replace("\r", "");
received = received.Replace("\n", ""); received = received.Replace("\n", "");
if (received != SharedKey) if (received != SharedKey)
{ {
byte[] b = Encoding.GetEncoding(28591).GetBytes("Shared key did not match server. Disconnecting"); 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); 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); myTCPServer.SendData(clientIndex, b, b.Length);
mySecureTCPServer.Disconnect(clientIndex); myTCPServer.Disconnect(clientIndex);
WaitingForSharedKey.Remove(clientIndex); return;
return; }
}
if (mySecureTCPServer.NumberOfClientsConnected > 0) WaitingForSharedKey.Remove(clientIndex);
mySecureTCPServer.ReceiveDataAsync(clientIndex, TcpServerReceivedDataAsyncCallback); byte[] success = Encoding.GetEncoding(28591).GetBytes("Shared Key Match");
WaitingForSharedKey.Remove(clientIndex); myTCPServer.SendDataAsync(clientIndex, success, success.Length, null);
byte[] success = Encoding.GetEncoding(28591).GetBytes("Shared Key Match"); OnServerClientReadyForCommunications(clientIndex);
mySecureTCPServer.SendDataAsync(clientIndex, success, success.Length, null); Debug.Console(1, this, Debug.ErrorLogLevel.Notice, "Client with index {0} provided the shared key and successfully connected to the server", clientIndex);
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; else if (!string.IsNullOrEmpty(checkHeartbeat(clientIndex, received)))
} onTextReceived(received, clientIndex);
//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", catch (Exception ex)
// mySecureTCPServer.PortNumber.ToString(), address , numberOfBytesReceived.ToString(), received, clientIndex.ToString()); {
if (!string.IsNullOrEmpty(checkHeartbeat(clientIndex, received))) Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error Receiving data: {0}. Error: {1}", received, ex);
onTextReceived(received, clientIndex); }
} if (myTCPServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED)
catch (Exception ex) myTCPServer.ReceiveDataAsync(clientIndex, TcpServerReceivedDataAsyncCallback);
{ }
Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error Receiving data: {0}. Error: {1}", received, ex); else
} {
} // If numberOfBytesReceived <= 0
if (mySecureTCPServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) myTCPServer.Disconnect();
mySecureTCPServer.ReceiveDataAsync(clientIndex, TcpServerReceivedDataAsyncCallback); }
} }
#endregion #endregion

View File

@@ -222,24 +222,24 @@ namespace PepperDash.Core
{ {
try try
{ {
while (true) while (true)
{ {
// Pull from Queue and fire an event. Block indefinitely until an item can be removed, similar to a Gather. // Pull from Queue and fire an event. Block indefinitely until an item can be removed, similar to a Gather.
var message = MessageQueue.Dequeue(); var message = MessageQueue.Dequeue();
var dataRecivedExtra = DataRecievedExtra; var dataRecivedExtra = DataRecievedExtra;
if (dataRecivedExtra != null) if (dataRecivedExtra != null)
{ {
dataRecivedExtra(this, message); dataRecivedExtra(this, message);
} }
} }
} }
catch (Exception e) catch (Exception e)
{ {
Debug.Console(0, "GenericUdpServer DequeueEvent error: {0}\r", e); Debug.Console(0, "GenericUdpServer DequeueEvent error: {0}\r", e);
} }
finally // Make sure to leave the CCritical section in case an exception above stops this thread, or we won't be able to restart it.
if (DequeueLock != null)
{ {
// Make sure to leave the CCritical section in case an exception above stops this thread, or we won't be able to restart it.
DequeueLock.Leave(); DequeueLock.Leave();
} }
} }

View File

@@ -4,4 +4,4 @@
[assembly: AssemblyCompany("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Pepperdash_Core")] [assembly: AssemblyProduct("Pepperdash_Core")]
[assembly: AssemblyCopyright("Copyright © PepperDash 2019")] [assembly: AssemblyCopyright("Copyright © PepperDash 2019")]
[assembly: AssemblyVersion("1.0.19.*")] [assembly: AssemblyVersion("1.0.20.*")]

17
Readme.md Normal file
View File

@@ -0,0 +1,17 @@
# Pepperdash Core
#### Workflow process
- Create a Jira issue for the feature/bugfix. If you know you're targeting this update to coincide with a new release of Core, specify that release (or create a new one) as the Fix Version for the Jira issue
- Branch from development using the syntax [feature/bugfix]/[pdc-x] (where x is the Jira issue number)
- Modify code to suit and test. Make commits to the branch as you work.
- Log a Pull Request on www.bitbucket.org and tag Heath and Neil as reviewers
#### Pull Request process
- Check out the branch for the PR and review.
- If necessary, merge the latest Development branch into the PR branch. Resolve any conflicts.
- Increment the appropriate Assembly version number to match the next release in Jira
- Build the project
- Copy PepperDash_Core.cpz and PepperDash_Core.dll from the bin folder to the CLZ Builds folder in the repo root. Commit.
- Merge the PR in Bitbucket