"Fossies" - the Fresh Open Source Software Archive

Member "tcpflow-1.6.1/src/netviz/one_page_report.h" (19 Feb 2021, 4486 Bytes) of package /linux/misc/tcpflow-1.6.1.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "one_page_report.h" see the Fossies "Dox" file reference documentation.

    1 /**
    2  * one_page_report.h: 
    3  * Show map of network traffic by host
    4  *
    5  * This source file is public domain, as it is not based on the original tcpflow.
    6  *
    7  * Author: Michael Shick <mike@shick.in>
    8  *
    9  */
   10 
   11 #ifndef ONE_PAGE_REPORT_H
   12 #define ONE_PAGE_REPORT_H
   13 #include "plot_view.h"
   14 #include "time_histogram.h"
   15 #include "time_histogram_view.h"
   16 #include "address_histogram.h"
   17 #include "address_histogram_view.h"
   18 #include "port_histogram.h"
   19 #include "port_histogram_view.h"
   20 #include "packetfall.h"
   21 #include "net_map.h"
   22 #include "iptree.h"
   23 #include "legend_view.h"
   24 
   25 class one_page_report {
   26 public:
   27     class transport_type {
   28     public:
   29         transport_type(uint16_t ethertype_, std::string name_) :
   30             ethertype(ethertype_), name(name_) {}
   31         uint16_t ethertype;
   32         std::string name;
   33     };
   34 
   35 
   36     typedef std::map<in_port_t, in_port_t> port_aliases_t;
   37     typedef std::map<in_port_t, plot_view::rgb_t> port_colormap_t;
   38     typedef std::vector<transport_type> transport_type_vector;
   39 
   40     std::string source_identifier;
   41     std::string filename;
   42     plot_view::bounds_t bounds;
   43     double header_font_size;
   44     double top_list_font_size;
   45     unsigned int histogram_show_top_n_text;
   46 
   47     // a single render event: content moves down a bounded cairo surface as
   48     // indicated by end_of_content between render method invocations
   49     class render_pass {
   50     public:
   51         render_pass(one_page_report &report_, cairo_t *surface_,
   52                 const plot_view::bounds_t &bounds_) :
   53             report(report_), surface(surface_), surface_bounds(bounds_),
   54             end_of_content(0.0) {}
   55 
   56         void render_text_line(std::string text, double font_size,
   57                 double line_space);
   58         void render_text(std::string text, double font_size, double x_offset,
   59                 cairo_text_extents_t &rendered_extents);
   60 
   61         void render_header();
   62         void render(time_histogram_view &view);
   63         void render(address_histogram_view &left, address_histogram_view &right);
   64         void render(port_histogram_view &left, port_histogram_view &right);
   65         void render(const legend_view &view);
   66         void render_map();
   67         void render_packetfall();
   68 
   69         one_page_report &report;
   70         cairo_t *surface;
   71         plot_view::bounds_t surface_bounds;
   72         double end_of_content;
   73     };
   74     friend class render_pass;
   75 
   76     one_page_report(int max_histogram_size);
   77 
   78     void ingest_packet(const be13::packet_info &pi);
   79     void render(const std::string &outdir);
   80     plot_view::rgb_t port_color(uint16_t port) const;
   81     void dump(int debug);
   82 
   83     static transport_type_vector build_display_transports();
   84 
   85     static const unsigned int max_bars;
   86     static const unsigned int port_colors_count;
   87     // string constants
   88     static const std::string title_version;
   89     static const std::string generic_legend_format;
   90     static const transport_type_vector display_transports;
   91     // ratio constants
   92     static const double page_margin_factor;
   93     static const double line_space_factor;
   94     static const double histogram_pad_factor_y;
   95     static const double address_histogram_width_divisor;
   96     // size constants
   97     static const double packet_histogram_height;
   98     static const double address_histogram_height;
   99     static const double port_histogram_height;
  100     static const double legend_height;
  101     // color constants
  102     static const plot_view::rgb_t default_color;
  103     static const plot_view::rgb_t color_orange;
  104     static const plot_view::rgb_t color_red;
  105     static const plot_view::rgb_t color_magenta;
  106     static const plot_view::rgb_t color_purple;
  107     static const plot_view::rgb_t color_deep_purple;
  108     static const plot_view::rgb_t color_blue;
  109     static const plot_view::rgb_t color_teal;
  110     static const plot_view::rgb_t color_green;
  111     static const plot_view::rgb_t color_yellow;
  112     static const plot_view::rgb_t color_light_orange;
  113     static const plot_view::rgb_t cdf_color;
  114 
  115 private:
  116     uint64_t packet_count;
  117     uint64_t byte_count;
  118     struct timeval earliest;
  119     struct timeval latest;
  120     std::map<uint32_t, uint64_t> transport_counts;
  121     std::map<uint16_t, bool> ports_in_time_histogram;
  122     legend_view::entries_t color_labels;
  123     time_histogram packet_histogram;
  124     port_histogram src_port_histogram;
  125     port_histogram dst_port_histogram;
  126     packetfall pfall;
  127     net_map netmap;
  128 public:
  129     iptree src_tree;
  130     iptree dst_tree;
  131     port_aliases_t port_aliases;
  132     port_colormap_t port_colormap;
  133 
  134 };
  135 
  136 #endif