X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=input.cpp;h=81bc2dc4ea4d396ce6d9d7855b211919aff878e4;hb=HEAD;hp=f5d8d5ef19ff8dced7f5d75a73b5a724b2942a82;hpb=7aec1a69c2726488fcc6c9d6fc25f2e413329738;p=cubemap diff --git a/input.cpp b/input.cpp index f5d8d5e..81bc2dc 100644 --- a/input.cpp +++ b/input.cpp @@ -30,6 +30,13 @@ void split_user_host(const string &user_host, string *user, string *host) // Extremely rudimentary URL parsing. bool parse_url(const string &url, string *protocol, string *user, string *host, string *port, string *path) { + // pipe:foo (or pipe:"foo"). + if (url.find("pipe:") == 0) { + *protocol = "pipe"; + *path = string(url.begin() + 5, url.end()); + return true; + } + size_t split = url.find("://"); if (split == string::npos) { return false; @@ -94,34 +101,35 @@ bool parse_url(const string &url, string *protocol, string *user, string *host, return true; } -Input *create_input(const std::string &url) +Input *create_input(const string &url, Input::Encoding encoding) { string protocol, user, host, port, path; if (!parse_url(url, &protocol, &user, &host, &port, &path)) { - return NULL; + return nullptr; } - if (protocol == "http") { - return new HTTPInput(url); + if (protocol == "http" || protocol == "pipe") { + return new HTTPInput(url, encoding); } if (protocol == "udp") { + assert(encoding == Input::INPUT_ENCODING_RAW); return new UDPInput(url); } - return NULL; + return nullptr; } Input *create_input(const InputProto &serialized) { string protocol, user, host, port, path; if (!parse_url(serialized.url(), &protocol, &user, &host, &port, &path)) { - return NULL; + return nullptr; } - if (protocol == "http") { + if (protocol == "http" || protocol == "pipe") { return new HTTPInput(serialized); } if (protocol == "udp") { return new UDPInput(serialized); } - return NULL; + return nullptr; } Input::~Input() {}