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;
- // When the client connected, in terms of CLOCK_MONOTONIC_COARSE.
+ // When the client connected (or went into keepalive), in terms of CLOCK_MONOTONIC_COARSE.
timespec connect_time;
// Some information only used for logging.
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.
// although only at a keyframe.
// -2 means we want to send from the _beginning_ of the backlog.
// -3 means we sent the header only.
- static const size_t STREAM_POS_AT_END = -1;
- static const size_t STREAM_POS_AT_START = -2;
- static const size_t STREAM_POS_HEADER_ONLY = -3;
+ static const uint64_t STREAM_POS_AT_END = -1;
+ static const uint64_t STREAM_POS_AT_START = -2;
+ static const uint64_t STREAM_POS_HEADER_ONLY = -3;
// Once we go into WAITING_FOR_KEYFRAME, PREBUFFERING or SENDING_DATA,
// these negative values will be translated to real numbers.
- size_t stream_pos = 0;
+ uint64_t stream_pos = 0;
// Position at which to end the stream (one-past-the-end, used for fragments).
// -1 means never to end; this is the common case.
- static const size_t STREAM_POS_NO_END = -1;
- size_t stream_pos_end = 0;
+ static const uint64_t STREAM_POS_NO_END = -1;
+ uint64_t stream_pos_end = 0;
// Number of bytes we've sent of data. Only relevant for SENDING_DATA.
- size_t bytes_sent = 0;
+ uint64_t bytes_sent = 0;
// Number of times we've skipped forward due to the backlog being too big,
// and how many bytes we've skipped over in all. Only relevant for SENDING_DATA.
- size_t bytes_lost = 0, num_loss_events = 0;
+ uint64_t bytes_lost = 0, num_loss_events = 0;
TLSContext *tls_context = nullptr;
const unsigned char *tls_data_to_send = nullptr;