mirror of
https://github.com/mfontanini/libtins
synced 2026-01-23 02:35:57 +01:00
simplify tcp flag checks, fix stream_follower (#334)
* simplify tcp flag checks, fix stream_follower On various places was used simple comparison for checking state of flags. tcp.flags() == (TCP::SYN | TCP::ACK) This is not what you want usually, because this check is false in case that another flag is set also. Correct check for syn-ack packet should be: (tcp.flags() & (TCP::SYN | TCP::ACK)) == (TCP::SYN | TCP::ACK) To simplify this kind of check, add new has_flags method: bool TCP::has_flags(small_uint<12> check_flags) const * remove duplicate TCP::SYN flag check
This commit is contained in:
committed by
Matias Fontanini
parent
74e3d909e6
commit
22b4435c81
@@ -288,13 +288,29 @@ public:
|
||||
* \code
|
||||
* TCP tcp = ...;
|
||||
* if(tcp.flags() == (TCP::SYN | TCP::ACK)) {
|
||||
* // It's a SYN+ACK!
|
||||
* // It's a SYN+ACK, but not SYN+ACK+ECN!
|
||||
* }
|
||||
* \endcode
|
||||
*
|
||||
* \return The value of the flags field.
|
||||
*/
|
||||
small_uint<12> flags() const;
|
||||
|
||||
/**
|
||||
* \brief Check if the given flags are set.
|
||||
*
|
||||
* \code
|
||||
* TCP tcp = ...;
|
||||
* if(tcp.has_flags(TCP::SYN | TCP::ACK)) {
|
||||
* // It's a SYN+ACK, but it also possible that other flags are set!
|
||||
* // it is equivalent to: (tpc.flags() & (TCP::SYN | TCP::ACK)) == (TCP::SYN | TCP::ACK)
|
||||
* }
|
||||
* \endcode
|
||||
*
|
||||
* \param check_flags
|
||||
* \return true if all check_flags are set
|
||||
*/
|
||||
bool has_flags(small_uint<12> check_flags) const;
|
||||
|
||||
/* Setters */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user