369de1c14500ae0f6566b91a43fda81979b720d4
10 /* Actual SDP records */
13 const char *connection
;
18 /* Additional SDP records */
21 const char *rsaaeskey
;
23 const char *min_latency
;
27 parse_sdp_line(sdp_t
*sdp
, char *line
)
29 int len
= strlen(line
);
30 if (len
< 2 || line
[1] != '=') {
36 sdp
->version
= &line
[2];
39 sdp
->origin
= &line
[2];
42 sdp
->session
= &line
[2];
45 sdp
->connection
= &line
[2];
51 sdp
->media
= &line
[2];
58 /* Parse key and value */
60 value
= strstr(line
, ":");
64 if (!strcmp(key
, "rtpmap")) {
66 } else if (!strcmp(key
, "fmtp")) {
68 } else if (!strcmp(key
, "rsaaeskey")) {
69 sdp
->rsaaeskey
= value
;
70 } else if (!strcmp(key
, "aesiv")) {
72 } else if (!strcmp(key
, "min-latency")) {
73 sdp
->min_latency
= value
;
81 parse_sdp_data(sdp_t
*sdp
)
86 len
= strlen(sdp
->data
);
90 /* Find newline in string */
91 for (lfpos
=pos
; sdp
->data
[lfpos
]; lfpos
++) {
92 if (sdp
->data
[lfpos
] == '\n') {
96 if (sdp
->data
[lfpos
] != '\n') {
100 /* Replace newline with '\0' and parse line */
101 sdp
->data
[lfpos
] = '\0';
102 if (lfpos
> pos
&& sdp
->data
[lfpos
-1] == '\r') {
103 sdp
->data
[lfpos
-1] = '\0';
105 parse_sdp_line(sdp
, sdp
->data
+pos
);
111 sdp_init(const char *sdpdata
, int sdpdatalen
)
115 sdp
= calloc(1, sizeof(sdp_t
));
120 /* Allocate data buffer */
121 sdp
->data
= malloc(sdpdatalen
+1);
126 memcpy(sdp
->data
, sdpdata
, sdpdatalen
);
127 sdp
->data
[sdpdatalen
] = '\0';
133 sdp_destroy(sdp_t
*sdp
)
142 sdp_get_version(sdp_t
*sdp
)
150 sdp_get_origin(sdp_t
*sdp
)
158 sdp_get_session(sdp_t
*sdp
)
166 sdp_get_connection(sdp_t
*sdp
)
170 return sdp
->connection
;
174 sdp_get_time(sdp_t
*sdp
)
182 sdp_get_media(sdp_t
*sdp
)
190 sdp_get_rtpmap(sdp_t
*sdp
)
198 sdp_get_fmtp(sdp_t
*sdp
)
206 sdp_get_rsaaeskey(sdp_t
*sdp
)
210 return sdp
->rsaaeskey
;
214 sdp_get_aesiv(sdp_t
*sdp
)
222 sdp_get_min_latency(sdp_t
*sdp
)
226 return sdp
->min_latency
;