Exemplo n.º 1
0
// ////////////////////////////////////////////////////////////////////////////
SocketSpec &SocketSpec::FromString(const std::string &src_string,
	char sep_char)
{
	std::vector<std::string> tmp_datum;

	MLB::Utility::SplitString(src_string, std::string(1, sep_char),
		tmp_datum, 0, false);

	tmp_datum[0] = MLB::Utility::Trim(tmp_datum[0]);
	tmp_datum[1] = MLB::Utility::Trim(tmp_datum[1]);

	if (tmp_datum.size() > 2)
		tmp_datum[2] = MLB::Utility::Trim(tmp_datum[2]);

	if (tmp_datum.empty() || (tmp_datum.size() < 2) || (tmp_datum.size() > 3))
		MLB::Utility::ThrowInvalidArgument("Expected a IP socket "
			"specification string in the format <ip-address>" +
			std::string(1, sep_char) + "<ip-port>[" + std::string(1, sep_char) +
			"<host-interface>]");

	SocketSpec(tmp_datum[0], tmp_datum[1],
		(tmp_datum.size() > 3) ? tmp_datum[2] : "").swap(*this);

	return(*this);
}
Exemplo n.º 2
0
// unix:/var/run/x0d.sock
// [3ffe:1337::2691:1]:8080
SocketSpec SocketSpec::fromString(const std::string& value)
{
	size_t slen = value.size();
	if (slen == 0)
		return SocketSpec();

	if (value.find("unix:") == 0)
		return SocketSpec::fromLocal(value.substr(5));

	if (value[0] == '[') { // IPv6
		auto e = value.find("]");
		if (e == std::string::npos)
			return SocketSpec();

		if (e + 1 <= slen)
			return SocketSpec();

		if (value[e + 1] != ':')
			return SocketSpec();

		std::string ipaddr(value.substr(1, e - 1));
		std::string port(value.substr(e + 2));

		return SocketSpec::fromInet(IPAddress(ipaddr), std::atoi(port.c_str()));
	}

	auto e = value.find(':');

	if (e <= slen)
		return SocketSpec();

	std::string ipaddr(value.substr(1, e - 1));
	std::string port(value.substr(e + 2));

	return SocketSpec::fromInet(IPAddress(ipaddr), std::atoi(port.c_str()));
}
Exemplo n.º 3
0
SocketSpec SocketSpec::fromInet(const IPAddress& ipaddr, int port, int backlog)
{
	return SocketSpec(ipaddr, port, backlog);
}