[sr-dev] git:master: core: sdp parser: making 'sendrecv_mode' and 'ptime' session attributes

Ovidiu Sas osas at voipembedded.com
Mon Jun 28 15:48:49 CEST 2010


Module: sip-router
Branch: master
Commit: c90ff4d4861fcd33c376122a0b0daf1ce7ca7522
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=c90ff4d4861fcd33c376122a0b0daf1ce7ca7522

Author: Ovidiu Sas <osas at voipembedded.com>
Committer: Ovidiu Sas <osas at voipembedded.com>
Date:   Mon Jun 28 09:54:01 2010 -0400

core: sdp parser: making 'sendrecv_mode' and 'ptime' session attributes

---

 parser/sdp/sdp.c |   97 +++++++++++++++---------------------------------------
 parser/sdp/sdp.h |    4 +-
 2 files changed, 29 insertions(+), 72 deletions(-)

diff --git a/parser/sdp/sdp.c b/parser/sdp/sdp.c
index 0b6d3e9..f0e490f 100644
--- a/parser/sdp/sdp.c
+++ b/parser/sdp/sdp.c
@@ -216,47 +216,6 @@ void set_sdp_payload_attr(sdp_payload_attr_t *payload_attr, str *rtp_enc, str *r
 	return;
 }
 
-void set_sdp_ptime_attr(sdp_stream_cell_t *stream, sdp_payload_attr_t *payload_attr, str *ptime)
-{
-	sdp_payload_attr_t *payload;
-	int i;
-
-	if (payload_attr == 0) {
-		/* This is a generic attribute
-		 * Let's update all payloads */
-		for (i=0;i<stream->payloads_num;i++) {
-			payload = stream->p_payload_attr[i];
-			payload->ptime.s = ptime->s;
-			payload->ptime.len = ptime->len;
-		}
-	} else {
-		payload_attr->ptime.s = ptime->s;
-		payload_attr->ptime.len = ptime->len;
-	}
-	return;
-}
-
-void set_sdp_sendrecv_mode_attr(sdp_stream_cell_t *stream, sdp_payload_attr_t *payload_attr, str *sendrecv_mode)
-{
-	sdp_payload_attr_t *payload;
-	int i;
-
-	if (payload_attr == 0) {
-		/* This is a generic attribute
-		 * Let's update all payloads */
-		for (i=0;i<stream->payloads_num;i++) {
-			payload = stream->p_payload_attr[i];
-			payload->sendrecv_mode.s = sendrecv_mode->s;
-			payload->sendrecv_mode.len = sendrecv_mode->len;
-		}
-	} else {
-		payload_attr->sendrecv_mode.s = sendrecv_mode->s;
-		payload_attr->sendrecv_mode.len = sendrecv_mode->len;
-	}
-
-	return;
-}
-
 /*
  * Getters ....
  */
@@ -380,7 +339,7 @@ static int parse_sdp_session(str *sdp_body, int session_num, str *cnt_disp, sdp_
 	str body = *sdp_body;
 	str sdp_ip, sdp_media, sdp_port, sdp_transport, sdp_payload;
 	str payload;
-	str rtp_payload, rtp_enc, rtp_clock, rtp_params, ptime, sendrecv_mode;
+	str rtp_payload, rtp_enc, rtp_clock, rtp_params;
 	char *bodylimit;
 	char *v1p, *o1p, *m1p, *m2p, *c1p, *c2p, *a1p, *a2p, *b1p;
 	str tmpstr1;
@@ -543,12 +502,10 @@ static int parse_sdp_session(str *sdp_body, int session_num, str *cnt_disp, sdp_
 			tmpstr1.s = a2p;
 			tmpstr1.len = m2p - a2p;
 
-			if (parse_payload_attr && extract_ptime(&tmpstr1, &ptime) == 0) {
-				a1p = ptime.s + ptime.len;
-				set_sdp_ptime_attr(stream, payload_attr, &ptime);
-			} else if (parse_payload_attr && extract_sendrecv_mode(&tmpstr1, &sendrecv_mode) == 0) {
-				a1p = sendrecv_mode.s + sendrecv_mode.len;
-				set_sdp_sendrecv_mode_attr(stream, payload_attr, &sendrecv_mode);
+			if (parse_payload_attr && extract_ptime(&tmpstr1, &stream->ptime) == 0) {
+				a1p = stream->ptime.s + stream->ptime.len;
+			} else if (parse_payload_attr && extract_sendrecv_mode(&tmpstr1, &stream->sendrecv_mode) == 0) {
+				a1p = stream->sendrecv_mode.s + stream->sendrecv_mode.len;
 			} else if (parse_payload_attr && extract_rtpmap(&tmpstr1, &rtp_payload, &rtp_enc, &rtp_clock, &rtp_params) == 0) {
 				if (rtp_params.len != 0 && rtp_params.s != NULL) {
 					a1p = rtp_params.s + rtp_params.len;
@@ -801,7 +758,7 @@ void print_sdp_stream(sdp_stream_cell_t *stream)
 {
 	sdp_payload_attr_t *payload;
 
-	LM_DBG("....stream[%d]:%p=>%p {%p} '%.*s' '%.*s:%.*s' [%.*s] '%.*s' '%.*s' '%.*s:%.*s' (%d)=>%p '%.*s' '%.*s' '%.*s' '%.*s'\n",
+	LM_DBG("....stream[%d]:%p=>%p {%p} '%.*s' '%.*s:%.*s' [%.*s] '%.*s' '%.*s' '%.*s:%.*s' (%d)=>%p '%.*s' '%.*s' '%.*s' '%.*s' '%.*s' '%.*s'\n",
 		stream->stream_num, stream, stream->next,
 		stream->p_payload_attr,
 		stream->media.len, stream->media.s,
@@ -811,21 +768,21 @@ void print_sdp_stream(sdp_stream_cell_t *stream)
 		stream->payloads.len, stream->payloads.s,
 		stream->bw_type.len, stream->bw_type.s, stream->bw_width.len, stream->bw_width.s,
 		stream->payloads_num, stream->payload_attr,
+		stream->sendrecv_mode.len, stream->sendrecv_mode.s,
+		stream->ptime.len, stream->ptime.s,
 		stream->path.len, stream->path.s,
 		stream->max_size.len, stream->max_size.s,
 		stream->accept_types.len, stream->accept_types.s,
 		stream->accept_wrapped_types.len, stream->accept_wrapped_types.s);
 	payload = stream->payload_attr;
 	while (payload) {
-		LM_DBG("......payload[%d]:%p=>%p p_payload_attr[%d]:%p '%.*s' '%.*s' '%.*s' '%.*s' '%.*s' '%.*s'\n",
+		LM_DBG("......payload[%d]:%p=>%p p_payload_attr[%d]:%p '%.*s' '%.*s' '%.*s' '%.*s'\n",
 			payload->payload_num, payload, payload->next,
 			payload->payload_num, stream->p_payload_attr[payload->payload_num],
 			payload->rtp_payload.len, payload->rtp_payload.s,
 			payload->rtp_enc.len, payload->rtp_enc.s,
 			payload->rtp_clock.len, payload->rtp_clock.s,
-			payload->rtp_params.len, payload->rtp_params.s,
-			payload->sendrecv_mode.len, payload->sendrecv_mode.s,
-			payload->ptime.len, payload->ptime.s);
+			payload->rtp_params.len, payload->rtp_params.s);
 		payload=payload->next;
 	}
 }
@@ -925,9 +882,7 @@ sdp_payload_attr_t * clone_sdp_payload_attr(sdp_payload_attr_t *attr)
 			attr->rtp_payload.len +
 			attr->rtp_enc.len +
 			attr->rtp_clock.len +
-			attr->rtp_params.len +
-			attr->sendrecv_mode.len +
-			attr->ptime.len;
+			attr->rtp_params.len;
 	clone_attr = (sdp_payload_attr_t*)shm_malloc(len);
 	if (clone_attr == NULL) {
 		LM_ERR("no more shm mem (%d)\n",len);
@@ -966,20 +921,6 @@ sdp_payload_attr_t * clone_sdp_payload_attr(sdp_payload_attr_t *attr)
 		p += attr->rtp_params.len;
 	}
 
-	if (attr->sendrecv_mode.len) {
-		clone_attr->sendrecv_mode.s = p;
-		clone_attr->sendrecv_mode.len = attr->sendrecv_mode.len;
-		memcpy( p, attr->sendrecv_mode.s, attr->sendrecv_mode.len);
-		p += attr->sendrecv_mode.len;
-	}
-
-	if (attr->ptime.len) {
-		clone_attr->ptime.s = p;
-		clone_attr->ptime.len = attr->ptime.len;
-		memcpy( p, attr->ptime.s, attr->ptime.len);
-		p += attr->ptime.len;
-	}
-
 	return clone_attr;
 }
 
@@ -1001,6 +942,8 @@ sdp_stream_cell_t * clone_sdp_stream_cell(sdp_stream_cell_t *stream)
 			stream->media.len +
 			stream->port.len +
 			stream->transport.len +
+			stream->sendrecv_mode.len +
+			stream->ptime.len +
 			stream->payloads.len +
 			stream->bw_type.len +
 			stream->bw_width.len +
@@ -1063,6 +1006,20 @@ sdp_stream_cell_t * clone_sdp_stream_cell(sdp_stream_cell_t *stream)
 		p += stream->transport.len;
 	}
 
+	if (stream->sendrecv_mode.len) {
+		clone_stream->sendrecv_mode.s = p;
+		clone_stream->sendrecv_mode.len = stream->sendrecv_mode.len;
+		memcpy( p, stream->sendrecv_mode.s, stream->sendrecv_mode.len);
+		p += stream->sendrecv_mode.len;
+	}
+
+	if (stream->ptime.len) {
+		clone_stream->ptime.s = p;
+		clone_stream->ptime.len = stream->ptime.len;
+		memcpy( p, stream->ptime.s, stream->ptime.len);
+		p += stream->ptime.len;
+	}
+
 	if (stream->payloads.len) {
 		clone_stream->payloads.s = p;
 		clone_stream->payloads.len = stream->payloads.len;
diff --git a/parser/sdp/sdp.h b/parser/sdp/sdp.h
index 73c334f..0e9f19c 100644
--- a/parser/sdp/sdp.h
+++ b/parser/sdp/sdp.h
@@ -40,8 +40,6 @@ typedef struct sdp_payload_attr {
 	str rtp_enc;
 	str rtp_clock;
 	str rtp_params;
-	str sendrecv_mode;
-	str ptime;
 } sdp_payload_attr_t;
 
 typedef struct sdp_stream_cell {
@@ -54,6 +52,8 @@ typedef struct sdp_stream_cell {
 	str media;
 	str port;
 	str transport;
+	str sendrecv_mode;
+	str ptime;
 	str payloads;
 	int payloads_num;                         /**< number of payloads inside a stream */
 	/* b=<bwtype>:<bandwidth> */




More information about the sr-dev mailing list