From: Anthony Minessale Date: Thu, 17 Sep 2009 21:38:04 +0000 (+0000) Subject: disable duplicate headers on request param events X-Git-Tag: v1.0.6~1857 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d2b797fe5439d10741862f6e223ad3afce48de6f;p=thirdparty%2Ffreeswitch.git disable duplicate headers on request param events git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@14909 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- diff --git a/libs/esl/src/esl_event.c b/libs/esl/src/esl_event.c index 0d19bb704b..e2f6359b53 100644 --- a/libs/esl/src/esl_event.c +++ b/libs/esl/src/esl_event.c @@ -299,6 +299,10 @@ static esl_status_t esl_event_base_add_header(esl_event_t *event, esl_stack_t st header = ALLOC(sizeof(*header)); esl_assert(header); + if ((event->flags & EF_UNIQ_HEADERS)) { + esl_event_del_header(event, header_name); + } + memset(header, 0, sizeof(*header)); header->name = DUP(header_name); diff --git a/libs/esl/src/include/esl_event.h b/libs/esl/src/include/esl_event.h index d640b6a73e..14c21a5967 100644 --- a/libs/esl/src/include/esl_event.h +++ b/libs/esl/src/include/esl_event.h @@ -160,8 +160,12 @@ struct esl_event { /*! unique key */ unsigned long key; struct esl_event *next; + int flags; }; +typedef enum { + EF_UNIQ_HEADERS = (1 << 0) +} esl_event_flag_t; #define ESL_EVENT_SUBCLASS_ANY NULL diff --git a/src/include/switch_event.h b/src/include/switch_event.h index 1fbcd14abe..0cfc1bab15 100644 --- a/src/include/switch_event.h +++ b/src/include/switch_event.h @@ -95,8 +95,14 @@ struct switch_event { /*! unique key */ unsigned long key; struct switch_event *next; + int flags; }; +typedef enum { + EF_UNIQ_HEADERS = (1 << 0) +} switch_event_flag_t; + + struct switch_event_node; #define SWITCH_EVENT_SUBCLASS_ANY NULL diff --git a/src/switch_event.c b/src/switch_event.c index ef5c02845a..9bc81d9a1d 100644 --- a/src/switch_event.c +++ b/src/switch_event.c @@ -635,6 +635,10 @@ SWITCH_DECLARE(switch_status_t) switch_event_create_subclass_detailed(const char memset(*event, 0, sizeof(switch_event_t)); + if (event_id == SWITCH_EVENT_REQUEST_PARAMS) { + (*event)->flags |= EF_UNIQ_HEADERS; + } + if (event_id != SWITCH_EVENT_CLONE) { (*event)->event_id = event_id; switch_event_prep_for_delivery_detailed(file, func, line, *event); @@ -742,6 +746,10 @@ switch_status_t switch_event_base_add_header(switch_event_t *event, switch_stack } #endif + if (switch_test_flag(event, EF_UNIQ_HEADERS)) { + switch_event_del_header(event, header_name); + } + memset(header, 0, sizeof(*header)); header->name = DUP(header_name);