size_t bytes_sent;
size_t bytes_lost;
size_t num_loss_events;
+ std::string hls_zombie_key;
};
struct Client {
ClientStats get_stats() const;
+ std::string get_hls_zombie_key() const {
+ if (x_playback_session_id.empty()) {
+ return remote_addr;
+ } else {
+ return x_playback_session_id;
+ }
+ }
+
// The file descriptor associated with this socket.
int sock;
std::string remote_addr;
std::string referer;
std::string user_agent;
+ std::string x_playback_session_id;
enum State { READING_REQUEST, SENDING_HEADER, SENDING_DATA, SENDING_SHORT_RESPONSE, WAITING_FOR_KEYFRAME, PREBUFFERING };
State state = READING_REQUEST;
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.