Example #1
0
        /// <summary>
        /// Runs the data pump.
        /// </summary>
        public void Run()
        {
            string protocolsFile = Path.Combine(OutputPath, "TShark.protocols");
            string fieldsFile = Path.Combine(OutputPath, "TShark.fields");
            string valuesFile = Path.Combine(OutputPath, "TShark.values");
            string decodesFile = Path.Combine(OutputPath, "TShark.decodes");

            Log.WriteInfo("Generated schema file paths.\nProtocols: {0}\nFields: {1}\nValues: {2}\nDecodes: {3}", protocolsFile, fieldsFile, valuesFile, decodesFile);

            Log.WriteInfo("Writing protocols file.");
            TSharkInvoker.Invoke(TSharkPath, string.Format("-G protocols {0}", TSharkParams), protocolsFile);

            Log.WriteInfo("Writing fields file.");
            TSharkInvoker.Invoke(TSharkPath, string.Format("-G fields3 {0}", TSharkParams), fieldsFile);

            Log.WriteInfo("Writing values file.");
            TSharkInvoker.Invoke(TSharkPath, string.Format("-G values {0}", TSharkParams), valuesFile);

            Log.WriteInfo("Writing decodes file.");
            TSharkInvoker.Invoke(TSharkPath, string.Format("-G decodes {0}", TSharkParams), decodesFile);

            TSharkDataSchema schema;

            Log.WriteInfo("Reading TShark schema.");
            schema = TSharkSchemaReader.Read(protocolsFile, fieldsFile, valuesFile, decodesFile);

            Log.WriteInfo("Installing fixups.");
            TSharkFixups fixups = new TSharkFixups();
            if (!string.IsNullOrEmpty(FixupsPath))
            {
                fixups.LoadExternalFixups(FixupsPath);
            }

            using (DataWriter writer = CreateDataWriter())
            {
                DataFilter filter = new DataFilter(DataFilterPreset);
                if (!string.IsNullOrEmpty(DataFilterPath))
                {
                    filter.LoadExternalFilter(DataFilterPath);
                }
                writer.Filter = filter;

                TSharkDataReaderCallback callback = writer.WriteRow;

                Log.WriteInfo("Starting data pump.");
                foreach (string file in FileSystemSupport.RecursiveScan(InputPath, null))
                {
                    Log.WriteInfo("Processing: {0}", file);

                    string dataFile = GenerateOutputFile(file);
                    TSharkInvoker.Invoke(TSharkPath, string.Format("-r \"{0}\" -n -T pdml -V {1}", file.Replace("\"", "\\\""), TSharkParams), dataFile);

                    Log.WriteInfo("Reading TShark data file: {0}", dataFile);
                    TSharkDataReader.Read(file, schema, dataFile, callback, fixups);
                }
            }
        }