]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-3439 --resolve
authorAnthony Minessale <anthm@freeswitch.org>
Mon, 1 Aug 2011 21:29:37 +0000 (16:29 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Mon, 1 Aug 2011 21:29:37 +0000 (16:29 -0500)
src/mod/endpoints/mod_sofia/sofia_glue.c

index 590723b8bda1dc9ade817bc9a15c84c8ec4472f5..1cd72bd60e95cfc578346c93e45a0e50c952abfb 100644 (file)
@@ -1863,7 +1863,12 @@ char *sofia_glue_get_extra_headers(switch_channel_t *channel, const char *prefix
        char *extra_headers = NULL;
        switch_stream_handle_t stream = { 0 };
        switch_event_header_t *hi = NULL;
+       const char *exclude_regex = NULL;
+       switch_regex_t *re = NULL;
+       int ovector[30] = {0};
+       int proceed;
 
+       exclude_regex = switch_channel_get_variable(channel, "exclude_outgoing_extra_header");
        SWITCH_STANDARD_STREAM(stream);
        if ((hi = switch_channel_variable_first(channel))) {
                for (; hi; hi = hi->next) {
@@ -1871,8 +1876,13 @@ char *sofia_glue_get_extra_headers(switch_channel_t *channel, const char *prefix
                        char *value = (char *) hi->value;
 
                        if (!strncasecmp(name, prefix, strlen(prefix))) {
-                               const char *hname = name + strlen(prefix);
-                               stream.write_function(&stream, "%s: %s\r\n", hname, value);
+                               if ( !exclude_regex || !(proceed = switch_regex_perform(name, exclude_regex, &re, ovector, sizeof(ovector) / sizeof(ovector[0])))) {
+                                       const char *hname = name + strlen(prefix);
+                                       stream.write_function(&stream, "%s: %s\r\n", hname, value);
+                                       switch_regex_safe_free(re);
+                               } else {
+                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Ignoring Extra Header [%s] , matches exclude_outgoing_extra_header [%s]\n", name, exclude_regex);
+                               }
                        }
                }
                switch_channel_variable_last(channel);