mirror of
https://github.com/matrix-construct/construct
synced 2025-03-13 21:10:32 +01:00
ircd::rfc3986: Add validation suite for hostname strings related.
This commit is contained in:
parent
1cf0b629cb
commit
67a759ac21
2 changed files with 129 additions and 0 deletions
|
@ -23,6 +23,15 @@ namespace ircd::rfc3986
|
|||
struct encoder extern const encoder;
|
||||
struct decoder extern const decoder;
|
||||
|
||||
void valid_hostname(const string_view &); // name part
|
||||
bool valid_hostname(std::nothrow_t, const string_view &);
|
||||
void valid_domain(const string_view &); // dot delimited hostnames
|
||||
bool valid_domain(std::nothrow_t, const string_view &);
|
||||
void valid_host(const string_view &); // domain | ip4 | ip6
|
||||
bool valid_host(std::nothrow_t, const string_view &);
|
||||
void valid_remote(const string_view &); // host + optional :port
|
||||
bool valid_remote(std::nothrow_t, const string_view &);
|
||||
|
||||
string_view encode(const string_view &url, const mutable_buffer &);
|
||||
string_view decode(const string_view &url, const mutable_buffer &);
|
||||
}
|
||||
|
|
120
ircd/rfc3986.cc
120
ircd/rfc3986.cc
|
@ -247,3 +247,123 @@ catch(const qi::expectation_failure<const char *> &e)
|
|||
string_view{e.first, e.last}
|
||||
};
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::rfc3986::valid_remote(std::nothrow_t,
|
||||
const string_view &str)
|
||||
{
|
||||
static const auto &rule
|
||||
{
|
||||
parser.remote >> eoi
|
||||
};
|
||||
|
||||
const char *start(str.data()), *const stop(start + str.size());
|
||||
return qi::parse(start, stop, rule);
|
||||
}
|
||||
|
||||
void
|
||||
ircd::rfc3986::valid_remote(const string_view &str)
|
||||
try
|
||||
{
|
||||
static const auto &rule
|
||||
{
|
||||
parser.remote >> eoi
|
||||
};
|
||||
|
||||
const char *start(str.data()), *const stop(start + str.size());
|
||||
qi::parse(start, stop, eps > rule);
|
||||
}
|
||||
catch(const qi::expectation_failure<const char *> &e)
|
||||
{
|
||||
throw expectation_failure<error>{e};
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::rfc3986::valid_host(std::nothrow_t,
|
||||
const string_view &str)
|
||||
{
|
||||
static const auto &rule
|
||||
{
|
||||
parser.host >> eoi
|
||||
};
|
||||
|
||||
const char *start(str.data()), *const stop(start + str.size());
|
||||
return qi::parse(start, stop, rule);
|
||||
}
|
||||
|
||||
void
|
||||
ircd::rfc3986::valid_host(const string_view &str)
|
||||
try
|
||||
{
|
||||
static const auto &rule
|
||||
{
|
||||
parser.host >> eoi
|
||||
};
|
||||
|
||||
const char *start(str.data()), *const stop(start + str.size());
|
||||
qi::parse(start, stop, eps > rule);
|
||||
}
|
||||
catch(const qi::expectation_failure<const char *> &e)
|
||||
{
|
||||
throw expectation_failure<error>{e};
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::rfc3986::valid_domain(std::nothrow_t,
|
||||
const string_view &str)
|
||||
{
|
||||
static const auto &rule
|
||||
{
|
||||
parser.domain >> eoi
|
||||
};
|
||||
|
||||
const char *start(str.data()), *const stop(start + str.size());
|
||||
return qi::parse(start, stop, rule);
|
||||
}
|
||||
|
||||
void
|
||||
ircd::rfc3986::valid_domain(const string_view &str)
|
||||
try
|
||||
{
|
||||
static const auto &rule
|
||||
{
|
||||
parser.host >> eoi
|
||||
};
|
||||
|
||||
const char *start(str.data()), *const stop(start + str.size());
|
||||
qi::parse(start, stop, eps > rule);
|
||||
}
|
||||
catch(const qi::expectation_failure<const char *> &e)
|
||||
{
|
||||
throw expectation_failure<error>{e};
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::rfc3986::valid_hostname(std::nothrow_t,
|
||||
const string_view &str)
|
||||
{
|
||||
static const auto &rule
|
||||
{
|
||||
parser.hostname >> eoi
|
||||
};
|
||||
|
||||
const char *start(str.data()), *const stop(start + str.size());
|
||||
return qi::parse(start, stop, rule);
|
||||
}
|
||||
|
||||
void
|
||||
ircd::rfc3986::valid_hostname(const string_view &str)
|
||||
try
|
||||
{
|
||||
static const auto &rule
|
||||
{
|
||||
parser.hostname >> eoi
|
||||
};
|
||||
|
||||
const char *start(str.data()), *const stop(start + str.size());
|
||||
qi::parse(start, stop, eps > rule);
|
||||
}
|
||||
catch(const qi::expectation_failure<const char *> &e)
|
||||
{
|
||||
throw expectation_failure<error>{e};
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue