示例#1
0
        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));
        }
示例#2
0
 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");
                 }
 }
示例#3
0
 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");
                         }
         }
     }
 }
示例#4
0
        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);
        }