[sr-dev] git:master: modules/sdpops: added sdp_with_ice() function for checking if sdp

Juha Heinanen jh at tutpro.com
Mon Apr 28 11:16:55 CEST 2014


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

Author: Juha Heinanen <jh at tutpro.com>
Committer: Juha Heinanen <jh at tutpro.com>
Date:   Mon Apr 28 12:15:54 2014 +0300

modules/sdpops: added sdp_with_ice() function for checking if sdp
  contains ICE candidate attribute(s)

---

 modules/sdpops/README               |   30 ++++++++++++++++++++++++------
 modules/sdpops/doc/sdpops_admin.xml |   21 +++++++++++++++++++++
 modules/sdpops/sdpops_mod.c         |   34 ++++++++++++++++++++++++++++++++++
 3 files changed, 79 insertions(+), 6 deletions(-)

diff --git a/modules/sdpops/README b/modules/sdpops/README
index 9ea8e98..ebad4bd 100644
--- a/modules/sdpops/README
+++ b/modules/sdpops/README
@@ -42,7 +42,8 @@ Daniel-Constantin Mierla
               4.14. sdp_print(level)
               4.15. sdp_get(avpvar)
               4.16. sdp_content()
-              4.17. sdp_get_line_startswith(avpvar, string)
+              4.17. sdp_with_ice()
+              4.18. sdp_get_line_startswith(avpvar, string)
 
    List of Examples
 
@@ -62,7 +63,8 @@ Daniel-Constantin Mierla
    1.14. sdp_print usage
    1.15. sdp_get usage
    1.16. sdp_content usage
-   1.17. sdp_get_line_startswith usage
+   1.17. sdp_with_ice usage
+   1.18. sdp_get_line_startswith usage
 
 Chapter 1. Admin Guide
 
@@ -93,7 +95,8 @@ Chapter 1. Admin Guide
         4.14. sdp_print(level)
         4.15. sdp_get(avpvar)
         4.16. sdp_content()
-        4.17. sdp_get_line_startswith(avpvar, string)
+        4.17. sdp_with_ice()
+        4.18. sdp_get_line_startswith(avpvar, string)
 
 1. Overview
 
@@ -143,7 +146,8 @@ Chapter 1. Admin Guide
    4.14. sdp_print(level)
    4.15. sdp_get(avpvar)
    4.16. sdp_content()
-   4.17. sdp_get_line_startswith(avpvar, string)
+   4.17. sdp_with_ice()
+   4.18. sdp_get_line_startswith(avpvar, string)
 
 4.1.  sdp_remove_codecs_by_id(list)
 
@@ -401,7 +405,21 @@ if(sdp_content()) {
 }
 ...
 
-4.17.  sdp_get_line_startswith(avpvar, string)
+4.17.  sdp_with_ice()
+
+   Return true if the SIP message has SDP body that contains ICE candidate
+   attribute(s).
+
+   This function can be used from ANY_ROUTE.
+
+   Example 1.17. sdp_with_ice usage
+...
+if(sdp_with_ice()) {
+    ...
+}
+...
+
+4.18.  sdp_get_line_startswith(avpvar, string)
 
    Store the search part of SDP body message with line beginning with
    'string' in an AVP. Return 1 if 'string' is found in SDP, -1 on error
@@ -409,7 +427,7 @@ if(sdp_content()) {
 
    This function can be used from ANY_ROUTE.
 
-   Example 1.17. sdp_get_line_startswith usage
+   Example 1.18. sdp_get_line_startswith usage
 ...
 if(sdp_get_line_startswith("$avp(mline)", "m=")) {
         xlog("m-line: $avp(mline)\n");
diff --git a/modules/sdpops/doc/sdpops_admin.xml b/modules/sdpops/doc/sdpops_admin.xml
index a688bfa..7373b0b 100644
--- a/modules/sdpops/doc/sdpops_admin.xml
+++ b/modules/sdpops/doc/sdpops_admin.xml
@@ -460,6 +460,27 @@ if(sdp_content()) {
 	    </example>
 	</section>
 	<section>
+	    <title>
+		<function moreinfo="none">sdp_with_ice()</function>
+	    </title>
+	    <para>
+		Return true if the SIP message has SDP body that contains ICE candidate attribute(s).
+	    </para>
+		<para>
+			This function can be used from ANY_ROUTE.
+	    </para>
+		<example>
+		<title><function>sdp_with_ice</function> usage</title>
+		<programlisting format="linespecific">
+...
+if(sdp_with_ice()) {
+    ...
+}
+...
+</programlisting>
+	    </example>
+	</section>
+	<section>
 		<title>
 			<function moreinfo="none">sdp_get_line_startswith(avpvar, string)</function>
 		</title>
diff --git a/modules/sdpops/sdpops_mod.c b/modules/sdpops/sdpops_mod.c
index 3712311..a8c472f 100644
--- a/modules/sdpops/sdpops_mod.c
+++ b/modules/sdpops/sdpops_mod.c
@@ -58,6 +58,7 @@ static int w_sdp_remove_transport(sip_msg_t* msg, char* transport, char *bar);
 static int w_sdp_print(sip_msg_t* msg, char* level, char *bar);
 static int w_sdp_get(sip_msg_t* msg, char *bar);
 static int w_sdp_content(sip_msg_t* msg, char* foo, char *bar);
+static int w_sdp_with_ice(sip_msg_t* msg, char* foo, char *bar);
 static int w_sdp_get_line_startswith(sip_msg_t* msg, char *foo, char *bar);
 
 
@@ -100,6 +101,8 @@ static cmd_export_t cmds[] = {
 		1, 0,  0, ANY_ROUTE},
 	{"sdp_content",                (cmd_function)w_sdp_content,
 		0, 0,  0, ANY_ROUTE},
+	{"sdp_with_ice",                (cmd_function)w_sdp_with_ice,
+		0, 0,  0, ANY_ROUTE},
 	{"sdp_get_line_startswith", (cmd_function)w_sdp_get_line_startswith,
 		2, 0,  0, ANY_ROUTE},
 	{"bind_sdpops",                (cmd_function)bind_sdpops,
@@ -1424,6 +1427,37 @@ static int w_sdp_content(sip_msg_t* msg, char* foo, char *bar)
 /**
  *
  */
+static int w_sdp_with_ice(sip_msg_t* msg, char* foo, char *bar)
+{
+    str ice, body;
+
+    ice.s = "a=candidate";
+    ice.len = 11;
+
+    body.s = get_body(msg);
+    if (body.s == NULL) {
+	LM_DBG("failed to get the message body\n");
+	return -1;
+    }
+
+    body.len = msg->len -(int)(body.s - msg->buf);
+    if (body.len == 0) {
+	LM_DBG("message body has length zero\n");
+	return -1;
+    }
+
+    if (ser_memmem(body.s, ice.s, body.len, ice.len) != NULL) {
+	LM_INFO("found ice attribute\n");
+	return 1;
+    } else {
+	LM_INFO("did't find ice attribute\n");
+	return -1;
+    }
+}
+
+/**
+ *
+ */
 static int w_sdp_get_line_startswith(sip_msg_t *msg, char *avp, char *s_line)
 {
 	sdp_info_t *sdp = NULL;




More information about the sr-dev mailing list