浏览代码

sdpops: added $sdp(m0:rtcp:port) - rtcp port of first media stream

Daniel-Constantin Mierla 1 年之前
父节点
当前提交
cbe13bedc1
共有 1 个文件被更改,包括 26 次插入0 次删除
  1. 26 0
      src/modules/sdpops/sdpops_mod.c

+ 26 - 0
src/modules/sdpops/sdpops_mod.c

@@ -2067,6 +2067,9 @@ static int pv_get_sdp(sip_msg_t *msg, pv_param_t *param, pv_value_t *res)
 	sdp_info_t *sdp = NULL;
 	str sess_version = STR_NULL;
 	long sess_version_num = 0;
+	unsigned int uport = 0;
+	static char uport_buf[INT2STR_MAX_LEN];
+	str s = STR_NULL;
 
 	if(msg == NULL || param == NULL)
 		return -1;
@@ -2150,6 +2153,27 @@ static int pv_get_sdp(sip_msg_t *msg, pv_param_t *param, pv_value_t *res)
 						msg, param, res, &sdp->sessions->streams->port);
 			}
 			return pv_get_null(msg, param, res);
+		case 5:
+			/* m0:rtcp:port */
+			if(sdp->sessions == NULL) {
+				return pv_get_null(msg, param, res);
+			}
+			if(sdp->sessions->streams == NULL) {
+				return pv_get_null(msg, param, res);
+			}
+			if(sdp->sessions->streams->rtcp_port.s != NULL
+					&& sdp->sessions->streams->rtcp_port.len > 0) {
+				return pv_get_strval(
+						msg, param, res, &sdp->sessions->streams->rtcp_port);
+			}
+			if(sdp->sessions->streams->port.s != NULL
+					&& sdp->sessions->streams->port.len > 0) {
+				str2int(&sdp->sessions->streams->port, &uport);
+				uport++;
+				s.s = int2strbuf(uport, uport_buf, INT2STR_MAX_LEN, &s.len);
+				return pv_get_strval(msg, param, res, &s);
+			}
+			return pv_get_null(msg, param, res);
 
 		default:
 			return pv_get_null(msg, param, res);
@@ -2212,6 +2236,8 @@ static int pv_parse_sdp_name(pv_spec_p sp, str *in)
 		case 12:
 			if(strncmp(in->s, "sess_version", 12) == 0)
 				sp->pvp.pvn.u.isname.name.n = 1;
+			else if(strncmp(in->s, "m0:rctp:port", 12) == 0)
+				sp->pvp.pvn.u.isname.name.n = 5;
 			else
 				goto error;
 			break;