X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=input.h;h=28bc14b09b309f4dc034ff665136513c75864d8d;hp=8a26ce6d1baad5887fe2b7831618c0fb0304ef9c;hb=ac50b1104f5f525e838f80fa6dc50be13f7d35b6;hpb=c2c9f6441f9ae8091a39aea0340417d5915e1ac9 diff --git a/input.h b/input.h index 8a26ce6..28bc14b 100644 --- a/input.h +++ b/input.h @@ -4,16 +4,24 @@ #include #include +class InputProto; + class Input { public: Input(const std::string &stream_id, const std::string &url); + // Serialization/deserialization. + Input(const InputProto &serialized); + InputProto serialize() const; + // Connect to the given URL and start streaming. void run(); // Stops the streaming, but lets the file descriptor stay open. void stop(); + std::string get_url() const { return url; } + private: // Recovers the this pointer and calls do_work(). static void *do_work_thunk(void *arg); @@ -24,6 +32,9 @@ private: // Open a socket that connects to the given host and port. Does DNS resolving. int lookup_and_connect(const std::string &host, const std::string &port); + // Parses a HTTP response. Returns false if it not a 200. + bool parse_response(const std::string &response); + // Stores the given data, looks for Metacube blocks (skipping data if needed), // and calls process_block() for each one. void process_data(char *ptr, size_t bytes); @@ -58,6 +69,9 @@ private: // The HTTP response we've received so far. Only relevant for RECEIVING_HEADER. std::string response; + // The HTTP respones headers we want to give clients for this input. + std::string http_header; + // Data we have received but not fully processed yet. std::vector pending_data;