12#ifndef OPENVPN_ADDR_ADDRPAIR_H
13#define OPENVPN_ADDR_ADDRPAIR_H
47 explicit StringPair(
const std::string &s1,
const std::string &s2)
59 throw addr_pair_string_error();
65 throw addr_pair_string_error();
72 throw addr_pair_string_error();
105 const StringPair pair = Split::by_char<StringPair, NullLex, Split::NullLimit>(s1,
'/');
114 catch (
const std::exception &e)
126 const StringPair pair = Split::by_char<StringPair, NullLex, Split::NullLimit>(s,
'/');
129 catch (
const std::exception &e)
142 catch (
const std::exception &e)
149 std::string
to_string(
const bool netmask_form =
false)
const
151 std::ostringstream os;
178 static void error(
const std::exception &e,
const std::string &s,
const char *title)
182 OPENVPN_THROW(addr_pair_mask_parse_error,
"AddrMaskPair parse error '" << title <<
"': " << s <<
" : " << e.what());
188 if (pair.
size() == 1 || pair.
size() == 2)
191 if (pair.
size() == 2 && !pair[1].empty())
195 parse_number_throw<unsigned int>(pair[1],
"prefix length"));
198 ret.netmask.prefix_len();
202 ret.addr.verify_version_consistency(
ret.netmask);
205 throw addr_pair_mask_parse_error(
"only one or two address terms allowed");
std::string & operator[](const size_t i)
void push_back(const std::string &s)
OPENVPN_SIMPLE_EXCEPTION(addr_pair_string_error)
std::string render() const
StringPair(const std::string &s1)
const std::string & operator[](const size_t i) const
StringPair(const std::string &s1, const std::string &s2)
static Addr from_string(const std::string &ipstr, const TITLE &title, const Version required_version)
std::string to_string() const
static Addr netmask_from_prefix_len(Version v, const unsigned int prefix_len)
unsigned int prefix_len() const
static Addr from_zero_complement(const Version v)
#define OPENVPN_THROW(exc, stuff)
std::string to_string(T value)
bool is_number(const char *str)
#define OPENVPN_OSTREAM(TYPE, METH)
static AddrMaskPair from_string(const StringPair &pair, const char *title=nullptr)
static void error(const std::exception &e, const std::string &s, const char *title)
bool is_canonical() const
std::string to_string(const bool netmask_form=false) const
OPENVPN_EXCEPTION(addr_pair_mask_parse_error)
static AddrMaskPair from_string(const std::string &s1, const std::string &s2, const char *title=nullptr)
static AddrMaskPair from_string_impl(const StringPair &pair, const char *title=nullptr)
static AddrMaskPair from_string(const std::string &s, const char *title=nullptr)
Addr::Version version() const