#ifndef ANALYZER_PROTOCOL_TCP_TCP_FLAGS_H #define ANALYZER_PROTOCOL_TCP_TCP_FLAGS_H namespace analyzer { namespace tcp { class TCP_Flags { public: TCP_Flags(const struct tcphdr* tp) { flags = tp->th_flags; } TCP_Flags() { flags = 0; } bool SYN() const { return flags & TH_SYN; } bool FIN() const { return flags & TH_FIN; } bool RST() const { return flags & TH_RST; } bool ACK() const { return flags & TH_ACK; } bool URG() const { return flags & TH_URG; } bool PUSH() const { return flags & TH_PUSH; } string AsString() const; protected: u_char flags; }; inline string TCP_Flags::AsString() const { char tcp_flags[10]; char* p = tcp_flags; if ( SYN() ) *p++ = 'S'; if ( FIN() ) *p++ = 'F'; if ( RST() ) *p++ = 'R'; if ( ACK() ) *p++ = 'A'; if ( PUSH() ) *p++ = 'P'; if ( URG() ) *p++ = 'U'; *p++ = '\0'; return tcp_flags; } } } #endif