diff --git a/src/core/parser/sdp/sdp.c b/src/core/parser/sdp/sdp.c index d5e4f0695b6..14779e4d125 100644 --- a/src/core/parser/sdp/sdp.c +++ b/src/core/parser/sdp/sdp.c @@ -453,6 +453,18 @@ static int parse_sdp_session(str *sdp_body, int session_num, str *cnt_disp, sdp_ extract_bwidth(&tmpstr1, &session->bw_type, &session->bw_width); } + /* Find sendrecv_mode between session begin and first media. + * parse session attributes to check is_on_hold for a= for all medias. */ + a1p = find_first_sdp_line(o1p, m1p, 'a', NULL); + while (a1p) { + tmpstr1.s = a1p; + tmpstr1.len = m1p - a1p; + if (extract_sendrecv_mode(&tmpstr1, &session->sendrecv_mode, &session->is_on_hold) == 0) { + break; + } + a1p = find_next_sdp_line(a1p, m1p, 'a', NULL); + } + /* Have session. Iterate media descriptions in session */ m2p = m1p; stream_num = 0; diff --git a/src/core/parser/sdp/sdp.h b/src/core/parser/sdp/sdp.h index 84ebcfc8a25..d8c1b15b66b 100644 --- a/src/core/parser/sdp/sdp.h +++ b/src/core/parser/sdp/sdp.h @@ -111,6 +111,8 @@ typedef struct sdp_session_cell { AS - application specific */ str bw_width; /**< The is interpreted as kilobits per second by default */ int streams_num; /**< number of streams inside a session */ + str sendrecv_mode; + int is_on_hold; /**< flag indicating if this session is on hold */ struct sdp_stream_cell* streams; } sdp_session_cell_t;