Blame


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