#ifndef _HTTPINPUT_H
#define _HTTPINPUT_H 1
-#include <pthread.h>
#include <stddef.h>
+#include <mutex>
#include <string>
#include <vector>
#include "input.h"
+#include "metacube2.h"
+#include "stream.h"
class InputProto;
// and outputs a warning.
void drop_pending_data(size_t num_bytes);
+ void process_metacube_metadata_block(const metacube2_block_header &hdr, const char *payload, uint32_t payload_size);
+
enum State {
NOT_CONNECTED,
SENDING_REQUEST,
// If <pending_data> starts with a Metacube header,
// this is true.
- bool has_metacube_header;
+ bool has_metacube_header = false;
// The socket we are downloading on (or -1).
- int sock;
+ int sock = -1;
// Mutex protecting <stats>.
- mutable pthread_mutex_t stats_mutex;
+ mutable std::mutex stats_mutex;
// The current statistics for this connection. Protected by <stats_mutex>.
InputStats stats;
// Number of (started) connection attempts since last data byte was successfully read.
- unsigned num_connection_attempts;
+ unsigned num_connection_attempts = 0;
// If set, don't log anything related to connections.
// (Only set if we've had enough unsuccessful connection attempts.)
- bool suppress_logging;
+ bool suppress_logging = false;
// Last time we made a connection with logging enabled.
// (Initially at some point before the epoch.)
- timespec last_verbose_connection;
+ timespec last_verbose_connection { -3600, 0 };
+
+ // If we've received a Metacube2 PTS metadata block, it belongs to the
+ // next regular block we receive, and is stored here in the meantime.
+ // If we haven't received one yet (or we've already received the
+ // corresponding data block), this is empty, ie., timebase_num == 0.
+ RationalPTS next_block_pts;
};
#endif // !defined(_HTTPINPUT_H)