- std::string stream_id;
- Stream *stream;
-
- // The header we want to send. This is nominally a copy of Stream::header,
- // but since that might change on reconnects etc., we keep a local copy here.
- // Only relevant for SENDING_HEADER or SENDING_ERROR; blank otherwise.
- std::string header_or_error;
+ std::string url;
+ Stream *stream = nullptr;
+
+ // If true, we don't actually serve the stream, but its HLS playlist.
+ // TODO: Maybe this shouldn't be part of Client, since it's only
+ // really used in communicating once from parse_request() to
+ // process_client(); it's not permanent state (and is not serialized).
+ bool serving_hls_playlist = false;
+
+ // Whether we should close the connection after sending the response.
+ // Not relevant for READING_REQUEST. Must be true if http_11 is false.
+ bool close_after_response;
+
+ // Whether the request came in over HTTP/1.1 or higher.
+ bool http_11;
+
+ // The header we want to send, or the response with headers if we know
+ // it in its entirety after reading the request (typically an error).
+ // This is nominally a copy of Stream::header, but since that might
+ // change on reconnects etc., we keep a local copy here. Only relevant
+ // for SENDING_HEADER or SENDING_SHORT_RESPONSE; blank otherwise.
+ //
+ // Must start with the string "HTTP/1.0 ", which will be changed to 1.1
+ // if relevant.
+ const std::string *header_or_short_response = nullptr;
+
+ // <header_or_short_response> can come from two distinct places; it can be
+ // local to the Client object, or it can be shared between many Clients
+ // (typically HLS playlists, that can be so large that they are expensive
+ // to hold in many copies). <header_or_short_response> will point to exactly
+ // one of these, which should be cleared out/dereferenced when it is
+ // no longer needed.
+ //
+ // The use of shared_ptr is somewhat overkill since we don't need
+ // to access the HLS playlists from multiple threads, but it's not a
+ // big deal for us.
+ std::string header_or_short_response_holder;
+ std::shared_ptr<const std::string> header_or_short_response_ref;