public bool SendMessage(SMBMessage message) { bool bRet; SMBMessage[] messages; if (SMBMessage.RequiresChunking(((byte[])message.MessageObject).Length)) { messages = SMBMessage.CreateChunkedMessages((byte[])message.MessageObject); } else { messages = new SMBMessage[] { message }; } try { writeMutex.WaitOne(); foreach (var msg in messages) { bf.Serialize(serverStream, message); serverStream.WaitForPipeDrain(); } bRet = true; } catch (Exception ex) { bRet = false; } finally { writeMutex.ReleaseMutex(); } return(bRet); }
public override bool Send(string id, string message) { DebugWriteLine($"Encrypting MessageID {id} ({message.Length} bytes)..."); byte[] reqPayload = Encoding.UTF8.GetBytes(cryptor.Encrypt(message)); DebugWriteLine($"SUCCESS! Encrypted MessageID {id} ({message.Length} bytes)"); SMBMessage[] messages; if (SMBMessage.RequiresChunking(reqPayload.Length)) { messages = SMBMessage.CreateChunkedMessages(reqPayload); } else { messages = new SMBMessage[] { new SMBMessage() { MessageType = "", MessageObject = reqPayload } }; } try { DebugWriteLine($"Acquiring send message lock to send Message {id}..."); writeMutex.WaitOne(); DebugWriteLine($"LOCK ACQUIRED! Sending {messages.Length} SMB messages associated message inbox {id}..."); int i = 0; foreach (var msg in messages) { bf.Serialize(serverStream, msg); serverStream.Flush(); serverStream.WaitForPipeDrain(); i++; DebugWriteLine($"Sent {i} of {messages.Length} SMB messages attached to Inbox ID {id} to {PipeName}"); } //result = ReadDecryptedStringMessage(); } finally { writeMutex.ReleaseMutex(); } return(true); }