20 typedef SSIZE_T ssize_t;
24 #if defined(__MINGW32__) || defined(__MINGW64__) || defined(__linux__)
25 #define PACK(__Declaration__) __Declaration__ __attribute__((__packed__))
27 #define PACK(__Declaration__) __pragma(pack(push, 1)) __Declaration__ __pragma(pack(pop))
31 typedef SOCKET socket_t;
36 const int MAX_PACKET = 65536;
37 const int MAX_PAYLOAD = 1446;
38 const int PKT_MAX_DELAY = 100;
57 RTP_MULTIPLE_PKTS_READY = 6,
60 RTP_PKT_NOT_HANDLED = 3,
119 RCE_NO_FLAGS = 0 << 0,
122 RCE_SYSTEM_CALL_DISPATCHER = 1 << 2,
281 NR_FRAME_DROPPED = 0,
285 typedef struct rtp_ctx_conf {
287 ssize_t ctx_values[RCC_LAST];
290 extern thread_local rtp_error_t rtp_errno;
292 #define TIME_DIFF(s, e, u) ((ssize_t)std::chrono::duration_cast<std::chrono::u>(e - s).count())
294 #define SET_NEXT_FIELD_32(a, p, v) do { *(uint32_t *)&(a)[p] = (v); p += 4; } while (0)
295 #define SET_FIELD_32(a, i, v) do { *(uint32_t *)&(a)[i] = (v); } while (0)
297 static inline void hex_dump(uint8_t *buf,
size_t len)
302 for (
size_t i = 0; i < len; i += 10) {
303 fprintf(stderr,
"\t");
304 for (
size_t k = i; k < i + 10; ++k) {
305 fprintf(stderr,
"0x%02x ", buf[k]);
307 fprintf(stderr,
"\n");
311 static inline void set_bytes(
int *ptr,
int nbytes)
317 static inline void *memdup(
const void *src,
size_t len)
319 uint8_t *dst =
new uint8_t[len];
320 std::memcpy(dst, src, len);
325 static inline std::string generate_string(
size_t length)
327 auto randchar = []() ->
char
329 const char charset[] =
331 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
332 "abcdefghijklmnopqrstuvwxyz";
333 const size_t max_index = (
sizeof(charset) - 1);
334 return charset[ rand() % max_index ];
337 std::string str(length, 0);
338 std::generate_n(str.begin(), length, randchar);
RTP_CTX_ENABLE_FLAGS
RTP context enable flags.
Definition: util.hh:118
@ RCE_SRTP_INPLACE_ENCRYPTION
Definition: util.hh:191
@ RCE_SRTP_KMNGMNT_ZRTP
Definition: util.hh:135
@ RCE_SRTP_KMNGMNT_USER
Definition: util.hh:145
@ RCE_SRTP_NULL_CIPHER
Definition: util.hh:197
@ RCE_FRAGMENT_GENERIC
Definition: util.hh:181
@ RCE_NO_H26X_INTRA_DELAY
Definition: util.hh:167
@ RCE_H26X_PREPEND_SC
Definition: util.hh:215
@ RCE_SRTP_AUTHENTICATE_RTP
Definition: util.hh:205
@ RCE_HOLEPUNCH_KEEPALIVE
Definition: util.hh:221
@ RCE_RTCP
Definition: util.hh:212
@ RCE_NO_SYSTEM_CALL_CLUSTERING
Definition: util.hh:194
@ RCE_SRTP_REPLAY_PROTECTION
Definition: util.hh:208
@ RCE_SRTP
Definition: util.hh:125
RTP_FORMAT
These flags are given to uvgrtp::session::create_stream()
Definition: util.hh:85
@ RTP_FORMAT_H266
H.266/VVC.
Definition: util.hh:89
@ RTP_FORMAT_OPUS
Opus.
Definition: util.hh:90
@ RTP_FORMAT_H265
H.265/HEVC.
Definition: util.hh:88
@ RTP_FORMAT_GENERIC
Generic format.
Definition: util.hh:86
@ RTP_FORMAT_H264
H.264/AVC.
Definition: util.hh:87
RTP_ERROR
RTP error codes.
Definition: util.hh:56
@ RTP_BIND_ERROR
Failed to bind to interface.
Definition: util.hh:66
@ RTP_INITIALIZED
Object already initialized.
Definition: util.hh:71
@ RTP_NOT_FOUND
Object not found.
Definition: util.hh:76
@ RTP_OK
Success.
Definition: util.hh:63
@ RTP_NOT_INITIALIZED
Object has not been initialized.
Definition: util.hh:72
@ RTP_INVALID_VALUE
Invalid value.
Definition: util.hh:67
@ RTP_SEND_ERROR
System call send(2) or one of its derivatives failed.
Definition: util.hh:68
@ RTP_AUTH_TAG_MISMATCH
Authentication tag does not match the RTP packet contents.
Definition: util.hh:77
@ RTP_NOT_SUPPORTED
Method/version/extension not supported.
Definition: util.hh:73
@ RTP_SSRC_COLLISION
SSRC collision detected.
Definition: util.hh:70
@ RTP_RECV_ERROR
System call recv(2) or one of its derivatives failed.
Definition: util.hh:74
@ RTP_SOCKET_ERROR
Failed to create socket.
Definition: util.hh:65
@ RTP_MEMORY_ERROR
Memory allocation failed.
Definition: util.hh:69
@ RTP_TIMEOUT
Operation timed out.
Definition: util.hh:75
@ RTP_GENERIC_ERROR
Generic error condition.
Definition: util.hh:64
RTP_CTX_CONFIGURATION_FLAGS
RTP context configuration flags.
Definition: util.hh:233
@ RCC_PKT_MAX_DELAY
Definition: util.hh:258
@ RCC_MTU_SIZE
Definition: util.hh:272
@ RCC_UDP_RCV_BUF_SIZE
Definition: util.hh:242
@ RCC_DYN_PAYLOAD_TYPE
Definition: util.hh:262
@ RCC_UDP_SND_BUF_SIZE
Definition: util.hh:250
RTP_FLAGS
These flags are given to uvgrtp::media_stream::push_frame() and they can be OR'ed together.
Definition: util.hh:99
@ RTP_NO_FLAGS
Definition: util.hh:101
@ RTP_COPY
Definition: util.hh:107
@ RTP_SLICE
Definition: util.hh:104