00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef WIFI_FRAME_ADDR_TIMESTAMP_ID_HXX_
00023 # define WIFI_FRAME_ADDR_TIMESTAMP_ID_HXX_
00024
00025 # include "addr_timestamp_id.hh"
00026
00027 # include <trace-tools/wifi/frame/id_helper_hooks.hh>
00028 # include <trace-tools/wifi/frame/dissector/dissector.hh>
00029
00030 namespace wifi
00031 {
00032
00033 namespace frame
00034 {
00035
00036 template <class UniqueId>
00037 boost::optional<UniqueId>
00038 make_addr_timestamp_id_from_prism(const pcapxx::frame_descriptor& desc,
00039 addr_mapping& mapping,
00040 unsigned addr_idx,
00041 bool prism_noise_means_error)
00042 {
00043 typedef internals::id_helper_hooks hooks;
00044
00045 const void* frame;
00046 size_t caplen;
00047
00048 if (not internals::make_unique_id_handle_prism(frame, caplen, desc,
00049 prism_noise_means_error))
00050 return boost::none_t ();
00051
00052 const dissector<hooks> d (frame, caplen);
00053 const hooks& h = d.hooks();
00054 const timestamp* t = h.timestamp_ptr();
00055 const addr* a = h.addr_ptr(addr_idx);
00056
00057 assert(not t or a);
00058 if (t)
00059 return UniqueId (desc.pcap_header()->id, mapping[*a], *t);
00060 else
00061 return boost::none_t ();
00062 }
00063
00064 }
00065
00066 }
00067
00068 #endif // ! WIFI_FRAME_SOURCE_TIMESTAMP_ID_HXX_
00069