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 <trace-tools/wifi/frame/dissector/dissector.hh>
00029 #include <trace-tools/wifi/frame/dissector/default_hooks.hh>
00030
00031 # include "wscout_gui_header_base.hh"
00032
00033 namespace wscout
00034 {
00035
00036 namespace gui
00037 {
00038
00044 class IEEE80211Header:
00045 public HeaderBase<IEEE80211Header, protocol::IEEE802_11>
00046 {
00047 Q_OBJECT
00048
00049 enum
00050 {
00051 before_addresses_spacing = 16,
00052 default_spacing = 4,
00053 max_duration_len = 16,
00054 max_desc_len = 32
00055 };
00056
00057 public:
00059 IEEE80211Header(QWidget* parent = 0);
00060
00062 virtual next_header setup(const void* header, size_t caplen);
00063
00064 protected:
00066 void setColor(const QColor fore, const QColor back);
00067
00068 private:
00069
00070 struct ieee80211_hooks: public wifi::frame::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, unsigned, const wifi::addr&);
00076 void seq_ctl_hook(const void*, size_t, unsigned, unsigned);
00077 void management_hook(const wifi::frame::mgt::header*, size_t);
00078 void control_hook(const void*, size_t);
00079 void data_hook(const void*, size_t);
00080 void invalid_type_hook(const void*, size_t);
00081 void truncated_frame_hook(const void*, size_t,
00082 wifi::frame::dissector_status::status);
00083
00084 protected:
00085
00087 struct attributes
00088 {
00089 std::string desc;
00090 QColor fore;
00091 QColor back;
00092 };
00093
00094 void setDesc(const attributes& attr);
00095 void setControl(const void*);
00096
00097 static const QColor black;
00098 static const QColor lightblue;
00099 static const QColor lightgreen;
00100 static const QColor red;
00101 static const QColor white;
00102 static const QColor yellow;
00103
00104 private:
00105 IEEE80211Header& h_;
00106 };
00107
00108 QLabel desc;
00109 QLabel flags;
00110 QLabel duration;
00111 QLabel seq_ctl;
00112 QLabel addr[4];
00113 QFrame addr_sep[3];
00114 };
00115
00116 }
00117
00118 }
00119
00120 #endif // ! WSCOUT_GUI_IEEE802_11_HEADER_HH_