public override JObject ParseLogDocument(TextReader reader) { var portReservations = new List <PortReservation>(); var unixDomainSockets = new List <UnixDomainSocket>(); string line; int lineCounter = 0; while ((line = ReadLine(reader)) != null) { lineCounter++; try { for (int i = 0; i < netstatRegexes.Count; i++) { var netstatRegexToTry = netstatRegexes[i]; var fields = netstatRegexToTry.Regex.MatchNamedCaptures(line); if (fields.Any()) { switch (netstatRegexToTry.Type) { case NetstatRegex.EntryType.ActiveInternetConnection: PortReservation portReservation = BuildPortReservationEntry(fields, lineCounter); portReservations.Add(portReservation); break; case NetstatRegex.EntryType.UnixDomainSocket: UnixDomainSocket unixDomainSocket = BuildUnixDomainSocketEntry(fields, lineCounter); unixDomainSockets.Add(unixDomainSocket); break; } // Promote matching regex to front of list to optimize matches of future entries. netstatRegexes.RemoveAt(i); netstatRegexes.Insert(0, netstatRegexToTry); break; } } } catch (Exception ex) { throw new ParsingException(String.Format("Failed to parse line {0} of document: {1}", lineCounter, ex.Message), ex); } } // Roll up entries into JObject return(CreateNetstatJson(portReservations, unixDomainSockets)); }
private static void RunClient() { using (var client = UnixDomainSocket.CreateClient(PipeName)) using (var stream = new NetworkStream(client)) using (var reader = new StreamReader(stream)) using (var writer = new StreamWriter(stream)) { Console.WriteLine("Client connected"); writer.WriteLine("Server -> Client"); writer.Flush(); Console.WriteLine("Client written"); Console.WriteLine(reader.ReadLine()); Console.WriteLine("Client done"); } }
private static void RunServer() { using (var server = UnixDomainSocket.CreateServer(PipeName)) { while (true) { using (var accepted = server.WaitOne()) using (var stream = new NetworkStream(accepted)) using (var reader = new StreamReader(stream)) using (var writer = new StreamWriter(stream)) { Console.WriteLine("Server accepted"); writer.WriteLine("Server -> Client"); writer.Flush(); Console.WriteLine("Server written"); Console.WriteLine(reader.ReadLine()); Console.WriteLine("Server done"); } } } }
private static UnixDomainSocket BuildUnixDomainSocketEntry(IDictionary <string, object> fields, int lineNumber) { var unixDomainSocketEntry = new UnixDomainSocket { Protocol = fields.TryGetString("protocol"), ReferenceCount = fields.TryGetInt("reference_count"), Type = fields.TryGetString("type"), State = fields.TryGetString("state"), INode = fields.TryGetInt("inode"), ProcessId = fields.TryGetInt("pid"), ProgramName = fields.TryGetString("program_name"), Path = fields.TryGetString("path"), Line = lineNumber }; var rawFlagsString = fields.TryGetString("flags"); if (!String.IsNullOrWhiteSpace(rawFlagsString)) { unixDomainSocketEntry.Flags.AddRange(rawFlagsString.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)); } return(unixDomainSocketEntry); }