aboutsummaryrefslogtreecommitdiffstats
path: root/src/rtp.c
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@gnumonks.org>2012-08-06 17:35:26 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2012-08-06 21:04:21 +0200
commit33817320cbf6900fcfc08811a2c20cb739a2f398 (patch)
tree74c2bfd90b0c38d5c81d5e1892a95171f761596a /src/rtp.c
parentf4b11c071766554b6ac74e8e91fc72cbaf138784 (diff)
rtp: add osmo_rtp_snprintf
To print the RTP header and payload.
Diffstat (limited to 'src/rtp.c')
-rw-r--r--src/rtp.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/rtp.c b/src/rtp.c
index 7cd5a0e..6245194 100644
--- a/src/rtp.c
+++ b/src/rtp.c
@@ -184,3 +184,43 @@ osmo_rtp_build(struct osmo_rtp_handle *h, uint8_t payload_type,
return msg;
}
+
+#define SNPRINTF_BUFFER_SIZE(ret, size, len, offset) \
+ size += ret; \
+ if (ret > len) \
+ ret = len; \
+ offset += ret; \
+ len -= ret;
+
+int osmo_rtp_snprintf(char *buf, size_t size, struct msgb *msg)
+{
+ struct rtp_hdr *rtph;
+ int ret, i;
+ uint8_t *payload;
+ unsigned int len = size, offset = 0;
+
+ rtph = osmo_rtp_get_hdr(msg);
+ if (rtph == NULL)
+ return -1;
+
+ payload = (uint8_t *)rtph + sizeof(struct rtp_hdr);
+
+ ret = snprintf(buf, len, "RTP ver=%01u ssrc=%u type=%02u "
+ "marker=%01u ext=%01u csrc_count=%01u "
+ "sequence=%u timestamp=%u [", rtph->version,
+ ntohl(rtph->ssrc), rtph->payload_type,
+ rtph->marker, rtph->extension,
+ rtph->csrc_count, ntohs(rtph->sequence),
+ ntohl(rtph->timestamp));
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+
+ for (i=0; i<msg->len - sizeof(struct rtp_hdr); i++) {
+ ret = snprintf(buf+offset, len, "%02x ", payload[i]);
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+ }
+
+ ret = snprintf(buf+offset, len, "]");
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+
+ return ret;
+}