aboutsummaryrefslogtreecommitdiff
path: root/rtmputils.cpp
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-09-10 17:41:52 +0800
committerMistivia <i@mistivia.com>2025-09-10 17:41:52 +0800
commit8d089010b37ee193b2b8c809a4f317fa2b11a758 (patch)
treef2a671f9bcc8760983ab016d8d181f2630fe16a7 /rtmputils.cpp
rtmp server
Diffstat (limited to 'rtmputils.cpp')
-rw-r--r--rtmputils.cpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/rtmputils.cpp b/rtmputils.cpp
new file mode 100644
index 0000000..59088f1
--- /dev/null
+++ b/rtmputils.cpp
@@ -0,0 +1,67 @@
+#include "rtmputils.h"
+#include <string>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <arpa/inet.h>
+
+/*
+ * Used to do unaligned loads on archs that don't support them. GCC can mostly
+ * optimize these away.
+ */
+uint32_t load_be32(const void *p)
+{
+ uint32_t val;
+ memcpy(&val, p, sizeof val);
+ return ntohl(val);
+}
+
+uint16_t load_be16(const void *p)
+{
+ uint16_t val;
+ memcpy(&val, p, sizeof val);
+ return ntohs(val);
+}
+
+uint32_t load_le32(const void *p)
+{
+ const uint8_t *data = (const uint8_t *) p;
+ return data[0] | ((uint32_t) data[1] << 8) |
+ ((uint32_t) data[2] << 16) | ((uint32_t) data[3] << 24);
+}
+
+uint32_t load_be24(const void *p)
+{
+ const uint8_t *data = (const uint8_t *) p;
+ return data[2] | ((uint32_t) data[1] << 8) | ((uint32_t) data[0] << 16);
+}
+
+void set_be24(void *p, uint32_t val)
+{
+ uint8_t *data = (uint8_t *) p;
+ data[0] = val >> 16;
+ data[1] = val >> 8;
+ data[2] = val;
+}
+
+void set_le32(void *p, uint32_t val)
+{
+ uint8_t *data = (uint8_t *) p;
+ data[0] = val;
+ data[1] = val >> 8;
+ data[2] = val >> 16;
+ data[3] = val >> 24;
+}
+
+const std::string strf(const char *fmt, ...)
+{
+ va_list vl;
+ va_start(vl, fmt);
+ char *buf = NULL;
+ vasprintf(&buf, fmt, vl);
+ va_end(vl);
+ std::string s(buf);
+ free(buf);
+ return s;
+}