Browse Source

Merge branch 'master' of ssh://git.sip-router.org/sip-router

Forgot pull before push.
Juha Heinanen 13 years ago
parent
commit
e02024681e

+ 5 - 5
modules/mqueue/mqueue_api.c

@@ -362,7 +362,7 @@ int pv_parse_mq_name(pv_spec_t *sp, str *in)
 	return 0;
 }
 
-str *pv_get_mq_name(str *in)
+str *pv_get_mq_name(sip_msg_t *msg, str *in)
 {
 	str *queue;
 
@@ -385,12 +385,12 @@ str *pv_get_mq_name(str *in)
 		}
 
 		memset(&pvv, 0, sizeof(pv_value_t));
-		if (faked_msg_init() < 0)
+		if (msg==NULL && faked_msg_init() < 0)
 		{
 			LM_ERR("faked_msg_init() failed\n");
 			return NULL;
 		}
-		if (pv_get_spec_value(faked_msg_next(), pvs, &pvv) != 0)
+		if (pv_get_spec_value((msg)?msg:faked_msg_next(), pvs, &pvv) != 0)
 		{
 			LM_ERR("failed to get pv value for [%.*s]\n", in->len, in->s);
 			return NULL;
@@ -409,7 +409,7 @@ int pv_get_mqk(struct sip_msg *msg, pv_param_t *param,
 		pv_value_t *res)
 {
 	mq_pv_t *mp = NULL;
-	str *in = pv_get_mq_name(&param->pvn.u.isname.name.s);
+	str *in = pv_get_mq_name(msg, &param->pvn.u.isname.name.s);
 
 	if (in == NULL)
 	{
@@ -436,7 +436,7 @@ int pv_get_mqv(struct sip_msg *msg, pv_param_t *param,
 		pv_value_t *res)
 {
 	mq_pv_t *mp = NULL;
-	str *in = pv_get_mq_name(&param->pvn.u.isname.name.s);
+	str *in = pv_get_mq_name(msg, &param->pvn.u.isname.name.s);
 
 	if (in == NULL)
 	{

+ 16 - 0
modules/sdpops/README

@@ -35,6 +35,7 @@ Daniel-Constantin Mierla
               4.7. sdp_with_codecs_by_id(list)
               4.8. sdp_with_codecs_by_name(list)
               4.9. sdp_print(level)
+              4.10. sdp_get(avpvar)
 
    List of Examples
 
@@ -47,6 +48,7 @@ Daniel-Constantin Mierla
    1.7. sdp_with_codecs_by_id usage
    1.8. sdp_with_codecs_by_name usage
    1.9. sdp_print usage
+   1.10. sdp_get usage
 
 Chapter 1. Admin Guide
 
@@ -70,6 +72,7 @@ Chapter 1. Admin Guide
         4.7. sdp_with_codecs_by_id(list)
         4.8. sdp_with_codecs_by_name(list)
         4.9. sdp_print(level)
+        4.10. sdp_get(avpvar)
 
 1. Overview
 
@@ -112,6 +115,7 @@ Chapter 1. Admin Guide
    4.7. sdp_with_codecs_by_id(list)
    4.8. sdp_with_codecs_by_name(list)
    4.9. sdp_print(level)
+   4.10. sdp_get(avpvar)
 
 4.1. sdp_remove_codecs_by_id(list)
 
@@ -263,3 +267,15 @@ if(sdp_with_codecs_by_id("PCMU,PCMA,GSM")) { ... }
 # print the SDP
 sdp_print("1");
 ...
+
+4.10. sdp_get(avpvar)
+
+   Store the SDP part of message body in an AVP. Return 1 if SDP is found,
+   -1 on error and -2 if there is no SDP part in the message body.
+
+   This function can be used from ANY_ROUTE.
+
+   Example 1.10. sdp_get usage
+...
+sdp_get("$avp(sdp)");
+...

+ 20 - 0
modules/sdpops/doc/sdpops_admin.xml

@@ -296,6 +296,26 @@ if(sdp_with_codecs_by_id("PCMU,PCMA,GSM")) { ... }
 # print the SDP
 sdp_print("1");
 ...
+</programlisting>
+	    </example>
+	</section>
+	<section>
+	    <title>
+		<function moreinfo="none">sdp_get(avpvar)</function>
+	    </title>
+	    <para>
+		Store the SDP part of message body in an AVP. Return 1 if SDP is found,
+		-1 on error and -2 if there is no SDP part in the message body.
+	    </para>
+		<para>
+			This function can be used from ANY_ROUTE.
+	    </para>
+		<example>
+		<title><function>sdp_get</function> usage</title>
+		<programlisting format="linespecific">
+...
+sdp_get("$avp(sdp)");
+...
 </programlisting>
 	    </example>
 	</section>

+ 10 - 6
modules/sdpops/sdpops_mod.c

@@ -942,17 +942,22 @@ static int w_get_sdp(sip_msg_t* msg, char *avp)
 	int_str avp_name;
 	static unsigned short avp_type = 0;
 	str s;
-	pv_spec_t avp_spec;
+	pv_spec_t *avp_spec = NULL;
 	int sdp_missing=1;
 	
 	s.s = avp; s.len = strlen(s.s);
-	if (pv_parse_spec(&s, &avp_spec)==0
-			|| avp_spec.type!=PVT_AVP) {
+	if (pv_locate_name(&s) != s.len)
+	{
+		LM_ERR("invalid parameter\n");
+		return -1;
+	}
+	if (((avp_spec = pv_cache_get(&s)) == NULL)
+			|| avp_spec->type!=PVT_AVP) {
 		LM_ERR("malformed or non AVP %s AVP definition\n", avp);
 		return -1;
 	}
 
-	if(pv_get_avp_name(0, &avp_spec.pvp, &avp_name, &avp_type)!=0)
+	if(pv_get_avp_name(0, &avp_spec->pvp, &avp_name, &avp_type)!=0)
 	{
 		LM_ERR("[%s]- invalid AVP definition\n", avp);
 		return -1;
@@ -966,9 +971,8 @@ static int w_get_sdp(sip_msg_t* msg, char *avp)
 	sdp = (sdp_info_t*)msg->body;
 	
 	if (sdp_missing) {
-		avp_val.s.s = NULL;
-		avp_val.s.len = 0;
 		LM_DBG("No SDP\n");
+		return -2;
 	} else {
 		avp_val.s.s = pkg_malloc(sdp->raw_sdp.len);
 		avp_val.s.len = sdp->raw_sdp.len;