00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef WIFI_SEQCTL_SOURCE_BSSID_TIMESTAMP_ID_HXX_
00023 # define WIFI_SEQCTL_SOURCE_BSSID_TIMESTAMP_ID_HXX_
00024
00025 # include "seqctl_source_bssid_timestamp.hh"
00026
00027 # include <wipal/wifi/dissector/dissector.hh>
00028 # include <wipal/wifi/unique_id/helper_hooks.hh>
00029
00030 namespace wpl
00031 {
00032
00033 namespace wifi
00034 {
00035
00036 template <class HeaderType, class S>
00037 boost::optional<seq_src_bss_tmp_id>
00038 unique_id_factory<seq_src_bss_tmp_id>::
00039 build(const pkt::packet<S>& p, addr_mapping& mapping)
00040 {
00041 WP_UNIQUE_ID_DISSECT(p, d, internals::id_helper_hooks, h);
00042
00043 if (const timestamp* tstamp = h.timestamp_ptr())
00044 {
00045 const addr* sa = h.addr_ptr(mgt::header::sa);
00046 const addr* bssid = h.addr_ptr(mgt::header::bssid);
00047 const uint16_t* seqctl = h.seq_ctl_ptr();
00048
00049 assert(sa and bssid and seqctl);
00050
00051 return seq_src_bss_tmp_id (p.pcap_header()->id,
00052 *seqctl,
00053 mapping[*sa],
00054 mapping[*bssid],
00055 *tstamp);
00056 }
00057 return boost::none_t ();
00058 }
00059
00060 }
00061
00062 }
00063
00064 #endif // ! WIFI_SEQCTL_SOURCE_BSSID_TIMESTAMP_ID_HXX_
00065