-#endif
- /** Match raw binary data using CIDR rules.
- *
- * This function will use binary comparison to compare the
- * two bit sequences, address and mask, up to mask_bits
- * bits in size. If they match, it will return true.
- * @param address The whole address, of 4 or 16 bytes in length
- * @param mask The mask, from 1 to 16 bytes in length, anything
- * from 1 to 128 bits of which is significant
- * @param mask_Bits How many bits of the mask parameter are significant
- * for this comparison.
- * @returns True if the first mask_bits of address matches the first
- * mask_bits of mask.
- */
- bool MatchCIDRBits(unsigned char* address, unsigned char* mask, unsigned int mask_bits);
-
- /** Match CIDR, without matching username/nickname parts.
- *
- * This function will compare a human-readable address against a human-
- * readable CIDR mask, for example 1.2.3.4 against 1.2.0.0/16. This
- * method supports both IPV4 and IPV6 addresses.
- * @param address The human readable address, e.g. 1.2.3.4
- * @param cidr_mask The human readable mask, e.g. 1.2.0.0/16
- * @return True if the mask matches the address
- */
- bool MatchCIDR(const char* address, const char* cidr_mask);
+ cidr_mask() {}
+ /** Construct a CIDR mask from the string. Will normalize (127.0.0.1/8 => 127.0.0.0/8). */
+ cidr_mask(const std::string& mask);
+ /** Construct a CIDR mask of a given length from the given address */
+ cidr_mask(const irc::sockets::sockaddrs& addr, int len);
+ /** Equality of bits, type, and length */
+ bool operator==(const cidr_mask& other) const;
+ /** Ordering defined for maps */
+ bool operator<(const cidr_mask& other) const;
+ /** Match within this CIDR? */
+ bool match(const irc::sockets::sockaddrs& addr) const;
+ /** Human-readable string */
+ std::string str() const;
+ };