00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef WSCOUT_GUI_IEEE802_11_HEADER_HH_
00024 # define WSCOUT_GUI_IEEE802_11_HEADER_HH_
00025
00026 # include <QtGui/QLabel>
00027
00028 #include <wipal/wifi/dissector/dissector.hh>
00029 #include <wipal/wifi/dissector/default_hooks.hh>
00030
00031 # include "wscout_gui_header_base.hh"
00032
00033 namespace wscout
00034 {
00035
00036 namespace gui
00037 {
00038
00044 struct IEEE80211Header:
00045 public HeaderBase<IEEE80211Header, protocol::IEEE802_11>
00046 {
00047 enum
00048 {
00049 before_addresses_spacing = 16,
00050 default_spacing = 4,
00051 max_duration_len = 16,
00052 max_desc_len = 32
00053 };
00054
00056 IEEE80211Header(QWidget* parent = 0);
00057
00059 virtual next_header setup(const void* header,
00060 size_t caplen,
00061 const Trace& trace,
00062 const packet& desc);
00063
00064 protected:
00066 void setColor(const QColor fore, const QColor back);
00067
00068 private:
00069
00070 struct ieee80211_hooks: public wpl::wifi::dissector_default_hooks
00071 {
00072 ieee80211_hooks(IEEE80211Header& h);
00073
00074 void frame_hook(const void*, size_t);
00075 void addr_hook(const void*, size_t,
00076 unsigned, const wpl::wifi::addr&);
00077 void seq_ctl_hook(const void*, size_t, unsigned, unsigned);
00078 void end_of_frame_headers_hook(const void*, size_t, const void*);
00079 void management_hook(const wpl::wifi::mgt::header*, size_t);
00080 void control_hook(const void*, size_t);
00081 void data_hook(const void*, size_t);
00082 void invalid_type_hook(const void*, size_t);
00083 void truncated_frame_hook(const void*, size_t,
00084 wpl::wifi::dissector_status::status);
00085
00086 protected:
00087
00089 struct attributes
00090 {
00091 std::string desc;
00092 QColor fore;
00093 QColor back;
00094 protocol::id next;
00095 };
00096
00097 void setDesc(const attributes& attr);
00098 void setControl(const void*);
00099
00100 static const QColor black;
00101 static const QColor lightblue;
00102 static const QColor lightgreen;
00103 static const QColor red;
00104 static const QColor white;
00105 static const QColor yellow;
00106
00107 private:
00108 IEEE80211Header& h_;
00109 };
00110
00111 next_header next;
00112
00113 QLabel desc;
00114 QLabel flags;
00115 QLabel duration;
00116 QLabel seq_ctl;
00117 QLabel addr[4];
00118 QFrame addr_sep[3];
00119 };
00120
00121 }
00122
00123 }
00124
00125 #include "wscout_gui_ieee802_11_header.hxx"
00126
00127 #endif // ! WSCOUT_GUI_IEEE802_11_HEADER_HH_