trtp.c - plan9port - [fork] Plan 9 from user space | |
git clone git://src.adamsgaard.dk/plan9port | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
trtp.c (1038B) | |
--- | |
1 #include <u.h> | |
2 #include <libc.h> | |
3 #include <ip.h> | |
4 #include "dat.h" | |
5 #include "protos.h" | |
6 | |
7 typedef struct Hdr Hdr; | |
8 struct Hdr { | |
9 uchar hdr; /* RTP header */ | |
10 uchar marker; /* Payload and marker */ | |
11 uchar seq[2]; /* Sequence number */ | |
12 uchar ts[4]; /* Time stamp */ | |
13 uchar ssrc[4]; /* Synchronization source identifie… | |
14 }; | |
15 | |
16 enum{ | |
17 RTPLEN = 12, /* Minimum size of an RTP header */ | |
18 }; | |
19 | |
20 static int | |
21 p_seprint(Msg *m) | |
22 { | |
23 Hdr*h; | |
24 ushort seq; | |
25 ulong ssrc, ts; | |
26 int cc, i; | |
27 | |
28 if(m->pe - m->ps < RTPLEN) | |
29 return -1; | |
30 | |
31 h = (Hdr*)m->ps; | |
32 cc = h->hdr & 0xf; | |
33 if(m->pe - m->ps < RTPLEN + cc * 4) | |
34 return -1; | |
35 | |
36 m->ps += RTPLEN; | |
37 | |
38 seq = NetS(h->seq); | |
39 ts = NetL(h->ts); | |
40 ssrc = NetL(h->ssrc); | |
41 | |
42 m->p = seprint(m->p, m->e, "version=%d x=%d cc=%d seq=%d ts=%ld … | |
43 (h->hdr >> 6) & 3, (h->hdr >> 4) & 1, cc… | |
44 for(i = 0; i < cc; i++){ | |
45 m->p = seprint(m->p, m->e, " csrc[%d]=%d", | |
46 i, NetL(m->ps)); | |
47 m->ps += 4; | |
48 } | |
49 m->pr = nil; | |
50 return 0; | |
51 } | |
52 | |
53 Proto rtp = { | |
54 "rtp", | |
55 nil, | |
56 nil, | |
57 p_seprint, | |
58 nil, | |
59 nil, | |
60 nil, | |
61 defaultframer | |
62 }; |