Hi Carsten,

indeed the module is at beginning, but for sure will get more features before we will release next major version. Some of your needs are matching items in my plans for this module, for the moment time is the only constraint, so I will add as I have some time or a need for such features. Feel free to add your own extensions to the module when you have time/needs/ideas.

Thanks,
Daniel

On 3/14/11 9:15 AM, Carsten Bock wrote:
Hi Daniel,

nice, new module!
But here is something from my wishlist:

Apart from removing codecs, it would be great to have  a function to
remove all codecs but some wanted ones, e.g.:

sdp_limit_codecs("0,8,101");

which would remove all codecs except those with type 0,8 and 101 (if
offered). A function like this should return false, if the codecs are
not present. And, of course, it would be great, if one could limit the
media-types to certain ones: e.g. allow only m=audio, not m=video (or
others)....

That would be my wishlist for this module... (otherwise we/i can add
this later, if i really require this)

Carsten

2011/3/14 Daniel-Constantin Mierla<[email protected]>:
Module: sip-router
Branch: master
Commit: c889ca572607e4715132b2f3911f795e2bb43bbc
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=c889ca572607e4715132b2f3911f795e2bb43bbc

Author: Daniel-Constantin Mierla<[email protected]>
Committer: Daniel-Constantin Mierla<[email protected]>
Date:   Sun Mar 13 23:04:18 2011 +0100

sdpops: added functions to print sdp and check media type

- sdp_print(level) - print the parsed sdp structure to the debug 'level'
  (integer representation of log levels). Good for debug purposes
- sdp_with_media(type) - return true if the sdp has 'media=type'

---

  modules/sdpops/sdpops_mod.c |  103 +++++++++++++++++++++++++++++++++++++++---
  1 files changed, 95 insertions(+), 8 deletions(-)

diff --git a/modules/sdpops/sdpops_mod.c b/modules/sdpops/sdpops_mod.c
index bc118ca..e49c968 100644
--- a/modules/sdpops/sdpops_mod.c
+++ b/modules/sdpops/sdpops_mod.c
@@ -38,13 +38,18 @@
  MODULE_VERSION

  static int w_sdp_remove_codecs_by_id(sip_msg_t* msg, char* codecs, char *bar);
-static int fixup_sdp_remove_codecs_by_id(void** param, int param_no);
+static int w_sdp_with_media(sip_msg_t* msg, char* media, char *bar);
+static int w_sdp_print(sip_msg_t* msg, char* level, char *bar);

  static int mod_init(void);

  static cmd_export_t cmds[] = {
        {"sdp_remove_codecs_by_id",    (cmd_function)w_sdp_remove_codecs_by_id,
-               1, fixup_sdp_remove_codecs_by_id,  0, ANY_ROUTE},
+               1, fixup_spve_null,  0, ANY_ROUTE},
+       {"sdp_with_media",             (cmd_function)w_sdp_with_media,
+               1, fixup_spve_null,  0, ANY_ROUTE},
+       {"sdp_print",                  (cmd_function)w_sdp_print,
+               1, fixup_igp_null,  0, ANY_ROUTE},
        {0, 0, 0, 0, 0}
  };

@@ -183,8 +188,6 @@ int sdp_remove_codecs_by_id(sip_msg_t* msg, str* codecs)

        sdp = (sdp_info_t*)msg->body;

-       print_sdp(sdp, L_DBG);
-
        sdp_session_num = 0;
        for(;;)
        {
@@ -246,12 +249,96 @@ static int w_sdp_remove_codecs_by_id(sip_msg_t* msg, 
char* codecs, char* bar)


  /**
- *
+ * @brief check 'media' matches the value of any 'm=value ...' lines
+ * @return -1 - error; 0 - not found; 1 - found
  */
-static int fixup_sdp_remove_codecs_by_id(void** param, int param_no)
+static int sdp_with_media(sip_msg_t *msg, str *media)
  {
-       if (param_no == 1) {
-           return fixup_spve_null(param, 1);
+       sdp_info_t *sdp = NULL;
+       int sdp_session_num;
+       int sdp_stream_num;
+       sdp_session_cell_t* sdp_session;
+       sdp_stream_cell_t* sdp_stream;
+
+       if(parse_sdp(msg)<  0) {
+               LM_ERR("Unable to parse sdp\n");
+               return -1;
+       }
+
+       LM_ERR("attempting to search for media type: [%.*s]\n",
+                       media->len, media->s);
+
+       sdp = (sdp_info_t*)msg->body;
+
+       sdp_session_num = 0;
+       for(;;)
+       {
+               sdp_session = get_sdp_session(msg, sdp_session_num);
+               if(!sdp_session) break;
+               sdp_stream_num = 0;
+               for(;;)
+               {
+                       sdp_stream = get_sdp_stream(msg, sdp_session_num, 
sdp_stream_num);
+                       if(!sdp_stream) break;
+
+                       LM_DBG("stream %d of %d - media [%.*s]\n",
+                               sdp_stream_num, sdp_session_num,
+                               sdp_stream->media.len, sdp_stream->media.s);
+                       if(media->len==sdp_stream->media.len
+&&  strncasecmp(sdp_stream->media.s, media->s,
+                                                       media->len)==0)
+                               return 1;
+                       sdp_stream_num++;
+               }
+               sdp_session_num++;
        }
+
        return 0;
  }
+
+/**
+ *
+ */
+static int w_sdp_with_media(sip_msg_t* msg, char* media, char *bar)
+{
+       str lmedia = {0, 0};
+
+       if(media==0)
+       {
+               LM_ERR("invalid parameters\n");
+               return -1;
+       }
+
+       if(fixup_get_svalue(msg, (gparam_p)media,&lmedia)!=0)
+       {
+               LM_ERR("unable to get the media value\n");
+               return -1;
+       }
+
+       if(sdp_with_media(msg,&lmedia)<=0)
+               return -1;
+       return 1;
+}
+
+
+static int w_sdp_print(sip_msg_t* msg, char* level, char *bar)
+{
+       sdp_info_t *sdp = NULL;
+       int llevel = L_DBG;
+
+       if(parse_sdp(msg)<  0) {
+               LM_ERR("Unable to parse sdp\n");
+               return -1;
+       }
+
+       if(fixup_get_ivalue(msg, (gparam_p)level,&llevel)!=0)
+       {
+               LM_ERR("unable to get the debug level value\n");
+               return -1;
+       }
+
+       sdp = (sdp_info_t*)msg->body;
+
+       print_sdp(sdp, llevel);
+       return 1;
+}


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev




--
Daniel-Constantin Mierla
http://www.asipto.com


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to