/// <summary> /// Called when a new UDP packet is received on the listening port. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void UdpMessageReceived(object sender, SocketAsyncEventArgs e) { //Copy over buffer and remote endpoint bool completingAsync; do { using (MessageBuffer buffer = MessageBuffer.Create(e.BytesTransferred)) { Buffer.BlockCopy(e.Buffer, 0, buffer.Buffer, buffer.Offset, e.BytesTransferred); buffer.Count = e.BytesTransferred; EndPoint remoteEndPoint = e.RemoteEndPoint; //Start listening again try { completingAsync = UdpListener.ReceiveFromAsync(e); } catch (ObjectDisposedException) { return; } //Handle message or new connection BichannelServerConnection connection; bool exists; lock (UdpConnections) // TODO remove lock please exists = UdpConnections.TryGetValue(remoteEndPoint, out connection); if (exists) { connection.HandleUdpMessage(buffer); } else { HandleUdpConnection(buffer, remoteEndPoint); } } }while (!completingAsync); }
/// <summary> /// Called when a UDP message is received on the fallback system. /// </summary> /// <param name="result">The result of the operation.</param> private void UdpMessageReceived(IAsyncResult result) { EndPoint remoteEndPoint = new IPEndPoint(Address.AddressFamily == AddressFamily.InterNetworkV6 ? IPAddress.IPv6Any : IPAddress.Any, 0); int bytesReceived; try { bytesReceived = UdpListener.EndReceiveFrom(result, ref remoteEndPoint); } catch (SocketException) { UdpListener.BeginReceiveFrom((byte[])result.AsyncState, 0, ushort.MaxValue, SocketFlags.None, ref remoteEndPoint, UdpMessageReceived, (byte[])result.AsyncState); return; } //Copy over buffer and remote endpoint using (MessageBuffer buffer = MessageBuffer.Create(bytesReceived)) { Buffer.BlockCopy((byte[])result.AsyncState, 0, buffer.Buffer, buffer.Offset, bytesReceived); buffer.Count = bytesReceived; //Start listening again UdpListener.BeginReceiveFrom((byte[])result.AsyncState, 0, ushort.MaxValue, SocketFlags.None, ref remoteEndPoint, UdpMessageReceived, (byte[])result.AsyncState); //Handle message or new connection BichannelServerConnection connection; bool exists; lock (UdpConnections) exists = UdpConnections.TryGetValue(remoteEndPoint, out connection); if (exists) { connection.HandleUdpMessage(buffer); } else { HandleUdpConnection(buffer, remoteEndPoint); } } }
/// <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(); } }