}
#endif
+/** @param file File name.
+ * @return MD5 digest of file's contents.
+ */
string
md5_digest (string file)
{
return s.str ();
}
+/** @param An arbitrary sampling rate.
+ * @return The appropriate DCP-approved sampling rate (48kHz or 96kHz).
+ */
int
dcp_audio_sample_rate (int fs)
{
return !(a == b);
}
+/** @param index Colour LUT index.
+ * @return Human-readable name.
+ */
string
colour_lut_index_to_name (int index)
{
return "";
}
-DeadlineWrapper::DeadlineWrapper (asio::io_service& io_service)
- : _io_service (io_service)
- , _deadline (io_service)
+Socket::Socket ()
+ : _deadline (_io_service)
+ , _socket (_io_service)
, _buffer_data (0)
{
_deadline.expires_at (posix_time::pos_infin);
}
void
-DeadlineWrapper::set_socket (shared_ptr<asio::ip::tcp::socket> socket)
-{
- _socket = socket;
-}
-
-void
-DeadlineWrapper::check ()
+Socket::check ()
{
if (_deadline.expires_at() <= asio::deadline_timer::traits_type::now ()) {
- if (_socket) {
- _socket->close ();
- }
+ _socket.close ();
_deadline.expires_at (posix_time::pos_infin);
}
- _deadline.async_wait (boost::bind (&DeadlineWrapper::check, this));
+ _deadline.async_wait (boost::bind (&Socket::check, this));
}
+/** Blocking connect with timeout.
+ * @param endpoint End-point to connect to.
+ * @param timeout Time-out in seconds.
+ */
void
-DeadlineWrapper::connect (asio::ip::basic_resolver_entry<asio::ip::tcp> const & endpoint, int timeout)
+Socket::connect (asio::ip::basic_resolver_entry<asio::ip::tcp> const & endpoint, int timeout)
{
- assert (_socket);
-
system::error_code ec = asio::error::would_block;
- _socket->async_connect (endpoint, lambda::var(ec) = lambda::_1);
+ _socket.async_connect (endpoint, lambda::var(ec) = lambda::_1);
do {
_io_service.run_one();
} while (ec == asio::error::would_block);
- if (ec || !_socket->is_open ()) {
+ if (ec || !_socket.is_open ()) {
throw NetworkError ("connect timed out");
}
}
+/** Blocking write with timeout.
+ * @param data Buffer to write.
+ * @param size Number of bytes to write.
+ * @param timeout Time-out, in seconds.
+ */
void
-DeadlineWrapper::write (uint8_t const * data, int size, int timeout)
+Socket::write (uint8_t const * data, int size, int timeout)
{
- assert (_socket);
-
_deadline.expires_from_now (posix_time::seconds (timeout));
system::error_code ec = asio::error::would_block;
- asio::async_write (*_socket, asio::buffer (data, size), lambda::var(ec) = lambda::_1);
+ asio::async_write (_socket, asio::buffer (data, size), lambda::var(ec) = lambda::_1);
do {
_io_service.run_one ();
} while (ec == asio::error::would_block);
}
}
+/** Blocking read with timeout.
+ * @param data Buffer to read to.
+ * @param size Number of bytes to read.
+ * @param timeout Time-out, in seconds.
+ */
int
-DeadlineWrapper::read (uint8_t* data, int size, int timeout)
+Socket::read (uint8_t* data, int size, int timeout)
{
- assert (_socket);
-
_deadline.expires_from_now (posix_time::seconds (timeout));
system::error_code ec = asio::error::would_block;
int amount_read = 0;
- _socket->async_read_some (
+ _socket.async_read_some (
asio::buffer (data, size),
(lambda::var(ec) = lambda::_1, lambda::var(amount_read) = lambda::_2)
);
- _io_service.run ();
-
+ do {
+ _io_service.run_one ();
+ } while (ec == asio::error::would_block);
+
if (ec) {
amount_read = 0;
}
* @param size Amount of data to consume, in bytes.
*/
void
-DeadlineWrapper::consume (int size)
+Socket::consume (int size)
{
assert (_buffer_data >= size);
* @param size Number of bytes to read.
*/
void
-DeadlineWrapper::read_definite_and_consume (uint8_t* data, int size, int timeout)
+Socket::read_definite_and_consume (uint8_t* data, int size, int timeout)
{
int const from_buffer = min (_buffer_data, size);
if (from_buffer > 0) {
* @param size Maximum amount of data to read.
*/
void
-DeadlineWrapper::read_indefinite (uint8_t* data, int size, int timeout)
+Socket::read_indefinite (uint8_t* data, int size, int timeout)
{
assert (size < int (sizeof (_buffer)));