public override void Handle(IMessage message) { var type = message.GetType(); Log.Trace($"Message {message.MsgId} (Type {type.Name}) to be sent over TCP."); if (TcpConnections == null) { Log.Debug($"TCP connection not yet established - Message {message.MsgId} (Type {type.Name}) will be discarded."); return; } try { if (TcpConnections.IsEmpty()) { Log.Error("Cannot send a message without a connection."); return; } var connection = TcpConnections.First(); if (!MessageSerializers.TryGetValue(type, out var serializer)) { serializer = new SimpleJsonSerializer(); } var json = serializer.SerializeMessage(message); var data = Encoder.ToBytes(json, type); var framed = Framer.FrameData(data); connection.EnqueueSend(framed); } catch (Exception ex) { Log.ErrorException(ex, $"Exception caught while handling Message {message.MsgId} (Type {type.Name})"); } }
/// <inheritdoc /> protected override void AddConnection(ITcpConnection connection) { if (TcpConnections.Any()) { throw new Exception("Only a single TCP connection is allowed from the client side."); } base.AddConnection(connection); }
protected void RemoveConnection(ITcpConnection connection) { try { if (!TcpConnections.Contains(connection)) { return; } if (!connection.IsClosed) { connection.Close("Connection removed."); } _tcpConnections.Remove(connection); } catch (Exception e) { Log.ErrorException(e, "Error while removing a TCP connection."); } }
public override void Handle(IMessage message) { // The server side does not initiate communication. The only messages it will ever send are // CommandResponses back to a client who sent a Command. var type = message.GetType(); if (!(message is CommandResponse cmdResponse)) { Log.Debug($"Cannot send a message of type {type.Name} from a server-side TCP bus."); return; } Log.Trace($"Message {message.MsgId} (Type {type.Name}) to be sent over TCP."); if (TcpConnections.IsEmpty()) { Log.Debug($"TCP connection not yet established - Message {message.MsgId} (Type {type.Name}) will be discarded."); return; } try { // Send the CommandResponse back to the endpoint where the Command originated. var connectionId = _messageRouting[cmdResponse.SourceCommand.MsgId]; var connection = TcpConnections.FirstOrDefault(x => x.ConnectionId == connectionId); if (connection is null) { throw new Exception("Could not find a TCP connection to use for sending the message."); } if (!MessageSerializers.TryGetValue(type, out var serializer)) { serializer = new SimpleJsonSerializer(); } var json = serializer.SerializeMessage(message); var data = Encoder.ToBytes(json, type); var framed = Framer.FrameData(data); connection.EnqueueSend(framed); } catch (Exception ex) { Log.ErrorException(ex, $"An error occurred while handling Message {message.MsgId} (Type {type.Name})"); } }
/// <summary> /// Touch all the properties of all any input /// </summary> /// <param name="input">The Input</param> private void TouchSpecificInput(Input input) { InputKind inputKind = input.GetKind(); TcpConnections tcpConnections = null; UdpConnections udpConnections = null; string[] dummyStrings; string dummyString; bool dummyBoolean; DateTime dummyDate; int dummyInt; if (inputKind.Equals(InputKind.Monitor)) { MonitorInput monitorInput = (MonitorInput)input; dummyString = monitorInput.Blacklist; dummyString = monitorInput.CrcSalt; dummyInt = monitorInput.FileCount; dummyBoolean = monitorInput.FollowTail; dummyString = monitorInput.Host; dummyString = monitorInput.HostRegex; dummyString = monitorInput.IgnoreOlderThan; dummyString = monitorInput.Index; dummyString = monitorInput.Queue; dummyBoolean = monitorInput.IsRecursive; dummyString = monitorInput.Source; dummyString = monitorInput.SourceType; dummyInt = monitorInput.TimeBeforeClose; dummyString = monitorInput.Whitelist; } else if (inputKind.Equals(InputKind.Script)) { ScriptInput scriptInput = (ScriptInput)input; dummyDate = scriptInput.EndTime; dummyString = scriptInput.Group; dummyString = scriptInput.Host; dummyString = scriptInput.Index; dummyString = scriptInput.Interval; dummyDate = scriptInput.StartTime; } else if (inputKind.Equals(InputKind.Tcp)) { TcpInput tcpInput = (TcpInput)input; dummyString = tcpInput.ConnectionHost; dummyString = tcpInput.Group; dummyString = tcpInput.Host; dummyString = tcpInput.Index; dummyString = tcpInput.Queue; dummyString = tcpInput.RestrictToHost; dummyString = tcpInput.Source; dummyString = tcpInput.SourceType; dummyBoolean = tcpInput.SSL; tcpConnections = tcpInput.Connections(); dummyString = tcpConnections.Connection; dummyString = tcpConnections.Servername; } else if (inputKind.Equals(InputKind.TcpSplunk)) { TcpSplunkInput tcpSplunkInput = (TcpSplunkInput)input; dummyString = tcpSplunkInput.ConnectionHost; dummyString = tcpSplunkInput.Group; dummyString = tcpSplunkInput.Host; dummyString = tcpSplunkInput.Index; dummyString = tcpSplunkInput.Queue; dummyString = tcpSplunkInput.Source; dummyString = tcpSplunkInput.SourceType; dummyBoolean = tcpSplunkInput.SSL; tcpConnections = tcpSplunkInput.Connections(); dummyString = tcpConnections.Connection; dummyString = tcpConnections.Servername; } else if (inputKind.Equals(InputKind.Udp)) { UdpInput udpInput = (UdpInput)input; dummyString = udpInput.ConnectionHost; dummyString = udpInput.Group; dummyString = udpInput.Host; dummyString = udpInput.Index; dummyString = udpInput.Queue; dummyString = udpInput.Source; dummyString = udpInput.SourceType; dummyBoolean = udpInput.NoAppendingTimeStamp; dummyBoolean = udpInput.NoPriorityStripping; udpConnections = udpInput.Connections(); dummyString = udpConnections.Group; } else if (inputKind.Equals(InputKind.WindowsActiveDirectory)) { WindowsActiveDirectoryInput windowsActiveDirectoryInput = (WindowsActiveDirectoryInput)input; dummyString = windowsActiveDirectoryInput.Index; dummyBoolean = windowsActiveDirectoryInput.MonitorSubtree; dummyString = windowsActiveDirectoryInput.StartingNode; dummyString = windowsActiveDirectoryInput.TargetDc; } else if (inputKind.Equals(InputKind.WindowsEventLog)) { WindowsEventLogInput windowsEventLogInput = (WindowsEventLogInput)input; dummyString = windowsEventLogInput.Hosts; dummyString = windowsEventLogInput.Index; dummyString = windowsEventLogInput.LocalName; dummyStrings = windowsEventLogInput.Logs; dummyString = windowsEventLogInput.LookupHost; } else if (inputKind.Equals(InputKind.WindowsPerfmon)) { WindowsPerfmonInput windowsPerfmonInput = (WindowsPerfmonInput)input; dummyStrings = windowsPerfmonInput.Counters; dummyString = windowsPerfmonInput.Index; dummyStrings = windowsPerfmonInput.Instances; dummyInt = windowsPerfmonInput.Interval; dummyString = windowsPerfmonInput.Object; } else if (inputKind.Equals(InputKind.WindowsRegistry)) { WindowsRegistryInput windowsRegistryInput = (WindowsRegistryInput)input; dummyBoolean = windowsRegistryInput.Baseline; dummyString = windowsRegistryInput.Hive; dummyString = windowsRegistryInput.Index; dummyBoolean = windowsRegistryInput.MonitorSubnodes; dummyString = windowsRegistryInput.Proc; dummyStrings = windowsRegistryInput.Type; } else if (inputKind.Equals(InputKind.WindowsWmi)) { WindowsWmiInput windowsWmiInput = (WindowsWmiInput)input; dummyString = windowsWmiInput.Classes; dummyStrings = windowsWmiInput.Fields; dummyString = windowsWmiInput.Index; dummyStrings = windowsWmiInput.Instances; dummyInt = windowsWmiInput.Interval; dummyString = windowsWmiInput.LocalName; dummyString = windowsWmiInput.LookupHost; dummyString = windowsWmiInput.Servers; dummyString = windowsWmiInput.Wql; } else { Assert.Fail(); } }