uvgrtp-base/src/util.hh

95 lines
2.0 KiB
C++
Raw Normal View History

2019-03-30 09:51:30 +00:00
#pragma once
#ifdef _WIN32
#include <winsock2.h>
#include <windows.h>
#else
#include <sys/time.h>
#endif
#include <algorithm>
2019-03-30 09:51:30 +00:00
#include <cstdint>
2019-05-17 09:49:33 +00:00
#include <cstddef>
2019-06-14 08:34:10 +00:00
#include <cstdio>
#include <string>
2019-03-30 09:51:30 +00:00
2019-07-15 08:49:24 +00:00
#if defined(__MINGW32__) || defined(__MINGW64__) || defined(__linux__)
#define PACKED_STRUCT(name) \
struct __attribute__((packed)) name
2019-07-15 08:49:24 +00:00
#else
#warning "structures are not packed!"
#define PACKED_STRUCT(name) struct name
#endif
2019-05-17 08:08:40 +00:00
const int MAX_PACKET = 65536;
const int MAX_PAYLOAD = 1441;
2019-05-17 09:49:33 +00:00
typedef enum RTP_ERROR {
RTP_INTERRUPTED = 2,
RTP_NOT_READY = 1,
RTP_OK = 0,
RTP_GENERIC_ERROR = -1,
RTP_SOCKET_ERROR = -2,
RTP_BIND_ERROR = -3,
RTP_INVALID_VALUE = -4,
RTP_SEND_ERROR = -5,
RTP_MEMORY_ERROR = -6,
RTP_SSRC_COLLISION = -7,
} rtp_error_t;
2019-03-30 09:51:30 +00:00
typedef enum RTP_FORMAT {
RTP_FORMAT_GENERIC = 0,
RTP_FORMAT_HEVC = 96,
RTP_FORMAT_OPUS = 97,
} rtp_format_t;
typedef enum RTP_FLAGS {
RTP_NO_FLAGS = 0 << 0,
/* TODO */
RTP_SLICE = 1 << 0,
/* TODO */
RTP_MORE = 1 << 1,
} rtp_flags_t;
extern thread_local rtp_error_t rtp_errno;
static inline void hex_dump(uint8_t *buf, size_t len)
{
if (!buf)
return;
for (size_t i = 0; i < len; i += 10) {
fprintf(stderr, "\t");
for (size_t k = i; k < i + 10; ++k) {
fprintf(stderr, "0x%02x ", buf[k]);
}
fprintf(stderr, "\n");
}
}
static inline void set_bytes(int *ptr, int nbytes)
{
if (ptr)
*ptr = nbytes;
}
2019-06-26 04:52:07 +00:00
static inline std::string generate_string(size_t length)
{
auto randchar = []() -> char
{
const char charset[] =
"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
const size_t max_index = (sizeof(charset) - 1);
return charset[ rand() % max_index ];
};
std::string str(length, 0);
std::generate_n(str.begin(), length, randchar);
return str;
}