// Changes the backlog size, restructuring the data as needed.
void set_backlog_size(size_t new_size);
+ // You should hold the owning Server's <mutex>, since it calls add_data_raw().
+ // Sets unavailable to false.
+ void set_header(const std::string &new_http_header, const std::string &new_stream_header);
+
+ void set_unavailable() {
+ unavailable = true;
+ }
+
// Mutex protecting <queued_data> and <queued_data_last_starting_point>.
// Note that if you want to hold both this and the owning server's
// <mutex> you will need to take <mutex> before this one.
std::string url;
+ // If true, the backend is not completely connected, and thus, we cannot serve
+ // clients (except for historic HLS fragments).
+ bool unavailable = true;
+
// The HTTP response header, without the trailing double newline.
std::string http_header;
// from points N-3..N-2.
struct FragmentStart {
uint64_t byte_position;
- double pts;
+ double pts; // Unused if begins_header is true.
+
+ // Whether the fragment started at this position is a stream header or not.
+ // Note that headers are stored _after_ the fragments they are headers for,
+ // so that they rotate out of the backlog last (and also because they are
+ // conveniently written then). The most current header is _not_ stored
+ // in the backlog; it is stored in stream_header. Only when replaced
+ // is it committed to the backlog and gets an entry here.
+ bool begins_header;
};
std::deque<FragmentStart> fragments;
uint64_t first_fragment_index = 0, discontinuity_counter = 0;