]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[Core] Improve performance avoiding SWITCH_STACK_NODUP check all the time. nodupcheck 1844/head
authorAndrey Volk <andywolk@gmail.com>
Thu, 27 Oct 2022 20:14:48 +0000 (23:14 +0300)
committerAndrey Volk <andywolk@gmail.com>
Sun, 30 Oct 2022 17:38:01 +0000 (20:38 +0300)
115 files changed:
build/standalone_module/mod_skel.c
src/include/switch_event.h
src/include/test/switch_test.h
src/mod/applications/mod_av/avcodec.c
src/mod/applications/mod_avmd/mod_avmd.c
src/mod/applications/mod_callcenter/mod_callcenter.c
src/mod/applications/mod_cidlookup/mod_cidlookup.c
src/mod/applications/mod_commands/mod_commands.c
src/mod/applications/mod_conference/conference_api.c
src/mod/applications/mod_conference/conference_cdr.c
src/mod/applications/mod_conference/conference_event.c
src/mod/applications/mod_conference/conference_file.c
src/mod/applications/mod_conference/conference_loop.c
src/mod/applications/mod_conference/conference_member.c
src/mod/applications/mod_conference/conference_record.c
src/mod/applications/mod_conference/conference_video.c
src/mod/applications/mod_conference/mod_conference.c
src/mod/applications/mod_curl/mod_curl.c
src/mod/applications/mod_cv/mod_cv.cpp
src/mod/applications/mod_dptools/mod_dptools.c
src/mod/applications/mod_fifo/mod_fifo.c
src/mod/applications/mod_fsk/mod_fsk.c
src/mod/applications/mod_httapi/mod_httapi.c
src/mod/applications/mod_lcr/mod_lcr.c
src/mod/applications/mod_oreka/mod_oreka.c
src/mod/applications/mod_rad_auth/mod_rad_auth.c
src/mod/applications/mod_sms/mod_sms.c
src/mod/applications/mod_sms_flowroute/mod_sms_flowroute.c
src/mod/applications/mod_snom/mod_snom.c
src/mod/applications/mod_sonar/mod_sonar.c
src/mod/applications/mod_spandsp/mod_spandsp_dsp.c
src/mod/applications/mod_spandsp/mod_spandsp_fax.c
src/mod/applications/mod_stress/mod_stress.cpp
src/mod/applications/mod_translate/mod_translate.c
src/mod/applications/mod_valet_parking/mod_valet_parking.c
src/mod/applications/mod_vmd/mod_vmd.c
src/mod/applications/mod_voicemail/mod_voicemail.c
src/mod/applications/mod_voicemail_ivr/utils.c
src/mod/endpoints/mod_alsa/mod_alsa.c
src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp
src/mod/endpoints/mod_h323/mod_h323.cpp
src/mod/endpoints/mod_loopback/mod_loopback.c
src/mod/endpoints/mod_opal/mod_opal.cpp
src/mod/endpoints/mod_portaudio/mod_portaudio.c
src/mod/endpoints/mod_rtmp/mod_rtmp.c
src/mod/endpoints/mod_rtmp/rtmp.c
src/mod/endpoints/mod_skinny/skinny_server.c
src/mod/endpoints/mod_sofia/mod_sofia.c
src/mod/endpoints/mod_sofia/sip-dig.c
src/mod/endpoints/mod_sofia/sofia.c
src/mod/endpoints/mod_sofia/sofia_presence.c
src/mod/endpoints/mod_sofia/sofia_reg.c
src/mod/endpoints/mod_verto/mod_verto.c
src/mod/event_handlers/mod_erlang_event/handle_msg.c
src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c
src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c
src/mod/event_handlers/mod_event_socket/mod_event_socket.c
src/mod/event_handlers/mod_kazoo/kazoo_commands.c
src/mod/event_handlers/mod_kazoo/kazoo_dptools.c
src/mod/event_handlers/mod_kazoo/kazoo_ei_utils.c
src/mod/event_handlers/mod_kazoo/kazoo_endpoints.c
src/mod/event_handlers/mod_kazoo/kazoo_event_stream.c
src/mod/event_handlers/mod_kazoo/kazoo_fetch_agent.c
src/mod/event_handlers/mod_kazoo/kazoo_node.c
src/mod/event_handlers/mod_kazoo/kazoo_tweaks.c
src/mod/event_handlers/mod_kazoo/kazoo_utils.c
src/mod/event_handlers/mod_rayo/mod_rayo.c
src/mod/event_handlers/mod_rayo/rayo_cpa_component.c
src/mod/event_handlers/mod_rayo/rayo_cpa_detector.c
src/mod/event_handlers/mod_rayo/rayo_fax_components.c
src/mod/event_handlers/mod_rayo/rayo_input_component.c
src/mod/event_handlers/mod_smpp/mod_smpp.c
src/mod/event_handlers/mod_smpp/mod_smpp_message.c
src/mod/formats/mod_imagick/mod_imagick.c
src/mod/languages/mod_v8/mod_v8.cpp
src/mod/languages/mod_v8/src/fsevent.cpp
src/mod/languages/mod_v8/src/fseventhandler.cpp
src/mod/languages/mod_v8/src/fsrequest.cpp
src/mod/loggers/mod_graylog2/mod_graylog2.c
src/mod/xml_int/mod_xml_curl/mod_xml_curl.c
src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c
src/switch_caller.c
src/switch_channel.c
src/switch_console.c
src/switch_core.c
src/switch_core_codec.c
src/switch_core_hash.c
src/switch_core_media.c
src/switch_core_session.c
src/switch_core_state_machine.c
src/switch_cpp.cpp
src/switch_event.c
src/switch_ivr.c
src/switch_ivr_async.c
src/switch_ivr_bridge.c
src/switch_ivr_menu.c
src/switch_ivr_originate.c
src/switch_ivr_play_say.c
src/switch_limit.c
src/switch_loadable_module.c
src/switch_log.c
src/switch_msrp.c
src/switch_nat.c
src/switch_regex.c
src/switch_rtp.c
src/switch_scheduler.c
src/switch_utils.c
src/switch_vpx.c
src/switch_xml.c
src/switch_xml_config.c
tests/unit/switch_core.c
tests/unit/switch_event.c
tests/unit/switch_ivr_async.c
tests/unit/switch_ivr_originate.c
tests/unit/switch_ivr_play_say.c

index 38bf4ac0990c0c31dcd43ee2e94262ca89abfad9..57fc8bfc9adaac9eab33fc9c04ef383a154bddb4 100644 (file)
@@ -180,8 +180,8 @@ SWITCH_STANDARD_API(skel_function)
 
                /* populate the event with some headers */
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "testing", "true");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "foo", "bar");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "testing", "true");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "foo", "bar");
 
                for (x = 0; x < 10; x++) {
                        char name[128];
index f2ac381ee84a79738ecdf99dbed825b49c8132d2..a302ec31602babe0efa408ef7ee15ae635f516a0 100644 (file)
@@ -206,6 +206,7 @@ SWITCH_DECLARE(switch_status_t) switch_event_set_subclass_name(switch_event_t *e
   \return SWITCH_STATUS_SUCCESS if the header was added
 */
 SWITCH_DECLARE(switch_status_t) switch_event_add_header_string(switch_event_t *event, switch_stack_t stack, const char *header_name, const char *data);
+SWITCH_DECLARE(switch_status_t) switch_event_add_header_string_dup(switch_event_t *event, switch_stack_t stack, const char *header_name, const char *data);
 
 SWITCH_DECLARE(switch_status_t) switch_event_del_header_val(switch_event_t *event, const char *header_name, const char *val);
 #define switch_event_del_header(_e, _h) switch_event_del_header_val(_e, _h, NULL)
index db5f4f7a7de93fc272263e9d2d0792d4e29ba7ed..efd26149c79cf90d6fe151809fa528ad0046e4d4 100644 (file)
@@ -512,7 +512,7 @@ static switch_status_t fst_init_core_and_modload(const char *confdir, const char
                fst_requires_module("mod_sndfile"); \
                fst_requires(switch_core_running()); \
                fst_requires(switch_event_create_plain(&fst_originate_vars, SWITCH_EVENT_CHANNEL_DATA) == SWITCH_STATUS_SUCCESS); \
-               switch_event_add_header_string(fst_originate_vars, SWITCH_STACK_BOTTOM, "origination_caller_id_number", "+15551112222"); \
+               switch_event_add_header_string_dup(fst_originate_vars, SWITCH_STACK_BOTTOM, "origination_caller_id_number", "+15551112222"); \
                switch_event_add_header(fst_originate_vars, SWITCH_STACK_BOTTOM, "rate", "%d", rate); \
                if (switch_ivr_originate(NULL, &fst_session, &fst_cause, "{null_video_codec=" video_codec "}null/+15553334444", 2, NULL, NULL, NULL, NULL, fst_originate_vars, SOF_NONE, NULL, NULL) == SWITCH_STATUS_SUCCESS && fst_session) { \
                        switch_memory_pool_t *fst_session_pool = switch_core_session_get_pool(fst_session); \
index a9f6d0927e0296fe2de0fcc89234c0b156337af6..0be84b7e7e02555ace56630a3ad1b2d70cc0134f 100644 (file)
@@ -2173,7 +2173,7 @@ static void parse_profile(avcodec_profile_t *aprofile, switch_xml_t profile)
 
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s: %s\n", name, value);
 
-                       switch_event_add_header_string(aprofile->options, SWITCH_STACK_BOTTOM, name, value);
+                       switch_event_add_header_string_dup(aprofile->options, SWITCH_STACK_BOTTOM, name, value);
                }
        } // for options
 }
@@ -2203,7 +2203,7 @@ static void parse_codecs(avcodec_profile_t *aprofile, switch_xml_t codecs)
 
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "codec: %s, profile: %s\n", codec_name, profile_name);
 
-               switch_event_add_header_string(aprofile->codecs, SWITCH_STACK_BOTTOM, codec_name, profile_name);
+               switch_event_add_header_string_dup(aprofile->codecs, SWITCH_STACK_BOTTOM, codec_name, profile_name);
        }
 }
 
index dde3dfbf9309278cca472e5578ed0aa7a924da7c..eab77d6584cd84f4f7f643dec30b9a056efc6c35 100644 (file)
@@ -701,91 +701,91 @@ static void avmd_fire_event(enum avmd_event type, switch_core_session_t *fs_s, d
        if (status != SWITCH_STATUS_SUCCESS) {
                return;
        }
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(fs_s));
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Call-command", "avmd");
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(fs_s));
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Call-command", "avmd");
        switch (type)
        {
                case AVMD_EVENT_BEEP:
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Beep-Status", "DETECTED");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Beep-Status", "DETECTED");
                        res = snprintf(buf, AVMD_CHAR_BUF_LEN, "%f", freq);
                        if (res < 0 || res > AVMD_CHAR_BUF_LEN - 1) {
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_s), SWITCH_LOG_ERROR, "Frequency truncated [%s], [%d] attempted!\n", buf, res);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Frequency", "ERROR (TRUNCATED)");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Frequency", "ERROR (TRUNCATED)");
                        }
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Frequency", buf);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Frequency", buf);
 
                        res = snprintf(buf, AVMD_CHAR_BUF_LEN, "%f", v_freq);
                        if (res < 0 || res > AVMD_CHAR_BUF_LEN - 1) {
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_s), SWITCH_LOG_ERROR, "Error, truncated [%s], [%d] attempeted!\n", buf, res);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Frequency-variance", "ERROR (TRUNCATED)");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Frequency-variance", "ERROR (TRUNCATED)");
                        }
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Frequency-variance", buf);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Frequency-variance", buf);
 
                        res = snprintf(buf, AVMD_CHAR_BUF_LEN, "%f", amp);
                        if (res < 0 || res > AVMD_CHAR_BUF_LEN - 1) {
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_s), SWITCH_LOG_ERROR, "Amplitude truncated [%s], [%d] attempted!\n", buf, res);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Amplitude", "ERROR (TRUNCATED)");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Amplitude", "ERROR (TRUNCATED)");
                        }
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Amplitude", buf);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Amplitude", buf);
 
                        res = snprintf(buf, AVMD_CHAR_BUF_LEN, "%f", v_amp);
                        if (res < 0 || res > AVMD_CHAR_BUF_LEN - 1) {
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_s), SWITCH_LOG_ERROR, "Error, truncated [%s], [%d] attempeted!\n", buf, res);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Amplitude-variance", "ERROR (TRUNCATED)");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Amplitude-variance", "ERROR (TRUNCATED)");
                        }
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Amplitude-variance", buf);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Amplitude-variance", buf);
 
                        detection_time = detection_stop_time - detection_start_time;
                        res = snprintf(buf, AVMD_CHAR_BUF_LEN, "%" PRId64 "", detection_time);
                        if (res < 0 || res > AVMD_CHAR_BUF_LEN - 1) {
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_s), SWITCH_LOG_ERROR, "Detection time truncated [%s], [%d] attempted!\n", buf, res);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detection-time", "ERROR (TRUNCATED)");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detection-time", "ERROR (TRUNCATED)");
                        }
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detection-time", buf);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detection-time", buf);
 
                        res = snprintf(buf, AVMD_CHAR_BUF_LEN, "%u", resolution);
                        if (res < 0 || res > AVMD_CHAR_BUF_LEN - 1) {
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_s), SWITCH_LOG_ERROR, "Error, truncated [%s], [%d] attempeted!\n", buf, res);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detector-resolution", "ERROR (TRUNCATED)");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detector-resolution", "ERROR (TRUNCATED)");
                        }
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detector-resolution", buf);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detector-resolution", buf);
 
                        res = snprintf(buf, AVMD_CHAR_BUF_LEN, "%u", offset);
                        if (res < 0 || res > AVMD_CHAR_BUF_LEN - 1) {
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_s), SWITCH_LOG_ERROR, "Error, truncated [%s], [%d] attempeted!\n", buf, res);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detector-offset", "ERROR (TRUNCATED)");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detector-offset", "ERROR (TRUNCATED)");
                        }
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detector-offset", buf);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detector-offset", buf);
 
                        res = snprintf(buf, AVMD_CHAR_BUF_LEN, "%u", idx);
                        if (res < 0 || res > AVMD_CHAR_BUF_LEN - 1) {
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_s), SWITCH_LOG_ERROR, "Error, truncated [%s], [%d] attempeted!\n", buf, res);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detector-index", "ERROR (TRUNCATED)");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detector-index", "ERROR (TRUNCATED)");
                        }
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detector-index", buf);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detector-index", buf);
                        break;
 
                case AVMD_EVENT_SESSION_START:
                        res = snprintf(buf, AVMD_CHAR_BUF_LEN, "%" PRId64 "", start_time);
                        if (res < 0 || res > AVMD_CHAR_BUF_LEN - 1) {
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_s), SWITCH_LOG_ERROR, "Start time truncated [%s], [%d] attempted!\n", buf, res);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Start-time", "ERROR (TRUNCATED)");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Start-time", "ERROR (TRUNCATED)");
                        }
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Start-time", buf);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Start-time", buf);
                        break;
 
                case AVMD_EVENT_SESSION_STOP:
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Beep-Status", beep_status == BEEP_DETECTED ? "DETECTED" : "NOTDETECTED");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Beep-Status", beep_status == BEEP_DETECTED ? "DETECTED" : "NOTDETECTED");
                        if (info == 0) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Stop-status", "ERROR (AVMD SESSION OBJECT NOT FOUND IN MEDIA BUG)");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Stop-status", "ERROR (AVMD SESSION OBJECT NOT FOUND IN MEDIA BUG)");
                        }
                        total_time = stop_time - start_time;
                        res = snprintf(buf, AVMD_CHAR_BUF_LEN, "%" PRId64 "", total_time);
                        if (res < 0 || res > AVMD_CHAR_BUF_LEN - 1) {
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_s), SWITCH_LOG_ERROR, "Total time truncated [%s], [%d] attempted!\n", buf, res);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Total-time", "ERROR (TRUNCATED)");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Total-time", "ERROR (TRUNCATED)");
                        }
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Total-time", buf);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Total-time", buf);
                        break;
 
                default:
index fd7bb3dafab041e83c547147c710db489d84a323..828a5c0300334763f04f969a2331d7e42449a34c 100644 (file)
@@ -723,7 +723,7 @@ static cc_queue_t *load_queue(const char *queue_name, switch_bool_t request_agen
 
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
        switch_assert(params);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "CC-Queue", queue_name);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "CC-Queue", queue_name);
 
        if (x_queues_cfg) {
                x_queues = x_queues_cfg;
@@ -876,10 +876,10 @@ int cc_queue_count(const char *queue)
                count = atoi(res);
 
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Queue", queue);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "members-count");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Count", res);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Selection", event_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Queue", queue);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Action", "members-count");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Count", res);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Selection", event_name);
                        switch_event_fire(&event);
                }
        }
@@ -913,9 +913,9 @@ cc_status_t cc_agent_add(const char *agent, const char *type)
                switch_safe_free(sql);
 
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", agent);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-Type", type);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-add");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent", agent);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent-Type", type);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-add");
                        switch_event_fire(&event);
                }
 
@@ -974,9 +974,9 @@ cc_status_t cc_agent_get(const char *key, const char *agent, char *ret_result, s
                        } else {
                                switch_snprintf(tmpname, sizeof(tmpname), "CC-Agent-%c%s", (char) switch_toupper(key[0]), key+1);
                        }
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", agent);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent", agent);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-%s-get", key);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, tmpname, res);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, tmpname, res);
                        switch_event_fire(&event);
                }
 
@@ -1041,9 +1041,9 @@ cc_status_t cc_agent_update(const char *key, const char *value, const char *agen
                        result = CC_STATUS_SUCCESS;
 
                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", agent);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-status-change");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-Status", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent", agent);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-status-change");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent-Status", value);
                                switch_event_fire(&event);
                        }
 
@@ -1065,9 +1065,9 @@ cc_status_t cc_agent_update(const char *key, const char *value, const char *agen
                        result = CC_STATUS_SUCCESS;
 
                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", agent);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-state-change");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-State", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent", agent);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-state-change");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent-State", value);
                                switch_event_fire(&event);
                        }
 
@@ -1089,9 +1089,9 @@ cc_status_t cc_agent_update(const char *key, const char *value, const char *agen
                result = CC_STATUS_SUCCESS;
 
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", agent);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-contact-change");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-Contact", value);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent", agent);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-contact-change");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent-Contact", value);
                        switch_event_fire(&event);
                }
        } else if (!strcasecmp(key, "ready_time")) {
@@ -1158,9 +1158,9 @@ cc_status_t cc_agent_update(const char *key, const char *value, const char *agen
                        if (cc_execute_sql_affected_rows(sql) > 0) {
                                result = CC_STATUS_SUCCESS;
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", agent);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-state-change");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-State", value);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent", agent);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-state-change");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent-State", value);
                                        switch_event_fire(&event);
                                }
                        } else {
@@ -1719,16 +1719,16 @@ static void *SWITCH_THREAD_FUNC outbound_agent_thread_run(switch_thread_t *threa
                switch_caller_profile_t *member_profile = switch_channel_get_caller_profile(member_channel);
                const char *member_dnis = member_profile->rdnis;
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Queue", h->queue_name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-offering");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", h->agent_name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-Type", h->agent_type);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-System", h->agent_system);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", h->member_uuid);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID", h->member_session_uuid);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Name", h->member_cid_name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Number", h->member_cid_number);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-DNIS", member_dnis);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Queue", h->queue_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-offering");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent", h->agent_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent-Type", h->agent_type);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent-System", h->agent_system);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", h->member_uuid);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID", h->member_session_uuid);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Name", h->member_cid_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Number", h->member_cid_number);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-DNIS", member_dnis);
                switch_event_fire(&event);
        }
 
@@ -1936,19 +1936,19 @@ static void *SWITCH_THREAD_FUNC outbound_agent_thread_run(switch_thread_t *threa
                        const char *member_dnis = member_profile->rdnis;
 
                        switch_channel_event_set_data(agent_channel, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Queue", h->queue_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "bridge-agent-start");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", h->agent_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-System", h->agent_system);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-UUID", agent_uuid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Queue", h->queue_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Action", "bridge-agent-start");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent", h->agent_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent-System", h->agent_system);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent-UUID", agent_uuid);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Agent-Called-Time", "%" SWITCH_TIME_T_FMT, t_agent_called);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Agent-Answered-Time", "%" SWITCH_TIME_T_FMT, t_agent_answered);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Member-Joined-Time", "%" SWITCH_TIME_T_FMT, t_member_called);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", h->member_uuid);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID", h->member_session_uuid);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Name", h->member_cid_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Number", h->member_cid_number);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-DNIS", member_dnis);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", h->member_uuid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID", h->member_session_uuid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Name", h->member_cid_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Number", h->member_cid_number);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-DNIS", member_dnis);
                        switch_event_fire(&event);
                }
 
@@ -2048,21 +2048,21 @@ static void *SWITCH_THREAD_FUNC outbound_agent_thread_run(switch_thread_t *threa
 
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_event_set_data(agent_channel, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Queue", h->queue_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "bridge-agent-end");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Hangup-Cause", switch_channel_cause2str(cause));
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", h->agent_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-System", h->agent_system);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-UUID", agent_uuid);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-Bridged", bridged ? "true" : "false");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Queue", h->queue_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Action", "bridge-agent-end");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Hangup-Cause", switch_channel_cause2str(cause));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent", h->agent_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent-System", h->agent_system);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent-UUID", agent_uuid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent-Bridged", bridged ? "true" : "false");
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Agent-Called-Time", "%" SWITCH_TIME_T_FMT, t_agent_called);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Agent-Answered-Time", "%" SWITCH_TIME_T_FMT, t_agent_answered);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Member-Joined-Time", "%" SWITCH_TIME_T_FMT,  t_member_called);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Bridge-Terminated-Time", "%" SWITCH_TIME_T_FMT, local_epoch_time_now(NULL));
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", h->member_uuid);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID", h->member_session_uuid);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Name", h->member_cid_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Number", h->member_cid_number);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", h->member_uuid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID", h->member_session_uuid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Name", h->member_cid_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Number", h->member_cid_number);
                        switch_event_fire(&event);
                }
                if (bridged) {
@@ -2084,14 +2084,14 @@ static void *SWITCH_THREAD_FUNC outbound_agent_thread_run(switch_thread_t *threa
                        /* Caller off event */
                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) {
                                switch_channel_event_set_data(member_channel, event);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Queue", h->queue_name);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "member-queue-end");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Hangup-Cause",
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Queue", h->queue_name);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Action", "member-queue-end");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Hangup-Cause",
                                                                                           switch_channel_cause2str(cause));
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Cause", "Terminated");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", h->agent_name);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-System", h->agent_system);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-UUID", agent_uuid);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Cause", "Terminated");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent", h->agent_name);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent-System", h->agent_system);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent-UUID", agent_uuid);
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Agent-Called-Time", "%" SWITCH_TIME_T_FMT,
                                                                                t_agent_called);
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Agent-Answered-Time", "%" SWITCH_TIME_T_FMT,
@@ -2100,11 +2100,11 @@ static void *SWITCH_THREAD_FUNC outbound_agent_thread_run(switch_thread_t *threa
                                                                                local_epoch_time_now(NULL));
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Member-Joined-Time", "%" SWITCH_TIME_T_FMT,
                                                                                t_member_called);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", h->member_uuid);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID",
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", h->member_uuid);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID",
                                                                                           h->member_session_uuid);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Name", h->member_cid_name);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Number",
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Name", h->member_cid_name);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Number",
                                                                                           h->member_cid_number);
                                switch_event_fire(&event);
                        }
@@ -2161,12 +2161,12 @@ static void *SWITCH_THREAD_FUNC outbound_agent_thread_run(switch_thread_t *threa
                                                        h->agent_name, h->max_no_answer, cc_agent_status2str(h->agent_no_answer_status));
 
                                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", h->agent_name);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-max-no-answer");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent", h->agent_name);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-max-no-answer");
                                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Agent-No-Answer-Count", "%d", h->max_no_answer);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-No-Answer-Status", cc_agent_status2str(h->agent_no_answer_status));
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", h->member_uuid);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID", h->member_session_uuid);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent-No-Answer-Status", cc_agent_status2str(h->agent_no_answer_status));
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", h->member_uuid);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID", h->member_session_uuid);
                                                switch_event_fire(&event);
                                        }
 
@@ -2185,17 +2185,17 @@ static void *SWITCH_THREAD_FUNC outbound_agent_thread_run(switch_thread_t *threa
 
                /* Fire up event when contact agent fails */
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Queue", h->queue_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "bridge-agent-fail");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Hangup-Cause", switch_channel_cause2str(cause));
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", h->agent_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-System", h->agent_system);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Queue", h->queue_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Action", "bridge-agent-fail");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Hangup-Cause", switch_channel_cause2str(cause));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent", h->agent_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Agent-System", h->agent_system);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Agent-Called-Time", "%" SWITCH_TIME_T_FMT, t_agent_called);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Agent-Aborted-Time", "%" SWITCH_TIME_T_FMT, local_epoch_time_now(NULL));
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", h->member_uuid);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID", h->member_session_uuid);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Name", h->member_cid_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Number", h->member_cid_number);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", h->member_uuid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID", h->member_session_uuid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Name", h->member_cid_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Number", h->member_cid_number);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Member-Joined-Time", "%" SWITCH_TIME_T_FMT, t_member_called);
                        switch_event_fire(&event);
                }
@@ -2898,9 +2898,9 @@ void *SWITCH_THREAD_FUNC cc_member_thread_run(switch_thread_t *thread, void *obj
 
                   switch_event_t *event;
                   if (switch_event_create(&event, SWITCH_EVENT_COMMAND) == SWITCH_STATUS_SUCCESS) {
-                  switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-command", "execute");
-                  switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute-app-name", "playback");
-                  switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute-app-arg", "tone_stream://%(200,0,500,600,700)");
+                  switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-command", "execute");
+                  switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "execute-app-name", "playback");
+                  switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "execute-app-arg", "tone_stream://%(200,0,500,600,700)");
                   switch_core_session_queue_private_event(member_session, &event, SWITCH_TRUE);
                   }
                 */
@@ -3095,12 +3095,12 @@ SWITCH_STANDARD_APP(callcenter_function)
 
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(member_channel, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Queue", queue_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Queue", queue_name);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Action", "member-queue-%s", (abandoned_epoch==0?"start":"resume"));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", member_uuid);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID", member_session_uuid);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Name", switch_str_nil(switch_channel_get_variable(member_channel, "caller_id_name")));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Number", switch_str_nil(switch_channel_get_variable(member_channel, "caller_id_number")));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", member_uuid);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID", member_session_uuid);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Name", switch_str_nil(switch_channel_get_variable(member_channel, "caller_id_name")));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Number", switch_str_nil(switch_channel_get_variable(member_channel, "caller_id_number")));
                switch_event_fire(&event);
        }
 
@@ -3252,16 +3252,16 @@ SWITCH_STANDARD_APP(callcenter_function)
                /* Generate an event */
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_event_set_data(member_channel, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Queue", queue_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "member-queue-end");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Queue", queue_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Action", "member-queue-end");
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Member-Leaving-Time", "%" SWITCH_TIME_T_FMT, local_epoch_time_now(NULL));
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Member-Joined-Time", "%" SWITCH_TIME_T_FMT, t_member_called);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Cause", "Cancel");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Cancel-Reason", cc_member_cancel_reason2str(h->member_cancel_reason));
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", member_uuid);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID", member_session_uuid);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Name", switch_str_nil(switch_channel_get_variable(member_channel, "caller_id_name")));
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Number", switch_str_nil(switch_channel_get_variable(member_channel, "caller_id_number")));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Cause", "Cancel");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Cancel-Reason", cc_member_cancel_reason2str(h->member_cancel_reason));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", member_uuid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID", member_session_uuid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Name", switch_str_nil(switch_channel_get_variable(member_channel, "caller_id_name")));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Number", switch_str_nil(switch_channel_get_variable(member_channel, "caller_id_number")));
                        switch_event_fire(&event);
                }
 
@@ -3375,25 +3375,25 @@ static void cc_send_presence(const char *queue_name) {
        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Queue has %d waiting calls.\n", count);
 
        if (switch_event_create(&send_event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(send_event, SWITCH_STACK_BOTTOM, "proto", "callcenter");
+               switch_event_add_header_string_dup(send_event, SWITCH_STACK_BOTTOM, "proto", "callcenter");
                switch_event_add_header(send_event, SWITCH_STACK_BOTTOM, "login", "%s", queue_name);
-               switch_event_add_header_string(send_event, SWITCH_STACK_BOTTOM, "from", queue_name);
+               switch_event_add_header_string_dup(send_event, SWITCH_STACK_BOTTOM, "from", queue_name);
 
                if (count > 0) {
                        switch_event_add_header(send_event, SWITCH_STACK_BOTTOM, "force-status", "Active (%d waiting)", count);
                } else {
-                       switch_event_add_header_string(send_event, SWITCH_STACK_BOTTOM, "force-status", "Idle");
+                       switch_event_add_header_string_dup(send_event, SWITCH_STACK_BOTTOM, "force-status", "Idle");
                }
 
-               switch_event_add_header_string(send_event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
-               switch_event_add_header_string(send_event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-               switch_event_add_header_string(send_event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+               switch_event_add_header_string_dup(send_event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
+               switch_event_add_header_string_dup(send_event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+               switch_event_add_header_string_dup(send_event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                switch_event_add_header(send_event, SWITCH_STACK_BOTTOM, "event_count", "%d", 0);
 
-               switch_event_add_header_string(send_event, SWITCH_STACK_BOTTOM, "channel-state", count > 0 ? "CS_ROUTING" : "CS_HANGUP");
-               switch_event_add_header_string(send_event, SWITCH_STACK_BOTTOM, "unique-id", queue_name);
-               switch_event_add_header_string(send_event, SWITCH_STACK_BOTTOM, "answer-state", count > 0 ? "confirmed" : "terminated");
-               switch_event_add_header_string(send_event, SWITCH_STACK_BOTTOM, "presence-call-direction", "inbound");
+               switch_event_add_header_string_dup(send_event, SWITCH_STACK_BOTTOM, "channel-state", count > 0 ? "CS_ROUTING" : "CS_HANGUP");
+               switch_event_add_header_string_dup(send_event, SWITCH_STACK_BOTTOM, "unique-id", queue_name);
+               switch_event_add_header_string_dup(send_event, SWITCH_STACK_BOTTOM, "answer-state", count > 0 ? "confirmed" : "terminated");
+               switch_event_add_header_string_dup(send_event, SWITCH_STACK_BOTTOM, "presence-call-direction", "inbound");
                switch_event_fire(&send_event);
 
        } else {
index 7df22fb3ef2d1b5800ecef59bddf9c0a6375285f..4221a295ee6e98838720fdbdcd2fe5c252e516b6 100644 (file)
@@ -447,8 +447,8 @@ static cid_data_t *do_whitepages_lookup(switch_memory_pool_t *pool, switch_event
                goto done;
        }
 
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "whitepages-cid", num);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "whitepages-api-key", globals.whitepages_apikey);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "whitepages-cid", num);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "whitepages-api-key", globals.whitepages_apikey);
 
        query = switch_event_expand_headers(event, "http://api.whitepages.com/reverse_phone/1.0/?phone=${whitepages-cid};api_key=${whitepages-api-key}");
        do_lookup_url(pool, event, &xml_s, query, NULL, NULL, 0);
@@ -546,7 +546,7 @@ static cid_data_t *do_lookup(switch_memory_pool_t *pool, switch_event_t *event,
        switch_bool_t save_cache = SWITCH_FALSE;
 
        number = string_digitsonly(pool, num);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "caller_id_number", number);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "caller_id_number", number);
 
        /* database always wins */
        if (globals.odbc_dsn && globals.sql) {
@@ -705,10 +705,10 @@ SWITCH_STANDARD_APP(cidlookup_app_function)
 
                if (switch_event_create(&event, SWITCH_EVENT_CALL_UPDATE) == SWITCH_STATUS_SUCCESS) {
                        const char *uuid = switch_channel_get_partner_uuid(channel);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Direction", "RECV");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Direction", "RECV");
 
                        if (uuid) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridged-To", uuid);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridged-To", uuid);
                        }
                        switch_channel_event_set_data(channel, event);
                        switch_event_fire(&event);
index 8e737a78a2bda20aff32424154fb25faa9dbc14f..b086a3ad66be2188e2ac8b94c5ad802d67251658 100644 (file)
@@ -1034,9 +1034,9 @@ SWITCH_STANDARD_API(group_call_function)
                switch_event_t *params;
 
                switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "group", group_name);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "domain", domain);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "action", "group_call");
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "group", group_name);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "domain", domain);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "action", "group_call");
 
                if (switch_xml_locate_group(group_name, domain, &xml, &x_domain, &x_group, params) == SWITCH_STATUS_SUCCESS) {
                        switch_xml_t x_user, x_users, x_param, x_params, my_x_user;
@@ -1119,9 +1119,9 @@ SWITCH_STANDARD_API(group_call_function)
                                                        switch_event_del_header(params, "dialed_user");
                                                        switch_event_del_header(params, "dialed_group");
                                                        switch_event_del_header(params, "dialed_domain");
-                                                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "dialed_user", id);
-                                                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "dialed_group", group_name);
-                                                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "dialed_domain", domain);
+                                                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "dialed_user", id);
+                                                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "dialed_group", group_name);
+                                                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "dialed_domain", domain);
                                                        d_dest = switch_event_expand_headers(params, dest);
                                                }
                                        } else {
@@ -1201,8 +1201,8 @@ SWITCH_STANDARD_API(in_group_function)
        }
 
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "user", user);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "domain", domain);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "user", user);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "domain", domain);
 
        if (switch_xml_locate_group(group, domain, &xml, &x_domain, &x_group, params) == SWITCH_STATUS_SUCCESS) {
                switch_xml_t x_users;
@@ -1255,8 +1255,8 @@ SWITCH_STANDARD_API(domain_data_function)
        }
 
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "domain", domain);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "type", type);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "domain", domain);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "type", type);
 
        if (key && type && switch_xml_locate_domain(domain, params, &xml_root, &x_domain) == SWITCH_STATUS_SUCCESS) {
                if (!strcmp(type, "attr")) {
@@ -1326,9 +1326,9 @@ SWITCH_STANDARD_API(user_data_function)
        }
 
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "user", user);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "domain", domain);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "type", type);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "user", user);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "domain", domain);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "type", type);
 
        if (key && type && switch_xml_locate_user_merged("id:number-alias", user, domain, NULL, &x_user, params) == SWITCH_STATUS_SUCCESS) {
                if (!strcmp(type, "attr")) {
@@ -1870,18 +1870,18 @@ SWITCH_STANDARD_API(xml_locate_function)
 
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
        switch_assert(params);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "section", section);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "section", section);
 
        if (tag) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "tag", tag);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "tag", tag);
        }
 
        if (tag_attr_name) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "tag_attr_name", tag_attr_name);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "tag_attr_name", tag_attr_name);
        }
 
        if (tag_attr_val) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "tag_attr_val", tag_attr_val);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "tag_attr_val", tag_attr_val);
        }
 
        if (switch_xml_locate(section, tag, tag_attr_name, tag_attr_val, &xml, &obj, params, SWITCH_FALSE) != SWITCH_STATUS_SUCCESS) {
@@ -2336,7 +2336,7 @@ SWITCH_STANDARD_API(status_function)
 
        if (format.html) {
                /* set flag to allow refresh of webpage if web request contained kv-pair refresh=xx  */
-               switch_event_add_header_string(stream->param_event, SWITCH_STACK_BOTTOM, "HTTP-REFRESH", "true");
+               switch_event_add_header_string_dup(stream->param_event, SWITCH_STACK_BOTTOM, "HTTP-REFRESH", "true");
                if (format.api) {
                        /* "Overwrite" default "api" Content-Type: text/plain */
                        stream->write_function(stream, "Content-Type: text/html\r\n\r\n");
@@ -5393,10 +5393,10 @@ static void *SWITCH_THREAD_FUNC bgapi_exec(switch_thread_t *thread, void *obj)
        }
 
        if (switch_event_create(&event, SWITCH_EVENT_BACKGROUND_JOB) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Job-UUID", job->uuid_str);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Job-Command", job->cmd);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Job-UUID", job->uuid_str);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Job-Command", job->cmd);
                if (arg) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Job-Command-Arg", arg);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Job-Command-Arg", arg);
                }
 
                switch_event_add_body(event, "%s", reply);
@@ -5800,7 +5800,7 @@ SWITCH_STANDARD_API(show_function)
                html = holder.format->html;
                if (html) {
                        /* set flag to allow refresh of webpage if web request contained kv-pair refresh=xx  */
-                       switch_event_add_header_string(stream->param_event, SWITCH_STACK_BOTTOM, "HTTP-REFRESH", "true");
+                       switch_event_add_header_string_dup(stream->param_event, SWITCH_STACK_BOTTOM, "HTTP-REFRESH", "true");
                        if (holder.format->api) {
                                /* "Overwrite" default "api" Content-Type: text/plain */
                                stream->write_function(stream, "Content-Type: text/html\r\n\r\n");
@@ -6691,7 +6691,7 @@ SWITCH_STANDARD_API(hupall_api_function)
                                if (!vars) {
                                        switch_event_create(&vars, SWITCH_EVENT_CLONE);
                                }
-                               switch_event_add_header_string(vars, SWITCH_STACK_BOTTOM, var, val);
+                               switch_event_add_header_string_dup(vars, SWITCH_STACK_BOTTOM, var, val);
                                vars_count++;
                        }
                }
index 8bcfc5862fb860c002a3d9f27e1829fb237dee0b..c83ae448e617b6ab9399a210e05d85c06a99dc23 100644 (file)
@@ -338,7 +338,7 @@ switch_status_t conference_api_sub_mute(conference_member_t *member, switch_stre
        if (test_eflag(member->conference, EFLAG_MUTE_MEMBER) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "mute-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "mute-member");
                switch_event_fire(&event);
        }
 
@@ -388,7 +388,7 @@ switch_status_t conference_api_sub_unhold(conference_member_t *member, switch_st
        if (test_eflag(member->conference, EFLAG_HOLD_MEMBER) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "unhold-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "unhold-member");
                switch_event_fire(&event);
        }
 
@@ -439,7 +439,7 @@ switch_status_t conference_api_sub_hold(conference_member_t *member, switch_stre
        if (test_eflag(member->conference, EFLAG_HOLD_MEMBER) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "hold-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "hold-member");
                switch_event_fire(&event);
        }
 
@@ -491,7 +491,7 @@ switch_status_t conference_api_sub_unmute(conference_member_t *member, switch_st
        if (test_eflag(member->conference, EFLAG_MUTE_MEMBER) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "unmute-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "unmute-member");
                switch_event_fire(&event);
        }
 
@@ -616,7 +616,7 @@ switch_status_t conference_api_sub_vmute(conference_member_t *member, switch_str
        if (test_eflag(member->conference, EFLAG_MUTE_MEMBER) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "vmute-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "vmute-member");
                switch_event_fire(&event);
        }
 
@@ -686,7 +686,7 @@ switch_status_t conference_api_sub_unvmute(conference_member_t *member, switch_s
        if (test_eflag(member->conference, EFLAG_MUTE_MEMBER) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "unvmute-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "unvmute-member");
                switch_event_fire(&event);
        }
 
@@ -719,7 +719,7 @@ switch_status_t conference_api_sub_vblind(conference_member_t *member, switch_st
        if (test_eflag(member->conference, EFLAG_BLIND_MEMBER) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "vblind-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "vblind-member");
                switch_event_fire(&event);
        }
 
@@ -768,7 +768,7 @@ switch_status_t conference_api_sub_unvblind(conference_member_t *member, switch_
        if (test_eflag(member->conference, EFLAG_BLIND_MEMBER) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "unvblind-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "unvblind-member");
                switch_event_fire(&event);
        }
 
@@ -796,7 +796,7 @@ switch_status_t conference_api_sub_deaf(conference_member_t *member, switch_stre
        }
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "deaf-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "deaf-member");
                switch_event_fire(&event);
        }
 
@@ -838,7 +838,7 @@ switch_status_t conference_api_sub_undeaf(conference_member_t *member, switch_st
        }
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "undeaf-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "undeaf-member");
                switch_event_fire(&event);
        }
 
@@ -870,7 +870,7 @@ switch_status_t conference_api_sub_hup(conference_member_t *member, switch_strea
        if (member->conference && test_eflag(member->conference, EFLAG_HUP_MEMBER)) {
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                        conference_member_add_event_data(member, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "hup-member");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "hup-member");
                        switch_event_fire(&event);
                }
        }
@@ -901,7 +901,7 @@ switch_status_t conference_api_sub_kick(conference_member_t *member, switch_stre
        if (member->conference && test_eflag(member->conference, EFLAG_KICK_MEMBER)) {
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                        conference_member_add_event_data(member, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "kick-member");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "kick-member");
                        switch_event_fire(&event);
                }
        }
@@ -1048,8 +1048,8 @@ switch_status_t conference_api_sub_dtmf(conference_member_t *member, switch_stre
        if (test_eflag(member->conference, EFLAG_DTMF_MEMBER) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "dtmf-member");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Digits", dtmf);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "dtmf-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Digits", dtmf);
                switch_event_fire(&event);
        }
 
@@ -1227,7 +1227,7 @@ switch_status_t conference_api_sub_energy(conference_member_t *member, switch_st
        if (test_eflag(member->conference, EFLAG_ENERGY_LEVEL_MEMBER) &&
                data && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "energy-level-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "energy-level-member");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Energy-Level", "%d", member->energy_level);
                switch_event_fire(&event);
        }
@@ -1323,7 +1323,7 @@ switch_status_t conference_api_sub_agc(conference_member_t *member, switch_strea
        //      if (test_eflag(member->conference, EFLAG_AGC_LEVEL_MEMBER) &&
        if (data && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "agc-level-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "agc-level-member");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Agc-Level", "%d", member->agc_level);
                switch_event_fire(&event);
        }
@@ -1369,7 +1369,7 @@ switch_status_t conference_api_sub_auto_energy(conference_member_t *member, swit
        if (test_eflag(member->conference, EFLAG_ENERGY_LEVEL_MEMBER) &&
                data && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "auto-energy-level-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "auto-energy-level-member");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Auto-Energy-Level", "%d", member->auto_energy_level);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Energy-Level", "%d", member->energy_level);
                switch_event_fire(&event);
@@ -1441,7 +1441,7 @@ switch_status_t conference_api_sub_max_energy(conference_member_t *member, switc
        if (test_eflag(member->conference, EFLAG_ENERGY_LEVEL_MEMBER) &&
                data && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "max-energy-level-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "max-energy-level-member");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Max-Energy-Level", "%d", member->max_energy_level);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Max-Energy-Mute", "%d", member->burst_mute_count * member->conference->interval);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Max-Energy-Hit-Trigger", "%d", member->max_energy_hit_trigger);
@@ -1535,7 +1535,7 @@ switch_status_t conference_api_sub_position(conference_member_t *member, switch_
        if (test_eflag(member->conference, EFLAG_SET_POSITION_MEMBER) &&
                data && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "set-position-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "set-position-member");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Position", "%0.2f:%0.2f:%0.2f", member->al->pos_x, member->al->pos_y, member->al->pos_z);
                switch_event_fire(&event);
        }
@@ -1573,7 +1573,7 @@ switch_status_t conference_api_sub_volume_in(conference_member_t *member, switch
        if (test_eflag(member->conference, EFLAG_VOLUME_IN_MEMBER) &&
                data && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "volume-in-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "volume-in-member");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Volume-Level", "%d", member->volume_in_level);
                switch_event_fire(&event);
        }
@@ -1608,7 +1608,7 @@ switch_status_t conference_api_sub_volume_out(conference_member_t *member, switc
        if (test_eflag(member->conference, EFLAG_VOLUME_OUT_MEMBER) && data &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "volume-out-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "volume-out-member");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Volume-Level", "%d", member->volume_out_level);
                switch_event_fire(&event);
        }
@@ -2821,9 +2821,9 @@ switch_status_t conference_api_sub_play(conference_obj_t *conference, switch_str
                                        switch_event_merge(event, conference->fnode->fh.params);
                                }
 
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "play-file");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "File", argv[2]);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Async", async ? "true" : "false");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "play-file");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "File", argv[2]);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Async", async ? "true" : "false");
                                switch_event_fire(&event);
                        }
                } else {
@@ -2850,8 +2850,8 @@ switch_status_t conference_api_sub_play(conference_obj_t *conference, switch_str
                                                switch_event_merge(event, member->fnode->fh.params);
                                        }
 
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "play-file-member");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "File", argv[2]);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "play-file-member");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "File", argv[2]);
                                        switch_event_fire(&event);
                                }
                        } else {
@@ -2884,8 +2884,8 @@ switch_status_t conference_api_sub_say(conference_obj_t *conference, switch_stre
        stream->write_function(stream, "+OK (say) OK\n");
        if (test_eflag(conference, EFLAG_SPEAK_TEXT) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_event_add_data(conference, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "speak-text");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Text", text);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "speak-text");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Text", text);
                switch_event_fire(&event);
        }
        return SWITCH_STATUS_SUCCESS;
@@ -2943,8 +2943,8 @@ switch_status_t conference_api_sub_saymember(conference_obj_t *conference, switc
        if (test_eflag(member->conference, EFLAG_SPEAK_TEXT_MEMBER) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "speak-text-member");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Text", text);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "speak-text-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Text", text);
                switch_event_fire(&event);
        }
        ret_status = SWITCH_STATUS_SUCCESS;
@@ -3473,7 +3473,7 @@ switch_status_t conference_api_sub_lock(conference_obj_t *conference, switch_str
        stream->write_function(stream, "+OK %s locked\n", argv[0]);
        if (test_eflag(conference, EFLAG_LOCK) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_event_add_data(conference, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "lock");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "lock");
                switch_event_fire(&event);
        }
 
@@ -3495,7 +3495,7 @@ switch_status_t conference_api_sub_unlock(conference_obj_t *conference, switch_s
        stream->write_function(stream, "+OK %s unlocked\n", argv[0]);
        if (test_eflag(conference, EFLAG_UNLOCK) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_event_add_data(conference, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "unlock");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "unlock");
                switch_event_fire(&event);
        }
 
@@ -3519,7 +3519,7 @@ switch_status_t conference_api_sub_exit_sound(conference_obj_t *conference, swit
                stream->write_function(stream, "+OK %s exit sounds on (%s)\n", argv[0], conference->exit_sound);
                if (test_eflag(conference, EFLAG_LOCK) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                        conference_event_add_data(conference, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "exit-sounds-on");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "exit-sounds-on");
                        switch_event_fire(&event);
                }
        } else if ( !strcasecmp(argv[2], "off") || !strcasecmp(argv[2], "none") ) {
@@ -3527,7 +3527,7 @@ switch_status_t conference_api_sub_exit_sound(conference_obj_t *conference, swit
                stream->write_function(stream, "+OK %s exit sounds off (%s)\n", argv[0], conference->exit_sound);
                if (test_eflag(conference, EFLAG_LOCK) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                        conference_event_add_data(conference, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "exit-sounds-off");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "exit-sounds-off");
                        switch_event_fire(&event);
                }
        } else if ( !strcasecmp(argv[2], "file") ) {
@@ -3540,7 +3540,7 @@ switch_status_t conference_api_sub_exit_sound(conference_obj_t *conference, swit
                        stream->write_function(stream, "+OK %s exit sound file set to %s\n", argv[0], conference->exit_sound);
                        if (test_eflag(conference, EFLAG_LOCK) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                                conference_event_add_data(conference, event);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "exit-sound-file-changed");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "exit-sound-file-changed");
                                switch_event_fire(&event);
                        }
                }
@@ -3570,7 +3570,7 @@ switch_status_t conference_api_sub_enter_sound(conference_obj_t *conference, swi
                stream->write_function(stream, "+OK %s enter sounds on (%s)\n", argv[0], conference->enter_sound);
                if (test_eflag(conference, EFLAG_LOCK) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                        conference_event_add_data(conference, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "enter-sounds-on");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "enter-sounds-on");
                        switch_event_fire(&event);
                }
        } else if ( !strcasecmp(argv[2], "off") || !strcasecmp(argv[2], "none") ) {
@@ -3578,7 +3578,7 @@ switch_status_t conference_api_sub_enter_sound(conference_obj_t *conference, swi
                stream->write_function(stream, "+OK %s enter sounds off (%s)\n", argv[0], conference->enter_sound);
                if (test_eflag(conference, EFLAG_LOCK) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                        conference_event_add_data(conference, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "enter-sounds-off");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "enter-sounds-off");
                        switch_event_fire(&event);
                }
        } else if ( !strcasecmp(argv[2], "file") ) {
@@ -3590,7 +3590,7 @@ switch_status_t conference_api_sub_enter_sound(conference_obj_t *conference, swi
                        stream->write_function(stream, "+OK %s enter sound file set to %s\n", argv[0], conference->enter_sound);
                        if (test_eflag(conference, EFLAG_LOCK) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                                conference_event_add_data(conference, event);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "enter-sound-file-changed");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "enter-sound-file-changed");
                                switch_event_fire(&event);
                        }
                }
@@ -3703,9 +3703,9 @@ switch_status_t conference_api_sub_transfer(conference_obj_t *conference, switch
                        if (test_eflag(conference, EFLAG_TRANSFER) &&
                                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                                conference_member_add_event_data(member, event);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Old-Conference-Name", conference->name);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "New-Conference-Name", argv[2]);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "transfer");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Old-Conference-Name", conference->name);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "New-Conference-Name", argv[2]);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "transfer");
                                switch_event_fire(&event);
                        }
 
@@ -3861,12 +3861,12 @@ switch_status_t conference_api_sub_pauserec(conference_obj_t *conference, switch
                        {
                                conference_event_add_data(conference, event);
                                if (action == REC_ACTION_PAUSE) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "pause-recording");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "pause-recording");
                                } else {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "resume-recording");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "resume-recording");
                                }
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Path", argv[2]);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Other-Recordings", conference->record_count ? "true" : "false");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Path", argv[2]);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Other-Recordings", conference->record_count ? "true" : "false");
                                switch_event_fire(&event);
                        }
        }
index b6eb630540e3e39d7f4982bdcf67aa7d1411d079..9c0b97ecb35a71a9e05e71279b92c6078b0f4e62 100644 (file)
@@ -751,11 +751,11 @@ void conference_cdr_render(conference_obj_t *conference)
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_CDR) == SWITCH_STATUS_SUCCESS)
                                        //      if (switch_event_create(&event, SWITCH_EVENT_CDR) == SWITCH_STATUS_SUCCESS)
                                        {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CDR-Source", CONF_EVENT_CDR);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CDR-Source", CONF_EVENT_CDR);
                                                if (conference->cdr_event_mode == CDRE_AS_CONTENT) {
                                                        switch_event_set_body(event, xml_text);
                                                } else {
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CDR-Path", path);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CDR-Path", path);
                                                }
                                                switch_event_fire(&event);
                                        } else {
index a88a5feab9b79b67bc3fe257b9d01754b3fdebd9..fb8a43224c9375584d97f3788f7416353986b666 100644 (file)
@@ -724,8 +724,8 @@ void conference_event_send_rfc(conference_obj_t *conference)
        if (switch_event_create(&event, SWITCH_EVENT_CONFERENCE_DATA) == SWITCH_STATUS_SUCCESS) {
                event->flags |= EF_UNIQ_HEADERS;
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "conference-name", name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "conference-domain", domain);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "conference-name", name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "conference-domain", domain);
 
                body = conference_cdr_rfc4579_render(conference, NULL, event);
                switch_event_add_body(event, "%s", body);
@@ -742,12 +742,12 @@ switch_status_t conference_event_add_data(conference_obj_t *conference, switch_e
 {
        switch_status_t status = SWITCH_STATUS_SUCCESS;
 
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Conference-Name", conference->name);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Conference-Domain", conference->domain);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Conference-Name", conference->name);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Conference-Domain", conference->domain);
        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Conference-Size", "%u", conference->count);
        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Conference-Ghosts", "%u", conference->count_ghosts);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Conference-Profile-Name", conference->profile_name);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Conference-Unique-ID", conference->uuid_str);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Conference-Profile-Name", conference->profile_name);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Conference-Unique-ID", conference->uuid_str);
        switch_event_merge(event, conference->variables);
 
        return status;
@@ -774,14 +774,14 @@ void conference_event_chat_message_broadcast(conference_obj_t *conference, switc
                                        continue;
                                }
                                switch_event_dup(&reply, event);
-                               switch_event_add_header_string(reply, SWITCH_STACK_BOTTOM, "to", presence_id);
-                               switch_event_add_header_string(reply, SWITCH_STACK_BOTTOM, "conference_name", conference->name);
-                               switch_event_add_header_string(reply, SWITCH_STACK_BOTTOM, "conference_domain", conference->domain);
+                               switch_event_add_header_string_dup(reply, SWITCH_STACK_BOTTOM, "to", presence_id);
+                               switch_event_add_header_string_dup(reply, SWITCH_STACK_BOTTOM, "conference_name", conference->name);
+                               switch_event_add_header_string_dup(reply, SWITCH_STACK_BOTTOM, "conference_domain", conference->domain);
 
                                switch_event_set_body(reply, switch_event_get_body(event));
 
                                switch_core_chat_deliver(chat_proto, &reply);
-                               switch_event_add_header_string(processed, SWITCH_STACK_BOTTOM, presence_id, "true");
+                               switch_event_add_header_string_dup(processed, SWITCH_STACK_BOTTOM, presence_id, "true");
                        }
                }
        }
@@ -824,19 +824,19 @@ void conference_event_call_setup_handler(switch_event_t *event)
 
                                        for(hp = event->headers; hp; hp = hp->next) {
                                                if (!strncasecmp(hp->name, "var_", 4)) {
-                                                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, hp->name + 4, hp->value);
+                                                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, hp->name + 4, hp->value);
                                                }
                                        }
 
-                                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "conference_call_key", key);
-                                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "conference_destination_number", ext);
+                                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "conference_call_key", key);
+                                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "conference_destination_number", ext);
 
-                                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "conference_invite_uri", dial_uri);
+                                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "conference_invite_uri", dial_uri);
 
-                                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "conference_track_status", "true");
-                                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "conference_track_call_id", call_id);
-                                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "sip_invite_domain", domain);
-                                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "sip_invite_contact_params", "~isfocus");
+                                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "conference_track_status", "true");
+                                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "conference_track_call_id", call_id);
+                                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "sip_invite_domain", domain);
+                                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "sip_invite_contact_params", "~isfocus");
 
                                        if (!strncasecmp(ostr, "url+", 4)) {
                                                ostr += 4;
@@ -878,11 +878,11 @@ void conference_event_call_setup_handler(switch_event_t *event)
                if (switch_event_create(&event, SWITCH_EVENT_CONFERENCE_DATA) == SWITCH_STATUS_SUCCESS) {
                        event->flags |= EF_UNIQ_HEADERS;
 
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "conference-name", conf);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "conference-domain", domain);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "conference-event", "refer");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call_id", call_id);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "final", "true");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "conference-name", conf);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "conference-domain", domain);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "conference-event", "refer");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call_id", call_id);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "final", "true");
                        switch_event_add_body(event, "%s", "SIP/2.0 481 Failure\r\n");
                        switch_event_fire(&event);
                }
@@ -942,35 +942,35 @@ void conference_event_pres_handler(switch_event_t *event)
 
        if ((conference = conference_find(conference_name, NULL)) || (conference = conference_find(dup_conference_name, NULL))) {
                if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", CONF_CHAT_PROTO);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", conference->name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", CONF_CHAT_PROTO);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", conference->name);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", conference->name, conference->domain);
 
 
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "force-status", "Active (%d caller%s)", conference->count, conference->count == 1 ? "" : "s");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", conference_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", conference->count == 1 ? "early" : "confirmed");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-direction", conference->count == 1 ? "outbound" : "inbound");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", conference_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", conference->count == 1 ? "early" : "confirmed");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-direction", conference->count == 1 ? "outbound" : "inbound");
                        switch_event_fire(&event);
                }
                switch_thread_rwlock_unlock(conference->rwlock);
        } else if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", CONF_CHAT_PROTO);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", conference_name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", to);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", "Idle");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", CONF_CHAT_PROTO);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", conference_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from", to);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "force-status", "Idle");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", conference_name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-direction", "inbound");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", conference_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-direction", "inbound");
                switch_event_fire(&event);
        }
 
index b42599ef6d8389975a7913de710daac6a7330834..fd635954d52c940a16874a6577d723af5a7bc922 100644 (file)
@@ -67,7 +67,7 @@ switch_status_t conference_file_close(conference_obj_t *conference, conference_f
                }
 
                if (node->member_id) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "play-file-member-done");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "play-file-member-done");
 
                        if ((member = conference_member_get(conference, node->member_id))) {
                                conference_member_add_event_data(member, event);
@@ -75,13 +75,13 @@ switch_status_t conference_file_close(conference_obj_t *conference, conference_f
                        }
 
                } else {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "play-file-done");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "play-file-done");
                }
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "File", node->file);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "File", node->file);
 
                if (node->async) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Async", "true");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Async", "true");
                }
 
                switch_event_fire(&event);
@@ -272,10 +272,10 @@ switch_status_t conference_file_play(conference_obj_t *conference, char *file, u
                                switch_event_merge(event, conference->fnode->fh.params);
                        }
 
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "play-file");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "File", file);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Async", async ? "true" : "false");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Error", "File could not be played");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "play-file");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "File", file);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Async", async ? "true" : "false");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Error", "File could not be played");
                        switch_event_fire(&event);
                }
 
index f6c2856892d64f51cc839b4ce445ae9518e1be25..39fe63aa221f132f58a29f8b2e320c3684b86e0a 100644 (file)
@@ -230,7 +230,7 @@ void conference_loop_lock_toggle(conference_member_t *member, caller_control_act
                if (test_eflag(member->conference, EFLAG_LOCK) &&
                        switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                        conference_event_add_data(member->conference, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "lock");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "lock");
                        switch_event_fire(&event);
                }
        } else {
@@ -242,7 +242,7 @@ void conference_loop_lock_toggle(conference_member_t *member, caller_control_act
                if (test_eflag(member->conference, EFLAG_UNLOCK) &&
                        switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                        conference_event_add_data(member->conference, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "unlock");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "unlock");
                        switch_event_fire(&event);
                }
        }
@@ -328,7 +328,7 @@ void conference_loop_energy_up(conference_member_t *member, caller_control_actio
        if (test_eflag(member->conference, EFLAG_ENERGY_LEVEL) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "energy-level");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "energy-level");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-Level", "%d", member->energy_level);
                switch_event_fire(&event);
        }
@@ -369,7 +369,7 @@ void conference_loop_energy_equ_conf(conference_member_t *member, caller_control
        if (test_eflag(member->conference, EFLAG_ENERGY_LEVEL) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "energy-level");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "energy-level");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-Level", "%d", member->energy_level);
                switch_event_fire(&event);
        }
@@ -409,7 +409,7 @@ void conference_loop_energy_dn(conference_member_t *member, caller_control_actio
        if (test_eflag(member->conference, EFLAG_ENERGY_LEVEL) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "energy-level");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "energy-level");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-Level", "%d", member->energy_level);
                switch_event_fire(&event);
        }
@@ -439,7 +439,7 @@ void conference_loop_volume_talk_up(conference_member_t *member, caller_control_
        if (test_eflag(member->conference, EFLAG_VOLUME_LEVEL) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "volume-level");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "volume-level");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-Level", "%d", member->volume_out_level);
                switch_event_fire(&event);
        }
@@ -470,7 +470,7 @@ void conference_loop_volume_talk_zero(conference_member_t *member, caller_contro
        if (test_eflag(member->conference, EFLAG_VOLUME_LEVEL) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "volume-level");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "volume-level");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-Level", "%d", member->volume_out_level);
                switch_event_fire(&event);
        }
@@ -502,7 +502,7 @@ void conference_loop_volume_talk_dn(conference_member_t *member, caller_control_
        if (test_eflag(member->conference, EFLAG_VOLUME_LEVEL) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "volume-level");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "volume-level");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-Level", "%d", member->volume_out_level);
                switch_event_fire(&event);
        }
@@ -533,7 +533,7 @@ void conference_loop_volume_listen_up(conference_member_t *member, caller_contro
        if (test_eflag(member->conference, EFLAG_GAIN_LEVEL) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "gain-level");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "gain-level");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-Level", "%d", member->volume_in_level);
                switch_event_fire(&event);
        }
@@ -564,7 +564,7 @@ void conference_loop_volume_listen_zero(conference_member_t *member, caller_cont
        if (test_eflag(member->conference, EFLAG_GAIN_LEVEL) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "gain-level");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "gain-level");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-Level", "%d", member->volume_in_level);
                switch_event_fire(&event);
        }
@@ -596,7 +596,7 @@ void conference_loop_volume_listen_dn(conference_member_t *member, caller_contro
        if (test_eflag(member->conference, EFLAG_GAIN_LEVEL) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "gain-level");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "gain-level");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-Level", "%d", member->volume_in_level);
                switch_event_fire(&event);
        }
@@ -618,9 +618,9 @@ void conference_loop_event(conference_member_t *member, caller_control_action_t
        switch_event_t *event;
        if (test_eflag(member->conference, EFLAG_DTMF) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "dtmf");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "DTMF-Key", action->binded_dtmf);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Data", action->expanded_data);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "dtmf");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "DTMF-Key", action->binded_dtmf);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Data", action->expanded_data);
                switch_event_fire(&event);
        }
 }
@@ -638,8 +638,8 @@ void conference_loop_transfer(conference_member_t *member, caller_control_action
 
        if (test_eflag(member->conference, EFLAG_DTMF) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "transfer");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Dialplan", action->expanded_data);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "transfer");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Dialplan", action->expanded_data);
                switch_event_fire(&event);
        }
        conference_utils_member_clear_flag_locked(member, MFLAG_RUNNING);
@@ -687,8 +687,8 @@ void conference_loop_exec_app(conference_member_t *member, caller_control_action
 
        if (test_eflag(member->conference, EFLAG_DTMF) && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_member_add_event_data(member, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "execute_app");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application", action->expanded_data);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "execute_app");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application", action->expanded_data);
                switch_event_fire(&event);
        }
 
@@ -793,7 +793,7 @@ static void stop_talking_handler(conference_member_t *member)
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "talking-hit-off-percent", "%f", ngcp);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "talking-hit-off-differential", "%f", gcp - ngcp);
                }
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "stop-talking");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "stop-talking");
                switch_event_fire(&event);
        }
 
@@ -1101,7 +1101,7 @@ void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, void *ob
                                                        }
 
                                        
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "talk-report");
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "talk-report");
                                                        switch_event_fire(&event);
                                                }
 
@@ -1153,7 +1153,7 @@ void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, void *ob
                                                        !conference_utils_member_test_flag(member, MFLAG_HOLD) &&
                                                        switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                                                        conference_member_add_event_data(member, event);
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "start-talking");
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "start-talking");
                                                        switch_event_fire(&event);
                                                }
 
@@ -1166,7 +1166,7 @@ void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, void *ob
                                                        if (test_eflag(member->conference, EFLAG_MUTE_DETECT) &&
                                                                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                                                                conference_member_add_event_data(member, event);
-                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "mute-detect");
+                                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "mute-detect");
                                                                switch_event_fire(&event);
                                                        }
                                                }
index 6112a2890c89fdc0b1df33a1b886f7ca43dc27aa..656df915f79a3b30f960295ec40a3fcd54f30ce4 100644 (file)
@@ -72,11 +72,11 @@ void conference_member_bind_controls(conference_member_t *member, const char *co
        int i;
 
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "Conf-Name", member->conference->name);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "Conf-Profile", member->conference->profile_name);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "Action", "request-controls");
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "Controls", controls);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "Fetch-Call-UUID", switch_core_session_get_uuid(member->session));
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "Conf-Name", member->conference->name);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "Conf-Profile", member->conference->profile_name);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "Action", "request-controls");
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "Controls", controls);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "Fetch-Call-UUID", switch_core_session_get_uuid(member->session));
 
        if (!(cxml = switch_xml_open_cfg(mod_conference_cf_name, &cfg, params))) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", mod_conference_cf_name);
@@ -956,7 +956,7 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
                if (!switch_channel_test_app_flag_key("conference_silent", channel, CONF_SILENT_REQ) &&
                        switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                        conference_member_add_event_data(member, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "add-member");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "add-member");
                        switch_event_fire(&event);
                }
 
@@ -1152,18 +1152,18 @@ void conference_member_set_floor_holder(conference_obj_t *conference, conference
        if (test_eflag(conference, EFLAG_FLOOR_CHANGE)) {
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT);
                conference_event_add_data(conference, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "floor-change");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "floor-change");
                if (old_id) {
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Old-ID", "%d", old_id);
                } else {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Old-ID", "none");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Old-ID", "none");
                }
 
                if (conference->floor_holder) {
                        conference_member_add_event_data(member, event);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-ID", "%d", conference->floor_holder);
                } else {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "New-ID", "none");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "New-ID", "none");
                }
 
                switch_event_fire(&event);
@@ -1344,7 +1344,7 @@ switch_status_t conference_member_del(conference_obj_t *conference, conference_m
                if (test_eflag(conference, EFLAG_DEL_MEMBER) &&
                        switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                        conference_member_add_event_data(member, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "del-member");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "del-member");
                        switch_event_fire(&event);
                }
        }
index b8270113a7161f10eb5a2d22e6987ba66d721427..ca4f5a8612ed01b6198a48557e482c43e36f6f77 100644 (file)
@@ -279,9 +279,9 @@ void *SWITCH_THREAD_FUNC conference_record_thread_run(switch_thread_t *thread, v
                if (test_eflag(conference, EFLAG_RECORD) &&
                        switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                        conference_event_add_data(conference, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "start-recording");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Path", rec->path);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Error", "File could not be opened for recording");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "start-recording");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Path", rec->path);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Error", "File could not be opened for recording");
                        switch_event_fire(&event);
                }
 
@@ -318,8 +318,8 @@ void *SWITCH_THREAD_FUNC conference_record_thread_run(switch_thread_t *thread, v
        if (test_eflag(conference, EFLAG_RECORD) &&
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_event_add_data(conference, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "start-recording");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Path", rec->path);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "start-recording");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Path", rec->path);
                switch_event_fire(&event);
        }
 
@@ -426,9 +426,9 @@ void *SWITCH_THREAD_FUNC conference_record_thread_run(switch_thread_t *thread, v
 
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                conference_event_add_data(conference, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "stop-recording");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Path", rec->path);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Other-Recordings", conference->record_count ? "true" : "false");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "stop-recording");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Path", rec->path);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Other-Recordings", conference->record_count ? "true" : "false");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Samples-Out", "%ld", (long) member->rec->fh.samples_out);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Samplerate", "%ld", (long) member->rec->fh.samplerate);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Milliseconds-Elapsed", "%ld", (long) member->rec->fh.samples_out / (member->rec->fh.samplerate / 1000));
index e94b835c3d9405bdade5221636e45dfaefe550a0..92b25c9f059c02b4b1e2faa7dd630ba49b53c3bb 100644 (file)
@@ -81,7 +81,7 @@ void conference_video_parse_layouts(conference_obj_t *conference, int WIDTH, int
 
        switch_event_create(&params, SWITCH_EVENT_COMMAND);
        switch_assert(params);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "conference_name", conference->name);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "conference_name", conference->name);
 
        if (!(cxml = switch_xml_open_cfg(conference->video_layout_conf, &cfg, params))) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", conference->video_layout_conf);
@@ -577,7 +577,7 @@ void conference_video_scale_and_patch(mcu_layer_t *layer, switch_image_t *ximg,
                        switch_event_t *event;
 
                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "action", "movement-detection");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "action", "movement-detection");
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "member_id", "%d", layer->member_id);
 
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "last_x", "%d", layer->manual_geometry.x);
@@ -2514,7 +2514,7 @@ void conference_video_check_avatar(conference_member_t *member, switch_bool_t fo
         switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT);
         conference_event_add_data(member->conference, event);
         conference_member_add_event_data(member, event);
-        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "vfi-triggered-member");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "vfi-triggered-member");
         switch_event_fire(&event);
 
                switch_img_copy(member->video_mute_img, &member->avatar_png_img);
@@ -4814,16 +4814,16 @@ void conference_video_set_floor_holder(conference_obj_t *conference, conference_
        if (test_eflag(conference, EFLAG_FLOOR_CHANGE)) {
                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT);
                conference_event_add_data(conference, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "video-floor-change");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "video-floor-change");
                if (old_id) {
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Old-ID", "%d", old_id);
                } else {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Old-ID", "none");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Old-ID", "none");
                }
                if (conference->video_floor_holder) {
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-ID", "%d", conference->video_floor_holder);
                } else {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "New-ID", "none");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "New-ID", "none");
                }
                switch_event_fire(&event);
        }
index 619cd8c4a618933cd03137847fad7821ea7446ce..628bbd9fdc8ac1b520addf9ccf1f79177bbbf245 100644 (file)
@@ -185,13 +185,13 @@ void conference_send_notify(conference_obj_t *conference, const char *status, co
        if (switch_event_create(&event, SWITCH_EVENT_CONFERENCE_DATA) == SWITCH_STATUS_SUCCESS) {
                event->flags |= EF_UNIQ_HEADERS;
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "conference-name", name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "conference-domain", domain);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "conference-event", "refer");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call_id", call_id);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "conference-name", name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "conference-domain", domain);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "conference-event", "refer");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call_id", call_id);
 
                if (final) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "final", "true");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "final", "true");
                }
 
 
@@ -264,7 +264,7 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
                        last_heartbeat_time = now;
                        switch_event_create_subclass(&heartbeat_event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT);
                        conference_event_add_data(conference, heartbeat_event);
-                       switch_event_add_header_string(heartbeat_event, SWITCH_STACK_BOTTOM, "Action", "conference-heartbeat");
+                       switch_event_add_header_string_dup(heartbeat_event, SWITCH_STACK_BOTTOM, "Action", "conference-heartbeat");
                        switch_event_fire(&heartbeat_event);
                }
 
@@ -862,7 +862,7 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
 
        switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT);
        conference_event_add_data(conference, event);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "conference-destroy");
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "conference-destroy");
        switch_event_fire(&event);
        
        switch_mutex_lock(conference->member_mutex);
@@ -1703,10 +1703,10 @@ void *SWITCH_THREAD_FUNC conference_outcall_run(switch_thread_t *thread, void *o
                if (call->conference && test_eflag(call->conference, EFLAG_BGDIAL_RESULT) &&
                        switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
                        conference_event_add_data(call->conference, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "bgdial-result");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Result", switch_channel_cause2str(cause));
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Job-UUID", call->uuid);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Peer-UUID", peer_uuid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "bgdial-result");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Result", switch_channel_cause2str(cause));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Job-UUID", call->uuid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Peer-UUID", peer_uuid);
                        switch_event_fire(&event);
                }
 
@@ -1783,7 +1783,7 @@ switch_status_t conference_outcall_bg(conference_obj_t *conference,
        if (call_uuid) {
                call->uuid = strdup(call_uuid);
                if (call->var_event) {
-                       switch_event_add_header_string(call->var_event, SWITCH_STACK_BOTTOM, "conference_bgdial_jobid", call->uuid);
+                       switch_event_add_header_string_dup(call->var_event, SWITCH_STACK_BOTTOM, "conference_bgdial_jobid", call->uuid);
                }
        }
 
@@ -2026,9 +2026,9 @@ SWITCH_STANDARD_APP(conference_function)
 
        switch_event_create(&params, SWITCH_EVENT_COMMAND);
        switch_assert(params);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "conference_name", conference_name);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "profile_name", profile_name);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "Fetch-Call-UUID", switch_core_session_get_uuid(session));
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "conference_name", conference_name);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "profile_name", profile_name);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "Fetch-Call-UUID", switch_core_session_get_uuid(session));
 
        /* Open the config from the xml registry */
        if (!(cxml = switch_xml_open_cfg(mod_conference_cf_name, &cfg, params))) {
@@ -2124,9 +2124,9 @@ SWITCH_STANDARD_APP(conference_function)
                                        /* send event */
                                        switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT);
                                        switch_channel_event_set_basic_data(channel, event);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Conference-Name", conference_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Conference-Profile-Name", profile_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "rejected-join-only");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Conference-Name", conference_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Conference-Profile-Name", profile_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "rejected-join-only");
                                        switch_event_fire(&event);
                                        /* check what sound file to play */
                                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Cannot create a conference since join-only flag is set\n");
@@ -2675,7 +2675,7 @@ void conference_set_variable(conference_obj_t *conference, const char *var, cons
        if (!val) {
                switch_event_del_header(conference->variables, var);
        } else {
-               switch_event_add_header_string(conference->variables, SWITCH_STACK_BOTTOM, var, val);
+               switch_event_add_header_string_dup(conference->variables, SWITCH_STACK_BOTTOM, var, val);
        }
        switch_mutex_unlock(conference->flag_mutex);
 }
@@ -3846,7 +3846,7 @@ conference_obj_t *conference_new(char *name, conference_xml_cfg_t cfg, switch_co
        if (conference->verbose_events && channel) {
                switch_channel_event_set_data(channel, event);
        }
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "conference-create");
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "conference-create");
        switch_event_fire(&event);
 
  end:
@@ -3864,29 +3864,29 @@ void conference_send_presence(conference_obj_t *conference)
        switch_event_t *event;
 
        if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", CONF_CHAT_PROTO);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", conference->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", CONF_CHAT_PROTO);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", conference->name);
                if (strchr(conference->name, '@')) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", conference->name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from", conference->name);
                } else {
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", conference->name, conference->domain);
                }
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", conference->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", conference->name);
 
                if (conference->count) {
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "force-status", "Active (%d caller%s)", conference->count, conference->count == 1 ? "" : "s");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", conference->count == 1 ? "early" : "confirmed");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "presence-call-direction", conference->count == 1 ? "outbound" : "inbound");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", conference->count == 1 ? "early" : "confirmed");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "presence-call-direction", conference->count == 1 ? "outbound" : "inbound");
                } else {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", "Inactive");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-direction", "inbound");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "force-status", "Inactive");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-direction", "inbound");
                }
 
 
@@ -3938,7 +3938,7 @@ void send_presence(switch_event_types_t id)
 
        switch_event_create(&params, SWITCH_EVENT_COMMAND);
        switch_assert(params);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "presence", "true");
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "presence", "true");
 
 
        /* Open the config from the xml registry */
@@ -3954,12 +3954,12 @@ void send_presence(switch_event_types_t id)
                        switch_event_t *event;
 
                        if (name && switch_event_create(&event, id) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", CONF_CHAT_PROTO);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", name);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", name);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", status ? status : "Available");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", CONF_CHAT_PROTO);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", name);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from", name);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "force-status", status ? status : "Available");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
                                switch_event_fire(&event);
                        }
                }
index 02079d6767c6e1627fd6181f0c5749b900eff66d..a98935e4ec1749ebe87ba1dbcd41f2c006f1c23b 100644 (file)
@@ -506,9 +506,9 @@ static switch_status_t http_sendfile_test_file_open(http_sendfile_data_t *http_d
                {
                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, HTTP_SENDFILE_ACK_EVENT) == SWITCH_STATUS_SUCCESS)
                        {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Command-Execution-Identifier", http_data->identifier_str);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Filename", http_data->filename_element);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "File-Access", "Failure");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Command-Execution-Identifier", http_data->identifier_str);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Filename", http_data->filename_element);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "File-Access", "Failure");
                                switch_event_fire(&event);
                                switch_event_destroy(&event);
                        }
@@ -536,10 +536,10 @@ static void http_sendfile_success_report(http_sendfile_data_t *http_data, switch
                        memset(code_as_string, 0, 16);
                        switch_snprintf(code_as_string, 16, "%d", http_data->http_response_code);
 
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Command-Execution-Identifier", http_data->identifier_str);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Filename", http_data->filename_element);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "File-Access", "Success");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "REST-HTTP-Code", code_as_string);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Command-Execution-Identifier", http_data->identifier_str);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Filename", http_data->filename_element);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "File-Access", "Success");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "REST-HTTP-Code", code_as_string);
                        switch_event_add_body(event, "%s", http_data->sendfile_response);
 
                        switch_event_fire(&event);
index 800452dd9abd54da6ae5790071be978e46a4adf3..b55c0a818582c21cadbc9f2448e4958a32f470bc 100644 (file)
@@ -766,12 +766,12 @@ static switch_status_t video_thread_callback(switch_core_session_t *session, swi
                 context->detect_event = 1;
 
                 if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_VIDEO_DETECT) == SWITCH_STATUS_SUCCESS) {
-                    switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detect-Type", "primary");
-                    switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detect-Disposition", "start");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detect-Type", "primary");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detect-Disposition", "start");
                     switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Detect-Simo-Count", "%u", context->detected.simo_count);
                     switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Detect-Average", "%f", context->detected.avg);
                     switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Detect-Last-Score", "%u", context->detected.last_score);
-                    switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
                     //switch_channel_event_set_data(channel, event);
                     DUMP_EVENT(event);
                     switch_event_fire(&event);
@@ -784,12 +784,12 @@ static switch_status_t video_thread_callback(switch_core_session_t *session, swi
             if (context->detected.simo_miss_count >= context->confidence_level) {
                 if (context->detect_event) {
                     if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_VIDEO_DETECT) == SWITCH_STATUS_SUCCESS) {
-                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detect-Type", "primary");
-                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detect-Disposition", "stop");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detect-Type", "primary");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detect-Disposition", "stop");
                         switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Detect-Simo-Count", "%u", context->detected.simo_count);
                         switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Detect-Average", "%f", context->detected.avg);
                         switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Detect-Last-Score", "%u", context->detected.last_score);
-                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
                         //switch_channel_event_set_data(channel, event);
                         DUMP_EVENT(event);
                         switch_event_fire(&event);
@@ -818,12 +818,12 @@ static switch_status_t video_thread_callback(switch_core_session_t *session, swi
                     context->nest_detect_event = 1;
 
                     if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_VIDEO_DETECT) == SWITCH_STATUS_SUCCESS) {
-                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detect-Type", "nested");
-                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detect-Disposition", "start");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detect-Type", "nested");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detect-Disposition", "start");
                         switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Detect-Simo-Count", "%d", context->nestDetected.simo_count);
                         switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Detect-Average", "%f", context->nestDetected.avg);
                         switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Detect-Last-Score", "%u", context->nestDetected.last_score);
-                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
                         //switch_channel_event_set_data(channel, event);
                         DUMP_EVENT(event);
                         switch_event_fire(&event);
@@ -834,12 +834,12 @@ static switch_status_t video_thread_callback(switch_core_session_t *session, swi
             } else if (context->nestDetected.above_avg_simo_count == 0) {
                 if (context->nest_detect_event) {
                     if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_VIDEO_DETECT) == SWITCH_STATUS_SUCCESS) {
-                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detect-Type", "nested");
-                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detect-Disposition", "stop");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detect-Type", "nested");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detect-Disposition", "stop");
                         switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Detect-Simo-Count", "%d", context->nestDetected.simo_count);
                         switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Detect-Average", "%f", context->nestDetected.avg);
                         switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Detect-Last-Score", "%u", context->nestDetected.last_score);
-                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
                         //switch_channel_event_set_data(channel, event);
                         DUMP_EVENT(event);
                         switch_event_fire(&event);
index f38509016bc1b84407c9105b4e48d352d55a0c6c..6070c41781b14a41b50741fce4562eb4c559bec9 100644 (file)
@@ -132,7 +132,7 @@ static switch_status_t digit_nomatch_action_callback(switch_ivr_dmachine_match_t
                                          switch_channel_get_name(channel), match->match_digits);
 
        if (switch_event_create_plain(&event, SWITCH_EVENT_CHANNEL_DATA) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "digits", match->match_digits);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "digits", match->match_digits);
 
                if (switch_core_session_queue_event(use_session, &event) != SWITCH_STATUS_SUCCESS) {
                        switch_event_destroy(&event);
@@ -209,11 +209,11 @@ static switch_status_t digit_action_callback(switch_ivr_dmachine_match_t *match)
                        api = 1;
                }
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, string, act->value);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "digits", match->match_digits);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, string, act->value);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "digits", match->match_digits);
 
                if (exec) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute", exec == 1 ? "non-blocking" : "blocking");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "execute", exec == 1 ? "non-blocking" : "blocking");
                }
 
                if (switch_core_session_queue_event(use_session, &event) != SWITCH_STATUS_SUCCESS) {
@@ -1929,16 +1929,16 @@ SWITCH_STANDARD_APP(event_function)
                                                if (!strcasecmp(var, "Event-Name")) {
                                                        switch_name_event(val, &event->event_id);
                                                        switch_event_del_header(event, var);
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, var, val);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, var, val);
                                                } else if (!strcasecmp(var, "Event-Subclass")) {
                                                        size_t len = strlen(val) + 1;
                                                        void *new = malloc(len);
                                                        switch_assert(new);
                                                        memcpy(new, val, len);
                                                        event->subclass_name = new;
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, var, val);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, var, val);
                                                } else {
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, var, val);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, var, val);
                                                }
                                        }
                                }
@@ -2087,21 +2087,21 @@ SWITCH_STANDARD_API(presence_api_function)
                }
 
                if (switch_event_create(&event, type) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", "dp");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", __FILE__);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", argv[1]);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", argv[2]);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "status", argv[3]);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", "dp");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", __FILE__);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from", argv[1]);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", argv[2]);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "status", argv[3]);
                        if (type == SWITCH_EVENT_PRESENCE_IN) {
                                if (!strncasecmp(argv[3], "cs_", 3) || switch_stristr("hangup", argv[3])) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "status", "CS_HANGUP");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "status", "CS_HANGUP");
                                }
                        } else {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "status", "CS_HANGUP");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "status", "CS_HANGUP");
                        }
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", 0);
                        switch_event_fire(&event);
                }
@@ -2167,7 +2167,7 @@ SWITCH_STANDARD_APP(ivr_application_function)
                /* Open the config from the xml registry */
                switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
                switch_assert(params);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "Menu-Name", name);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "Menu-Name", name);
                switch_channel_event_set_data(channel, params);
 
                if ((cxml = switch_xml_open_cfg(ivr_cf_name, &cfg, params)) != NULL) {
@@ -3749,38 +3749,38 @@ static void pickup_send_presence(const char *key_name)
 
        if (count > 0) {
                if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", PICKUP_PROTO);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", dup_id);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", dup_id);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", PICKUP_PROTO);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", dup_id);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from", dup_id);
 
 
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "force-status", "Active (%d call%s)", count, count == 1 ? "" : "s");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "active");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", "active");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", key_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "confirmed");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-direction", "inbound");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", key_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "confirmed");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-direction", "inbound");
                        switch_event_fire(&event);
                }
        } else {
                if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", PICKUP_PROTO);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", dup_id);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", dup_id);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", PICKUP_PROTO);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", dup_id);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from", dup_id);
 
 
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", "Idle");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "force-status", "Idle");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", dup_id);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-direction", "inbound");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", dup_id);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-direction", "inbound");
                        switch_event_fire(&event);
                }
        }
@@ -3826,33 +3826,33 @@ static void pickup_pres_event_handler(switch_event_t *event)
        switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN);
 
        if (count) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", PICKUP_PROTO);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", key_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", PICKUP_PROTO);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", key_name);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", key_name, domain_name);
 
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "force-status", "Active (%d call%s)", count, count == 1 ? "" : "s");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "active");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", "active");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", key_name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "confirmed");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-direction", "inbound");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", key_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "confirmed");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-direction", "inbound");
        } else {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", PICKUP_PROTO);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", key_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", PICKUP_PROTO);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", key_name);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", key_name, domain_name);
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", "Idle");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "force-status", "Idle");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", key_name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-direction", "inbound");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", key_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-direction", "inbound");
 
        }
 
@@ -4148,10 +4148,10 @@ SWITCH_STANDARD_APP(pickup_function)
 
                        if (switch_event_create(&event, SWITCH_EVENT_CALL_UPDATE) == SWITCH_STATUS_SUCCESS) {
                                const char *partner_uuid = switch_channel_get_partner_uuid(channel);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Direction", "RECV");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Direction", "RECV");
 
                                if (partner_uuid) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridged-To", partner_uuid);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridged-To", partner_uuid);
                                }
                                switch_channel_event_set_data(channel, event);
                                switch_event_fire(&event);
@@ -4367,8 +4367,8 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
 
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
        switch_assert(params);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "as_channel", "true");
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "action", "user_call");
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "as_channel", "true");
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "action", "user_call");
 
        if (var_event) {
                switch_event_merge(params, var_event);
@@ -4400,7 +4400,7 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
                                } else {
                                        switch_event_del_header(var_event, pvar + 9);
                                }
-                               switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, pvar + 9, val);
+                               switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, pvar + 9, val);
                        }
                }
        }
@@ -4408,8 +4408,8 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
        dialed_user = (char *)switch_xml_attr(x_user, "id");
 
        if (var_event) {
-               switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "dialed_user", dialed_user);
-               switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "dialed_domain", domain);
+               switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "dialed_user", dialed_user);
+               switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "dialed_domain", domain);
                if (!zstr(dest) && !strstr(dest, "presence_id=")) {
                        switch_event_add_header(var_event, SWITCH_STACK_BOTTOM, "presence_id", "%s@%s", dialed_user, domain);
                }
@@ -4459,8 +4459,8 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
                                switch_assert(event);
                        }
 
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "dialed_user", dialed_user);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "dialed_domain", domain);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "dialed_user", dialed_user);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "dialed_domain", domain);
                        d_dest = switch_event_expand_headers(event, dest);
                        switch_event_destroy(&event);
                }
@@ -4652,7 +4652,7 @@ static switch_status_t event_chat_send(switch_event_t *message_event)
        if ((to = switch_event_get_header(event, "to"))) {
                char *v;
                if ((v = switch_core_get_variable_dup(to))) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Command", v);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Command", v);
                        free(v);
                }
        }
@@ -4972,7 +4972,7 @@ static switch_status_t next_file(switch_file_handle_t *handle)
 
        if (switch_test_flag((&context->fh), SWITCH_FILE_OPEN)) {
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FILE_STRING_CLOSE) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "File", context->argv[(context->index - 1)]);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "File", context->argv[(context->index - 1)]);
                        switch_event_fire(&event);
                }
 
@@ -5004,7 +5004,7 @@ static switch_status_t next_file(switch_file_handle_t *handle)
                        *p = '\0';
                        if (switch_dir_make_recursive(path, SWITCH_DEFAULT_DIR_PERMS, handle->memory_pool) != SWITCH_STATUS_SUCCESS) {
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FILE_STRING_FAIL) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "File", context->argv[context->index]);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "File", context->argv[context->index]);
                                        switch_event_fire(&event);
                                }
 
@@ -5019,7 +5019,7 @@ static switch_status_t next_file(switch_file_handle_t *handle)
 
        if (switch_core_file_open(&context->fh, file, handle->channels, handle->samplerate, handle->flags, NULL) != SWITCH_STATUS_SUCCESS) {
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FILE_STRING_FAIL) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "File", context->argv[context->index]);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "File", context->argv[context->index]);
                        switch_event_fire(&event);
                }
 
@@ -5031,7 +5031,7 @@ static switch_status_t next_file(switch_file_handle_t *handle)
        }
 
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FILE_STRING_OPEN) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "File", context->argv[context->index]);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "File", context->argv[context->index]);
                switch_event_fire(&event);
        }
 
index 304996981a0e28890f41b37ca0992a39988a08fe..6b3b46737747086139a1d158886504071fc16b6e 100644 (file)
@@ -189,7 +189,7 @@ static void change_pos(switch_event_t *event, int pos)
        channel = switch_core_session_get_channel(session);
        switch_snprintf(tmp, sizeof(tmp), "%d", pos);
        switch_channel_set_variable(channel, "fifo_position", tmp);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fifo_position", tmp);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fifo_position", tmp);
        switch_core_session_rwunlock(session);
 }
 
@@ -1157,10 +1157,10 @@ static void do_unbridge(switch_core_session_t *consumer_session, switch_core_ses
 
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_event_set_data(consumer_channel, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-consumer-stop");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-consumer-stop");
                        if (outbound_id) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Outbound-ID", outbound_id);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Outbound-ID", outbound_id);
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Use-Count", "%d", use_count);
                        }
                        switch_event_fire(&event);
@@ -1169,16 +1169,16 @@ static void do_unbridge(switch_core_session_t *consumer_session, switch_core_ses
                if (caller_channel) {
                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                                switch_channel_event_set_data(caller_channel, event);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-caller-stop");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-caller-stop");
                                switch_event_fire(&event);
                        }
                }
 
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_event_set_data(consumer_channel, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "consumer_stop");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "consumer_stop");
                        switch_event_fire(&event);
                }
        }
@@ -1287,12 +1287,12 @@ static switch_status_t messagehook (switch_core_session_t *session, switch_core_
 
                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                                switch_channel_event_set_data(consumer_channel, event);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-consumer-start");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Caller-CID-Name", ced_name);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Caller-CID-Number", ced_number);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-consumer-start");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Caller-CID-Name", ced_name);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Caller-CID-Number", ced_number);
                                if (outbound_id) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Outbound-ID", outbound_id);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Outbound-ID", outbound_id);
                                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Use-Count", "%d", fifo_get_use_count(outbound_id));
                                }
                                switch_event_fire(&event);
@@ -1301,8 +1301,8 @@ static switch_status_t messagehook (switch_core_session_t *session, switch_core_
                        if (caller_channel) {
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                                        switch_channel_event_set_data(caller_channel, event);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-caller-start");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-caller-start");
                                        switch_event_fire(&event);
                                }
 
@@ -1558,22 +1558,22 @@ static void *SWITCH_THREAD_FUNC outbound_ringall_thread_run(switch_thread_t *thr
                                        switch_event_add_header(ovars, SWITCH_STACK_BOTTOM, "origination_caller_id_name", "(%s) %s", node->outbound_name, caller_id_name);
                                }
                        } else {
-                               switch_event_add_header_string(ovars, SWITCH_STACK_BOTTOM, "origination_caller_id_name", caller_id_name);
+                               switch_event_add_header_string_dup(ovars, SWITCH_STACK_BOTTOM, "origination_caller_id_name", caller_id_name);
                        }
                }
        }
 
        if (!switch_event_get_header(ovars, "origination_caller_id_number")) {
                if ((cid_num = switch_event_get_header(pop, "caller-caller-id-number"))) {
-                       switch_event_add_header_string(ovars, SWITCH_STACK_BOTTOM, "origination_caller_id_number", cid_num);
+                       switch_event_add_header_string_dup(ovars, SWITCH_STACK_BOTTOM, "origination_caller_id_number", cid_num);
                }
        }
 
        if ((id = switch_event_get_header(pop, "unique-id"))) {
-               switch_event_add_header_string(ovars, SWITCH_STACK_BOTTOM, "fifo_bridge_uuid", id);
+               switch_event_add_header_string_dup(ovars, SWITCH_STACK_BOTTOM, "fifo_bridge_uuid", id);
        }
 
-       switch_event_add_header_string(ovars, SWITCH_STACK_BOTTOM, "fifo_originate_uuid", uuid_str);
+       switch_event_add_header_string_dup(ovars, SWITCH_STACK_BOTTOM, "fifo_originate_uuid", uuid_str);
 
        if ((export = switch_event_get_header(pop, "variable_fifo_export"))) {
                int argc;
@@ -1587,7 +1587,7 @@ static void *SWITCH_THREAD_FUNC outbound_ringall_thread_run(switch_thread_t *thr
                        char *name = switch_mprintf("variable_%s", argv[x]);
 
                        if ((tmp = switch_event_get_header(pop, name))) {
-                               switch_event_add_header_string(ovars, SWITCH_STACK_BOTTOM, argv[x], tmp);
+                               switch_event_add_header_string_dup(ovars, SWITCH_STACK_BOTTOM, argv[x], tmp);
                        }
 
                        free(name);
@@ -1606,12 +1606,12 @@ static void *SWITCH_THREAD_FUNC outbound_ringall_thread_run(switch_thread_t *thr
                        switch_core_session_rwunlock(session);
                }
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", node->name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "pre-dial");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "outbound-strategy", "ringall");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "caller-uuid", id);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "originate_string", originate_string);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Outbound-UUID-List", uuid_list);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", node->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "pre-dial");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "outbound-strategy", "ringall");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "caller-uuid", id);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "originate_string", originate_string);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Outbound-UUID-List", uuid_list);
 
                switch_event_fire(&event);
        }
@@ -1635,7 +1635,7 @@ static void *SWITCH_THREAD_FUNC outbound_ringall_thread_run(switch_thread_t *thr
                        switch_snprintf(nstr, sizeof(nstr), "%s@%si@%sh", codec, ptime, rate);
                }
 
-               switch_event_add_header_string(ovars, SWITCH_STACK_BOTTOM, "absolute_codec_string", nstr);
+               switch_event_add_header_string_dup(ovars, SWITCH_STACK_BOTTOM, "absolute_codec_string", nstr);
        }
 
        add_caller_outbound_call(id, &cancel_cause);
@@ -1678,15 +1678,15 @@ static void *SWITCH_THREAD_FUNC outbound_ringall_thread_run(switch_thread_t *thr
                }
 
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", node->name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "post-dial");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "outbound-strategy", "ringall");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "caller-uuid", id);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "result", "failure");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "acceptable", acceptable);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "cause", switch_channel_cause2str(cause));
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "originate_string", originate_string);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Outbound-UUID-List", uuid_list);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", node->name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "post-dial");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "outbound-strategy", "ringall");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "caller-uuid", id);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "result", "failure");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "acceptable", acceptable);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "cause", switch_channel_cause2str(cause));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "originate_string", originate_string);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Outbound-UUID-List", uuid_list);
                        switch_event_fire(&event);
                }
 
@@ -1697,14 +1697,14 @@ static void *SWITCH_THREAD_FUNC outbound_ringall_thread_run(switch_thread_t *thr
 
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(channel, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", node->name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "post-dial");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "outbound-strategy", "ringall");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "caller-uuid", id);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Outbound-UUID", switch_channel_get_variable(channel, "fifo_outbound_uuid"));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Outbound-UUID-List", uuid_list);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "result", "success");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "originate_string", originate_string);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", node->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "post-dial");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "outbound-strategy", "ringall");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "caller-uuid", id);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Outbound-UUID", switch_channel_get_variable(channel, "fifo_outbound_uuid"));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Outbound-UUID-List", uuid_list);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "result", "success");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "originate_string", originate_string);
                switch_event_fire(&event);
        }
 
@@ -1835,11 +1835,11 @@ static void *SWITCH_THREAD_FUNC outbound_enterprise_thread_run(switch_thread_t *
        }
 
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", node ? node->name : "");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "pre-dial");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Outbound-UUID", h->uuid);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "outbound-strategy", "enterprise");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "originate_string", originate_string);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", node ? node->name : "");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "pre-dial");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Outbound-UUID", h->uuid);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "outbound-strategy", "enterprise");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "originate_string", originate_string);
                switch_event_fire(&event);
        }
 
@@ -1855,13 +1855,13 @@ static void *SWITCH_THREAD_FUNC outbound_enterprise_thread_run(switch_thread_t *
                fifo_execute_sql_queued(&sql, SWITCH_TRUE, SWITCH_TRUE);
 
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", node ? node->name : "");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "post-dial");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Outbound-UUID", h->uuid);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "outbound-strategy", "enterprise");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "result", "failure");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "cause", switch_channel_cause2str(cause));
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "originate_string", originate_string);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", node ? node->name : "");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "post-dial");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Outbound-UUID", h->uuid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "outbound-strategy", "enterprise");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "result", "failure");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "cause", switch_channel_cause2str(cause));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "originate_string", originate_string);
                        switch_event_fire(&event);
                }
 
@@ -1872,12 +1872,12 @@ static void *SWITCH_THREAD_FUNC outbound_enterprise_thread_run(switch_thread_t *
 
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(channel, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", node ? node->name : "");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "post-dial");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Outbound-UUID", h->uuid);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "outbound-strategy", "enterprise");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "result", "success");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "originate_string", originate_string);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", node ? node->name : "");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "post-dial");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Outbound-UUID", h->uuid);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "outbound-strategy", "enterprise");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "result", "success");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "originate_string", originate_string);
                switch_event_fire(&event);
        }
 
@@ -2237,30 +2237,30 @@ static void send_presence(fifo_node_t *node)
        }
 
        if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", "queue");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", "queue");
 
                if (node->domain_name) {
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "login", "%s@%s", node->name, node->domain_name);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", node->name, node->domain_name);
                } else {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", node->name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", node->name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", node->name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from", node->name);
                }
 
                if ((wait_count = node_caller_count(node)) > 0) {
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "force-status", "Active (%d waiting)", wait_count);
                } else {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", "Idle");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "force-status", "Idle");
                }
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", 0);
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", wait_count > 0 ? "CS_ROUTING" : "CS_HANGUP");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", node->name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", wait_count > 0 ? "confirmed" : "terminated");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "presence-call-direction", "inbound");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", wait_count > 0 ? "CS_ROUTING" : "CS_HANGUP");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", node->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", wait_count > 0 ? "confirmed" : "terminated");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "presence-call-direction", "inbound");
                switch_event_fire(&event);
        }
 }
@@ -2331,7 +2331,7 @@ static uint32_t fifo_add_outbound(const char *node_name, const char *url, uint32
        switch_mutex_unlock(globals.mutex);
 
        switch_event_create(&call_event, SWITCH_EVENT_CHANNEL_DATA);
-       switch_event_add_header_string(call_event, SWITCH_STACK_BOTTOM, "dial-url", url);
+       switch_event_add_header_string_dup(call_event, SWITCH_STACK_BOTTOM, "dial-url", url);
 
        fifo_queue_push(node->fifo_list[priority], call_event);
        call_event = NULL;
@@ -2414,11 +2414,11 @@ static void dec_use_count(switch_core_session_t *session, const char *type)
 
                        originator_cp = switch_channel_get_caller_profile(channel);
                        switch_channel_event_set_data(channel, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "channel-consumer-stop");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Type", type);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "channel-consumer-stop");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Type", type);
                        if (outbound_id) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Outbound-ID", outbound_id);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Outbound-ID", outbound_id);
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Use-Count", "%d", fifo_get_use_count(outbound_id));
                        }
                        hold_usec = originator_cp->times->hold_accum;
@@ -2504,13 +2504,13 @@ SWITCH_STANDARD_APP(fifo_track_call_function)
 
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(channel, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "channel-consumer-start");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Outbound-ID", data);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "channel-consumer-start");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Outbound-ID", data);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Use-Count", "%d", fifo_get_use_count(data));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Type", "manual");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Caller-CID-Name", cid_name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Caller-CID-Number", cid_number);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Type", "manual");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Caller-CID-Name", cid_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Caller-CID-Number", cid_number);
                switch_event_fire(&event);
        }
 }
@@ -2742,8 +2742,8 @@ SWITCH_STANDARD_APP(fifo_function)
 
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_event_set_data(channel, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "push");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "push");
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "FIFO-Slot", "%d", p);
                        switch_event_fire(&event);
                }
@@ -2865,8 +2865,8 @@ SWITCH_STANDARD_APP(fifo_function)
 
                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                                switch_channel_event_set_data(channel, event);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", cd.do_orbit ? "timeout" : "abort");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", cd.do_orbit ? "timeout" : "abort");
                                switch_event_fire(&event);
                        }
 
@@ -2982,8 +2982,8 @@ SWITCH_STANDARD_APP(fifo_function)
 
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_event_set_data(channel, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "consumer_start");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "consumer_start");
                        switch_event_fire(&event);
                }
 
@@ -3200,19 +3200,19 @@ SWITCH_STANDARD_APP(fifo_function)
 
                                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                                                switch_channel_event_set_data(channel, event);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "caller_outbound");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "caller_outbound");
                                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "FIFO-Result", "failure:%s", switch_channel_cause2str(cause));
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Outbound-URL", url);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Outbound-URL", url);
                                                switch_event_fire(&event);
                                        }
                                } else {
                                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                                                switch_channel_event_set_data(channel, event);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "caller_outbound");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Result", "success");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Outbound-URL", url);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "caller_outbound");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Result", "success");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Outbound-URL", url);
                                                switch_event_fire(&event);
                                        }
                                        url = NULL;
@@ -3223,8 +3223,8 @@ SWITCH_STANDARD_APP(fifo_function)
                                        switch_channel_t *other_channel = switch_core_session_get_channel(other_session);
                                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                                                switch_channel_event_set_data(other_channel, event);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "caller_pop");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "caller_pop");
                                                switch_event_fire(&event);
                                        }
                                }
@@ -3241,9 +3241,9 @@ SWITCH_STANDARD_APP(fifo_function)
 
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                                        switch_channel_event_set_data(channel, event);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "consumer_pop");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Caller-UUID", switch_core_session_get_uuid(other_session));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "consumer_pop");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Caller-UUID", switch_core_session_get_uuid(other_session));
                                        switch_event_fire(&event);
                                }
 
@@ -3377,13 +3377,13 @@ SWITCH_STANDARD_APP(fifo_function)
 
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                                        switch_channel_event_set_data(channel, event);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "channel-consumer-start");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Type", "onhook");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Caller-CID-Name", cid_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Caller-CID-Number", cid_number);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "channel-consumer-start");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Type", "onhook");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Caller-CID-Name", cid_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Caller-CID-Number", cid_number);
                                        if (outbound_id) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Outbound-ID", outbound_id);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Outbound-ID", outbound_id);
                                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Use-Count", "%d", fifo_get_use_count(outbound_id));
                                        }
                                        switch_event_fire(&event);
@@ -3391,10 +3391,10 @@ SWITCH_STANDARD_APP(fifo_function)
 
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                                        switch_channel_event_set_data(channel, event);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-consumer-start");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-consumer-start");
                                        if (outbound_id) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Outbound-ID", outbound_id);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Outbound-ID", outbound_id);
                                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Use-Count", "%d", fifo_get_use_count(outbound_id));
                                        }
 
@@ -3402,8 +3402,8 @@ SWITCH_STANDARD_APP(fifo_function)
                                }
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                                        switch_channel_event_set_data(other_channel, event);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-caller-start");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-caller-start");
                                        switch_event_fire(&event);
                                }
 
@@ -3461,11 +3461,11 @@ SWITCH_STANDARD_APP(fifo_function)
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                                        uint64_t hold_usec = 0, tt_usec = 0;
                                        switch_channel_event_set_data(channel, event);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", arg_fifo_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "channel-consumer-stop");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Type", "onhook");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", arg_fifo_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "channel-consumer-stop");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Type", "onhook");
                                        if (outbound_id) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Outbound-ID", outbound_id);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Outbound-ID", outbound_id);
                                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Use-Count", "%d", fifo_get_use_count(outbound_id));
                                        }
                                        hold_usec = originator_cp->times->hold_accum;
@@ -3488,10 +3488,10 @@ SWITCH_STANDARD_APP(fifo_function)
 
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                                        switch_channel_event_set_data(channel, event);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-consumer-stop");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-consumer-stop");
                                        if (outbound_id) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Outbound-ID", outbound_id);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Outbound-ID", outbound_id);
                                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "FIFO-Consumer-Use-Count", "%d", fifo_get_use_count(outbound_id));
                                        }
                                        switch_event_fire(&event);
@@ -3499,8 +3499,8 @@ SWITCH_STANDARD_APP(fifo_function)
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                                        uint64_t hold_usec = 0, tt_usec = 0;
                                        switch_channel_event_set_data(other_channel, event);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-caller-stop");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-caller-stop");
                                        hold_usec = originatee_cp->times->hold_accum;
                                        tt_usec = (switch_micro_time_now() - originatee_cp->times->bridged) - hold_usec;
                                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "FIFO-Caller-Talk-Time-us", "%"SWITCH_TIME_T_FMT, tt_usec);
@@ -3567,8 +3567,8 @@ SWITCH_STANDARD_APP(fifo_function)
                                        switch_channel_set_variable(channel, "fifo_status", "WRAPUP");
                                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                                                switch_channel_event_set_data(channel, event);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "consumer_wrapup");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "consumer_wrapup");
                                                switch_event_fire(&event);
                                        }
                                }
@@ -3622,8 +3622,8 @@ SWITCH_STANDARD_APP(fifo_function)
                        if (do_wait && switch_channel_ready(channel)) {
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                                        switch_channel_event_set_data(channel, event);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "consumer_reentrance");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "consumer_reentrance");
                                        switch_event_fire(&event);
                                }
                        }
@@ -3631,8 +3631,8 @@ SWITCH_STANDARD_APP(fifo_function)
 
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_event_set_data(channel, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "consumer_stop");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "consumer_stop");
                        switch_event_fire(&event);
                }
 
index 1e22cff74f2a9db9d4d3e2fb02003421bb595340..af09e319e4b08b03b887b3f64cfde496c9d26aeb 100644 (file)
@@ -262,7 +262,7 @@ static switch_bool_t fsk_detect_callback(switch_media_bug_t *bug, void *user_dat
                                                                                  switch_channel_get_name(channel), varname, val);
                                                switch_channel_set_variable(channel, varname, val);
                                                if (event) {
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, varname, val);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, varname, val);
                                                }
                                        }
                                }
index 4b32d87c6d670b0f87374c48ec48685dccf44617..ac09b7d2fe724c0febe86c50d2a1fd7fe14e3309 100644 (file)
@@ -344,7 +344,7 @@ static switch_status_t parse_get_var(const char *tag_name, client_t *client, swi
                (!client->profile->var_params.get_var_list || switch_event_check_permission_list(client->profile->var_params.get_var_list, var))) {
                const char *vval = switch_channel_get_variable(client->channel, var);
                if (vval) {
-                       switch_event_add_header_string(switch_true(perm) ? client->params : client->one_time_params, SWITCH_STACK_BOTTOM, var, vval);
+                       switch_event_add_header_string_dup(switch_true(perm) ? client->params : client->one_time_params, SWITCH_STACK_BOTTOM, var, vval);
                }
        } else {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "variable %s permission denied!\n", var);
@@ -600,8 +600,8 @@ static switch_status_t parse_playback(const char *tag_name, client_t *client, sw
                        status = switch_ivr_play_and_detect_speech(client->session, file, sp_engine, sp_grammar, &result, input_timeout, args);
 
                        if (!zstr(result)) {
-                               switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, name, result);
-                               switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "input_type", "detected_speech");
+                               switch_event_add_header_string_dup(client->one_time_params, SWITCH_STACK_BOTTOM, name, result);
+                               switch_event_add_header_string_dup(client->one_time_params, SWITCH_STACK_BOTTOM, "input_type", "detected_speech");
                                submit = 1;
                                break;
                        }
@@ -631,8 +631,8 @@ static switch_status_t parse_playback(const char *tag_name, client_t *client, sw
                if (status == SWITCH_STATUS_BREAK) {
                        if (error_file) {
                                switch_ivr_play_file(client->session, NULL, error_file, &nullargs);
-                               switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, name, "invalid");
-                               switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "input_type", "invalid");
+                               switch_event_add_header_string_dup(client->one_time_params, SWITCH_STACK_BOTTOM, name, "invalid");
+                               switch_event_add_header_string_dup(client->one_time_params, SWITCH_STACK_BOTTOM, "input_type", "invalid");
                        }
                        status = SWITCH_STATUS_SUCCESS;
                } else if (status == SWITCH_STATUS_FOUND) {
@@ -658,8 +658,8 @@ static switch_status_t parse_playback(const char *tag_name, client_t *client, sw
                                                }
                                        }
                                }
-                               switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, name, client->matching_action_binding->match_digits);
-                               switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "input_type", "dtmf");
+                               switch_event_add_header_string_dup(client->one_time_params, SWITCH_STACK_BOTTOM, name, client->matching_action_binding->match_digits);
+                               switch_event_add_header_string_dup(client->one_time_params, SWITCH_STACK_BOTTOM, "input_type", "dtmf");
                        }
 
                        if (client->matching_action_binding->action) {
@@ -693,7 +693,7 @@ static switch_status_t parse_playback(const char *tag_name, client_t *client, sw
                                status = SWITCH_STATUS_FALSE;
 
                        } else {
-                               switch_event_add_header_string(client->params, SWITCH_STACK_BOTTOM, "url", sub_action);
+                               switch_event_add_header_string_dup(client->params, SWITCH_STACK_BOTTOM, "url", sub_action);
                        }
                }
        }
@@ -807,12 +807,12 @@ static switch_status_t parse_sms(const char *tag_name, client_t *client, switch_
        const char *to = switch_xml_attr(tag, "to");
 
        if (to && switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", from_proto);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to_proto", to_proto);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", from_proto);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "to_proto", to_proto);
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", switch_channel_get_variable(client->channel, "caller_id_number"));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to", to);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "text/plain");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from", switch_channel_get_variable(client->channel, "caller_id_number"));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "to", to);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "text/plain");
 
                if (body) {
                        switch_event_add_body(event, "%s", body);
@@ -1105,12 +1105,12 @@ static switch_status_t parse_record(const char *tag_name, client_t *client, swit
        }
 
        if (sub_action) {
-               switch_event_add_header_string(client->params, SWITCH_STACK_BOTTOM, "url", sub_action);
+               switch_event_add_header_string_dup(client->params, SWITCH_STACK_BOTTOM, "url", sub_action);
        }
 
        if (!http && !zstr(tmp_record_path) && switch_file_exists(tmp_record_path, client->pool) == SWITCH_STATUS_SUCCESS) {
                char *key = switch_core_sprintf(client->pool, "attach_file:%s:%s.%s", name, fname, ext);
-               switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, key, tmp_record_path);
+               switch_event_add_header_string_dup(client->one_time_params, SWITCH_STACK_BOTTOM, key, tmp_record_path);
        }
 
  end:
@@ -1128,11 +1128,11 @@ static switch_status_t parse_common(const char *tag_name, client_t *client, swit
        const char *tmp_action = switch_xml_attr(tag, "temp-action");
 
        if (action) {
-               switch_event_add_header_string(client->params, SWITCH_STACK_BOTTOM, "url", action);
+               switch_event_add_header_string_dup(client->params, SWITCH_STACK_BOTTOM, "url", action);
        }
 
        if (tmp_action) {
-               switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "url", tmp_action);
+               switch_event_add_header_string_dup(client->one_time_params, SWITCH_STACK_BOTTOM, "url", tmp_action);
        }
 
        return SWITCH_STATUS_SUCCESS;
@@ -1164,7 +1164,7 @@ static switch_status_t parse_xml(client_t *client)
                                                        if (zstr(val)) {
                                                                val = NULL;
                                                        }
-                                                       switch_event_add_header_string(client->params, SWITCH_STACK_BOTTOM, tag->name, val);
+                                                       switch_event_add_header_string_dup(client->params, SWITCH_STACK_BOTTOM, tag->name, val);
                                                }
                                                tag = tag->ordered;
                                        }
@@ -1275,7 +1275,7 @@ static size_t get_header_callback(void *ptr, size_t size, size_t nmemb, void *us
                        *cr = '\0';
                }
 
-               switch_event_add_header_string(client->headers, SWITCH_STACK_BOTTOM, header, val);
+               switch_event_add_header_string_dup(client->headers, SWITCH_STACK_BOTTOM, header, val);
        }
 
        switch_safe_free(header);
@@ -1383,7 +1383,7 @@ static client_t *client_create(switch_core_session_t *session, const char *profi
        switch_event_create(&client->one_time_params, SWITCH_EVENT_CLONE);
        client->one_time_params->flags |= EF_UNIQ_HEADERS;
 
-       switch_event_add_header_string(client->params, SWITCH_STACK_BOTTOM, "hostname", switch_core_get_switchname());
+       switch_event_add_header_string_dup(client->params, SWITCH_STACK_BOTTOM, "hostname", switch_core_get_switchname());
 
        return client;
 }
@@ -1459,12 +1459,12 @@ static switch_status_t httapi_sync(client_t *client)
 
        if (!(url = switch_event_get_header(client->params, "url"))) {
                url = client->profile->url;
-               switch_event_add_header_string(client->params, SWITCH_STACK_BOTTOM, "url", url);
+               switch_event_add_header_string_dup(client->params, SWITCH_STACK_BOTTOM, "url", url);
        }
 
        get_style_method = method ? strcasecmp(method, "post") : 1;
 
-       switch_event_add_header_string(client->params, SWITCH_STACK_TOP, "session_id", session_id);
+       switch_event_add_header_string_dup(client->params, SWITCH_STACK_TOP, "session_id", session_id);
 
        dynamic_url = switch_event_expand_headers(client->params, url);
 
@@ -1958,7 +1958,7 @@ static switch_status_t do_config(void)
                                                                if (zstr(type)) type = profile->var_params.default_allow ? "deny" : "allow";
 
                                                                if (name) {
-                                                                       switch_event_add_header_string(profile->var_params.set_var_list, SWITCH_STACK_BOTTOM, name, type);
+                                                                       switch_event_add_header_string_dup(profile->var_params.set_var_list, SWITCH_STACK_BOTTOM, name, type);
                                                                }
                                                        }
                                                }
@@ -1986,7 +1986,7 @@ static switch_status_t do_config(void)
                                                                if (zstr(type)) type = profile->var_params.default_allow ? "deny" : "allow";
 
                                                                if (name) {
-                                                                       switch_event_add_header_string(profile->var_params.get_var_list, SWITCH_STACK_BOTTOM, name, type);
+                                                                       switch_event_add_header_string_dup(profile->var_params.get_var_list, SWITCH_STACK_BOTTOM, name, type);
                                                                }
                                                        }
                                                }
@@ -2016,7 +2016,7 @@ static switch_status_t do_config(void)
                                                                if (zstr(type)) type = profile->dial_params.default_allow ? "deny" : "allow";
 
                                                                if (name) {
-                                                                       switch_event_add_header_string(profile->dial_params.app_list, SWITCH_STACK_BOTTOM, name, type);
+                                                                       switch_event_add_header_string_dup(profile->dial_params.app_list, SWITCH_STACK_BOTTOM, name, type);
                                                                }
                                                        }
                                                }
@@ -2045,7 +2045,7 @@ static switch_status_t do_config(void)
                                                                if (zstr(type)) type = profile->var_params.default_allow ? "deny" : "allow";
 
                                                                if (name) {
-                                                                       switch_event_add_header_string(profile->var_params.expand_var_list, SWITCH_STACK_BOTTOM, name, type);
+                                                                       switch_event_add_header_string_dup(profile->var_params.expand_var_list, SWITCH_STACK_BOTTOM, name, type);
                                                                }
                                                        }
                                                }
@@ -2068,7 +2068,7 @@ static switch_status_t do_config(void)
                                                                if (zstr(type)) type = profile->var_params.default_allow ? "deny" : "allow";
 
                                                                if (name) {
-                                                                       switch_event_add_header_string(profile->var_params.api_list, SWITCH_STACK_BOTTOM, name, type);
+                                                                       switch_event_add_header_string_dup(profile->var_params.api_list, SWITCH_STACK_BOTTOM, name, type);
                                                                }
                                                        }
                                                }
@@ -2207,24 +2207,24 @@ static switch_status_t my_on_reporting(switch_core_session_t *session)
                switch_channel_event_set_extended_data(channel, client->one_time_params);
        }
 
-       switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "exiting", "true");
+       switch_event_add_header_string_dup(client->one_time_params, SWITCH_STACK_BOTTOM, "exiting", "true");
 
        if (client->record.file) {
                char *key = switch_core_sprintf(client->pool, "attach_file:%s:%s.wav", client->record.name, switch_core_session_get_uuid(session));
                switch_ivr_stop_record_session(client->session, client->record.file);
-               switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, key, client->record.file);
+               switch_event_add_header_string_dup(client->one_time_params, SWITCH_STACK_BOTTOM, key, client->record.file);
        }
 
        var = switch_event_get_header(client->params, "url");
 
        if (var && client->record.action) {
                if (strcmp(var, client->record.action)) {
-                       switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "url", client->record.action);
+                       switch_event_add_header_string_dup(client->one_time_params, SWITCH_STACK_BOTTOM, "url", client->record.action);
                        httapi_sync(client);
                        if (client->profile->perms.extended_data) {
                                switch_channel_event_set_extended_data(channel, client->one_time_params);
                        }
-                       switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "exiting", "true");
+                       switch_event_add_header_string_dup(client->one_time_params, SWITCH_STACK_BOTTOM, "exiting", "true");
                }
        }
 
@@ -2276,7 +2276,7 @@ SWITCH_STANDARD_APP(httapi_function)
                                switch_event_create(&params, SWITCH_EVENT_CLONE);
                                params->flags |= EF_UNIQ_HEADERS;
                        }
-                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "url", url);
+                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "url", url);
                }
        }
 
index ab7c163ce5a698c22fba75ad239c0d8ea9b7e6ce..4424022055961bcd4609ce8ef3ef622bdab08018 100644 (file)
@@ -676,7 +676,7 @@ static int route_add_callback(void *pArg, int argc, char **argv, char **columnNa
                }
 
                /* add all fields to the fields event */
-               switch_event_add_header_string(additional->fields, SWITCH_STACK_BOTTOM, columnNames[i], argv[i]);
+               switch_event_add_header_string_dup(additional->fields, SWITCH_STACK_BOTTOM, columnNames[i], argv[i]);
        }
 
        cbt->matches++;
@@ -968,15 +968,15 @@ static switch_status_t lcr_do_lookup(callback_t *cb_struct)
        }
        if (cb_struct->event) {
                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(cb_struct->session), SWITCH_LOG_DEBUG, "we have an event\n");
-               switch_event_add_header_string(cb_struct->event, SWITCH_STACK_BOTTOM, "lcr_rate_field", rate_field);
-               switch_event_add_header_string(cb_struct->event, SWITCH_STACK_BOTTOM, "lcr_user_rate_field", user_rate_field);
-               switch_event_add_header_string(cb_struct->event, SWITCH_STACK_BOTTOM, "lcr_query_digits", digits_copy);
+               switch_event_add_header_string_dup(cb_struct->event, SWITCH_STACK_BOTTOM, "lcr_rate_field", rate_field);
+               switch_event_add_header_string_dup(cb_struct->event, SWITCH_STACK_BOTTOM, "lcr_user_rate_field", user_rate_field);
+               switch_event_add_header_string_dup(cb_struct->event, SWITCH_STACK_BOTTOM, "lcr_query_digits", digits_copy);
                id_str = switch_core_sprintf(cb_struct->pool, "%d", cb_struct->profile->id);
-               switch_event_add_header_string(cb_struct->event, SWITCH_STACK_BOTTOM, "lcr_query_profile", id_str);
-               switch_event_add_header_string(cb_struct->event, SWITCH_STACK_BOTTOM, "lcr_query_expanded_digits", digits_expanded);
-               switch_event_add_header_string(cb_struct->event, SWITCH_STACK_BOTTOM, "lcr_query_expanded_lrn_digits", lrn_digits_expanded);
+               switch_event_add_header_string_dup(cb_struct->event, SWITCH_STACK_BOTTOM, "lcr_query_profile", id_str);
+               switch_event_add_header_string_dup(cb_struct->event, SWITCH_STACK_BOTTOM, "lcr_query_expanded_digits", digits_expanded);
+               switch_event_add_header_string_dup(cb_struct->event, SWITCH_STACK_BOTTOM, "lcr_query_expanded_lrn_digits", lrn_digits_expanded);
                if ( cb_struct->lrn_number ) {
-                       switch_event_add_header_string(cb_struct->event, SWITCH_STACK_BOTTOM, "lcr_lrn", cb_struct->lrn_number);
+                       switch_event_add_header_string_dup(cb_struct->event, SWITCH_STACK_BOTTOM, "lcr_lrn", cb_struct->lrn_number);
                }
        }
 
index 560c34f6c6abff2844e73cdf3b007646a3d68b9c..4511103536bbc18e6e1116433c5618d0f28f9b2a 100644 (file)
@@ -189,7 +189,7 @@ static void save_extra_headers(switch_event_t *extra_headers, switch_channel_t *
                const char *name = ei->name;
                char *value = ei->value;
                if (!strncasecmp(name, SIP_OREKA_HEADER_PREFIX, SIP_OREKA_HEADER_PREFIX_LEN)) {
-                       switch_event_add_header_string(extra_headers, SWITCH_STACK_BOTTOM, name, value);
+                       switch_event_add_header_string_dup(extra_headers, SWITCH_STACK_BOTTOM, name, value);
                }
        }
        switch_channel_variable_last(channel);
index a4d43d545d1898a52fcfb7f017484dc37a60a266..2ad3bd1578793737f60df3a1bf4d57f6ecab9e44 100644 (file)
@@ -752,7 +752,7 @@ switch_status_t load_config()
 
        switch_event_create(&params, SWITCH_EVENT_MESSAGE);
        switch_assert(params);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "profile",
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "profile",
                "profile_rad_auth");
 
        //vsas
index 68ad7d7cccacdf2d2f57e5eda62b899f60c20765..33e13518fb20ab4adda5d83ebf287cc1eedccf14 100644 (file)
@@ -47,7 +47,7 @@ static void send_report(switch_event_t *event, const char * Status) {
 
        if (switch_event_create_subclass(&report, SWITCH_EVENT_CUSTOM, MY_EVENT_DELIVERY_REPORT) == SWITCH_STATUS_SUCCESS) {
 
-               switch_event_add_header_string(report, SWITCH_STACK_BOTTOM, "Status", Status);
+               switch_event_add_header_string_dup(report, SWITCH_STACK_BOTTOM, "Status", Status);
 
 
                for (header = event->headers; header; header = header->next) {
@@ -60,10 +60,10 @@ static void send_report(switch_event_t *event, const char * Status) {
                if (header->idx) {
                    int i;
                    for (i = 0; i < header->idx; i++) {
-                       switch_event_add_header_string(report, SWITCH_STACK_PUSH, header->name, header->array[i]);
+                                       switch_event_add_header_string_dup(report, SWITCH_STACK_PUSH, header->name, header->array[i]);
                    }
                } else {
-                   switch_event_add_header_string(report, SWITCH_STACK_BOTTOM, header->name, header->value);
+                               switch_event_add_header_string_dup(report, SWITCH_STACK_BOTTOM, header->name, header->value);
                }
                }
                switch_event_fire(&report);
@@ -263,14 +263,14 @@ static int parse_exten(switch_event_t *event, switch_xml_t xexten, switch_event_
                                        if (xinline) {
                                                switch_core_execute_chat_app(event, application, data);
                                        } else {
-                                               switch_event_add_header_string(*extension, SWITCH_STACK_BOTTOM, application, zstr(data) ? "__undef" : data);
+                                               switch_event_add_header_string_dup(*extension, SWITCH_STACK_BOTTOM, application, zstr(data) ? "__undef" : data);
                                        }
                                }
                                proceed = 1;
                        }
                } else {
                        if (field && strchr(expression, '(')) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "DP_MATCH", NULL);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "DP_MATCH", NULL);
                                switch_capture_regex(re, proceed, field_data, ovector, "DP_MATCH", switch_regex_set_event_header_callback, event);
                        }
 
@@ -320,7 +320,7 @@ static int parse_exten(switch_event_t *event, switch_xml_t xexten, switch_event_
                                        if (xinline) {
                                                switch_core_execute_chat_app(event, application, app_data);
                                        } else {
-                                               switch_event_add_header_string(*extension, SWITCH_STACK_BOTTOM, application, zstr(app_data) ? "__undef" : app_data);
+                                               switch_event_add_header_string_dup(*extension, SWITCH_STACK_BOTTOM, application, zstr(app_data) ? "__undef" : app_data);
                                        }
                                }
                                switch_safe_free(substituted);
@@ -553,7 +553,7 @@ SWITCH_STANDARD_CHAT_APP(set_function)
        if (zstr(val)) {
                switch_event_del_header(message, var);
        } else {
-               switch_event_add_header_string(message, SWITCH_STACK_BOTTOM, var, val);
+               switch_event_add_header_string_dup(message, SWITCH_STACK_BOTTOM, var, val);
        }
 
        free(var);
index 3c4f7c69cfeaf04667442f00a67e02682a2dd891..e88bc4f5ec26d6ce25db306530a76672bc17462d 100644 (file)
@@ -164,12 +164,12 @@ static int mod_sms_flowroute_profile_request_handler(h2o_handler_t *handler, h2o
        }
 
        switch_event_create(&evt, SWITCH_EVENT_MESSAGE);
-       switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM, "to", cJSON_GetObjectCstr(parsed, "to"));
-       switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM, "body", cJSON_GetObjectCstr(parsed, "body"));
-       switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM, "from", cJSON_GetObjectCstr(parsed, "from"));
-       switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM, "record_id", cJSON_GetObjectCstr(parsed, "id"));
-       switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM, "context", "default");
-       switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM, "proto", "sms_flowroute");
+       switch_event_add_header_string_dup(evt, SWITCH_STACK_BOTTOM, "to", cJSON_GetObjectCstr(parsed, "to"));
+       switch_event_add_header_string_dup(evt, SWITCH_STACK_BOTTOM, "body", cJSON_GetObjectCstr(parsed, "body"));
+       switch_event_add_header_string_dup(evt, SWITCH_STACK_BOTTOM, "from", cJSON_GetObjectCstr(parsed, "from"));
+       switch_event_add_header_string_dup(evt, SWITCH_STACK_BOTTOM, "record_id", cJSON_GetObjectCstr(parsed, "id"));
+       switch_event_add_header_string_dup(evt, SWITCH_STACK_BOTTOM, "context", "default");
+       switch_event_add_header_string_dup(evt, SWITCH_STACK_BOTTOM, "proto", "sms_flowroute");
 
     switch_core_chat_send("GLOBAL_SMS", evt);
        switch_event_destroy(&evt);
@@ -486,7 +486,7 @@ SWITCH_STANDARD_APP(mod_sms_flowroute_app_send_function)
        /* Cycle through all of the channel headers, and ones with 'sms_flowroute_' prefix copy over without the prefix */
        for ( chan_var = switch_channel_variable_first(channel); chan_var; chan_var = chan_var->next) {
                if ( !strncmp(chan_var->name, "sms_flowroute_", 14) ) {
-                       switch_event_add_header_string(message, SWITCH_STACK_BOTTOM, chan_var->name + 14, chan_var->value);
+                       switch_event_add_header_string_dup(message, SWITCH_STACK_BOTTOM, chan_var->name + 14, chan_var->value);
                }
        }
 
@@ -531,8 +531,8 @@ SWITCH_STANDARD_API(mod_sms_flowroute_send_api)
                switch_goto_status(SWITCH_STATUS_GENERR, done);
        }
 
-       switch_event_add_header_string(message, SWITCH_STACK_BOTTOM, "destination_addr", argv[1]);
-       switch_event_add_header_string(message, SWITCH_STACK_BOTTOM, "source_addr", argv[2]);
+       switch_event_add_header_string_dup(message, SWITCH_STACK_BOTTOM, "destination_addr", argv[1]);
+       switch_event_add_header_string_dup(message, SWITCH_STACK_BOTTOM, "source_addr", argv[2]);
        switch_event_set_body(message, argv[3]);
 
        if (mod_sms_flowroute_profile_send_message(profile, message) != SWITCH_STATUS_SUCCESS) {
index b3cf2b478e91c0a33a73774439c00213de9e5189..c3f7b131d719415d47cf8868969925754f7cf65a 100644 (file)
@@ -43,10 +43,10 @@ static switch_bool_t snom_bind_key(const char *key,
 
        if (user && host && profile) {
                if (switch_event_create(&event, SWITCH_EVENT_SEND_MESSAGE) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "user", user);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "host", host);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "profile", profile);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "content-type", "application/x-buttons");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "user", user);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "host", host);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "profile", profile);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "content-type", "application/x-buttons");
                        if (action && action_name) {
                                switch_event_add_body(event, "k=%s\nc=%s\nl=%s\nn=%s\na=%s\n", key, light, label, action, action_name);
                        } else {
index 52bd5ebf176192663a29055401b08408aaf16c83..bc5114ace28493615f39c9e5403fb0dc0685b265 100644 (file)
@@ -197,9 +197,9 @@ SWITCH_STANDARD_APP(sonar_app)
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "ping_recv", "%d", ph.received);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "ping_lost", "%d", lost);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "lost_rate", "%2.2f%%", lost * 1.0 / loops);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "destination_number",
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "destination_number",
                        switch_channel_get_variable(channel, "ping_destination_number"));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "sonar_ping_ref",
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "sonar_ping_ref",
                        switch_channel_get_variable(channel, "sonar_ping_ref"));
 
                verbose_event = switch_channel_get_variable(channel, "sonar_channel_event");
index 836808a48d28978a6291a0d4655ad446ae1a1d5b..af8fc1005bd1ed5450657313ca97d3e98582fdb2 100644 (file)
@@ -117,11 +117,11 @@ static void put_text_msg(void *user_data, const uint8_t *msg, int len)
 
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_TDD_RECV_MESSAGE) == SWITCH_STATUS_SUCCESS) {
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", "mod_spandsp");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", "tdd");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "subject", "TDD MESSAGE");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "TDD-Data", (char *)msg);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(pvt->session));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", "mod_spandsp");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", "tdd");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "subject", "TDD MESSAGE");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "TDD-Data", (char *)msg);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(pvt->session));
                switch_event_add_body(event, "%s\n\n", (char *)msg);
 
                if (switch_core_session_get_partner(pvt->session, &other_session) == SWITCH_STATUS_SUCCESS) {
@@ -927,8 +927,8 @@ static switch_bool_t callprogress_detector_process_buffer(switch_media_bug_t *bu
                        switch_channel_execute_on(channel, execute_on_tone_var);
                        switch_channel_api_on(channel, api_on_tone_var);
                        if (switch_event_create(&event, SWITCH_EVENT_DETECTED_TONE) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detected-Tone", detected_tone);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detected-Tone", detected_tone);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
                                switch_channel_event_set_data(channel, event);
                                switch_event_fire(&event);
                        }
index 8c8d0103c449301b4f3eb751fc3587a42567711a..6165c803d973ffbe3fa0bc09abca9d6b5d2ac986 100644 (file)
@@ -386,17 +386,17 @@ static int phase_b_handler(void *user_data, int result)
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, pvt->app_mode == FUNCTION_TX ? SPANDSP_EVENT_TXFAXNEGOCIATERESULT : SPANDSP_EVENT_RXFAXNEGOCIATERESULT) == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(channel, event);
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "uuid", switch_core_session_get_uuid(session));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-transfer-rate", fax_transfer_rate);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-ecm-used", (t30_stats.error_correcting_mode) ? "on" : "off");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-t38-status", get_t38_status(pvt->t38_mode));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-local-station-id", local_ident);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-remote-station-id", far_ident);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-remote-country", switch_str_nil(t30_get_rx_country(pvt->t30)));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-remote-vendor", switch_str_nil(t30_get_rx_vendor(pvt->t30)));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-remote-model", switch_str_nil(t30_get_rx_model(pvt->t30)));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "uuid", switch_core_session_get_uuid(session));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-transfer-rate", fax_transfer_rate);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-ecm-used", (t30_stats.error_correcting_mode) ? "on" : "off");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-t38-status", get_t38_status(pvt->t38_mode));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-local-station-id", local_ident);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-remote-station-id", far_ident);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-remote-country", switch_str_nil(t30_get_rx_country(pvt->t30)));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-remote-vendor", switch_str_nil(t30_get_rx_vendor(pvt->t30)));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-remote-model", switch_str_nil(t30_get_rx_model(pvt->t30)));
                if (pvt->app_mode == FUNCTION_TX) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-document-total-pages", fax_document_total_pages);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-document-total-pages", fax_document_total_pages);
                }
                switch_event_fire(&event);
        }
@@ -521,20 +521,20 @@ static int phase_d_handler(void *user_data, int msg)
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, pvt->app_mode == FUNCTION_TX ? SPANDSP_EVENT_TXFAXPAGERESULT : SPANDSP_EVENT_RXFAXPAGERESULT) == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(channel, event);
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "uuid", switch_core_session_get_uuid(session));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-document-transferred-pages", fax_document_transferred_pages);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "uuid", switch_core_session_get_uuid(session));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-document-transferred-pages", fax_document_transferred_pages);
                if (pvt->app_mode == FUNCTION_TX) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-document-total-pages", fax_document_total_pages);
-               }
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-image-resolution", fax_line_image_resolution);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-file-image-resolution", fax_file_image_resolution);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-image-size", fax_image_size);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-image-pixel-size", fax_line_image_pixel_size);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-file-image-pixel-size", fax_file_image_pixel_size);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-bad-rows", fax_bad_rows);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-longest-bad-row-run", fax_longest_bad_row_run);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-encoding", fax_encoding);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-encoding-name", t4_compression_to_str(t30_stats.compression));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-document-total-pages", fax_document_total_pages);
+               }
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-image-resolution", fax_line_image_resolution);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-file-image-resolution", fax_file_image_resolution);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-image-size", fax_image_size);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-image-pixel-size", fax_line_image_pixel_size);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-file-image-pixel-size", fax_file_image_pixel_size);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-bad-rows", fax_bad_rows);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-longest-bad-row-run", fax_longest_bad_row_run);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-encoding", fax_encoding);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-encoding-name", t4_compression_to_str(t30_stats.compression));
                switch_event_fire(&event);
        }
 
@@ -676,19 +676,19 @@ static void phase_e_handler(void *user_data, int result)
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, pvt->app_mode == FUNCTION_TX ? SPANDSP_EVENT_TXFAXRESULT : SPANDSP_EVENT_RXFAXRESULT) == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(channel, event);
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-success", (result == T30_ERR_OK) ? "1" : "0");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-result-code", fax_result_code);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-result-text", t30_completion_code_to_str(result));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-document-transferred-pages", fax_document_transferred_pages);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-document-total-pages", fax_document_total_pages);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-image-resolution", fax_image_resolution);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-image-size", fax_image_size);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-bad-rows", fax_bad_rows);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-transfer-rate", fax_transfer_rate);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-ecm-used", (t.error_correcting_mode) ? "on" : "off");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-t38-status", get_t38_status(pvt->t38_mode));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-local-station-id", local_ident);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fax-remote-station-id", far_ident);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-success", (result == T30_ERR_OK) ? "1" : "0");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-result-code", fax_result_code);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-result-text", t30_completion_code_to_str(result));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-document-transferred-pages", fax_document_transferred_pages);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-document-total-pages", fax_document_total_pages);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-image-resolution", fax_image_resolution);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-image-size", fax_image_size);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-bad-rows", fax_bad_rows);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-transfer-rate", fax_transfer_rate);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-ecm-used", (t.error_correcting_mode) ? "on" : "off");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-t38-status", get_t38_status(pvt->t38_mode));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-local-station-id", local_ident);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fax-remote-station-id", far_ident);
                switch_event_fire(&event);
        }
 
@@ -2021,8 +2021,8 @@ static switch_status_t t38_gateway_on_consume_media(switch_core_session_t *sessi
        switch_core_session_receive_message(session, &msg);
 
        if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_BRIDGE) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridge-A-Unique-ID", switch_core_session_get_uuid(session));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridge-B-Unique-ID", peer_uuid);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridge-A-Unique-ID", switch_core_session_get_uuid(session));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridge-B-Unique-ID", peer_uuid);
                switch_channel_event_set_data(channel, event);
                switch_event_fire(&event);
        }
@@ -2410,7 +2410,7 @@ static switch_bool_t tone_detect_callback(switch_media_bug_t *bug, void *user_da
                                        switch_core_session_t *session = NULL;
                                        switch_channel_t *channel = NULL;
 
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detected-Fax-Tone", "true");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detected-Fax-Tone", "true");
 
                                        session = switch_core_media_bug_get_session(bug);
                                        if (session) {
@@ -2425,7 +2425,7 @@ static switch_bool_t tone_detect_callback(switch_media_bug_t *bug, void *user_da
                                        if (switch_core_session_queue_event(cont->session, &event) != SWITCH_STATUS_SUCCESS) {
                                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(switch_core_media_bug_get_session(bug)), SWITCH_LOG_ERROR,
                                                                                  "Event queue failed!\n");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "delivery-failure", "true");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "delivery-failure", "true");
                                                switch_event_fire(&event);
                                        }
                                }
index 66da2d26dc6aecd6fa3a3f3e3e7ce3d526559741..249199c7d67b7e0c939e015c9f091e68b5a16b7d 100644 (file)
@@ -173,15 +173,15 @@ static switch_bool_t stress_callback(switch_media_bug_t *bug, void *user_data, s
                 switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(switch_core_media_bug_get_session(bug)), SWITCH_LOG_DEBUG, "Stress %0.2f\n", sth->stress);
 
                 if (switch_event_create(&event, SWITCH_EVENT_DETECTED_SPEECH) == SWITCH_STATUS_SUCCESS) {
-                    switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Speech-Type", "stress-level");
+                    switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Speech-Type", "stress-level");
                     switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Stress-Level", "%0.2f", sth->stress);
-                   switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(sth->session));
+                   switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(sth->session));
                     if (switch_event_dup(&dup, event) == SWITCH_STATUS_SUCCESS) {
                         switch_event_fire(&dup);
                     }
                     if (switch_core_session_queue_event(sth->session, &event) != SWITCH_STATUS_SUCCESS) {
                         switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(switch_core_media_bug_get_session(bug)), SWITCH_LOG_ERROR, "Event queue failed!\n");
-                        switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "delivery-failure", "true");
+                        switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "delivery-failure", "true");
                         switch_event_fire(&event);
                     }
                 }
index efbcd3f14ba75a27c713abc7db58ea181f640b34..909aa69e2ad5a9f54d849fd55ce7a30b50f2a3c3 100644 (file)
@@ -351,9 +351,9 @@ SWITCH_STANDARD_API(translate_function)
 
                        if (zstr(areacode)) {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "no default_areacode set, using default of 777\n");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "areacode", "777");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "areacode", "777");
                        } else {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "areacode", areacode);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "areacode", areacode);
                        }
                }
                translate_number(argv[0], argv[1], &translated, session, event, pool);
index c304cad8240b4c313c76fcd798ef2358b67842db..7021ce9fd9d606cec48745bfa497526ed536ebd3 100644 (file)
@@ -331,38 +331,38 @@ static void valet_send_presence(const char *lot_name, valet_lot_t *lot, valet_to
 
        if (count > 0) {
                if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", VALET_PROTO);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", lot_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", VALET_PROTO);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", lot_name);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", lot_name, domain_name);
 
 
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "force-status", "Active (%d caller%s)", count, count == 1 ? "" : "s");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "active");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", "active");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", lot_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "confirmed");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "presence-call-direction", "inbound");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", lot_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "confirmed");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "presence-call-direction", "inbound");
                        switch_event_fire(&event);
                }
        } else {
                if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", VALET_PROTO);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", lot_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", VALET_PROTO);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", lot_name);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", lot_name, domain_name);
 
 
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", "Empty");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "force-status", "Empty");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", lot_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "presence-call-direction", "inbound");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", lot_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "presence-call-direction", "inbound");
                        switch_event_fire(&event);
                }
        }
@@ -371,34 +371,34 @@ static void valet_send_presence(const char *lot_name, valet_lot_t *lot, valet_to
 
        if (in) {
                if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", VALET_PROTO);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", token->ext);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", VALET_PROTO);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", token->ext);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", token->ext, domain_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", token->bridged == 0 ? "Holding" : "Active");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "active");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "force-status", token->bridged == 0 ? "Holding" : "Active");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", "active");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", token->ext);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "confirmed");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "presence-call-direction", token->bridged == 0 ? "outbound" : "inbound");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", token->ext);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "confirmed");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "presence-call-direction", token->bridged == 0 ? "outbound" : "inbound");
                        switch_event_fire(&event);
                }
        } else {
                if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", VALET_PROTO);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", token->ext);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", VALET_PROTO);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", token->ext);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", token->ext, domain_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", "Empty");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "force-status", "Empty");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", token->ext);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "presence-call-direction", "inbound");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", token->ext);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "presence-call-direction", "inbound");
                        switch_event_fire(&event);
                }
        }
@@ -577,10 +577,10 @@ SWITCH_STANDARD_APP(valet_parking_function)
 
                                if (!zstr(token->uuid) && (b_session = switch_core_session_locate(token->uuid))) {
                                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, VALET_EVENT) == SWITCH_STATUS_SUCCESS) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Valet-Lot-Name", lot_name);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Valet-Extension", ext);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "bridge");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridge-To-UUID", switch_core_session_get_uuid(session));
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Valet-Lot-Name", lot_name);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Valet-Extension", ext);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "bridge");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridge-To-UUID", switch_core_session_get_uuid(session));
                                                switch_channel_event_set_data(switch_core_session_get_channel(b_session), event);
                                                switch_event_fire(&event);
                                                switch_core_session_rwunlock(b_session);
@@ -682,9 +682,9 @@ SWITCH_STANDARD_APP(valet_parking_function)
 
 
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, VALET_EVENT) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Valet-Lot-Name", lot_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Valet-Extension", ext);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "hold");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Valet-Lot-Name", lot_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Valet-Extension", ext);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "hold");
                        switch_channel_event_set_data(channel, event);
                        switch_event_fire(&event);
                }
@@ -747,9 +747,9 @@ SWITCH_STANDARD_APP(valet_parking_function)
 
 
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, VALET_EVENT) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Valet-Lot-Name", lot_name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Valet-Extension", ext);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "exit");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Valet-Lot-Name", lot_name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Valet-Extension", ext);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action", "exit");
                        switch_channel_event_set_data(channel, event);
                        switch_event_fire(&event);
                }
@@ -847,41 +847,41 @@ static void pres_event_handler(switch_event_t *event)
 
                if (count) {
                        if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", VALET_PROTO);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", lot_name);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", VALET_PROTO);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", lot_name);
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", lot_name, domain_name);
 
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "force-status", "Active (%d caller%s)", count, count == 1 ? "" : "s");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "active");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", "active");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", lot_name);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "confirmed");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "presence-call-direction", "inbound");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", lot_name);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "confirmed");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "presence-call-direction", "inbound");
                                if (call_id) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-id", call_id);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-id", call_id);
                                }
                                switch_event_fire(&event);
                        }
                        found++;
                } else {
                        if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", VALET_PROTO);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", VALET_PROTO);
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", lot_name, domain_name);
 
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", "Empty");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "force-status", "Empty");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", lot_name);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "presence-call-direction", "inbound");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", lot_name);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "presence-call-direction", "inbound");
                                if (call_id) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-id", call_id);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-id", call_id);
                                }
                                switch_event_fire(&event);
                        }
@@ -916,20 +916,20 @@ static void pres_event_handler(switch_event_t *event)
                                        found++;
 
                                        if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", VALET_PROTO);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", lot_name);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", VALET_PROTO);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", lot_name);
                                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", lot_name, domain_name);
 
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", token->bridged == 0 ? "Holding" : "Active");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "force-status", token->bridged == 0 ? "Holding" : "Active");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", lot_name);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "confirmed");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "presence-call-direction", token->bridged == 0 ? "outbound" : "inbound");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", lot_name);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "confirmed");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "presence-call-direction", token->bridged == 0 ? "outbound" : "inbound");
                                                if (call_id) {
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-id", call_id);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-id", call_id);
                                                }
                                                switch_event_fire(&event);
                                        }
@@ -943,21 +943,21 @@ static void pres_event_handler(switch_event_t *event)
 
 
        if (!found && switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", VALET_PROTO);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", lot_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", VALET_PROTO);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", lot_name);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", lot_name, domain_name);
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", "Empty");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "force-status", "Empty");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", lot_name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "presence-call-direction", "inbound");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", lot_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "presence-call-direction", "inbound");
                if (call_id) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-id", call_id);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-id", call_id);
                }
                switch_event_fire(&event);
        }
index a4a0917404206610f7f4f74f079372278b0a85ff..10794db33ab2ff258ece422ce82524e2d9d3ccf5 100644 (file)
@@ -315,11 +315,11 @@ static void find_beep(vmd_session_info_t *vmd_info, switch_frame_t *frame)
                                return;
                        }
 
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Beep-Status", "stop");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Beep-Status", "stop");
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Beep-Time", "%d", (int) vmd_info->timestamp / POINTS);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(vmd_info->session));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(vmd_info->session));
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Frequency", "%6.4lf", vmd_info->beep_freq);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-command", "vmd");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-command", "vmd");
 
                        if ((switch_event_dup(&event_copy, event)) != SWITCH_STATUS_SUCCESS) {
                                return;
index 6ece9f4f471ad021cc37ce66aaa76d2a8f71ec7e..71b57d6401179ef8d5daa9f6ac7cecb4ef17b04e 100644 (file)
@@ -739,10 +739,10 @@ static vm_profile_t *load_profile(const char *profile_name)
                /* Take care of the custom config structure */
                if ((x_email = switch_xml_child(x_profile, "email"))) {
                        if ((param = switch_xml_child(x_email, "body"))) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "email_body", param->txt);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "email_body", param->txt);
                        }
                        if ((param = switch_xml_child(x_email, "headers"))) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "email_headers", param->txt);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "email_headers", param->txt);
                        }
 
                        for (param = switch_xml_child(x_email, "param"); param; param = param->next) {
@@ -751,7 +751,7 @@ static vm_profile_t *load_profile(const char *profile_name)
 
                                if ((var = (char *) switch_xml_attr_soft(param, "name")) && (val = (char *) switch_xml_attr_soft(param, "value"))) {
                                        switch_snprintf(buf, 2048, "email_%s", var);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, buf, val);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, buf, val);
                                }
                        }
                }
@@ -1361,7 +1361,7 @@ static char *resolve_id(const char *myid, const char *domain_name, const char *a
        char *ret = (char *) myid;
 
        switch_event_create(&params, SWITCH_EVENT_GENERAL);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "action", action);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "action", action);
 
        if (switch_xml_locate_user_merged("id:number-alias", myid, domain_name, NULL, &xx_user, params) == SWITCH_STATUS_SUCCESS) {
                ret = strdup(switch_xml_attr(xx_user, "id"));
@@ -1873,7 +1873,7 @@ static switch_status_t listen_file(switch_core_session_t *session, vm_profile_t
                                                /* this isn't done?  it was in the other place
                                                 * switch_channel_event_set_data(channel, event);
                                                 */
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Message-Type", "forwarded-voicemail");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Message-Type", "forwarded-voicemail");
                                                switch_event_fire(&event);
                                        }
 
@@ -1934,8 +1934,8 @@ static void update_mwi(vm_profile_t *profile, const char *id, const char *domain
        if (total_new_messages || total_new_urgent_messages) {
                yn = "yes";
        }
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "MWI-Messages-Waiting", yn);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Update-Reason", update_reason);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "MWI-Messages-Waiting", yn);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Update-Reason", update_reason);
        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "MWI-Message-Account", "%s@%s", id, domain_name);
 
        if (profile->send_full_vm_header) {
@@ -1953,9 +1953,9 @@ static void update_mwi(vm_profile_t *profile, const char *id, const char *domain
        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Update MWI: Voice Message %d/%d\n", total_new_messages, total_saved_messages);
 
        switch_event_create_subclass(&message_event, SWITCH_EVENT_CUSTOM, VM_EVENT_MAINT);
-       switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "VM-Action", "mwi-update");
-       switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "VM-User", id);
-       switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "VM-Domain", domain_name);
+       switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "VM-Action", "mwi-update");
+       switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "VM-User", id);
+       switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "VM-Domain", domain_name);
        switch_event_add_header(message_event, SWITCH_STACK_BOTTOM, "VM-Total-New", "%d", total_new_messages);
        switch_event_add_header(message_event, SWITCH_STACK_BOTTOM, "VM-Total-Saved", "%d", total_saved_messages);
        switch_event_add_header(message_event, SWITCH_STACK_BOTTOM, "VM-Total-New-Urgent", "%d", total_new_urgent_messages);
@@ -2054,10 +2054,10 @@ static void voicemail_check_main(switch_core_session_t *session, vm_profile_t *p
 
 
                                switch_event_create_subclass(&params, SWITCH_EVENT_CUSTOM, VM_EVENT_MAINT);
-                               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-Action", "folder-summary");
-                               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-User", myid);
-                               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-Domain", domain_name);
-                               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-Folder", myfolder);
+                               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-Action", "folder-summary");
+                               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-User", myid);
+                               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-Domain", domain_name);
+                               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-Folder", myfolder);
                                switch_event_add_header(params, SWITCH_STACK_BOTTOM, "VM-Total-New-Messages", "%u", total_new_messages);
                                switch_event_add_header(params, SWITCH_STACK_BOTTOM, "VM-Total-Saved-Messages", "%u", total_saved_messages);
                                switch_event_add_header(params, SWITCH_STACK_BOTTOM, "VM-Total-New-Urgent-Messages", "%u", total_new_urgent_messages);
@@ -2254,13 +2254,13 @@ static void voicemail_check_main(switch_core_session_t *session, vm_profile_t *p
 
                                                switch_event_create_subclass(&params, SWITCH_EVENT_CUSTOM, VM_EVENT_MAINT);
                                                if (file_path == NULL) {
-                                                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-Action", "remove-greeting");
+                                                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-Action", "remove-greeting");
                                                } else {
-                                                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-Action", "change-greeting");
-                                                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-Greeting-Path", file_path);
+                                                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-Action", "change-greeting");
+                                                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-Greeting-Path", file_path);
                                                }
-                                               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-User", myid);
-                                               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-Domain", domain_name);
+                                               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-User", myid);
+                                               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-Domain", domain_name);
                                                switch_channel_event_set_data(channel, params);
                                                switch_event_fire(&params);
                                        }
@@ -2289,10 +2289,10 @@ static void voicemail_check_main(switch_core_session_t *session, vm_profile_t *p
                                                switch_safe_free(tmp_file_path);
 
                                                switch_event_create_subclass(&params, SWITCH_EVENT_CUSTOM, VM_EVENT_MAINT);
-                                               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-Action", "record-greeting");
-                                               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-Greeting-Path", file_path);
-                                               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-User", myid);
-                                               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-Domain", domain_name);
+                                               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-Action", "record-greeting");
+                                               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-Greeting-Path", file_path);
+                                               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-User", myid);
+                                               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-Domain", domain_name);
                                                switch_channel_event_set_data(channel, params);
                                                switch_event_fire(&params);
 
@@ -2314,10 +2314,10 @@ static void voicemail_check_main(switch_core_session_t *session, vm_profile_t *p
 
 
                                                switch_event_create_subclass(&params, SWITCH_EVENT_CUSTOM, VM_EVENT_MAINT);
-                                               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-Action", "change-password");
-                                               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-User-Password", buf);
-                                               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-User", myid);
-                                               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-Domain", domain_name);
+                                               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-Action", "change-password");
+                                               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-User-Password", buf);
+                                               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-User", myid);
+                                               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-Domain", domain_name);
                                                switch_channel_event_set_data(channel, params);
 
                                                if (zstr(buf) && !profile->allow_empty_password_auth) {
@@ -2365,10 +2365,10 @@ static void voicemail_check_main(switch_core_session_t *session, vm_profile_t *p
                                        switch_safe_free(sql);
 
                                        switch_event_create_subclass(&params, SWITCH_EVENT_CUSTOM, VM_EVENT_MAINT);
-                                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-Action", "record-name");
-                                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-Name-Path", file_path);
-                                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-User", myid);
-                                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "VM-Domain", domain_name);
+                                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-Action", "record-name");
+                                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-Name-Path", file_path);
+                                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-User", myid);
+                                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "VM-Domain", domain_name);
                                        switch_channel_event_set_data(channel, params);
                                        switch_event_fire(&params);
 
@@ -2455,9 +2455,9 @@ static void voicemail_check_main(switch_core_session_t *session, vm_profile_t *p
 
                                        switch_event_create(&params, SWITCH_EVENT_GENERAL);
                                        switch_assert(params);
-                                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "action", "voicemail-lookup");
-                                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "destination_number", caller_profile->destination_number);
-                                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "caller_id_number", caller_id_number);
+                                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "action", "voicemail-lookup");
+                                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "destination_number", caller_profile->destination_number);
+                                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "caller_id_number", caller_id_number);
 
                                        if (switch_xml_locate_user_merged("id:number-alias", myid, domain_name, switch_channel_get_variable(channel, "network_addr"),
                                                                                           &x_user, params) != SWITCH_STATUS_SUCCESS) {
@@ -2605,10 +2605,10 @@ static void voicemail_check_main(switch_core_session_t *session, vm_profile_t *p
                                }
 
                                switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, VM_EVENT_MAINT);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "VM-Action", "authentication");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "VM-Auth-Result", auth ? "success" : "fail");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "VM-User", myid);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "VM-Domain", domain_name);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "VM-Action", "authentication");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "VM-Auth-Result", auth ? "success" : "fail");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "VM-User", myid);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "VM-Domain", domain_name);
                                switch_channel_event_set_data(channel, event);
                                switch_event_fire(&event);
 
@@ -2894,15 +2894,15 @@ static switch_status_t deliver_vm(vm_profile_t *profile,
                switch_event_t *message_event;
 
                switch_event_create_subclass(&message_event, SWITCH_EVENT_CUSTOM, VM_EVENT_MAINT);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "VM-Action", "leave-message");
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "VM-User", myid);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "VM-Domain", domain_name);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "VM-Caller-ID-Name", caller_id_name);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "VM-Caller-ID-Number", caller_id_number);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "VM-File-Path", file_path);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "VM-Flags", read_flags);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "VM-Folder", myfolder);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "VM-UUID", use_uuid);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "VM-Action", "leave-message");
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "VM-User", myid);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "VM-Domain", domain_name);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "VM-Caller-ID-Name", caller_id_name);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "VM-Caller-ID-Number", caller_id_number);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "VM-File-Path", file_path);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "VM-Flags", read_flags);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "VM-Folder", myfolder);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "VM-UUID", use_uuid);
                switch_event_add_header(message_event, SWITCH_STACK_BOTTOM, "VM-Message-Len", "%u", message_len);
                switch_event_add_header(message_event, SWITCH_STACK_BOTTOM, "VM-Timestamp", "%lu", (unsigned long) switch_epoch_time_now(NULL));
                if (channel) {
@@ -2952,37 +2952,37 @@ static switch_status_t deliver_vm(vm_profile_t *profile,
                }
 
                formatted_cid_num = switch_format_number(caller_id_number);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_current_folder", myfolder);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_current_folder", myfolder);
                switch_snprintf(tmpvar, sizeof(tmpvar), "%d", total_new_messages);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_total_new_messages", tmpvar);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_total_new_messages", tmpvar);
                switch_snprintf(tmpvar, sizeof(tmpvar), "%d", total_saved_messages);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_total_saved_messages", tmpvar);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_total_saved_messages", tmpvar);
                switch_snprintf(tmpvar, sizeof(tmpvar), "%d", total_new_urgent_messages);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_urgent_new_messages", tmpvar);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_urgent_new_messages", tmpvar);
                switch_snprintf(tmpvar, sizeof(tmpvar), "%d", total_saved_urgent_messages);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_urgent_saved_messages", tmpvar);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_account", myid);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_domain", domain_name);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_caller_id_number", caller_id_number);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_formatted_caller_id_number", formatted_cid_num);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_caller_id_name", caller_id_name);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_file_path", file_path);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_read_flags", read_flags);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_time", date);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_uuid", use_uuid);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_urgent_saved_messages", tmpvar);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_account", myid);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_domain", domain_name);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_caller_id_number", caller_id_number);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_formatted_caller_id_number", formatted_cid_num);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_caller_id_name", caller_id_name);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_file_path", file_path);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_read_flags", read_flags);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_time", date);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_uuid", use_uuid);
 
                switch_safe_free(formatted_cid_num);
 
                switch_snprintf(tmpvar, sizeof(tmpvar), "%d", priority);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_priority", tmpvar);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_priority", tmpvar);
                if (vm_email) {
-                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_email", vm_email);
+                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_email", vm_email);
                }
                if (vm_email_from) {
-                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_email_from", vm_email_from);
+                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_email_from", vm_email_from);
                }
                if (vm_notify_email) {
-                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_notify_email", vm_notify_email);
+                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_notify_email", vm_notify_email);
                }
                l_duration = switch_time_make(message_len, 0);
                switch_core_measure_time(l_duration, &duration);
@@ -2990,7 +2990,7 @@ static switch_status_t deliver_vm(vm_profile_t *profile,
                duration.hr += duration.day * 24;
                switch_snprintf(duration_str, sizeof(duration_str), "%.2u:%.2u:%.2u", duration.hr, duration.min, duration.sec);
 
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_message_len", duration_str);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "voicemail_message_len", duration_str);
 
                if (!zstr(vm_email_from)) {
                        from = switch_core_strdup(pool, vm_email_from);
@@ -3023,7 +3023,7 @@ static switch_status_t deliver_vm(vm_profile_t *profile,
                        switch_event_dup(&event, params);
 
                        if (event) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Message-Type", "voicemail");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Message-Type", "voicemail");
                                switch_event_fire(&event);
                        }
 
@@ -3077,7 +3077,7 @@ static switch_status_t deliver_vm(vm_profile_t *profile,
                        switch_event_dup(&event, params);
 
                        if (event) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Message-Type", "voicemail-notify");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Message-Type", "voicemail-notify");
                                switch_event_fire(&event);
                        }
 
@@ -3248,20 +3248,20 @@ static switch_status_t voicemail_inject(const char *data, switch_core_session_t
                switch_assert(my_params);
 
                if (isgroup) {
-                       switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "group", user);
+                       switch_event_add_header_string_dup(my_params, SWITCH_STACK_BOTTOM, "group", user);
                } else {
                        if (isall) {
-                               switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "user", "_all_");
+                               switch_event_add_header_string_dup(my_params, SWITCH_STACK_BOTTOM, "user", "_all_");
                        } else {
-                               switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "user", user);
+                               switch_event_add_header_string_dup(my_params, SWITCH_STACK_BOTTOM, "user", user);
                        }
                }
 
                if (forwarded_by) {
-                       switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "Forwarded-By", forwarded_by);
+                       switch_event_add_header_string_dup(my_params, SWITCH_STACK_BOTTOM, "Forwarded-By", forwarded_by);
                }
-               switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "domain", domain);
-               switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "purpose", "publish-vm");
+               switch_event_add_header_string_dup(my_params, SWITCH_STACK_BOTTOM, "domain", domain);
+               switch_event_add_header_string_dup(my_params, SWITCH_STACK_BOTTOM, "purpose", "publish-vm");
 
                if (switch_xml_locate_domain(domain, my_params, &xml_root, &x_domain) != SWITCH_STATUS_SUCCESS) {
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Cannot locate domain %s\n", domain);
@@ -3417,7 +3417,7 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, vm_p
 
                switch_event_create(&locate_params, SWITCH_EVENT_REQUEST_PARAMS);
                switch_assert(locate_params);
-               switch_event_add_header_string(locate_params, SWITCH_STACK_BOTTOM, "action", "voicemail-lookup");
+               switch_event_add_header_string_dup(locate_params, SWITCH_STACK_BOTTOM, "action", "voicemail-lookup");
 
                if (switch_xml_locate_user_merged("id:number-alias", id, domain_name, switch_channel_get_variable(channel, "network_addr"),
                                                                                  &x_user, locate_params) == SWITCH_STATUS_SUCCESS) {
@@ -3962,8 +3962,8 @@ SWITCH_STANDARD_API(prefs_api_function)
                                if (total_new_messages || total_new_urgent_messages) {  \
                                        yn = "yes";                                                                                     \
                                }                                                                                                               \
-                               switch_event_add_header_string(new_event, SWITCH_STACK_BOTTOM, "MWI-Messages-Waiting", yn);     \
-                               switch_event_add_header_string(new_event, SWITCH_STACK_BOTTOM, "MWI-Message-Account", account); \
+                               switch_event_add_header_string_dup(new_event, SWITCH_STACK_BOTTOM, "MWI-Messages-Waiting", yn); \
+                               switch_event_add_header_string_dup(new_event, SWITCH_STACK_BOTTOM, "MWI-Message-Account", account); \
                                switch_event_add_header(new_event, SWITCH_STACK_BOTTOM, "MWI-Voice-Message", "%d/%d (%d/%d)", \
                                                                                +total_new_messages, total_saved_messages, total_new_urgent_messages, total_saved_urgent_messages); \
                        }                                                                                                                       \
@@ -4024,8 +4024,8 @@ static void actual_message_query_handler(switch_event_t *event)
 
        if (!new_event) {
                if (switch_event_create(&new_event, SWITCH_EVENT_MESSAGE_WAITING) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(new_event, SWITCH_STACK_BOTTOM, "MWI-Messages-Waiting", "no");
-                       switch_event_add_header_string(new_event, SWITCH_STACK_BOTTOM, "MWI-Message-Account", account);
+                       switch_event_add_header_string_dup(new_event, SWITCH_STACK_BOTTOM, "MWI-Messages-Waiting", "no");
+                       switch_event_add_header_string_dup(new_event, SWITCH_STACK_BOTTOM, "MWI-Message-Account", account);
                }
        }
 
@@ -4034,7 +4034,7 @@ static void actual_message_query_handler(switch_event_t *event)
 
                for (hp = event->headers; hp; hp = hp->next) {
                        if (!strncasecmp(hp->name, "vm-", 3)) {
-                               switch_event_add_header_string(new_event, SWITCH_STACK_BOTTOM, hp->name + 3, hp->value);
+                               switch_event_add_header_string_dup(new_event, SWITCH_STACK_BOTTOM, hp->name + 3, hp->value);
                        }
                }
 
@@ -6037,20 +6037,20 @@ SWITCH_STANDARD_API(vm_fsdb_msg_email_function)
                formatted_cid_num = switch_format_number(switch_event_get_header(cbt.my_params, "VM-Message-Caller-Number"));
 
                /* Legacy Mod_VoiceMail variable */
-               switch_event_add_header_string(cbt.my_params, SWITCH_STACK_BOTTOM, "Message-Type", "forwarded-voicemail");
+               switch_event_add_header_string_dup(cbt.my_params, SWITCH_STACK_BOTTOM, "Message-Type", "forwarded-voicemail");
                switch_event_add_header(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_total_new_messages", "%d", total_new_messages);
                switch_event_add_header(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_total_saved_messages", "%d", total_saved_messages);
                switch_event_add_header(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_urgent_new_messages", "%d", total_new_urgent_messages);
                switch_event_add_header(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_urgent_saved_messages", "%d", total_saved_urgent_messages);
-               switch_event_add_header_string(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_current_folder", switch_event_get_header(cbt.my_params, "VM-Message-Folder"));
-               switch_event_add_header_string(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_account", id);
-               switch_event_add_header_string(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_domain", domain);
-               switch_event_add_header_string(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_caller_id_number", switch_event_get_header(cbt.my_params, "VM-Message-Caller-Number"));
-               switch_event_add_header_string(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_formatted_caller_id_number", formatted_cid_num);
-               switch_event_add_header_string(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_caller_id_name", switch_event_get_header(cbt.my_params, "VM-Message-Caller-Name"));
-               switch_event_add_header_string(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_file_path", switch_event_get_header(cbt.my_params, "VM-Message-File-Path"));
-               switch_event_add_header_string(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_read_flags", switch_event_get_header(cbt.my_params, "VM-Message-Read-Flags"));
-               switch_event_add_header_string(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_time", date);
+               switch_event_add_header_string_dup(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_current_folder", switch_event_get_header(cbt.my_params, "VM-Message-Folder"));
+               switch_event_add_header_string_dup(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_account", id);
+               switch_event_add_header_string_dup(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_domain", domain);
+               switch_event_add_header_string_dup(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_caller_id_number", switch_event_get_header(cbt.my_params, "VM-Message-Caller-Number"));
+               switch_event_add_header_string_dup(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_formatted_caller_id_number", formatted_cid_num);
+               switch_event_add_header_string_dup(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_caller_id_name", switch_event_get_header(cbt.my_params, "VM-Message-Caller-Name"));
+               switch_event_add_header_string_dup(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_file_path", switch_event_get_header(cbt.my_params, "VM-Message-File-Path"));
+               switch_event_add_header_string_dup(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_read_flags", switch_event_get_header(cbt.my_params, "VM-Message-Read-Flags"));
+               switch_event_add_header_string_dup(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_time", date);
                switch_event_add_header(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_priority", "%d", priority);
 
 
@@ -6064,8 +6064,8 @@ SWITCH_STANDARD_API(vm_fsdb_msg_email_function)
 
                switch_snprintf(duration_str, sizeof(duration_str), "%.2u:%.2u:%.2u", duration.hr, duration.min, duration.sec);
 
-               switch_event_add_header_string(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_message_len", duration_str);
-               switch_event_add_header_string(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_email", email);
+               switch_event_add_header_string_dup(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_message_len", duration_str);
+               switch_event_add_header_string_dup(cbt.my_params, SWITCH_STACK_BOTTOM, "voicemail_email", email);
 
                if (zstr(profile->email_from)) {
                        from = switch_core_sprintf(pool, "%s@%s", id, domain);
index 7ea72cbcaec1d1ac45d872b1d6a07df43534d993..fcc6fd02fffc24c8b0659efda252a65530279fc4 100644 (file)
@@ -155,7 +155,7 @@ void append_event_message(switch_core_session_t *session, vmivr_profile_t *profi
        switch_event_add_header(phrase_params, SWITCH_STACK_BOTTOM, "VM-Message-Type", "%s", "new");
        switch_event_add_header(phrase_params, SWITCH_STACK_BOTTOM, "VM-Message-Number", "%"SWITCH_SIZE_T_FMT, current_msg);
 
-       switch_event_add_header_string(phrase_params, SWITCH_STACK_BOTTOM, "VM-Message-Private-Local-Copy", "False");
+       switch_event_add_header_string_dup(phrase_params, SWITCH_STACK_BOTTOM, "VM-Message-Private-Local-Copy", "False");
 
        switch_safe_free(apicmd);
 }
index ecb7c53eb389656d7dd585489491f8778c66525b..a53d6737f895388e0e11dcb117704605ec51d661 100644 (file)
@@ -254,8 +254,8 @@ static switch_status_t channel_on_init(switch_core_session_t *session)
                                snprintf(buf, sizeof(buf), "BRRRRING! BRRRRING! call %s\n", tech_pvt->call_id);
 
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_RINGING) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_info", buf);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call_id", tech_pvt->call_id);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_info", buf);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call_id", tech_pvt->call_id);
                                        switch_channel_event_set_data(channel, event);
                                        switch_event_fire(&event);
                                }
index 20697adda4f3e79bc73786ca62bf9910525cecba..3e75261cb5ba5e97831a73c704cf2ddb1f012d10 100644 (file)
@@ -1842,12 +1842,12 @@ static switch_status_t compat_chat_send(const char *proto, const char *from, con
        switch_status_t status;
 
        if (switch_event_create(&message_event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "proto", proto);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "from", from);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "to", to);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "subject", subject);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "type", type);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "hint", hint);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "proto", proto);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "from", from);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "to", to);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "subject", subject);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "type", type);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "hint", hint);
 
                if (body) {
                        switch_event_add_body(message_event, "%s", body);
@@ -2836,67 +2836,67 @@ int dump_event_full(private_t *tech_pvt, int is_alarm, int alarm_code, const cha
        if (status == SWITCH_STATUS_SUCCESS) {
                if (is_alarm) {
                        snprintf(value, sizeof(value) - 1, "%d", alarm_code);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alarm_code", value);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alarm_message", alarm_message);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alarm_code", value);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alarm_message", alarm_message);
                }
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "interface_name", tech_pvt->name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "interface_id", tech_pvt->id);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "interface_name", tech_pvt->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "interface_id", tech_pvt->id);
                snprintf(value, sizeof(value) - 1, "%d", tech_pvt->active);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "active", value);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "active", value);
                if (!tech_pvt->network_creg_not_supported) {
                        snprintf(value, sizeof(value) - 1, "%d", tech_pvt->not_registered);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "not_registered", value);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "not_registered", value);
                        snprintf(value, sizeof(value) - 1, "%d", tech_pvt->home_network_registered);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "home_network_registered", value);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "home_network_registered", value);
                        snprintf(value, sizeof(value) - 1, "%d", tech_pvt->roaming_registered);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "roaming_registered", value);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "roaming_registered", value);
                } else {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "not_registered", "N/A");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "home_network_registered", "N/A");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "roaming_registered", "N/A");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "not_registered", "N/A");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "home_network_registered", "N/A");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "roaming_registered", "N/A");
                }
                snprintf(value, sizeof(value) - 1, "%d", tech_pvt->got_signal);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "got_signal", value);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "got_signal", value);
                snprintf(value, sizeof(value) - 1, "%d", tech_pvt->signal_strength);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "signal_strength", value);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "signal_strength", value);
                snprintf(value, sizeof(value) - 1, "%d", tech_pvt->running);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "running", value);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "subscriber_number", tech_pvt->subscriber_number);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "device_manufacturer", tech_pvt->device_mfg);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "device_model", tech_pvt->device_model);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "device_firmware", tech_pvt->device_firmware);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "operator", tech_pvt->operator_name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "imei", tech_pvt->imei);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "imsi", tech_pvt->imsi);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "running", value);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "subscriber_number", tech_pvt->subscriber_number);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "device_manufacturer", tech_pvt->device_mfg);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "device_model", tech_pvt->device_model);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "device_firmware", tech_pvt->device_firmware);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "operator", tech_pvt->operator_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "imei", tech_pvt->imei);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "imsi", tech_pvt->imsi);
                snprintf(value, sizeof(value) - 1, "%d", tech_pvt->controldev_dead);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "controldev_dead", value);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "controldevice_name", tech_pvt->controldevice_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "controldev_dead", value);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "controldevice_name", tech_pvt->controldevice_name);
                snprintf(value, sizeof(value) - 1, "%d", tech_pvt->no_sound);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "no_sound", value);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "no_sound", value);
                snprintf(value, sizeof(value) - 1, "%f", tech_pvt->playback_boost);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "playback_boost", value);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "playback_boost", value);
                snprintf(value, sizeof(value) - 1, "%f", tech_pvt->capture_boost);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "capture_boost", value);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "dialplan", tech_pvt->dialplan);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "context", tech_pvt->context);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "destination", tech_pvt->destination);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "capture_boost", value);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "dialplan", tech_pvt->dialplan);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "context", tech_pvt->context);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "destination", tech_pvt->destination);
                snprintf(value, sizeof(value) - 1, "%lu", tech_pvt->ib_calls);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "ib_calls", value);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "ib_calls", value);
                snprintf(value, sizeof(value) - 1, "%lu", tech_pvt->ob_calls);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "ob_calls", value);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "ob_calls", value);
                snprintf(value, sizeof(value) - 1, "%lu", tech_pvt->ib_failed_calls);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "ib_failed_calls", value);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "ib_failed_calls", value);
                snprintf(value, sizeof(value) - 1, "%lu", tech_pvt->ob_failed_calls);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "ob_failed_calls", value);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "ob_failed_calls", value);
                snprintf(value, sizeof(value) - 1, "%d", tech_pvt->interface_state);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "interface_state", value);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "interface_state", value);
                snprintf(value, sizeof(value) - 1, "%d", tech_pvt->phone_callflow);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "phone_callflow", value);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "session_uuid_str", tech_pvt->session_uuid_str);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "phone_callflow", value);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "session_uuid_str", tech_pvt->session_uuid_str);
                if (strlen(tech_pvt->session_uuid_str)) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "during-call", "true");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "during-call", "true");
                } else {                                //no session
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "during-call", "false");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "during-call", "false");
                }
                if (channel) {
                        switch_channel_event_set_data(channel, event);
@@ -2932,20 +2932,20 @@ int sms_incoming(private_t *tech_pvt)
        NOTICA("received SMS on interface %s: DATE=%s, SENDER=%s, BODY=|%s|\n", GSMOPEN_P_LOG, tech_pvt->name, tech_pvt->sms_date, tech_pvt->sms_sender,
                                        tech_pvt->sms_body);
        if (switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", GSMOPEN_CHAT_PROTO);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", tech_pvt->name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", tech_pvt->sms_sender);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "date", tech_pvt->sms_date);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "userdataheader", tech_pvt->sms_userdataheader);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "datacodingscheme", tech_pvt->sms_datacodingscheme);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "servicecentreaddress", tech_pvt->sms_servicecentreaddress);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", GSMOPEN_CHAT_PROTO);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", tech_pvt->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from", tech_pvt->sms_sender);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "date", tech_pvt->sms_date);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "userdataheader", tech_pvt->sms_userdataheader);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "datacodingscheme", tech_pvt->sms_datacodingscheme);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "servicecentreaddress", tech_pvt->sms_servicecentreaddress);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "messagetype", "%d", tech_pvt->sms_messagetype);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "subject", "SIMPLE MESSAGE");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to", tech_pvt->name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "hint", tech_pvt->name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to_proto", GSMOPEN_CHAT_PROTO);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from_user", tech_pvt->sms_sender);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to_user", tech_pvt->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "subject", "SIMPLE MESSAGE");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "to", tech_pvt->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "hint", tech_pvt->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "to_proto", GSMOPEN_CHAT_PROTO);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from_user", tech_pvt->sms_sender);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "to_user", tech_pvt->name);
                switch_event_add_body(event, "%s\n", tech_pvt->sms_body);
                switch_core_chat_send("GLOBAL", event); /* mod_sms */
        } else {
@@ -2972,21 +2972,21 @@ int ussd_incoming(private_t *tech_pvt)
 
 /* mod_sms begin */
        if (switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", GSMOPEN_CHAT_PROTO);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", tech_pvt->name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", "ussd");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", GSMOPEN_CHAT_PROTO);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", tech_pvt->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from", "ussd");
                //switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "date", tech_pvt->sms_date);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "datacodingscheme", tech_pvt->ussd_dcs);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "datacodingscheme", tech_pvt->ussd_dcs);
                //switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "servicecentreaddress", tech_pvt->sms_servicecentreaddress);
                //switch_event_add_header(event, SWITCH_STACK_BOTTOM, "messagetype", "%d", tech_pvt->sms_messagetype);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "subject", "USSD MESSAGE");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to", tech_pvt->name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "hint", tech_pvt->name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to_proto", GSMOPEN_CHAT_PROTO);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from_user", "ussd");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "subject", "USSD MESSAGE");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "to", tech_pvt->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "hint", tech_pvt->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "to_proto", GSMOPEN_CHAT_PROTO);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from_user", "ussd");
                //switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from_host", "from_host");
                //switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from_full", "from_full");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to_user", tech_pvt->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "to_user", tech_pvt->name);
                //switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to_host", "to_host");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "ussd_status", "%d", tech_pvt->ussd_status);
                switch_event_add_body(event, "%s\n", tech_pvt->ussd_message);
index c6dc7fc9e91f9032275fc04f1ab8f7899261e823..04f03b0194648d68853bbf345f07cc64c7d09bc5 100644 (file)
@@ -477,7 +477,7 @@ switch_status_t FSH323EndPoint::ReadConfig(int reload)
        switch_event_t *params = NULL;
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
        switch_assert(params);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "profile", switch_str_nil(""));
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "profile", switch_str_nil(""));
        switch_xml_t cfg;
        switch_xml_t xml = switch_xml_open_cfg(cf, &cfg, params);
 
index 456936562a23e0e2e0a525c92c09456cc52a766c..7b224228a8211d8128aab838a6d3c5ec4cfb7312 100644 (file)
@@ -489,9 +489,9 @@ static switch_status_t channel_on_execute(switch_core_session_t *session)
                                                          switch_channel_get_name(other_channel));
 
                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, "loopback::bowout") == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Resigning-UUID", switch_channel_get_uuid(channel));
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Resigning-Peer-UUID", switch_channel_get_uuid(tech_pvt->other_channel));
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Acquired-UUID", switch_channel_get_uuid(other_channel));
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Resigning-UUID", switch_channel_get_uuid(channel));
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Resigning-Peer-UUID", switch_channel_get_uuid(tech_pvt->other_channel));
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Acquired-UUID", switch_channel_get_uuid(other_channel));
                                switch_event_fire(&event);
                        }
 
@@ -922,19 +922,19 @@ static switch_status_t channel_write_frame(switch_core_session_t *session, switc
                                                switch_event_t *event = NULL;
                                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, "loopback::direct") == SWITCH_STATUS_SUCCESS) {
                                                        switch_channel_event_set_data(tech_pvt->channel, event);
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Resigning-UUID", switch_channel_get_uuid(tech_pvt->channel));
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Resigning-Peer-UUID", switch_channel_get_uuid(tech_pvt->other_channel));
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Connecting-Leg-A-UUID", switch_channel_get_uuid(ch_a));
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Connecting-Leg-B-UUID", switch_channel_get_uuid(ch_b));
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Resigning-UUID", switch_channel_get_uuid(tech_pvt->channel));
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Resigning-Peer-UUID", switch_channel_get_uuid(tech_pvt->other_channel));
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Connecting-Leg-A-UUID", switch_channel_get_uuid(ch_a));
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Connecting-Leg-B-UUID", switch_channel_get_uuid(ch_b));
                                                        switch_event_fire(&event);
                                                }
 
                                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, "loopback::direct") == SWITCH_STATUS_SUCCESS) {
                                                        switch_channel_event_set_data(tech_pvt->other_channel, event);
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Resigning-UUID", switch_channel_get_uuid(tech_pvt->other_channel));
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Resigning-Peer-UUID", switch_channel_get_uuid(tech_pvt->channel));
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Connecting-Leg-A-UUID", switch_channel_get_uuid(ch_b));
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Connecting-Leg-B-UUID", switch_channel_get_uuid(ch_a));
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Resigning-UUID", switch_channel_get_uuid(tech_pvt->other_channel));
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Resigning-Peer-UUID", switch_channel_get_uuid(tech_pvt->channel));
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Connecting-Leg-A-UUID", switch_channel_get_uuid(ch_b));
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Connecting-Leg-B-UUID", switch_channel_get_uuid(ch_a));
                                                        switch_event_fire(&event);
                                                }
                                        }
@@ -1209,13 +1209,13 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
                                switch_channel_set_variable(channel, "loopback_app", app);
 
                                if (clone) {
-                                       switch_event_add_header_string(clone, SWITCH_STACK_BOTTOM, "loopback_app", app);
+                                       switch_event_add_header_string_dup(clone, SWITCH_STACK_BOTTOM, "loopback_app", app);
                                }
 
                                if (arg) {
                                        switch_channel_set_variable(channel, "loopback_app_arg", arg);
                                        if (clone) {
-                                               switch_event_add_header_string(clone, SWITCH_STACK_BOTTOM, "loopback_app_arg", arg);
+                                               switch_event_add_header_string_dup(clone, SWITCH_STACK_BOTTOM, "loopback_app_arg", arg);
                                        }
                                }
 
index fd414d76758710585ec141e4a8e3d0a3fefe311b..f6752fd638b117d1de348245e58645e4218ab0a6 100644 (file)
@@ -349,7 +349,7 @@ switch_status_t FSManager::ReadConfig(int reload)
     switch_event_t *request_params = NULL;
     switch_event_create(&request_params, SWITCH_EVENT_REQUEST_PARAMS);
     switch_assert(request_params);
-    switch_event_add_header_string(request_params, SWITCH_STACK_BOTTOM, "profile", switch_str_nil(""));
+       switch_event_add_header_string_dup(request_params, SWITCH_STACK_BOTTOM, "profile", switch_str_nil(""));
 
     switch_xml_t cfg;
     switch_xml_t xml = switch_xml_open_cfg(ConfigFile, &cfg, request_params);
index 62eba524d3b43463a1079aac5ce9f107aa1144fb..497d4e2827c7d58cddbe9cc67bf3eb7eee48cf78 100644 (file)
@@ -383,8 +383,8 @@ static switch_status_t channel_on_routing(switch_core_session_t *session)
                                switch_snprintf(buf, sizeof(buf), "BRRRRING! BRRRRING! call %s\n", tech_pvt->call_id);
 
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_RINGING) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_info", buf);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call_id", tech_pvt->call_id); /* left behind for backwards compatability */
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_info", buf);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call_id", tech_pvt->call_id); /* left behind for backwards compatability */
                                        switch_channel_set_variable(channel, SWITCH_PA_CALL_ID_VARIABLE, tech_pvt->call_id);
                                        switch_channel_event_set_data(channel, event);
                                        switch_event_fire(&event);
@@ -2370,7 +2370,7 @@ static int create_shared_audio_stream(shared_audio_stream_t *shstream)
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't open audio device (indev = %d, outdev = %d, error = %s)\n",
                                inputParameters.device, outputParameters.device, Pa_GetErrorText(err));
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_ERROR_AUDIO_DEV) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Reason", Pa_GetErrorText(err));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Reason", Pa_GetErrorText(err));
                        switch_event_fire(&event);
                }
                return -1;
@@ -2442,7 +2442,7 @@ static audio_stream_t *create_audio_stream(int indev, int outdev)
                switch_safe_free(stream);
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't open audio device\n");
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_ERROR_AUDIO_DEV) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Reason", Pa_GetErrorText(err));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Reason", Pa_GetErrorText(err));
                        switch_event_fire(&event);
                }
                return NULL;
@@ -3037,8 +3037,8 @@ static switch_status_t place_call(char **argv, int argc, switch_stream_handle_t
                                        char buf[512];
                                        switch_channel_event_set_data(channel, event);
                                        switch_snprintf(buf, sizeof(buf), "Thread error!.\n");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "error", buf);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fail", "true");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "error", buf);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fail", "true");
                                        switch_event_fire(&event);
                                }
                        } else {
@@ -3047,7 +3047,7 @@ static switch_status_t place_call(char **argv, int argc, switch_stream_handle_t
                                stream->write_function(stream, "SUCCESS:%s:%s\n", tech_pvt->call_id, switch_core_session_get_uuid(tech_pvt->session));
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_MAKE_CALL) == SWITCH_STATUS_SUCCESS) {
                                        switch_channel_event_set_data(channel, event);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fail", "false");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fail", "false");
                                        switch_event_fire(&event);
                                }
                        }
@@ -3059,8 +3059,8 @@ static switch_status_t place_call(char **argv, int argc, switch_stream_handle_t
                                char buf[512];
                                switch_channel_event_set_data(channel, event);
                                switch_snprintf(buf, sizeof(buf), "Device fail.\n");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "error", buf);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "fail", "true");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "error", buf);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "fail", "true");
                                switch_event_fire(&event);
                        }
                }
index 585d91b552a6f11dc7643d154535cf4017f81939..c4db37794d0e01cb26186f4b18cc2bdf33dec3ae 100644 (file)
@@ -820,7 +820,7 @@ switch_status_t rtmp_receive_event(switch_core_session_t *session, switch_event_
        switch_assert(tech_pvt != NULL);
 
        /* Deliver the event as a custom message to the target rtmp session */
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Session", switch_core_session_get_uuid(session));
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Session", switch_core_session_get_uuid(session));
 
        rtmp_send_event(rsession, event);
 
@@ -867,15 +867,15 @@ void rtmp_session_rwunlock(rtmp_session_t *rsession)
 
 void rtmp_event_fill(rtmp_session_t *rsession, switch_event_t *event)
 {
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "RTMP-Session-ID", rsession->uuid);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "RTMP-Flash-Version", rsession->flashVer);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "RTMP-SWF-URL", rsession->swfUrl);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "RTMP-TC-URL", rsession->tcUrl);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "RTMP-Page-URL", rsession->pageUrl);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "RTMP-Profile", rsession->profile->name);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "RTMP-Session-ID", rsession->uuid);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "RTMP-Flash-Version", rsession->flashVer);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "RTMP-SWF-URL", rsession->swfUrl);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "RTMP-TC-URL", rsession->tcUrl);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "RTMP-Page-URL", rsession->pageUrl);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "RTMP-Profile", rsession->profile->name);
        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Network-Port", "%d", rsession->remote_port);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Network-IP", rsession->remote_address);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "RTMP-Profile", rsession->profile->name);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Network-IP", rsession->remote_address);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "RTMP-Profile", rsession->profile->name);
 }
 
 switch_status_t rtmp_session_request(rtmp_profile_t *profile, rtmp_session_t **newsession)
@@ -1302,9 +1302,9 @@ void rtmp_add_registration(rtmp_session_t *rsession, const char *auth, const cha
                reg->user = switch_core_strdup(rsession->pool, user);
                reg->domain = switch_core_strdup(rsession->pool, domain);
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "User", user);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Domain", domain);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Nickname", switch_str_nil(nickname));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "User", user);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Domain", domain);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Nickname", switch_str_nil(nickname));
                switch_event_fire(&event);
                switch_core_add_registration(user, domain, token, url, 0, rsession->remote_address, network_port_c, "tcp", "");
                free(dup);
@@ -1331,9 +1331,9 @@ static void rtmp_clear_reg_auth(rtmp_session_t *rsession, const char *auth, cons
 
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, RTMP_EVENT_UNREGISTER) == SWITCH_STATUS_SUCCESS) {
                                        rtmp_event_fill(rsession, event);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "User", reg->user);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Domain", reg->domain);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Nickname", switch_str_nil(reg->nickname));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "User", reg->user);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Domain", reg->domain);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Nickname", switch_str_nil(reg->nickname));
                                        switch_event_fire(&event);
                                }
                        }
@@ -1390,8 +1390,8 @@ switch_status_t rtmp_session_login(rtmp_session_t *rsession, const char *user, c
 
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, RTMP_EVENT_LOGIN) == SWITCH_STATUS_SUCCESS) {
                rtmp_event_fill(rsession, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "User", user);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Domain", domain);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "User", user);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Domain", domain);
                switch_event_fire(&event);
        }
 
@@ -1422,8 +1422,8 @@ switch_status_t rtmp_session_logout(rtmp_session_t *rsession, const char *user,
 
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, RTMP_EVENT_LOGOUT) == SWITCH_STATUS_SUCCESS) {
                rtmp_event_fill(rsession, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "User", user);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Domain", domain);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "User", user);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Domain", domain);
                switch_event_fire(&event);
        }
 
@@ -1464,7 +1464,7 @@ void rtmp_attach_private(rtmp_session_t *rsession, rtmp_private_t *tech_pvt)
 #endif
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, RTMP_EVENT_DETACH) == SWITCH_STATUS_SUCCESS) {
                        rtmp_event_fill(rsession, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Call-ID",
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Call-ID",
                                switch_core_session_get_uuid(rsession->tech_pvt->session));
                        switch_event_fire(&event);
                }
@@ -1496,7 +1496,7 @@ void rtmp_attach_private(rtmp_session_t *rsession, rtmp_private_t *tech_pvt)
 #endif
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, RTMP_EVENT_ATTACH) == SWITCH_STATUS_SUCCESS) {
                        rtmp_event_fill(rsession, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Call-ID", switch_core_session_get_uuid(tech_pvt->session));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Call-ID", switch_core_session_get_uuid(tech_pvt->session));
                        switch_event_fire(&event);
                }
        }
index 285bc81103f87635a467c542e5d5e2b17ba5cb6c..aa336f8180416bc5a6a55baf6da5b0077ebd6d8d 100644 (file)
@@ -218,7 +218,7 @@ switch_status_t rtmp_check_auth(rtmp_session_t *rsession, const char *user, cons
 
        switch_event_create(&locate_params, SWITCH_EVENT_GENERAL);
        switch_assert(locate_params);
-       switch_event_add_header_string(locate_params, SWITCH_STACK_BOTTOM, "source", "mod_rtmp");
+       switch_event_add_header_string_dup(locate_params, SWITCH_STACK_BOTTOM, "source", "mod_rtmp");
 
        /* Locate user */
        if (switch_xml_locate_user_merged("id", user, domain, NULL, &xml, locate_params) != SWITCH_STATUS_SUCCESS) {
@@ -313,7 +313,7 @@ switch_status_t amf_object_to_event(amf0_data *obj, switch_event_t **event)
                                if (!strcmp(name, "_body")) {
                                        switch_event_add_body(*event, "%s", value);
                                } else {
-                                       switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, name, value);
+                                       switch_event_add_header_string_dup(*event, SWITCH_STACK_BOTTOM, name, value);
                                }
                        }
                }
@@ -372,7 +372,7 @@ void rtmp_get_user_variables(switch_event_t **event, switch_core_session_t *sess
        if ((he = switch_channel_variable_first(channel))) {
                for (; he; he = he->next) {
                        if (!strncmp(he->name, RTMP_USER_VARIABLE_PREFIX, strlen(RTMP_USER_VARIABLE_PREFIX))) {
-                               switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, he->name, he->value);
+                               switch_event_add_header_string_dup(*event, SWITCH_STACK_BOTTOM, he->name, he->value);
                        }
                }
                switch_channel_variable_last(channel);
@@ -391,7 +391,7 @@ void rtmp_get_user_variables_event(switch_event_t **event, switch_event_t *var_e
        if ((he = var_event->headers)) {
                for (; he; he = he->next) {
                        if (!strncmp(he->name, RTMP_USER_VARIABLE_PREFIX, strlen(RTMP_USER_VARIABLE_PREFIX))) {
-                               switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, he->name, he->value);
+                               switch_event_add_header_string_dup(*event, SWITCH_STACK_BOTTOM, he->name, he->value);
                        }
                }
        }
@@ -445,7 +445,7 @@ void rtmp_send_incoming_call(switch_core_session_t *session, switch_event_t *var
 
        if (event) {
                if (tech_pvt->has_video) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "want_video", "true");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "want_video", "true");
                }
                amf_event_to_object(&obj, event);
                switch_event_destroy(&event);
index af7702a363c095d3d2f7e84650a91839dc2b1f26..bde0ad443b87f77d8a618a7b828054f07708f8a4 100644 (file)
@@ -1166,7 +1166,7 @@ switch_status_t skinny_handle_register(listener_t *listener, skinny_message_t *r
 
        /* Check directory */
        skinny_device_event(listener, &params, SWITCH_EVENT_REQUEST_PARAMS, SWITCH_EVENT_SUBCLASS_ANY);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "action", "skinny-auth");
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "action", "skinny-auth");
 
        /* clean up all traces before adding to database */
        skinny_lock_device_name(listener, request->data.reg.device_name);
@@ -1321,7 +1321,7 @@ switch_status_t skinny_handle_register(listener_t *listener, skinny_message_t *r
                                                switch_event_t *message_query_event = NULL;
                                                if (switch_event_create(&message_query_event, SWITCH_EVENT_MESSAGE_QUERY) == SWITCH_STATUS_SUCCESS) {
                                                        switch_event_add_header(message_query_event, SWITCH_STACK_BOTTOM, "Message-Account", "skinny:%s@%s", value, profile->domain);
-                                                       switch_event_add_header_string(message_query_event, SWITCH_STACK_BOTTOM, "VM-Skinny-Profile", profile->name);
+                                                       switch_event_add_header_string_dup(message_query_event, SWITCH_STACK_BOTTOM, "VM-Skinny-Profile", profile->name);
                                                        switch_event_fire(&message_query_event);
                                                }
                                        }
index e40f1e5deb4f5450cd0cc3f9d1fae99dfbc52340..a79988b736f062b7635102cf2b7e90dbb965c641 100644 (file)
@@ -646,8 +646,8 @@ switch_status_t sofia_on_hangup(switch_core_session_t *session)
        if (cause == SWITCH_CAUSE_WRONG_CALL_STATE) {
                switch_event_t *s_event;
                if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_WRONG_CALL_STATE) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "from_user", tech_pvt->from_user);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "network_ip", tech_pvt->mparams.remote_ip);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "from_user", tech_pvt->from_user);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "network_ip", tech_pvt->mparams.remote_ip);
                        switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "network_port", "%d", tech_pvt->mparams.remote_port);
                        switch_event_fire(&s_event);
                }
@@ -2097,17 +2097,17 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
 
                                                if (switch_event_create(&event, SWITCH_EVENT_CALL_UPDATE) == SWITCH_STATUS_SUCCESS) {
                                                        const char *uuid = switch_channel_get_partner_uuid(channel);
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Direction", "SEND");
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Direction", "SEND");
 
 
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Sent-Callee-ID-Name", name);
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Sent-Callee-ID-Number", number);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Sent-Callee-ID-Name", name);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Sent-Callee-ID-Number", number);
 
                                                        //switch_channel_set_profile_var(channel, "callee_id_name", name);
                                                        //switch_channel_set_profile_var(channel, "callee_id_number", number);
 
                                                        if (uuid) {
-                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridged-To", uuid);
+                                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridged-To", uuid);
                                                        }
                                                        switch_channel_event_set_data(channel, event);
                                                        switch_event_fire(&event);
@@ -4608,7 +4608,7 @@ SWITCH_STANDARD_API(sofia_function)
                        } else {
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM,
                                        MY_EVENT_RECOVERY_RECOVERED) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "recovered_calls", "0");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "recovered_calls", "0");
                                        switch_event_fire(&event);
                                }
 
index e89f5aef440126f1124d6a5a3cafb3cf17ec258a..6b723c38ce726476cc27b6ec6950763248df48c1 100644 (file)
@@ -241,7 +241,7 @@ switch_status_t sip_dig_function(_In_opt_z_ const char *cmd, _In_opt_ switch_cor
        }
 
        if (!strcasecmp(argv[i], "xml")) {
-               switch_event_add_header_string(stream->param_event, SWITCH_STACK_BOTTOM, "xml", "true");
+               switch_event_add_header_string_dup(stream->param_event, SWITCH_STACK_BOTTOM, "xml", "true");
                i++;
                xml++;
        }
index 6f73823b860b0db1bdcd5546e5d9e1fccb0659cc..a985c9e366e44413f37970c1b7ab1a09ba2ad4d2 100644 (file)
@@ -628,15 +628,15 @@ void sofia_handle_sip_i_notify(switch_core_session_t *session, int status,
        if (sip->sip_content_type &&
                sip->sip_content_type->c_type && sip->sip_payload && sip->sip_payload->pl_data && !strcasecmp(sip->sip_event->o_type, "refer")) {
                if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_NOTIFY_REFER) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "content-type", sip->sip_content_type->c_type);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "content-type", sip->sip_content_type->c_type);
                        switch_event_add_body(s_event, "%s", sip->sip_payload->pl_data);
                }
        }
 
        /* add common headers for the NOTIFY to the switch_event and fire if it exists */
        if (s_event != NULL) {
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "event-package", sip->sip_event->o_type);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "event-id", sip->sip_event->o_id);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "event-package", sip->sip_event->o_type);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "event-id", sip->sip_event->o_id);
 
                if (sip->sip_contact) {
                        switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "contact", "%s@%s",
@@ -644,27 +644,27 @@ void sofia_handle_sip_i_notify(switch_core_session_t *session, int status,
                }
 
                switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "from", "%s@%s", sip->sip_from->a_url->url_user, sip->sip_from->a_url->url_host);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "from-tag", sip->sip_from->a_tag);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "from-tag", sip->sip_from->a_tag);
                switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "to", "%s@%s", sip->sip_to->a_url->url_user, sip->sip_to->a_url->url_host);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "to-tag", sip->sip_to->a_tag);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "to-tag", sip->sip_to->a_tag);
 
                if (sip->sip_call_id && sip->sip_call_id->i_id) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "call-id", sip->sip_call_id->i_id);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "call-id", sip->sip_call_id->i_id);
                }
                if (sip->sip_subscription_state && sip->sip_subscription_state->ss_substate) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "subscription-substate", sip->sip_subscription_state->ss_substate);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "subscription-substate", sip->sip_subscription_state->ss_substate);
                }
                if (sip->sip_subscription_state && sip->sip_subscription_state->ss_reason) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "subscription-reason", sip->sip_subscription_state->ss_reason);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "subscription-reason", sip->sip_subscription_state->ss_reason);
                }
                if (sip->sip_subscription_state && sip->sip_subscription_state->ss_retry_after) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "subscription-retry-after", sip->sip_subscription_state->ss_retry_after);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "subscription-retry-after", sip->sip_subscription_state->ss_retry_after);
                }
                if (sip->sip_subscription_state && sip->sip_subscription_state->ss_expires) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "subscription-expires", sip->sip_subscription_state->ss_expires);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "subscription-expires", sip->sip_subscription_state->ss_expires);
                }
                if (session) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "UniqueID", switch_core_session_get_uuid(session));
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "UniqueID", switch_core_session_get_uuid(session));
                }
                switch_event_fire(&s_event);
        }
@@ -778,15 +778,15 @@ void sofia_handle_sip_i_notify(switch_core_session_t *session, int status,
 
        /* dispatch freeswitch event */
        if (switch_event_create(&s_event, SWITCH_EVENT_NOTIFY_IN) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "event", sip->sip_event->o_type);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "pl_data", sip->sip_payload ? sip->sip_payload->pl_data : "");
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "event", sip->sip_event->o_type);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "pl_data", sip->sip_payload ? sip->sip_payload->pl_data : "");
                if ( sip->sip_content_type != NULL )
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "sip_content_type", sip->sip_content_type->c_type);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "sip_content_type", sip->sip_content_type->c_type);
                switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "port", "%d", gateway->profile->sip_port);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "module_name", "mod_sofia");
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile_name", gateway->profile->name);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile_uri", gateway->profile->url);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "gateway_name", gateway->name);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "module_name", "mod_sofia");
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile_name", gateway->profile->name);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile_uri", gateway->profile->url);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "gateway_name", gateway->name);
                if ( sip->sip_call_info != NULL ) {
                        sip_call_info_t *call_info = sip->sip_call_info;
                        char *nua_hold = sip_header_as_string(nua_handle_home(nh), (void *) call_info);
@@ -809,7 +809,7 @@ void sofia_handle_sip_i_notify(switch_core_session_t *session, int status,
                                su_free(nua_handle_home(nh), tmp);
                                cur_len = cur_len + tmp_len + 2;
                        }
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Call-Info", hold);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "Call-Info", hold);
                        switch_safe_free(hold);
                }
                switch_event_fire(&s_event);
@@ -860,7 +860,7 @@ void sofia_handle_sip_i_notify(switch_core_session_t *session, int status,
                                                                                  "Forwarding unsolicited MWI ( %s : %s@%s )\n",
                                                                                  mwi_stat, sip->sip_to->a_url->url_user, sip->sip_to->a_url->url_host );
                                                if (switch_event_create(&s_event, SWITCH_EVENT_MESSAGE_WAITING) == SWITCH_STATUS_SUCCESS) {
-                                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "MWI-Messages-Waiting", mwi_stat );
+                                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "MWI-Messages-Waiting", mwi_stat );
                                                        switch_event_add_header(s_event, SWITCH_STACK_BOTTOM,
                                                                                                        "MWI-Message-Account", "%s@%s", sip->sip_to->a_url->url_user, sip->sip_to->a_url->url_host );
                                                        switch_event_fire(&s_event);
@@ -1357,9 +1357,9 @@ void sofia_update_callee_id(switch_core_session_t *session, sofia_profile_t *pro
 
                if (switch_event_create(&event, SWITCH_EVENT_CALL_UPDATE) == SWITCH_STATUS_SUCCESS) {
                        const char *uuid = switch_channel_get_partner_uuid(channel);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Direction", "RECV");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Direction", "RECV");
                        if (uuid) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridged-To", uuid);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridged-To", uuid);
                        }
                        switch_channel_event_set_data(channel, event);
                        switch_event_fire(&event);
@@ -1420,9 +1420,9 @@ static void notify_watched_header(switch_core_session_t *session, const char *ms
        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Found known watched header in message '%s', %s: %s\n", msgline, hdrname, hdrval);
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_NOTIFY_WATCHED_HEADER) == SWITCH_STATUS_SUCCESS) {
                switch_channel_t *channel = switch_core_session_get_channel(session);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "SIP-Message", msgline);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Header-Name", hdrname);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Header-Value", hdrval);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "SIP-Message", msgline);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Header-Name", hdrname);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Header-Value", hdrval);
                switch_channel_event_set_data(channel, event);
                switch_event_fire(&event);
        } else {
@@ -1938,28 +1938,28 @@ static void our_sofia_event_callback(nua_event_t event,
                        }
 
                        if (switch_event_create(&event, SWITCH_EVENT_CALL_SETUP_REQ) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Requesting-Component", "mod_sofia");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Target-Component", req_user);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Target-Domain", req_host);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Request-Action", action);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Requesting-Component", "mod_sofia");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Target-Component", req_user);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Target-Domain", req_host);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Request-Action", action);
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Request-Target", "sofia/%s/%s", profile->name, refer_to);
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Request-Target-URI", "%s", refer_to);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Request-Target-Extension", ref_to_user);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Request-Target-Domain", ref_to_host);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Request-Target-Extension", ref_to_user);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Request-Target-Domain", ref_to_host);
                                if (switch_true(full_url)) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "full_url", "true");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "full_url", "true");
                                }
 
                                if (sip->sip_call_id && sip->sip_call_id->i_id) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Request-Call-ID", sip->sip_call_id->i_id);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Request-Call-ID", sip->sip_call_id->i_id);
                                }
 
                                if (!zstr(referred_by)) {
                                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Request-Sender", "sofia/%s/%s", profile->name, referred_by);
                                }
 
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "var_origination_caller_id_number", ref_by_user);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "var_origination_caller_id_name", ref_by_user);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "var_origination_caller_id_number", ref_by_user);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "var_origination_caller_id_name", ref_by_user);
                                switch_event_fire(&event);
                        }
 
@@ -2064,26 +2064,26 @@ static void our_sofia_event_callback(nua_event_t event,
 
 
                                if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", profile->url);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "user-agent",
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", profile->url);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "user-agent",
                                                                                                   (sip && sip->sip_user_agent) ? sip->sip_user_agent->g_string : "unknown");
                                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", sofia_private->user, sofia_private->realm);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "status", "Unregistered");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "presence-source", "register");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "status", "Unregistered");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "presence-source", "register");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
                                        switch_event_fire(&event);
                                }
 
 
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_UNREGISTER) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from-user", sofia_private->user);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from-host", sofia_private->realm);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-id", sofia_private->call_id);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "reason", "socket-disconnection");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from-user", sofia_private->user);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from-host", sofia_private->realm);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-id", sofia_private->call_id);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "reason", "socket-disconnection");
                                        switch_event_fire(&event);
                                }
 
@@ -2660,33 +2660,33 @@ void event_handler(switch_event_t *event)
        if (!strcasecmp(class, "PRESENCE_IN")) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "\nGot Presence IN event via MultiCast\n");
                if (switch_event_create(&pevent, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "alt_event_type", switch_event_get_header_nil(event, "orig-alt_event_type"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "answer-state", switch_event_get_header_nil(event, "orig-answer-state"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "astate", switch_event_get_header_nil(event, "orig-astate"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "call-direction", switch_event_get_header_nil(event, "orig-call-direction"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "Caller-Callee-ID-Number", switch_event_get_header_nil(event, "Orig-Caller-Callee-ID-Number"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "Caller-Caller-ID-Name", switch_event_get_header_nil(event, "Orig-Caller-Caller-ID-Name"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "Caller-Caller-ID-Number", switch_event_get_header_nil(event, "Orig-Caller-Caller-ID-Number"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "Caller-Destination-Number", switch_event_get_header_nil(event, "Orig-Caller-Destination-Number"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "Caller-Direction", switch_event_get_header_nil(event, "Orig-Caller-Direction"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "Caller-Username", switch_event_get_header_nil(event, "Orig-Caller-Username"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "channel-state", switch_event_get_header_nil(event, "orig-channel-state"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "force-status", switch_event_get_header_nil(event, "orig-force-status"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "from", switch_event_get_header_nil(event, "orig-from"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "login", switch_event_get_header_nil(event, "orig-login"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "Other-Leg-Caller-ID-Name", switch_event_get_header_nil(event, "Orig-Other-Leg-Caller-ID-Name"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "Other-Leg-Caller-ID-Number", switch_event_get_header_nil(event, "Orig-Other-Leg-Caller-ID-Number"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "presence-call-direction", switch_event_get_header_nil(event, "orig-presence-call-direction"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "presence-call-info-state", switch_event_get_header_nil(event, "orig-presence-call-info-state"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "Presence-Privacy", switch_event_get_header_nil(event, "Orig-Presence-Privacy"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "proto", switch_event_get_header_nil(event, "orig-proto"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "register-source", switch_event_get_header_nil(event, "orig-register-source"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "resub", switch_event_get_header_nil(event, "orig-resub"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "rpid", switch_event_get_header_nil(event, "orig-rpid"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "status", switch_event_get_header_nil(event, "orig-status"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "Unique-ID", switch_event_get_header_nil(event, "Orig-Unique-ID"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "variable_sip_from_user", switch_event_get_header_nil(event, "Orig-variable_sip_from_user"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "variable_sip_to_user", switch_event_get_header_nil(event, "Orig-variable_sip_to_user"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "alt_event_type", switch_event_get_header_nil(event, "orig-alt_event_type"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "answer-state", switch_event_get_header_nil(event, "orig-answer-state"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "astate", switch_event_get_header_nil(event, "orig-astate"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "call-direction", switch_event_get_header_nil(event, "orig-call-direction"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "Caller-Callee-ID-Number", switch_event_get_header_nil(event, "Orig-Caller-Callee-ID-Number"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "Caller-Caller-ID-Name", switch_event_get_header_nil(event, "Orig-Caller-Caller-ID-Name"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "Caller-Caller-ID-Number", switch_event_get_header_nil(event, "Orig-Caller-Caller-ID-Number"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "Caller-Destination-Number", switch_event_get_header_nil(event, "Orig-Caller-Destination-Number"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "Caller-Direction", switch_event_get_header_nil(event, "Orig-Caller-Direction"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "Caller-Username", switch_event_get_header_nil(event, "Orig-Caller-Username"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "channel-state", switch_event_get_header_nil(event, "orig-channel-state"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "force-status", switch_event_get_header_nil(event, "orig-force-status"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "from", switch_event_get_header_nil(event, "orig-from"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "login", switch_event_get_header_nil(event, "orig-login"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "Other-Leg-Caller-ID-Name", switch_event_get_header_nil(event, "Orig-Other-Leg-Caller-ID-Name"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "Other-Leg-Caller-ID-Number", switch_event_get_header_nil(event, "Orig-Other-Leg-Caller-ID-Number"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "presence-call-direction", switch_event_get_header_nil(event, "orig-presence-call-direction"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "presence-call-info-state", switch_event_get_header_nil(event, "orig-presence-call-info-state"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "Presence-Privacy", switch_event_get_header_nil(event, "Orig-Presence-Privacy"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "proto", switch_event_get_header_nil(event, "orig-proto"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "register-source", switch_event_get_header_nil(event, "orig-register-source"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "resub", switch_event_get_header_nil(event, "orig-resub"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "rpid", switch_event_get_header_nil(event, "orig-rpid"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "status", switch_event_get_header_nil(event, "orig-status"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "Unique-ID", switch_event_get_header_nil(event, "Orig-Unique-ID"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "variable_sip_from_user", switch_event_get_header_nil(event, "Orig-variable_sip_from_user"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "variable_sip_to_user", switch_event_get_header_nil(event, "Orig-variable_sip_to_user"));
 
                        /* we cannot use switch_event_fire, or otherwise we'll start an endless loop */
                        sofia_presence_event_handler(pevent);
@@ -2698,9 +2698,9 @@ void event_handler(switch_event_t *event)
        } else if (!strcasecmp(class, "MESSAGE_WAITING")) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "\nGot MWI event via MultiCast\n");
                if (switch_event_create(&pevent, SWITCH_EVENT_MESSAGE_WAITING) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "MWI-Messages-Waiting", switch_event_get_header_nil(event, "orig-MWI-Messages-Waiting"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "MWI-Message-Account", switch_event_get_header_nil(event, "orig-MWI-Message-Account"));
-                       switch_event_add_header_string(pevent, SWITCH_STACK_BOTTOM, "MWI-Voice-Message", switch_event_get_header_nil(event, "orig-MWI-Voice-Message"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "MWI-Messages-Waiting", switch_event_get_header_nil(event, "orig-MWI-Messages-Waiting"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "MWI-Message-Account", switch_event_get_header_nil(event, "orig-MWI-Message-Account"));
+                       switch_event_add_header_string_dup(pevent, SWITCH_STACK_BOTTOM, "MWI-Voice-Message", switch_event_get_header_nil(event, "orig-MWI-Voice-Message"));
                        /* we cannot use switch_event_fire, or otherwise we'll start an endless loop */
                        sofia_presence_event_handler(pevent);
                        return;
@@ -2916,13 +2916,13 @@ static void sofia_perform_profile_start_failure(sofia_profile_t *profile, char *
        }
 
        if ((switch_event_create(&s_event, SWITCH_EVENT_FAILURE) == SWITCH_STATUS_SUCCESS)) {
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "module_name", "mod_sofia");
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile_name", profile_name);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "module_name", "mod_sofia");
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile_name", profile_name);
                if (profile) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile_uri", profile->url);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile_uri", profile->url);
                }
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "failure_message", "Profile failed to start.");
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "file", file);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "failure_message", "Profile failed to start.");
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "file", file);
                switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "line", "%d", line);
 
                switch_event_fire(&s_event);
@@ -3048,7 +3048,7 @@ switch_thread_t *launch_sofia_worker_thread(sofia_profile_t *profile)
        /* Parse gateways */
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
        switch_assert(params);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "profile", profile->name);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "profile", profile->name);
 
        if (!(xml = switch_xml_open_cfg(cf, &cfg, params))) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", cf);
@@ -3066,8 +3066,8 @@ switch_thread_t *launch_sofia_worker_thread(sofia_profile_t *profile)
                                switch_event_t *xml_params;
                                switch_event_create(&xml_params, SWITCH_EVENT_REQUEST_PARAMS);
                                switch_assert(xml_params);
-                               switch_event_add_header_string(xml_params, SWITCH_STACK_BOTTOM, "purpose", "gateways");
-                               switch_event_add_header_string(xml_params, SWITCH_STACK_BOTTOM, "profile", profile->name);
+                               switch_event_add_header_string_dup(xml_params, SWITCH_STACK_BOTTOM, "purpose", "gateways");
+                               switch_event_add_header_string_dup(xml_params, SWITCH_STACK_BOTTOM, "profile", profile->name);
 
                                for (domain_tag = switch_xml_child(domains_tag, "domain"); domain_tag; domain_tag = domain_tag->next) {
                                        switch_xml_t droot, x_domain_tag;
@@ -3438,13 +3438,13 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void
                                                                (sofia_test_pflag(profile, PFLAG_TLS)) ? ",_sips._tcp" : "");
 
                switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "port", "%d", profile->sip_port);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "module_name", "mod_sofia");
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile_name", profile->name);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile_uri", profile->url);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "module_name", "mod_sofia");
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile_name", profile->name);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile_uri", profile->url);
 
                if (sofia_test_pflag(profile, PFLAG_TLS)) {
                        switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "tls_port", "%d", profile->tls_sip_port);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile_tls_uri", profile->tls_url);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile_tls_uri", profile->tls_url);
                }
                switch_event_fire(&s_event);
        }
@@ -3548,13 +3548,13 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void
                                                                (sofia_test_pflag(profile, PFLAG_TLS)) ? ",_sips._tcp" : "");
 
                switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "port", "%d", profile->sip_port);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "module_name", "mod_sofia");
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile_name", profile->name);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile_uri", profile->url);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "module_name", "mod_sofia");
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile_name", profile->name);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile_uri", profile->url);
 
                if (sofia_test_pflag(profile, PFLAG_TLS)) {
                        switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "tls_port", "%d", profile->tls_sip_port);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile_tls_uri", profile->tls_url);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile_tls_uri", profile->tls_url);
                }
                switch_event_fire(&s_event);
        }
@@ -3871,14 +3871,14 @@ static void parse_gateways(sofia_profile_t *profile, switch_xml_t gateways_tag,
                                                if (!gateway->ib_vars) {
                                                        switch_event_create_plain(&gateway->ib_vars, SWITCH_EVENT_GENERAL);
                                                }
-                                               switch_event_add_header_string(gateway->ib_vars, SWITCH_STACK_BOTTOM, var, val);
+                                               switch_event_add_header_string_dup(gateway->ib_vars, SWITCH_STACK_BOTTOM, var, val);
                                        }
 
                                        if (out) {
                                                if (!gateway->ob_vars) {
                                                        switch_event_create_plain(&gateway->ob_vars, SWITCH_EVENT_GENERAL);
                                                }
-                                               switch_event_add_header_string(gateway->ob_vars, SWITCH_STACK_BOTTOM, var, val);
+                                               switch_event_add_header_string_dup(gateway->ob_vars, SWITCH_STACK_BOTTOM, var, val);
                                        }
                                }
                        }
@@ -4434,9 +4434,9 @@ switch_status_t config_gateway(const char *profile_name, const char *gateway_nam
 
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
        switch_assert(params);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "profile", profile_name);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "reconfig", "true");
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "gateway", gateway_name);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "profile", profile_name);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "reconfig", "true");
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "gateway", gateway_name);
 
        if (!(xml = switch_xml_open_cfg(cf, &cfg, params))) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", gateway_name);
@@ -4488,9 +4488,9 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name)
 
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
        switch_assert(params);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "profile", profile_name);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "profile", profile_name);
        if (reload == SOFIA_CONFIG_RESCAN) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "reconfig", "true");
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "reconfig", "true");
        }
 
        if (!(xml = switch_xml_open_cfg(cf, &cfg, params))) {
@@ -6270,8 +6270,8 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name)
                                                switch_event_t *xml_params;
                                                switch_event_create(&xml_params, SWITCH_EVENT_REQUEST_PARAMS);
                                                switch_assert(xml_params);
-                                               switch_event_add_header_string(xml_params, SWITCH_STACK_BOTTOM, "purpose", "gateways");
-                                               switch_event_add_header_string(xml_params, SWITCH_STACK_BOTTOM, "profile", profile->name);
+                                               switch_event_add_header_string_dup(xml_params, SWITCH_STACK_BOTTOM, "purpose", "gateways");
+                                               switch_event_add_header_string_dup(xml_params, SWITCH_STACK_BOTTOM, "profile", profile->name);
 
                                                for (domain_tag = switch_xml_child(domains_tag, "domain"); domain_tag; domain_tag = domain_tag->next) {
                                                        switch_xml_t droot, x_domain_tag;
@@ -6344,9 +6344,9 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name)
                                                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Started Profile %s [%s]\n", profile->name, url);
                                                }
                                                if ((switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_PROFILE_START) == SWITCH_STATUS_SUCCESS)) {
-                                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "module_name", "mod_sofia");
-                                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile_name", profile->name);
-                                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile_uri", profile->url);
+                                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "module_name", "mod_sofia");
+                                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile_name", profile->name);
+                                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile_uri", profile->url);
                                                        switch_event_fire(&s_event);
                                                }
                                        } else {
@@ -8480,7 +8480,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
                                        }
 
                                        if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_REINVITE) == SWITCH_STATUS_SUCCESS) {
-                                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
+                                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
                                                switch_event_fire(&s_event);
                                        }
                                } else {
@@ -9164,21 +9164,21 @@ void sofia_handle_sip_i_refer(nua_t *nua, sofia_profile_t *profile, nua_handle_t
                                                        if(sofia_test_pflag(profile, PFLAG_FIRE_TRANFER_EVENTS)) {
                                                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_REPLACED) == SWITCH_STATUS_SUCCESS) {
                                                                        switch_channel_event_set_data(channel_b, event);
-                                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_replaced_by", br_a);
+                                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_replaced_by", br_a);
                                                                        switch_event_fire(&event);
                                                                }
 
                                                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_TRANSFEROR) == SWITCH_STATUS_SUCCESS) {
                                                                        switch_channel_event_set_data(channel_a, event);
-                                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_original_call_id", br_a);
-                                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_destination_call_id", br_b);
-                                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_destination_peer_uuid", switch_core_session_get_uuid(b_session));
+                                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_original_call_id", br_a);
+                                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_destination_call_id", br_b);
+                                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_destination_peer_uuid", switch_core_session_get_uuid(b_session));
                                                                        switch_event_fire(&event);
                                                                }
 
                                                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_TRANSFEREE) == SWITCH_STATUS_SUCCESS) {
                                                                        switch_channel_event_set_data(a_channel, event);
-                                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_replaced_call_id", switch_core_session_get_uuid(b_session));
+                                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_replaced_call_id", switch_core_session_get_uuid(b_session));
                                                                        switch_event_fire(&event);
                                                                }
                                                        }
@@ -9280,15 +9280,15 @@ void sofia_handle_sip_i_refer(nua_t *nua, sofia_profile_t *profile, nua_handle_t
                                                if(sofia_test_pflag(profile, PFLAG_FIRE_TRANFER_EVENTS)) {
                                                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_REPLACED) == SWITCH_STATUS_SUCCESS) {
                                                                switch_channel_event_set_data(channel_b, event);
-                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_replaced_by", br_a);
+                                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_replaced_by", br_a);
                                                                switch_event_fire(&event);
                                                        }
 
                                                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_TRANSFEROR) == SWITCH_STATUS_SUCCESS) {
                                                                switch_channel_event_set_data(channel_a, event);
-                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_original_call_id", br_a);
-                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_destination_call_id", br_b);
-                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_destination_peer_uuid", switch_core_session_get_uuid(b_session));
+                                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_original_call_id", br_a);
+                                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_destination_call_id", br_b);
+                                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_destination_peer_uuid", switch_core_session_get_uuid(b_session));
                                                                switch_event_fire(&event);
                                                        }
 
@@ -9370,9 +9370,9 @@ void sofia_handle_sip_i_refer(nua_t *nua, sofia_profile_t *profile, nua_handle_t
                                                                if(sofia_test_pflag(profile, PFLAG_FIRE_TRANFER_EVENTS)) {
                                                                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_TRANSFEROR) == SWITCH_STATUS_SUCCESS) {
                                                                                switch_channel_event_set_data(channel_a, event);
-                                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_original_call_id", switch_core_session_get_uuid(hup_session));
-                                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_destination_call_id", switch_core_session_get_uuid(t_session));
-                                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_destination_peer_uuid", switch_channel_get_partner_uuid(t_channel));
+                                                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_original_call_id", switch_core_session_get_uuid(hup_session));
+                                                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_destination_call_id", switch_core_session_get_uuid(t_session));
+                                                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_destination_peer_uuid", switch_channel_get_partner_uuid(t_channel));
                                                                                switch_event_fire(&event);
                                                                        }
 
@@ -9437,17 +9437,17 @@ void sofia_handle_sip_i_refer(nua_t *nua, sofia_profile_t *profile, nua_handle_t
                                                        switch_xml_t params = NULL, param = NULL;
 
                                                        switch_event_create(&xml_params, SWITCH_EVENT_REQUEST_PARAMS);
-                                                       switch_event_add_header_string(xml_params, SWITCH_STACK_BOTTOM, "purpose", "nightmare_xfer");
-                                                       switch_event_add_header_string(xml_params, SWITCH_STACK_BOTTOM, "profile", profile->name);
-                                                       switch_event_add_header_string(xml_params, SWITCH_STACK_BOTTOM, "refer-to-user", refer_to->r_url->url_user);
-                                                       switch_event_add_header_string(xml_params, SWITCH_STACK_BOTTOM, "refer-to-host", refer_to->r_url->url_host);
-                                                       switch_event_add_header_string(xml_params, SWITCH_STACK_BOTTOM, "refer-to-params", refer_to->r_url->url_params ? refer_to->r_url->url_params : "");
-                                                       switch_event_add_header_string(xml_params, SWITCH_STACK_BOTTOM, "refer-to-headers", refer_to->r_url->url_headers ? refer_to->r_url->url_headers : "");
+                                                       switch_event_add_header_string_dup(xml_params, SWITCH_STACK_BOTTOM, "purpose", "nightmare_xfer");
+                                                       switch_event_add_header_string_dup(xml_params, SWITCH_STACK_BOTTOM, "profile", profile->name);
+                                                       switch_event_add_header_string_dup(xml_params, SWITCH_STACK_BOTTOM, "refer-to-user", refer_to->r_url->url_user);
+                                                       switch_event_add_header_string_dup(xml_params, SWITCH_STACK_BOTTOM, "refer-to-host", refer_to->r_url->url_host);
+                                                       switch_event_add_header_string_dup(xml_params, SWITCH_STACK_BOTTOM, "refer-to-params", refer_to->r_url->url_params ? refer_to->r_url->url_params : "");
+                                                       switch_event_add_header_string_dup(xml_params, SWITCH_STACK_BOTTOM, "refer-to-headers", refer_to->r_url->url_headers ? refer_to->r_url->url_headers : "");
                                                        if (replaces) {
-                                                               switch_event_add_header_string(xml_params, SWITCH_STACK_BOTTOM, "replaces-call-id", replaces->rp_call_id);
+                                                               switch_event_add_header_string_dup(xml_params, SWITCH_STACK_BOTTOM, "replaces-call-id", replaces->rp_call_id);
                                                        }
-                                                       switch_event_add_header_string(xml_params, SWITCH_STACK_BOTTOM, "refer-from-channel-id", switch_core_session_get_uuid(session));
-                                                       switch_event_add_header_string(xml_params, SWITCH_STACK_BOTTOM, "refer-for-channel-id", br_a);
+                                                       switch_event_add_header_string_dup(xml_params, SWITCH_STACK_BOTTOM, "refer-from-channel-id", switch_core_session_get_uuid(session));
+                                                       switch_event_add_header_string_dup(xml_params, SWITCH_STACK_BOTTOM, "refer-for-channel-id", br_a);
 
                                                        if (switch_xml_locate("channels", NULL, NULL, NULL,
                                                                                                  &xml_root, &xml_channel, xml_params, SWITCH_FALSE) == SWITCH_STATUS_SUCCESS) {
@@ -9547,24 +9547,24 @@ void sofia_handle_sip_i_refer(nua_t *nua, sofia_profile_t *profile, nua_handle_t
 
                                                rep_h = switch_channel_get_variable(channel, SOFIA_REPLACES_HEADER);
                                                if (rep_h) {
-                                                       switch_event_add_header_string(nightmare_xfer_helper->vars, SWITCH_STACK_BOTTOM, SOFIA_REPLACES_HEADER, rep_h);
+                                                       switch_event_add_header_string_dup(nightmare_xfer_helper->vars, SWITCH_STACK_BOTTOM, SOFIA_REPLACES_HEADER, rep_h);
                                                } else {
-                                                       switch_event_add_header_string(nightmare_xfer_helper->vars, SWITCH_STACK_BOTTOM, SOFIA_REPLACES_HEADER, rep);
+                                                       switch_event_add_header_string_dup(nightmare_xfer_helper->vars, SWITCH_STACK_BOTTOM, SOFIA_REPLACES_HEADER, rep);
                                                }
 
 
                                                if (!zstr(full_ref_by)) {
-                                                       switch_event_add_header_string(nightmare_xfer_helper->vars, SWITCH_STACK_BOTTOM, "Referred-By", full_ref_by);
+                                                       switch_event_add_header_string_dup(nightmare_xfer_helper->vars, SWITCH_STACK_BOTTOM, "Referred-By", full_ref_by);
                                                }
 
                                                if (!zstr(full_ref_to)) {
-                                                       switch_event_add_header_string(nightmare_xfer_helper->vars, SWITCH_STACK_BOTTOM, SOFIA_REFER_TO_VARIABLE, full_ref_to);
+                                                       switch_event_add_header_string_dup(nightmare_xfer_helper->vars, SWITCH_STACK_BOTTOM, SOFIA_REFER_TO_VARIABLE, full_ref_to);
                                                }
 
                                                if(sofia_test_pflag(profile, PFLAG_FIRE_TRANFER_EVENTS)) {
                                                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_TRANSFEROR) == SWITCH_STATUS_SUCCESS) {
-                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_original_call_id", br_a);
-                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_destination_call_id", br_b);
+                                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_original_call_id", br_a);
+                                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_destination_call_id", br_b);
                                                                switch_channel_event_set_data(channel_a, event);
                                                                switch_event_fire(&event);
                                                        }
@@ -9575,8 +9575,8 @@ void sofia_handle_sip_i_refer(nua_t *nua, sofia_profile_t *profile, nua_handle_t
                                                        }
                                                }
 
-                                               switch_event_add_header_string(nightmare_xfer_helper->vars, SWITCH_STACK_BOTTOM, "sip_h_X-FS-Refer-From", switch_core_session_get_uuid(session));
-                                               switch_event_add_header_string(nightmare_xfer_helper->vars, SWITCH_STACK_BOTTOM, "sip_h_X-FS-Refer-For", br_a);
+                                               switch_event_add_header_string_dup(nightmare_xfer_helper->vars, SWITCH_STACK_BOTTOM, "sip_h_X-FS-Refer-From", switch_core_session_get_uuid(session));
+                                               switch_event_add_header_string_dup(nightmare_xfer_helper->vars, SWITCH_STACK_BOTTOM, "sip_h_X-FS-Refer-For", br_a);
 
                                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Good Luck, you'll need it......\n");
                                                nightmare_xfer_helper->profile = profile;
@@ -9678,8 +9678,8 @@ void sofia_handle_sip_i_refer(nua_t *nua, sofia_profile_t *profile, nua_handle_t
 
                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_ERROR) == SWITCH_STATUS_SUCCESS) {
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Error-Type", "blind_transfer");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Transfer-Exten", exten);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Full-Refer-To", full_ref_to);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Transfer-Exten", exten);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Full-Refer-To", full_ref_to);
                                switch_channel_event_set_data(channel, event);
                                switch_event_fire(&event);
                        }
@@ -9716,48 +9716,48 @@ static switch_status_t create_info_event(sip_t const *sip,
        }
 
        if (sip->sip_content_type) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "SIP-Content-Type", sip->sip_content_type->c_type);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "SIP-Content-Type", sip->sip_content_type->c_type);
        }
 
        if (sip->sip_from) {
                if (sip->sip_from->a_url->url_user) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "SIP-From-User", sip->sip_from->a_url->url_user);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "SIP-From-User", sip->sip_from->a_url->url_user);
                }
 
                if (sip->sip_from->a_url->url_host) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "SIP-From-Host", sip->sip_from->a_url->url_host);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "SIP-From-Host", sip->sip_from->a_url->url_host);
                }
        }
 
        if (sip->sip_to) {
                if (sip->sip_to->a_url->url_user) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "SIP-To-User", sip->sip_to->a_url->url_user);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "SIP-To-User", sip->sip_to->a_url->url_user);
                }
 
                if (sip->sip_to->a_url->url_host) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "SIP-To-Host", sip->sip_to->a_url->url_host);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "SIP-To-Host", sip->sip_to->a_url->url_host);
                }
        }
 
 
        if (sip->sip_contact) {
                if (sip->sip_contact->m_url->url_user) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "SIP-Contact-User", sip->sip_contact->m_url->url_user);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "SIP-Contact-User", sip->sip_contact->m_url->url_user);
                }
 
                if (sip->sip_contact->m_url->url_host) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "SIP-Contact-Host", sip->sip_contact->m_url->url_host);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "SIP-Contact-Host", sip->sip_contact->m_url->url_host);
                }
        }
 
 
        if (sip->sip_call_info) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Call-Info",
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Call-Info",
                                                                           sip_header_as_string(nua_handle_home(nh), (void *) sip->sip_call_info));
        }
 
        if (alert_info) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Alert-Info", sip_header_as_string(nua_handle_home(nh), (void *) alert_info));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Alert-Info", sip_header_as_string(nua_handle_home(nh), (void *) alert_info));
        }
 
 
@@ -10331,7 +10331,7 @@ switch_status_t sofia_locate_user(char* user, switch_core_session_t *session, si
        if (switch_event_create(&v_event, SWITCH_EVENT_REQUEST_PARAMS) == SWITCH_STATUS_SUCCESS) {
                sip_unknown_t *un;
                for (un = sip->sip_unknown; un; un = un->un_next) {
-                       switch_event_add_header_string(v_event, SWITCH_STACK_BOTTOM, un->un_name, un->un_value);
+                       switch_event_add_header_string_dup(v_event, SWITCH_STACK_BOTTOM, un->un_name, un->un_value);
                };
                switch_channel_event_set_data(switch_core_session_get_channel(session), v_event);
        }
@@ -11745,7 +11745,7 @@ void sofia_handle_sip_i_invite_replaces(switch_core_session_t *session, switch_c
                                && sip && sip->sip_call_id
                                && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_REPLACED) == SWITCH_STATUS_SUCCESS) {
                                switch_channel_event_set_data(b_channel, event);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_replaced_by", sip->sip_call_id->i_id);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_replaced_by", sip->sip_call_id->i_id);
                                switch_event_fire(&event);
                        }
                } else {
@@ -11796,7 +11796,7 @@ void sofia_handle_sip_i_invite_replaces(switch_core_session_t *session, switch_c
                                        && sip->sip_call_id
                                        && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_INTERCEPTED) == SWITCH_STATUS_SUCCESS) {
                                        switch_channel_event_set_data(b_channel, event);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "intercepted_by", sip->sip_call_id->i_id);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "intercepted_by", sip->sip_call_id->i_id);
                                        switch_event_fire(&event);
                                }
                        }
@@ -11823,7 +11823,7 @@ void sofia_handle_sip_i_invite_replaces(switch_core_session_t *session, switch_c
                                                && sip && sip->sip_call_id
                                                && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_INTERCEPTED) == SWITCH_STATUS_SUCCESS) {
                                                        switch_channel_event_set_data(b_channel, event);
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "intercepted_by", sip->sip_call_id->i_id);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "intercepted_by", sip->sip_call_id->i_id);
                                                        switch_event_fire(&event);
                                        }
                                }
@@ -11839,7 +11839,7 @@ void sofia_handle_sip_i_invite_replaces(switch_core_session_t *session, switch_c
                                        && sip && sip->sip_call_id
                                        && switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_REPLACED) == SWITCH_STATUS_SUCCESS) {
                                        switch_channel_event_set_data(b_channel, event);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_replaced_by", sip->sip_call_id->i_id);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_replaced_by", sip->sip_call_id->i_id);
                                        switch_event_fire(&event);
                                }
                                switch_channel_hangup(b_channel, SWITCH_CAUSE_ATTENDED_TRANSFER);
index 00cc8561d68118da96ab04caab73cdf3bcdd5339..7bc13d50f0eedce335b4ee8dfcef02e7dd52a2c7 100644 (file)
@@ -275,10 +275,10 @@ switch_status_t sofia_presence_chat_send(switch_event_t *message_event)
                // emit no recipient event
                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_ERROR) == SWITCH_STATUS_SUCCESS) {
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Error-Type", "chat");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Error-Reason", "no recipient");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Chat-Send-To", to);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Chat-Send-From", from);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Chat-Send-Profile", prof);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Error-Reason", "no recipient");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Chat-Send-To", to);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Chat-Send-From", from);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Chat-Send-Profile", prof);
                        switch_event_add_body(event, "%s", body);
                        switch_event_fire(&event);
                }
@@ -807,11 +807,11 @@ static void do_normal_probe(switch_event_t *event)
                if (!h.rowcount) {
                        switch_event_t *sevent;
                        if (switch_event_create(&sevent, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "login", profile->name);
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "login", profile->name);
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
                                switch_event_add_header(sevent, SWITCH_STACK_BOTTOM, "from", "%s@%s", probe_euser, probe_host);
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "status", "Unregistered");
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "status", "Unregistered");
                                switch_event_fire(&sevent);
                        }
                }
@@ -1390,24 +1390,24 @@ static switch_event_t *actual_sofia_presence_event_handler(switch_event_t *event
                                                        rpid = sofia_presence_translate_rpid(rpid, status);
                                                }
 
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Answer-State", "early");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "status", status);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-State", status);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Call-State", "EARLY");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "astate", "early");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "early");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Answer-State", "early");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "status", status);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-State", status);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-Call-State", "EARLY");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "astate", "early");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "early");
                                        } else {
                                                status = "CS_EXECUTE";
                                                if (rpid) {
                                                        rpid = sofia_presence_translate_rpid(rpid, status);
                                                }
 
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Answer-State", "answered");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "status", status);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-State", status);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Call-State", "ACTIVE");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "astate", "confirmed");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "confirmed");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Answer-State", "answered");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "status", status);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-State", status);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-Call-State", "ACTIVE");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "astate", "confirmed");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "confirmed");
                                        }
                                }
 
@@ -1536,13 +1536,13 @@ static switch_event_t *actual_sofia_presence_event_handler(switch_event_t *event
                                if (hup && dh.hits < 1) {
                                        /* so many phones get confused when whe hangup we have to reprobe to get them all to reset to absolute states so the lights stay correct */
                                        if (switch_event_create(&s_event, SWITCH_EVENT_PRESENCE_PROBE) == SWITCH_STATUS_SUCCESS) {
-                                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
-                                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "login", profile->name);
-                                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
+                                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
+                                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "login", profile->name);
+                                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
                                                switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "from", "%s@%s", euser, host);
                                                switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "to", "%s@%s", euser, host);
-                                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-                                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+                                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                                                sofia_event_fire(profile, &s_event);
                                        }
                                }
@@ -1736,8 +1736,8 @@ static int sofia_presence_sub_reg_callback(void *pArg, int argc, char **argv, ch
 
                if (switch_event_create(&event, SWITCH_EVENT_MESSAGE_QUERY) == SWITCH_STATUS_SUCCESS) {
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Message-Account", "sip:%s@%s", user, host);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "VM-Sofia-Profile", profile->name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "VM-sub-call-id", argv[7]);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "VM-Sofia-Profile", profile->name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "VM-sub-call-id", argv[7]);
 
                        if (mod_sofia_globals.debug_presence > 0) {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Create MESSAGE QUERY EVENT...\n");
@@ -1751,14 +1751,14 @@ static int sofia_presence_sub_reg_callback(void *pArg, int argc, char **argv, ch
        }
 
        if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_PROBE) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", profile->url);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", profile->url);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", user, host);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_subtype", "probe");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto-specific-event-name", event_name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "expires", expires);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_subtype", "probe");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto-specific-event-name", event_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "expires", expires);
                sofia_event_fire(profile, &event);
        }
 
@@ -1839,9 +1839,9 @@ static int sofia_presence_resub_callback(void *pArg, int argc, char **argv, char
        }
 
        if (do_event && switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", proto ? proto : SOFIA_CHAT_PROTO);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", profile->url);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", proto ? proto : SOFIA_CHAT_PROTO);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", profile->url);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
 
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", user, host);
 
@@ -1850,37 +1850,37 @@ static int sofia_presence_resub_callback(void *pArg, int argc, char **argv, char
                }
 
                if (!zstr(call_id)) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-id", call_id);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-id", call_id);
                }
 
-               //switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "resub", "true");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "status", status);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", rpid);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+               //switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "resub", "true");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "status", status);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", rpid);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", 0);
 
                if (!zstr(to_user)) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to-user", to_user);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "to-user", to_user);
                }
 
                if (zstr(state)) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
-                       //switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "resubscribe");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
+                       //switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", "resubscribe");
                } else {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
                        if (uuid) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", uuid);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "unique-id", uuid);
                        }
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", state);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "astate", state);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "presence-call-direction", direction);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "answer-state", state);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "astate", state);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "presence-call-direction", direction);
                }
 
                if (h->event) {
                        for (hp = h->event->headers; hp; hp = hp->next) {
                                if (!strncasecmp(hp->name, "fwd-", 4)) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, hp->name + 4, hp->value);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, hp->name + 4, hp->value);
                                }
                        }
                }
@@ -4001,12 +4001,12 @@ void sofia_presence_handle_sip_i_subscribe(int status,
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "sending pnp NOTIFY for %s to provision to %s\n", uri, profile->pnp_prov_url);
 
                        switch_event_create(&params, SWITCH_EVENT_NOTIFY);
-                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "profile", profile->name);
-                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "event-string", sip->sip_event->o_type);
-                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "to-uri", uri);
-                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "from-uri", uri);
-                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "extra-headers", extra_headers);
-                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "content-type", ct);
+                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "profile", profile->name);
+                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "event-string", sip->sip_event->o_type);
+                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "to-uri", uri);
+                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "from-uri", uri);
+                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "extra-headers", extra_headers);
+                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "content-type", ct);
                        switch_event_add_body(params, "%s", profile->pnp_prov_url);
                        switch_event_fire(&params);
 
@@ -4225,14 +4225,14 @@ void sofia_presence_handle_sip_i_subscribe(int status,
 
                switch_snprintf(sip_cseq, sizeof(sip_cseq), "%d", sip->sip_cseq->cs_seq);
                switch_event_create(&event, SWITCH_EVENT_PHONE_FEATURE_SUBSCRIBE);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "user", from_user);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "host", from_host);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "contact", contact_str);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-id", call_id);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "expires", exp_delta_str);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "cseq", sip_cseq);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "profile_name", profile->name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "hostname", mod_sofia_globals.hostname);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "user", from_user);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "host", from_host);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "contact", contact_str);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-id", call_id);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "expires", exp_delta_str);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "cseq", sip_cseq);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "profile_name", profile->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "hostname", mod_sofia_globals.hostname);
 
                if (sip->sip_payload) {
                        switch_xml_t xml = NULL;
@@ -4246,43 +4246,43 @@ void sofia_presence_handle_sip_i_subscribe(int status,
                                switch_xml_t device = NULL;
 
                                if ((device = switch_xml_child(xml, "device"))) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "device", device->txt);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "device", device->txt);
                                }
 
                                if (xml->name && !strcmp(xml->name, "SetDoNotDisturb")) {
                                        switch_xml_t action = NULL;
 
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Feature-Action", "SetDoNotDisturb");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Feature-Action", "SetDoNotDisturb");
                                        if ((action = switch_xml_child(xml, "doNotDisturbOn"))) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Feature-Enabled", action->txt);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action-Name", action->name);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Feature-Enabled", action->txt);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action-Name", action->name);
                                        }
                                }
 
                                if (xml->name && !strcmp(xml->name, "SetForwarding")) {
                                        switch_xml_t cfwd_type, cfwd_enable, cfwd_target;
 
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Feature-Action", "SetCallForward");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Feature-Action", "SetCallForward");
                                        if ((cfwd_type = switch_xml_child(xml, "forwardingType"))
                                                && (cfwd_enable = switch_xml_child(xml, "activateForward"))
                                                && (cfwd_target = switch_xml_child(xml, "forwardDN"))) {
 
                                                if (!strcmp(cfwd_type->txt, "forwardImmediate")) {
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Feature-Enabled", cfwd_enable->txt);
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action-Name", "forward_immediate");
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action-Value", cfwd_target->txt);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Feature-Enabled", cfwd_enable->txt);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action-Name", "forward_immediate");
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action-Value", cfwd_target->txt);
                                                } else if (!strcmp(cfwd_type->txt, "forwardBusy")) {
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Feature-Enabled", cfwd_enable->txt);
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action-Name", "forward_busy");
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action-Value", cfwd_target->txt);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Feature-Enabled", cfwd_enable->txt);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action-Name", "forward_busy");
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action-Value", cfwd_target->txt);
                                                } else if (!strcmp(cfwd_type->txt, "forwardNoAns")) {
                                                        switch_xml_t rc;
 
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Feature-Enabled", cfwd_enable->txt);
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action-Name", "forward_no_answer");
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action-Value", cfwd_target->txt);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Feature-Enabled", cfwd_enable->txt);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action-Name", "forward_no_answer");
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Action-Value", cfwd_target->txt);
                                                        if ((rc = switch_xml_child(xml, "ringCount"))) {
-                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "ringCount", rc->txt);
+                                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "ringCount", rc->txt);
                                                        }
                                                }
                                        }
@@ -4316,12 +4316,12 @@ void sofia_presence_handle_sip_i_subscribe(int status,
        } else  if (!strcasecmp(event, "conference")) {
                switch_event_t *event;
                switch_event_create(&event, SWITCH_EVENT_CONFERENCE_DATA_QUERY);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Conference-Name", to_user);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Conference-Domain", to_host);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Query-From", from_user);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Query-From-Domain", from_host);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Call-Id", call_id);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Sofia-Profile", profile->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Conference-Name", to_user);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Conference-Domain", to_host);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Query-From", from_user);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Query-From-Domain", from_host);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Call-Id", call_id);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Sofia-Profile", profile->name);
                switch_event_fire(&event);
        }
 
@@ -4338,34 +4338,34 @@ void sofia_presence_handle_sip_i_subscribe(int status,
                        }
 
                        if (switch_event_create(&sevent, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "proto", protocol);
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "proto", protocol);
                                if (!zstr(orig_proto)) {
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "orig_proto", orig_proto);
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "orig_proto", orig_proto);
                                }
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "login", profile->name);
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "login", profile->name);
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
                                switch_event_add_header(sevent, SWITCH_STACK_BOTTOM, "from", "%s@%s", to_user, to_host);
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "rpid", "active");
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "status", "Click To Call");
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "rpid", "active");
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "status", "Click To Call");
                                switch_event_fire(&sevent);
                        }
 
                } else if (to_user && (strcasecmp(proto, SOFIA_CHAT_PROTO) != 0)) {
                        if (switch_event_create(&sevent, SWITCH_EVENT_PRESENCE_PROBE) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "proto", proto);
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "proto", proto);
                                if (!zstr(orig_proto)) {
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "orig_proto", orig_proto);
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "orig_proto", orig_proto);
                                }
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "login", profile->name);
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "login", profile->name);
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
                                switch_event_add_header(sevent, SWITCH_STACK_BOTTOM, "from", "%s@%s", from_user, from_host);
                                switch_event_add_header(sevent, SWITCH_STACK_BOTTOM, "to", "%s%s%s@%s", proto, "+", to_user, to_host);
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "proto-specific-event-name", event);
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "expires", exp_delta_str);
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "event_type", "presence");
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "expires", exp_delta_str);
-                               switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "sub-call-id", call_id);
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "proto-specific-event-name", event);
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "expires", exp_delta_str);
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "expires", exp_delta_str);
+                               switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "sub-call-id", call_id);
                                switch_event_fire(&sevent);
 
                        }
@@ -4373,33 +4373,33 @@ void sofia_presence_handle_sip_i_subscribe(int status,
 
                        if (!strcasecmp(event, "dialog")) {
                                if (switch_event_create(&sevent, SWITCH_EVENT_PRESENCE_PROBE) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "probe-type", "dialog");
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "login", profile->name);
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "probe-type", "dialog");
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "login", profile->name);
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
                                        switch_event_add_header(sevent, SWITCH_STACK_BOTTOM, "from", "%s@%s", from_user, from_host);
                                        switch_event_add_header(sevent, SWITCH_STACK_BOTTOM, "to", "%s@%s", to_user, to_host);
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "proto-specific-event-name", event);
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "expires", exp_delta_str);
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "event_type", "presence");
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "expires", exp_delta_str);
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "sub-call-id", call_id);
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "proto-specific-event-name", event);
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "expires", exp_delta_str);
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "expires", exp_delta_str);
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "sub-call-id", call_id);
                                        switch_event_fire(&sevent);
                                }
                        } else if (!strcasecmp(event, "presence")) {
                                if (switch_event_create(&sevent, SWITCH_EVENT_PRESENCE_PROBE) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "login", profile->name);
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "presence-source", "subscribe");
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "login", profile->name);
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "presence-source", "subscribe");
                                        switch_event_add_header(sevent, SWITCH_STACK_BOTTOM, "from", "%s@%s", from_user, from_host);
                                        switch_event_add_header(sevent, SWITCH_STACK_BOTTOM, "to", "%s@%s", to_user, to_host);
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "expires", exp_delta_str);
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "rpid", "unknown");
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "status", "Registered");
-                                       switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "sub-call-id", call_id);
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "expires", exp_delta_str);
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "rpid", "unknown");
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "status", "Registered");
+                                       switch_event_add_header_string_dup(sevent, SWITCH_STACK_BOTTOM, "sub-call-id", call_id);
                                        switch_event_fire(&sevent);
                                }
                        }
@@ -4697,14 +4697,14 @@ void sofia_presence_handle_sip_i_publish(nua_t *nua, sofia_profile_t *profile, n
 
                        if (sub_count > 0) {
                                if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", rpid);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", profile->url);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "user-agent", full_agent);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", rpid);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", profile->url);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "user-agent", full_agent);
                                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", from_user, from_host);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "status", note_txt);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", event_type);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "status", note_txt);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", event_type);
                                        switch_event_fire(&event);
                                }
                        }
@@ -4890,36 +4890,36 @@ void sofia_presence_handle_sip_i_message(int status,
                        }
 
                        if (switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", profile->url);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", profile->url);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
 
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to_proto", proto);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "to_proto", proto);
 
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", from_addr);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from_user", from_user);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from_host", from_host);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to_user", to_user);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to_host", to_host);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from_sip_ip", network_ip);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from", from_addr);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from_user", from_user);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from_host", from_host);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "to_user", to_user);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "to_host", to_host);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from_sip_ip", network_ip);
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from_sip_port", "%d", network_port);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to", to_addr);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "subject", "SIMPLE MESSAGE");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "context", profile->context);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "to", to_addr);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "subject", "SIMPLE MESSAGE");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "context", profile->context);
 
                                if (sip->sip_content_type && sip->sip_content_type->c_subtype) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", sip->sip_content_type->c_type);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", sip->sip_content_type->c_type);
                                } else {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "text/plain");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "text/plain");
                                }
 
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from_full", full_from);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from_full", full_from);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
 
 
                                if (sip->sip_call_info) {
                                        sip_call_info_t *call_info = sip->sip_call_info;
                                        char *ci = sip_header_as_string(nua_handle_home(nh), (void *) call_info);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "sip_call_info", ci);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "sip_call_info", ci);
                                }
 
                                /* Loop thru unknown Headers Here so we can do something with them */
@@ -4930,14 +4930,14 @@ void sofia_presence_handle_sip_i_message(int status,
                                                if (!zstr(un->un_value)) {
                                                        char *tmp_name;
                                                        if ((tmp_name = switch_mprintf("%s%s", SOFIA_SIP_HEADER_PREFIX, un->un_name))) {
-                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, tmp_name, un->un_value);
+                                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, tmp_name, un->un_value);
                                                                free(tmp_name);
                                                        }
                                                }
                                        } else if (!strncasecmp(un->un_name, "History-Info", 12)) {
                                                if (first_history_info) {
                                                        /* If the header exists first time, make sure to remove old info and re-set the variable */
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "sip_history_info", un->un_value);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "sip_history_info", un->un_value);
                                                        first_history_info = 0;
                                                } else {
                                                        /* Append the History-Info into one long string */
@@ -4945,19 +4945,19 @@ void sofia_presence_handle_sip_i_message(int status,
                                                        if (!zstr(history_var)) {
                                                                char *tmp_str;
                                                                if ((tmp_str = switch_mprintf("%s, %s", history_var, un->un_value))) {
-                                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "sip_history_info", tmp_str);
+                                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "sip_history_info", tmp_str);
                                                                        free(tmp_str);
                                                                } else {
-                                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "sip_history_info", un->un_value);
+                                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "sip_history_info", un->un_value);
                                                                }
                                                        } else {
-                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "sip_history_info", un->un_value);
+                                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "sip_history_info", un->un_value);
                                                        }
                                                }
                                        } else if (!strcasecmp(un->un_name, "Geolocation")) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "sip_geolocation", un->un_value);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "sip_geolocation", un->un_value);
                                        } else if (!strcasecmp(un->un_name, "Geolocation-Error")) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "sip_geolocation_error", un->un_value);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "sip_geolocation_error", un->un_value);
                                        } else if (!strncasecmp(un->un_name, "X-", 2) || !strncasecmp(un->un_name, "P-", 2) || !strcasecmp(un->un_name, "User-to-User")) {
                                                if (!zstr(un->un_value)) {
                                                        char new_name[512] = "";
@@ -4974,7 +4974,7 @@ void sofia_presence_handle_sip_i_message(int status,
                                                                        continue;
                                                                }
 
-                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, new_name, un->un_value);
+                                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, new_name, un->un_value);
                                                                break;
                                                        }
                                                }
@@ -4994,7 +4994,7 @@ void sofia_presence_handle_sip_i_message(int status,
                                        if (switch_event_dup(&event_dup, event) == SWITCH_STATUS_SUCCESS) {
                                                event_dup->event_id = SWITCH_EVENT_RECV_MESSAGE;
                                                event_dup->flags |= EF_UNIQ_HEADERS;
-                                               switch_event_add_header_string(event_dup, SWITCH_STACK_BOTTOM, "Event-Name", switch_event_name(event_dup->event_id));
+                                               switch_event_add_header_string_dup(event_dup, SWITCH_STACK_BOTTOM, "Event-Name", switch_event_name(event_dup->event_id));
                                                switch_event_fire(&event_dup);
                                        }
                                }
index 9791190f5f7275cd16f62ce5c6b8dd6eb48da87f..036405365fa8ca2ddad6853cb3cdcf05572a330f 100644 (file)
@@ -154,16 +154,16 @@ void sofia_reg_fire_custom_gateway_state_event(sofia_gateway_t *gateway, int sta
 {
        switch_event_t *s_event;
        if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_GATEWAY_STATE) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Gateway", gateway->name);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "State", sofia_state_string(gateway->state));
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Ping-Status", sofia_gateway_status_name(gateway->status));
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "Gateway", gateway->name);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "State", sofia_state_string(gateway->state));
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "Ping-Status", sofia_gateway_status_name(gateway->status));
                if (!zstr_buf(gateway->register_network_ip)) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Register-Network-IP", gateway->register_network_ip);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "Register-Network-IP", gateway->register_network_ip);
                        switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "Register-Network-Port", "%d", gateway->register_network_port);
                }
 
                if (!zstr(phrase)) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Phrase", phrase);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "Phrase", phrase);
                }
                if (status) {
                        switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "Status", "%d", status);
@@ -177,16 +177,16 @@ void sofia_reg_fire_custom_sip_user_state_event(sofia_profile_t *profile, const
 {
        switch_event_t *s_event;
        if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_SIP_USER_STATE) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "sip_contact", contact);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "sip_user", sip_user);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "from-user", from_user);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "from-host", from_host);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "call-id", call_id);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Ping-Status", sofia_sip_user_status_name(status));
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "sip_contact", contact);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "sip_user", sip_user);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "from-user", from_user);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "from-host", from_host);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "call-id", call_id);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "Ping-Status", sofia_sip_user_status_name(status));
                switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "Status", "%d", options_res);
                if (!zstr(phrase)) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Phrase", phrase);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "Phrase", phrase);
                }
                switch_event_fire(&s_event);
        }
@@ -341,8 +341,8 @@ void sofia_reg_check_gateway(sofia_profile_t *profile, time_t now)
 
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Deleted gateway %s\n", gateway_ptr->name);
                                if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, MY_EVENT_GATEWAY_DEL) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "profile-name", gateway_ptr->profile->name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Gateway", gateway_ptr->name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "profile-name", gateway_ptr->profile->name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Gateway", gateway_ptr->name);
                                        switch_event_fire(&event);
                                }
                                if (gateway_ptr->ob_vars) {
@@ -724,35 +724,35 @@ int sofia_reg_del_callback(void *pArg, int argc, char **argv, char **columnNames
 
        if (argc >= 3) {
                if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_EXPIRE) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile-name", argv[10]);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "call-id", argv[0]);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "user", argv[1]);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "username", argv[1]);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "host", argv[2]);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "contact", argv[3]);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "expires", argv[6]);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "user-agent", argv[7]);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "realm", argv[14]);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "network-ip", argv[11]);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "network-port", argv[12]);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile-name", argv[10]);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "call-id", argv[0]);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "user", argv[1]);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "username", argv[1]);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "host", argv[2]);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "contact", argv[3]);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "expires", argv[6]);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "user-agent", argv[7]);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "realm", argv[14]);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "network-ip", argv[11]);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "network-port", argv[12]);
                        sofia_event_fire(profile, &s_event);
                }
 
                if (switch_event_create(&s_event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "rpid", "away");
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "login", profile->url);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "rpid", "away");
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "login", profile->url);
 
                        if (argv[4]) {
-                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "user-agent", argv[4]);
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "user-agent", argv[4]);
                        }
 
                        if (argv[1] && argv[2]) {
                                switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "from", "%s@%s", argv[1], argv[2]);
                        }
 
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "status", "Unregistered");
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "status", "Unregistered");
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "event_type", "presence");
                        sofia_event_fire(profile, &s_event);
                }
 
@@ -1607,36 +1607,36 @@ uint8_t sofia_reg_handle_register_token(nua_t *nua, sofia_profile_t *profile, nu
                        realm = switch_event_get_header(auth_params, "sip_auth_realm");
                }
                if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_REGISTER_ATTEMPT) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "from-user", to_user);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "from-host", reg_host);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "from-user", to_user);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "from-host", reg_host);
                        if (contact)
-                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "contact", contact_str);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "call-id", call_id);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "rpid", rpid);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "status", reg_desc);
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "contact", contact_str);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "call-id", call_id);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "rpid", rpid);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "status", reg_desc);
                        if (contact)
                                switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "expires", "%ld", (long) exptime);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "to-user", from_user);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "to-host", from_host);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "network-ip", network_ip);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "network-port", network_port_c);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "username", username);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "realm", realm);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "user-agent", agent);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "to-user", from_user);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "to-host", from_host);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "network-ip", network_ip);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "network-port", network_port_c);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "username", username);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "realm", realm);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "user-agent", agent);
 
             switch (auth_res) {
             case AUTH_OK:
-                switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "auth-result", "SUCCESS");
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "auth-result", "SUCCESS");
                 break;
             case AUTH_RENEWED:
-                switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "auth-result", "RENEWED");
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "auth-result", "RENEWED");
                 break;
             case AUTH_STALE:
-                switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "auth-result", "STALE");
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "auth-result", "STALE");
                 break;
             case AUTH_FORBIDDEN:
-                switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "auth-result", "FORBIDDEN");
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "auth-result", "FORBIDDEN");
                 break;
             }
                        switch_event_fire(&s_event);
@@ -1794,14 +1794,14 @@ uint8_t sofia_reg_handle_register_token(nua_t *nua, sofia_profile_t *profile, nu
                        }
 
                        if (forbidden && switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_REGISTER_FAILURE) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
-                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "to-user", to_user);
-                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "to-host", to_host);
-                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "network-ip", network_ip);
-                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "user-agent", agent);
-                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
-                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "network-port", network_port_c);
-                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "registration-type", (regtype == REG_INVITE) ? "INVITE" : "REGISTER");
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "to-user", to_user);
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "to-host", to_host);
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "network-ip", network_ip);
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "user-agent", agent);
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "network-port", network_port_c);
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "registration-type", (regtype == REG_INVITE) ? "INVITE" : "REGISTER");
                                switch_event_fire(&s_event);
                        }
                        switch_goto_int(r, 1, end);
@@ -1812,21 +1812,21 @@ uint8_t sofia_reg_handle_register_token(nua_t *nua, sofia_profile_t *profile, nu
                const char *realm = profile->challenge_realm;
 
                if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_PRE_REGISTER) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "from-user", to_user);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "from-host", reg_host);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "from-user", to_user);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "from-host", reg_host);
                        if (contact)
-                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "contact", contact_str);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "call-id", call_id);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "rpid", rpid);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "status", reg_desc);
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "contact", contact_str);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "call-id", call_id);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "rpid", rpid);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "status", reg_desc);
                        if (contact)
                                switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "expires", "%ld", (long) exptime);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "to-user", from_user);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "to-host", from_host);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "network-ip", network_ip);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "network-port", network_port_c);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "user-agent", agent);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "to-user", from_user);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "to-host", from_host);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "network-ip", network_ip);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "network-port", network_port_c);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "user-agent", agent);
                        switch_event_fire(&s_event);
                }
 
@@ -2058,24 +2058,24 @@ uint8_t sofia_reg_handle_register_token(nua_t *nua, sofia_profile_t *profile, nu
 
 
                if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_REGISTER) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "from-user", to_user);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "from-host", reg_host);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "presence-hosts", profile->presence_hosts ? profile->presence_hosts : "n/a");
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "contact", contact_str);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "call-id", call_id);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "rpid", rpid);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "status", reg_desc);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "from-user", to_user);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "from-host", reg_host);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "presence-hosts", profile->presence_hosts ? profile->presence_hosts : "n/a");
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "contact", contact_str);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "call-id", call_id);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "rpid", rpid);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "status", reg_desc);
                        switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "expires", "%ld", (long) exptime);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "to-user", from_user);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "to-host", from_host);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "network-ip", network_ip);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "network-port", network_port_c);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "username", username);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "realm", realm);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "user-agent", agent);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "to-user", from_user);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "to-host", from_host);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "network-ip", network_ip);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "network-port", network_port_c);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "username", username);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "realm", realm);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "user-agent", agent);
                        if (update_registration) {
-                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "update-reg", "true");
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "update-reg", "true");
                        }
                        if (v_event && *v_event) {
                                switch_event_merge(s_event, *v_event);
@@ -2102,15 +2102,15 @@ uint8_t sofia_reg_handle_register_token(nua_t *nua, sofia_profile_t *profile, nu
                sofia_reg_check_socket(profile, call_id, network_ip, network_port_c);
 
                if (send && switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", rpid);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", profile->url);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "user-agent",
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", rpid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", profile->url);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "user-agent",
                                                                                   (sip && sip->sip_user_agent) ? sip->sip_user_agent->g_string : "unknown");
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", to_user, sub_host);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "status", "Unregistered");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "presence-source", "register");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "status", "Unregistered");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "presence-source", "register");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
                        switch_event_fire(&event);
                }
 
@@ -2168,8 +2168,8 @@ uint8_t sofia_reg_handle_register_token(nua_t *nua, sofia_profile_t *profile, nu
                                if (send_message_query == 2 || (reg_count == 1 && send_message_query == 1 && debounce_ok)) {
                                        if (switch_event_create(&s_mwi_event, SWITCH_EVENT_MESSAGE_QUERY) == SWITCH_STATUS_SUCCESS) {
                                                switch_event_add_header(s_mwi_event, SWITCH_STACK_BOTTOM, "Message-Account", "%s:%s@%s", proto, mwi_user, mwi_host);
-                                               switch_event_add_header_string(s_mwi_event, SWITCH_STACK_BOTTOM, "VM-Sofia-Profile", profile->name);
-                                               switch_event_add_header_string(s_mwi_event, SWITCH_STACK_BOTTOM, "VM-Call-ID", call_id);
+                                               switch_event_add_header_string_dup(s_mwi_event, SWITCH_STACK_BOTTOM, "VM-Sofia-Profile", profile->name);
+                                               switch_event_add_header_string_dup(s_mwi_event, SWITCH_STACK_BOTTOM, "VM-Call-ID", call_id);
                                        }
                                }
 
@@ -2179,23 +2179,23 @@ uint8_t sofia_reg_handle_register_token(nua_t *nua, sofia_profile_t *profile, nu
 
                                        if (sofia_test_pflag(profile, PFLAG_PRESENCE_PROBE_ON_REGISTER)) {
                                                if (switch_event_create(&s_event, SWITCH_EVENT_PRESENCE_PROBE) == SWITCH_STATUS_SUCCESS) {
-                                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
-                                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "login", profile->name);
+                                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
+                                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "login", profile->name);
                                                        switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "from", "%s@%s", to_user, sub_host);
                                                        switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "to", "%s@%s", to_user, sub_host);
-                                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-                                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "presence-source", "register");
-                                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+                                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+                                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "presence-source", "register");
+                                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
                                                        switch_event_fire(&s_event);
                                                }
                                        } else {
                                                if (switch_event_create(&s_event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
-                                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
-                                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "login", profile->name);
-                                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "presence-source", "register");
+                                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO);
+                                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "login", profile->name);
+                                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "presence-source", "register");
                                                        switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "from", "%s@%s", to_user, sub_host);
-                                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
-                                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "status", "Registered");
+                                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
+                                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "status", "Registered");
                                                        switch_event_fire(&s_event);
                                                }
                                        }
@@ -2212,17 +2212,17 @@ uint8_t sofia_reg_handle_register_token(nua_t *nua, sofia_profile_t *profile, nu
                                switch_core_del_registration(to_user, reg_host, call_id);
 
                                if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_UNREGISTER) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
-                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "username", username);
-                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "from-user", to_user);
-                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "from-host", reg_host);
-                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "contact", contact_str);
-                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "call-id", call_id);
-                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "rpid", rpid);
-                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "realm", realm);
-                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "network-ip", network_ip);
-                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "network-port", network_port_c);
-                                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "user-agent", agent);
+                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name);
+                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "username", username);
+                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "from-user", to_user);
+                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "from-host", reg_host);
+                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "contact", contact_str);
+                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "call-id", call_id);
+                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "rpid", rpid);
+                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "realm", realm);
+                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "network-ip", network_ip);
+                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "network-port", network_port_c);
+                                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "user-agent", agent);
                                        switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "expires", "%ld", (long) exptime);
 
                                        if (v_event && *v_event) {
@@ -2796,10 +2796,10 @@ void sofia_reg_handle_sip_r_challenge(int status,
                switch_event_create(&locate_params, SWITCH_EVENT_REQUEST_PARAMS);
                switch_assert(locate_params);
 
-               switch_event_add_header_string(locate_params, SWITCH_STACK_BOTTOM, "action", "reverse-auth-lookup");
+               switch_event_add_header_string_dup(locate_params, SWITCH_STACK_BOTTOM, "action", "reverse-auth-lookup");
 
                if ( sip->sip_call_id ) {
-                       switch_event_add_header_string(locate_params, SWITCH_STACK_BOTTOM, "sip_call_id", sip->sip_call_id->i_id);
+                       switch_event_add_header_string_dup(locate_params, SWITCH_STACK_BOTTOM, "sip_call_id", sip->sip_call_id->i_id);
                }
 
                if (switch_xml_locate_user_merged("id", sip->sip_to->a_url->url_user, sip->sip_to->a_url->url_host, NULL,
@@ -2834,9 +2834,9 @@ void sofia_reg_handle_sip_r_challenge(int status,
                if (gateway) {
                        switch_event_t *s_event;
                        if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_GATEWAY_INVALID_DIGEST_REQ) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Gateway", gateway->name);
-                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile-name", gateway->profile->name);
-                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "realm", realm);
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "Gateway", gateway->name);
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile-name", gateway->profile->name);
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "realm", realm);
                                switch_event_fire(&s_event);
                        }
                }
@@ -3124,50 +3124,50 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile,
 
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
        switch_assert(params);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "action", "sip_auth");
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_user_agent", user_agent);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_auth_username", username);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_auth_realm", realm);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_auth_nonce", nonce);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_auth_uri", uri);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "action", "sip_auth");
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_profile", profile->name);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_user_agent", user_agent);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_auth_username", username);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_auth_realm", realm);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_auth_nonce", nonce);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_auth_uri", uri);
 
        if (sip->sip_contact) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_contact_user", sip->sip_contact->m_url->url_user);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_contact_host", sip->sip_contact->m_url->url_host);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_contact_user", sip->sip_contact->m_url->url_user);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_contact_host", sip->sip_contact->m_url->url_host);
        }
 
        if (sip->sip_to) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_to_user", sip->sip_to->a_url->url_user);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_to_host", sip->sip_to->a_url->url_host);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_to_user", sip->sip_to->a_url->url_user);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_to_host", sip->sip_to->a_url->url_host);
                if (sip->sip_to->a_url->url_port) {
-                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_to_port", sip->sip_to->a_url->url_port);
+                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_to_port", sip->sip_to->a_url->url_port);
                }
        }
 
        if (sip->sip_via) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_via_protocol", sofia_glue_transport2str(sofia_glue_via2transport(sip->sip_via)));
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_via_protocol", sofia_glue_transport2str(sofia_glue_via2transport(sip->sip_via)));
        }
 
 
        if (sip->sip_from) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_from_user", sip->sip_from->a_url->url_user);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_from_host", sip->sip_from->a_url->url_host);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_from_user", sip->sip_from->a_url->url_user);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_from_host", sip->sip_from->a_url->url_host);
                if (sip->sip_from->a_url->url_port) {
-                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_from_port", sip->sip_from->a_url->url_port);
+                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_from_port", sip->sip_from->a_url->url_port);
                }
        }
 
        if (sip->sip_call_id && sip->sip_call_id->i_id) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_call_id", sip->sip_call_id->i_id);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_call_id", sip->sip_call_id->i_id);
        }
 
 
        if (sip->sip_request) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_request_user", sip->sip_request->rq_url->url_user);
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_request_host", sip->sip_request->rq_url->url_host);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_request_user", sip->sip_request->rq_url->url_user);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_request_host", sip->sip_request->rq_url->url_host);
                if (sip->sip_request->rq_url->url_port) {
-                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_request_port", sip->sip_request->rq_url->url_port);
+                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_request_port", sip->sip_request->rq_url->url_port);
                }
        }
 
@@ -3175,7 +3175,7 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile,
                if (!strncasecmp(un->un_name, "X-", 2)) {
                        if (!zstr(un->un_value)) {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG10, "adding %s => %s to xml_curl request\n", un->un_name, un->un_value);
-                               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, un->un_name, un->un_value);
+                               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, un->un_name, un->un_value);
                        }
                } else {
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG10, "skipping %s => %s from xml_curl request\n", un->un_name, un->un_value);
@@ -3183,19 +3183,19 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile,
        }
 
        if (qop) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_auth_qop", qop);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_auth_qop", qop);
        }
        if (cnonce) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_auth_cnonce", cnonce);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_auth_cnonce", cnonce);
        }
        if (nc) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_auth_nc", nc);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_auth_nc", nc);
        }
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_auth_response", response);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_auth_response", response);
 
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_auth_method", (sip && sip->sip_request) ? sip->sip_request->rq_method_name : NULL);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "sip_auth_method", (sip && sip->sip_request) ? sip->sip_request->rq_method_name : NULL);
 
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "client_port", client_port);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "client_port", client_port);
        if (auth_params) {
                switch_event_dup(auth_params, params);
        }
@@ -3442,15 +3442,15 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile,
                        switch_xml_t xparams[6];
                        int i = 0;
 
-                       switch_event_add_header_string(*v_event, SWITCH_STACK_BOTTOM, "sip_number_alias", number_alias);
-                       switch_event_add_header_string(*v_event, SWITCH_STACK_BOTTOM, "sip_auth_username", username);
-                       switch_event_add_header_string(*v_event, SWITCH_STACK_BOTTOM, "sip_auth_realm", realm);
-                       switch_event_add_header_string(*v_event, SWITCH_STACK_BOTTOM, "number_alias", number_alias);
-                       switch_event_add_header_string(*v_event, SWITCH_STACK_BOTTOM, "user_name", username);
-                       switch_event_add_header_string(*v_event, SWITCH_STACK_BOTTOM, "domain_name", domain_name);
+                       switch_event_add_header_string_dup(*v_event, SWITCH_STACK_BOTTOM, "sip_number_alias", number_alias);
+                       switch_event_add_header_string_dup(*v_event, SWITCH_STACK_BOTTOM, "sip_auth_username", username);
+                       switch_event_add_header_string_dup(*v_event, SWITCH_STACK_BOTTOM, "sip_auth_realm", realm);
+                       switch_event_add_header_string_dup(*v_event, SWITCH_STACK_BOTTOM, "number_alias", number_alias);
+                       switch_event_add_header_string_dup(*v_event, SWITCH_STACK_BOTTOM, "user_name", username);
+                       switch_event_add_header_string_dup(*v_event, SWITCH_STACK_BOTTOM, "domain_name", domain_name);
 
                        if (mwi_account) {
-                               switch_event_add_header_string(*v_event, SWITCH_STACK_BOTTOM, "mwi-account", mwi_account);
+                               switch_event_add_header_string_dup(*v_event, SWITCH_STACK_BOTTOM, "mwi-account", mwi_account);
                        }
 
                        if ((uparams = switch_xml_child(user, "params"))) {
@@ -3476,7 +3476,7 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile,
                                                        if (profile->debug) {
                                                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "event_add_header -> '%s' = '%s'\n", var, val);
                                                        }
-                                                       switch_event_add_header_string(*v_event, SWITCH_STACK_BOTTOM, var, val);
+                                                       switch_event_add_header_string_dup(*v_event, SWITCH_STACK_BOTTOM, var, val);
                                                }
                                        }
                                }
@@ -3722,8 +3722,8 @@ switch_status_t sofia_reg_add_gateway(sofia_profile_t *profile, const char *key,
                switch_event_t *s_event;
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Added gateway '%s' to profile '%s'\n", gateway->name, gateway->profile->name);
                if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_GATEWAY_ADD) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Gateway", gateway->name);
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile-name", gateway->profile->name);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "Gateway", gateway->name);
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "profile-name", gateway->profile->name);
                        switch_event_fire(&s_event);
                }
        }
index 2245c33a5641e8a1350653acc3478043e9bfb5ae..6735683557dab03ab53e75f98a10772d30701c1c 100644 (file)
@@ -392,7 +392,7 @@ static void presence_ping(const char *event_channel)
                                if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_CALLSTATE) == SWITCH_STATUS_SUCCESS) {
                                        switch_channel_callstate_t callstate = switch_channel_get_callstate(channel);
 
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Original-Channel-Call-State", switch_channel_callstate2str(callstate));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Original-Channel-Call-State", switch_channel_callstate2str(callstate));
                                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-Call-State-Number", "%d", callstate);
                                        switch_channel_event_set_data(channel, event);
                                        switch_event_fire(&event);
@@ -854,7 +854,7 @@ static void set_perm(const char *str, switch_event_t **event, switch_bool_t add)
                        }
 
                        if (add) {
-                               switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, cur, MARKER);
+                               switch_event_add_header_string_dup(*event, SWITCH_STACK_BOTTOM, cur, MARKER);
                        } else {
                                switch_event_del_header(*event, cur);
                        }
@@ -905,7 +905,7 @@ static void check_permissions(jsock_t *jsock, switch_xml_t x_user, cJSON *params
        set_perm(allowed_fsapi, &jsock->allowed_fsapi, SWITCH_TRUE);
        set_perm(allowed_event_channels, &jsock->allowed_event_channels, SWITCH_TRUE);
 
-       switch_event_add_header_string(jsock->allowed_methods, SWITCH_STACK_BOTTOM, "login", MARKER);
+       switch_event_add_header_string_dup(jsock->allowed_methods, SWITCH_STACK_BOTTOM, "login", MARKER);
 
 }
 
@@ -940,16 +940,16 @@ static void login_fire_custom_event(jsock_t *jsock, cJSON *params, int success,
        switch_event_t *s_event;
 
        if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_LOGIN) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "verto_profile_name", jsock->profile->name);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "verto_client_address", jsock->name);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "verto_profile_name", jsock->profile->name);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "verto_client_address", jsock->name);
                if (params) {
-                       switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "verto_login", cJSON_GetObjectCstr(params, "login"));
+                       switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "verto_login", cJSON_GetObjectCstr(params, "login"));
                        if (success) {
-                               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "verto_sessid", cJSON_GetObjectCstr(params, "sessid"));
+                               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "verto_sessid", cJSON_GetObjectCstr(params, "sessid"));
                        }
                }
                switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "verto_success", "%d", success);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "verto_result_txt", result_txt);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "verto_result_txt", result_txt);
                switch_event_fire(&s_event);
        }
 }
@@ -1027,11 +1027,11 @@ static switch_bool_t check_auth(jsock_t *jsock, cJSON *params, int *code, char *
 
                        for(i = json_ptr->child; i; i = i->next) {
                                if (i->type == cJSON_True) {
-                                       switch_event_add_header_string(req_params, SWITCH_STACK_BOTTOM, i->string, "true");
+                                       switch_event_add_header_string_dup(req_params, SWITCH_STACK_BOTTOM, i->string, "true");
                                } else if (i->type == cJSON_False) {
-                                       switch_event_add_header_string(req_params, SWITCH_STACK_BOTTOM, i->string, "false");
+                                       switch_event_add_header_string_dup(req_params, SWITCH_STACK_BOTTOM, i->string, "false");
                                } else if (!zstr(i->string) && !zstr(i->valuestring)) {
-                                       switch_event_add_header_string(req_params, SWITCH_STACK_BOTTOM, i->string, i->valuestring);
+                                       switch_event_add_header_string_dup(req_params, SWITCH_STACK_BOTTOM, i->string, i->valuestring);
                                }
                        }
                }
@@ -1043,21 +1043,21 @@ static switch_bool_t check_auth(jsock_t *jsock, cJSON *params, int *code, char *
                        switch_mutex_lock(jsock->flag_mutex);
                        for(i = json_ptr->child; i; i = i->next) {
                                if (i->type == cJSON_True) {
-                                       switch_event_add_header_string(jsock->user_vars, SWITCH_STACK_BOTTOM, i->string, "true");
+                                       switch_event_add_header_string_dup(jsock->user_vars, SWITCH_STACK_BOTTOM, i->string, "true");
                                } else if (i->type == cJSON_False) {
-                                       switch_event_add_header_string(jsock->user_vars, SWITCH_STACK_BOTTOM, i->string, "false");
+                                       switch_event_add_header_string_dup(jsock->user_vars, SWITCH_STACK_BOTTOM, i->string, "false");
                                } else if (!zstr(i->string) && !zstr(i->valuestring)) {
-                                       switch_event_add_header_string(jsock->user_vars, SWITCH_STACK_BOTTOM, i->string, i->valuestring);
+                                       switch_event_add_header_string_dup(jsock->user_vars, SWITCH_STACK_BOTTOM, i->string, i->valuestring);
                                }
                        }
                        switch_mutex_unlock(jsock->flag_mutex);
                }
 
                if (jsock->profile->send_passwd || verto_globals.send_passwd) {
-                       switch_event_add_header_string(req_params, SWITCH_STACK_BOTTOM, "user_supplied_pass", passwd);
+                       switch_event_add_header_string_dup(req_params, SWITCH_STACK_BOTTOM, "user_supplied_pass", passwd);
                }
                
-               switch_event_add_header_string(req_params, SWITCH_STACK_BOTTOM, "action", "jsonrpc-authenticate");
+               switch_event_add_header_string_dup(req_params, SWITCH_STACK_BOTTOM, "action", "jsonrpc-authenticate");
 
                if (switch_xml_locate_user_merged("id", id, domain, NULL, &x_user, req_params) != SWITCH_STATUS_SUCCESS && !jsock->profile->blind_reg) {
                        *code = CODE_AUTH_FAILED;
@@ -1105,7 +1105,7 @@ static switch_bool_t check_auth(jsock_t *jsock, cJSON *params, int *code, char *
                                                verto_dialplan = val;
                                        }
 
-                                       switch_event_add_header_string(jsock->params, SWITCH_STACK_BOTTOM, var, val);
+                                       switch_event_add_header_string_dup(jsock->params, SWITCH_STACK_BOTTOM, var, val);
                                }
                        }
 
@@ -1115,8 +1115,8 @@ static switch_bool_t check_auth(jsock_t *jsock, cJSON *params, int *code, char *
                                        const char *val = switch_xml_attr_soft(x_param, "value");
 
                                        switch_mutex_lock(jsock->flag_mutex);
-                                       switch_event_add_header_string(jsock->vars, SWITCH_STACK_BOTTOM, var, val);
-                                       switch_event_add_header_string(jsock->user_vars, SWITCH_STACK_BOTTOM, var, val);
+                                       switch_event_add_header_string_dup(jsock->vars, SWITCH_STACK_BOTTOM, var, val);
+                                       switch_event_add_header_string_dup(jsock->user_vars, SWITCH_STACK_BOTTOM, var, val);
                                        switch_mutex_unlock(jsock->flag_mutex);
 
                                        switch_clear_flag(jsock, JPFLAG_AUTH_EXPIRED);
@@ -1720,7 +1720,7 @@ static void request_headers_to_event(switch_event_t *event, kws_request_t *reque
 
        for (i = 0; i < KWS_MAX_HEADERS; i++) {
                if (!request->headers_k[i]) break;
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, request->headers_k[i], request->headers_v[i]);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, request->headers_k[i], request->headers_v[i]);
        }
 }
 
@@ -1814,8 +1814,8 @@ new_req:
        stream.raw_write_function = http_stream_raw_write;
        request_headers_to_event(stream.param_event, request);
 
-       switch_event_add_header_string(stream.param_event, SWITCH_STACK_BOTTOM, "Request-Method", request->method);
-       switch_event_add_header_string(stream.param_event, SWITCH_STACK_BOTTOM, "HTTP-Request-URI", request->uri);
+       switch_event_add_header_string_dup(stream.param_event, SWITCH_STACK_BOTTOM, "Request-Method", request->method);
+       switch_event_add_header_string_dup(stream.param_event, SWITCH_STACK_BOTTOM, "HTTP-Request-URI", request->uri);
 
        if (!jsock->profile->vhosts) goto err;
 
@@ -1882,7 +1882,7 @@ new_req:
 
 authed:
                switch_set_flag(jsock, JPFLAG_AUTHED);
-               switch_event_add_header_string(stream.param_event, SWITCH_STACK_BOTTOM, "HTTP-USER", auth_user);
+               switch_event_add_header_string_dup(stream.param_event, SWITCH_STACK_BOTTOM, "HTTP-USER", auth_user);
        }
 
        if (vhost->rewrites) {
@@ -1905,7 +1905,7 @@ authed:
                }
        }
 
-       switch_event_add_header_string(stream.param_event, SWITCH_STACK_BOTTOM, "HTTP-URI", request->uri);
+       switch_event_add_header_string_dup(stream.param_event, SWITCH_STACK_BOTTOM, "HTTP-URI", request->uri);
 
        if ((ext = strrchr(request->uri, '.'))) {
                char path[1024];
@@ -2180,9 +2180,9 @@ static void *SWITCH_THREAD_FUNC client_thread(switch_thread_t *thread, void *obj
 
     switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Ending client thread.\n", jsock->name);
        if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_CLIENT_DISCONNECT) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "verto_profile_name", jsock->profile->name);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "verto_client_address", jsock->name);
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "verto_login", switch_str_nil(jsock->uid));
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "verto_profile_name", jsock->profile->name);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "verto_client_address", jsock->name);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "verto_login", switch_str_nil(jsock->uid));
                switch_event_fire(&s_event);
        }
        switch_thread_rwlock_wrlock(jsock->rwlock);
@@ -3775,8 +3775,8 @@ static switch_bool_t verto__info_func(const char *method, cJSON *params, jsock_t
                                        json_text = cJSON_PrintUnformatted(jevent);
                                        switch_assert(json_text);
 
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "content-type", "text/json");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "content-source", "verto");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "content-type", "text/json");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "content-source", "verto");
                                        switch_event_add_body(event, "%s", json_text);
 
                                        switch_safe_free(json_text);
@@ -3873,27 +3873,27 @@ static switch_bool_t verto__info_func(const char *method, cJSON *params, jsock_t
                }
 
                if (!zstr(to) && !zstr(body) && switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", VERTO_CHAT_PROTO);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", VERTO_CHAT_PROTO);
 
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", jsock->uid);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from_user", jsock->id);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from_host", jsock->domain);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from", jsock->uid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from_user", jsock->id);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from_host", jsock->domain);
 
 
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to", to);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "text/plain");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from_full", jsock->id);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "verto_profile", jsock->profile->name);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "verto_jsock_uuid", jsock->uuid_str);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "to", to);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "text/plain");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from_full", jsock->id);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "verto_profile", jsock->profile->name);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "verto_jsock_uuid", jsock->uuid_str);
 
                        for(i = msg->child; i; i = i->next) {
                                if (!zstr(i->string) && !zstr(i->valuestring) && (!strncasecmp(i->string, "from_", 5) || !strncasecmp(i->string, "to_", 3))) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, i->string, i->valuestring);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, i->string, i->valuestring);
                                }
                        }
 
                        if (is_dialog) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call_id", call_id);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call_id", call_id);
                        }
 
                        switch_event_add_body(event, "%s", body);
@@ -3987,7 +3987,7 @@ static switch_bool_t verto__invite_func(const char *method, cJSON *params, jsock
                err = 1; goto cleanup;
        }
 
-       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "origination_uuid", call_id);
+       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "origination_uuid", call_id);
 
        if ((reason = switch_core_session_outgoing_channel(NULL, var_event, "rtc",
                                                                                                           NULL, &session, NULL, SOF_NONE, &cancel_cause)) != SWITCH_CAUSE_SUCCESS) {
@@ -4129,7 +4129,7 @@ static switch_bool_t verto__invite_func(const char *method, cJSON *params, jsock
                }
        } else if (caller_id_name) {
                if (!switch_event_get_header(jsock->params, "caller-id-name")) {
-                       switch_event_add_header_string(jsock->params, SWITCH_STACK_BOTTOM, "caller-id-name", caller_id_name);
+                       switch_event_add_header_string_dup(jsock->params, SWITCH_STACK_BOTTOM, "caller-id-name", caller_id_name);
                }
        }
 
@@ -4474,7 +4474,7 @@ static switch_bool_t login_func(const char *method, cJSON *params, jsock_t *jsoc
        switch_mutex_lock(jsock->flag_mutex);
        if ((var = switch_event_get_header(jsock->vars, "moderator")) && switch_true(var)) {
                cJSON_AddItemToObject(*response, "moderator", cJSON_CreateTrue());
-               switch_event_add_header_string(jsock->vars, SWITCH_STACK_BOTTOM, "conf_mvar_moderator", "true");
+               switch_event_add_header_string_dup(jsock->vars, SWITCH_STACK_BOTTOM, "conf_mvar_moderator", "true");
        }
 
        if ((var = switch_event_get_header(jsock->vars, "stereo_audio")) && switch_true(var)) {
@@ -4482,7 +4482,7 @@ static switch_bool_t login_func(const char *method, cJSON *params, jsock_t *jsoc
        }
 
        if ((var = switch_event_get_header(jsock->vars, "superuser")) && switch_true(var)) {
-               switch_event_add_header_string(jsock->vars, SWITCH_STACK_BOTTOM, "conf_mvar_superuser", "true");
+               switch_event_add_header_string_dup(jsock->vars, SWITCH_STACK_BOTTOM, "conf_mvar_superuser", "true");
                cJSON_AddItemToObject(*response, "superuser", cJSON_CreateTrue());
        }
        switch_mutex_unlock(jsock->flag_mutex);
@@ -4712,7 +4712,7 @@ static int start_jsock(verto_profile_t *profile, ks_socket_t sock, int family)
                                          jsock->name, jsock->remote_host, jsock->remote_port);
 
        if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_CLIENT_CONNECT) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "verto_profile_name", profile->name);
+               switch_event_add_header_string_dup(s_event, SWITCH_STACK_BOTTOM, "verto_profile_name", profile->name);
                switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "verto_client_address", "%s", jsock->name);
                switch_event_fire(&s_event);
        }
@@ -5408,7 +5408,7 @@ static switch_status_t parse_config(const char *cf)
 
                                                                if (zstr(expr)) continue;
 
-                                                               switch_event_add_header_string(vhost->rewrites, SWITCH_STACK_BOTTOM, expr, val);
+                                                               switch_event_add_header_string_dup(vhost->rewrites, SWITCH_STACK_BOTTOM, expr, val);
                                                        }
                                                }
                                        } // rewrites
@@ -6060,14 +6060,14 @@ static switch_call_cause_t verto_outgoing_channel(switch_core_session_t *session
        if (!switch_stristr("u:", dest)) {
                char *dial_str = verto_get_dial_string(dest, NULL);
 
-               switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "verto_orig_dest", dest);
+               switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "verto_orig_dest", dest);
                if (zstr(switch_event_get_header(var_event, "origination_callee_id_number"))) {
                        char *p;
                        char *trimmed_dest = strdup(dest);
                        switch_assert(trimmed_dest);
                        p = strchr(trimmed_dest, '@');
                        if (p) *p = '\0';
-                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "origination_callee_id_number", trimmed_dest);
+                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "origination_callee_id_number", trimmed_dest);
                        free(trimmed_dest);
                }
 
@@ -6101,10 +6101,10 @@ static switch_call_cause_t verto_outgoing_channel(switch_core_session_t *session
                        if (dialed_domain) {
                                switch_event_add_header(var_event, SWITCH_STACK_BOTTOM, "verto_orig_dest", "%s@%s", dialed_user, dialed_domain);
                        } else {
-                               switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "verto_orig_dest", dialed_user);
+                               switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "verto_orig_dest", dialed_user);
                        }
                        if (zstr(switch_event_get_header(var_event, "origination_callee_id_number"))) {
-                               switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "origination_callee_id_number", dialed_user);
+                               switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "origination_callee_id_number", dialed_user);
                                outbound_profile->callee_id_number = switch_sanitize_number(switch_core_strdup(outbound_profile->pool, dialed_user));
                        }
                }
index 292134d716ddf3d54154d00047e8eb9e5fb14652..348afbd60406847dc644b726f4f16556edacb26c 100644 (file)
@@ -84,16 +84,16 @@ static void *SWITCH_THREAD_FUNC api_exec(switch_thread_t *thread, void *obj)
                if (switch_event_create(&event, SWITCH_EVENT_BACKGROUND_JOB) == SWITCH_STATUS_SUCCESS) {
                        ei_x_buff ebuf;
 
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Job-UUID", acs->uuid_str);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Job-Command", acs->api_cmd);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Job-UUID", acs->uuid_str);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Job-Command", acs->api_cmd);
 
                        ei_x_new_with_version(&ebuf);
 
                        if (acs->arg) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Job-Command-Arg", acs->arg);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Job-Command-Arg", acs->arg);
                        }
 
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Job-Successful", r ? "true" : "false");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Job-Successful", r ? "true" : "false");
                        switch_event_add_body(event, "%s", reply);
 
                        switch_event_fire(&event);
@@ -373,7 +373,7 @@ static switch_status_t handle_msg_filter(listener_t *listener, int arity, ei_x_b
                                                        *header_val++ = '\0';
                                                }
                                        }
-                                       switch_event_add_header_string(listener->filters, SWITCH_STACK_BOTTOM, header_name, header_val);
+                                       switch_event_add_header_string_dup(listener->filters, SWITCH_STACK_BOTTOM, header_name, header_val);
                                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "+OK filter added. [%s]=[%s]", header_name, header_val);
                                        ei_x_encode_tuple_header(rbuf, 3);
                                        _ei_x_encode_string(rbuf, "added");
index d15f748eb78d7f77ad6dae0077d97592574a248f..1f61a735d507cc2d252bffd09634ad5df3d271dc 100644 (file)
@@ -663,8 +663,8 @@ static switch_status_t notify_new_session(listener_t *listener, session_elem_t *
        switch_channel_event_set_data(channel, call_event);
        switch_core_session_rwunlock(session);
        /* TODO reply? sure? */
-       switch_event_add_header_string(call_event, SWITCH_STACK_BOTTOM, "Content-Type", "command/reply");
-       switch_event_add_header_string(call_event, SWITCH_STACK_BOTTOM, "Reply-Text", "+OK\n");
+       switch_event_add_header_string_dup(call_event, SWITCH_STACK_BOTTOM, "Content-Type", "command/reply");
+       switch_event_add_header_string_dup(call_event, SWITCH_STACK_BOTTOM, "Reply-Text", "+OK\n");
 
        ei_x_new_with_version(&lbuf);
        ei_x_encode_tuple_header(&lbuf, 2);
@@ -721,7 +721,7 @@ static switch_status_t check_attached_sessions(listener_t *listener, int *msgs_s
                        if (status != SWITCH_STATUS_SUCCESS) {
                                switch_log_printf(SWITCH_CHANNEL_UUID_LOG(sp->uuid_str), SWITCH_LOG_DEBUG, "Notifying new session failed\n");
                                /* mark this session for removal */
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "delete", (const char *) key);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "delete", (const char *) key);
                                continue;
                        }
                        switch_set_flag_locked(sp, LFLAG_OUTBOUND_INIT);
@@ -767,7 +767,7 @@ static switch_status_t check_attached_sessions(listener_t *listener, int *msgs_s
                        switch_mutex_unlock(listener->sock_mutex);
                        ei_x_free(&ebuf);
 
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "delete", (const char *) key);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "delete", (const char *) key);
                        continue;
                } else if (switch_queue_trypop(sp->event_queue, &pop) == SWITCH_STATUS_SUCCESS) {
 
index 1ebf5cb7fed1dd0ccb0bdb7bae49b6b46d82fcd2..506ed52a15e97869b2fa1564429dbd67404b0b6f 100644 (file)
@@ -496,13 +496,13 @@ static void event_handler(switch_event_t *event)
                                switch_event_t *local_event;
                                if (switch_event_create_subclass(&local_event, SWITCH_EVENT_CUSTOM, MULTICAST_PEERUP) == SWITCH_STATUS_SUCCESS) {
                                        char lastseen[21];
-                                       switch_event_add_header_string(local_event, SWITCH_STACK_BOTTOM, "Peer", sender);
+                                       switch_event_add_header_string_dup(local_event, SWITCH_STACK_BOTTOM, "Peer", sender);
                                        if (p->lastseen) {
                                                switch_snprintf(lastseen, sizeof(lastseen), "%d", (int) p->lastseen);
                                        } else {
                                                switch_snprintf(lastseen, sizeof(lastseen), "%s", "Never");
                                        }
-                                       switch_event_add_header_string(local_event, SWITCH_STACK_BOTTOM, "Lastseen", lastseen);
+                                       switch_event_add_header_string_dup(local_event, SWITCH_STACK_BOTTOM, "Lastseen", lastseen);
                                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Peer %s has come up; last seen: %s\n", sender, lastseen);
 
                                        switch_event_fire(&local_event);
@@ -576,9 +576,9 @@ static void event_handler(switch_event_t *event)
                                last->active = SWITCH_FALSE;
                                if (switch_event_create_subclass(&local_event, SWITCH_EVENT_CUSTOM, MULTICAST_PEERDOWN) == SWITCH_STATUS_SUCCESS) {
                                        char lastseen[21];
-                                       switch_event_add_header_string(local_event, SWITCH_STACK_BOTTOM, "Peer", host);
+                                       switch_event_add_header_string_dup(local_event, SWITCH_STACK_BOTTOM, "Peer", host);
                                        switch_snprintf(lastseen, sizeof(lastseen), "%d", (int) last->lastseen);
-                                       switch_event_add_header_string(local_event, SWITCH_STACK_BOTTOM, "Lastseen", lastseen);
+                                       switch_event_add_header_string_dup(local_event, SWITCH_STACK_BOTTOM, "Lastseen", lastseen);
                                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Peer %s has gone down; last seen: %s\n", host, lastseen);
 
                                        switch_event_fire(&local_event);
@@ -604,7 +604,7 @@ static void event_handler(switch_event_t *event)
                        case SWITCH_EVENT_LOG:
                                return;
                        default:
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Multicast-Sender", switch_core_get_switchname());
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Multicast-Sender", switch_core_get_switchname());
                                if (switch_event_serialize(event, &packet, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS) {
                                        size_t len;
                                        char *buf;
@@ -760,7 +760,7 @@ static switch_status_t process_packet(char* packet, size_t len)
        /*switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "\nEVENT %d\n--------------------------------\n%s\n", (int) len, packet); */
        if (switch_event_create_subclass(&local_event, SWITCH_EVENT_CUSTOM, MULTICAST_EVENT) == SWITCH_STATUS_SUCCESS) {
                char *var, *val, *term = NULL, tmpname[128];
-               switch_event_add_header_string(local_event, SWITCH_STACK_BOTTOM, "Multicast", "yes");
+               switch_event_add_header_string_dup(local_event, SWITCH_STACK_BOTTOM, "Multicast", "yes");
                var = packet;
                while (var && *var) {
                        if ((val = strchr(var, ':')) != 0) {
@@ -776,7 +776,7 @@ static switch_status_t process_packet(char* packet, size_t len)
                                }
                                switch_url_decode(val);
                                switch_snprintf(tmpname, sizeof(tmpname), "Orig-%s", var);
-                               switch_event_add_header_string(local_event, SWITCH_STACK_BOTTOM, tmpname, val);
+                               switch_event_add_header_string_dup(local_event, SWITCH_STACK_BOTTOM, tmpname, val);
                                var = term + 1;
                        } else {
                                /* This should be our magic packet, done processing incoming headers */
index 70331a95e288a3d4d8942c8359525d7dddda1131..7a22512678574df1bd4f1dc6a8e4091047c1a092 100644 (file)
@@ -800,7 +800,7 @@ SWITCH_STANDARD_API(event_sink_function)
                                stream->write_function(stream, "<data><reply type=\"error\">Invalid Syntax</reply></data>\n");
                                goto filter_end;
                        }
-                       switch_event_add_header_string(listener->filters, SWITCH_STACK_BOTTOM, header_name, header_val);
+                       switch_event_add_header_string_dup(listener->filters, SWITCH_STACK_BOTTOM, header_name, header_val);
                        stream->write_function(stream, "<data>\n <reply type=\"success\">filter added.</reply>\n<api-command>\n");
                } else {
                        stream->write_function(stream, "<data><reply type=\"error\">Invalid Syntax</reply></data>\n");
@@ -1297,7 +1297,7 @@ static switch_status_t read_packet(listener_t *listener, switch_event_t **event,
                                        count++;
                                        if (count == 1) {
                                                switch_event_create(event, SWITCH_EVENT_CLONE);
-                                               switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Command", mbuf);
+                                               switch_event_add_header_string_dup(*event, SWITCH_STACK_BOTTOM, "Command", mbuf);
                                        } else if (cur) {
                                                char *var, *val;
                                                var = cur;
@@ -1310,7 +1310,7 @@ static switch_status_t read_packet(listener_t *listener, switch_event_t **event,
                                                                }
                                                        }
                                                        if (val) {
-                                                               switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, var, val);
+                                                               switch_event_add_header_string_dup(*event, SWITCH_STACK_BOTTOM, var, val);
                                                                if (!strcasecmp(var, "content-length")) {
                                                                        clen = atoi(val);
 
@@ -1570,11 +1570,11 @@ static void *SWITCH_THREAD_FUNC api_exec(switch_thread_t *thread, void *obj)
                switch_event_t *event;
 
                if (switch_event_create(&event, SWITCH_EVENT_BACKGROUND_JOB) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Job-UUID", acs->uuid_str);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Job-Owner-UUID", acs->bg_owner_uuid_str);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Job-Command", acs->api_cmd);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Job-UUID", acs->uuid_str);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Job-Owner-UUID", acs->bg_owner_uuid_str);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Job-Command", acs->api_cmd);
                        if (acs->arg) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Job-Command-Arg", acs->arg);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Job-Command-Arg", acs->arg);
                        }
                        switch_event_add_body(event, "%s", reply);
                        switch_event_fire(&event);
@@ -1807,7 +1807,7 @@ static switch_status_t parse_command(listener_t *listener, switch_event_t **even
 
                        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
                        switch_assert(params);
-                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "action", "event_socket_auth");
+                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "action", "event_socket_auth");
 
                        if (switch_xml_locate_user("id", user, domain_name, NULL, &x_domain_root, &x_domain, &x_user, &x_group, params) == SWITCH_STATUS_SUCCESS) {
                                switch_xml_t list[3];
@@ -1990,7 +1990,7 @@ static switch_status_t parse_command(listener_t *listener, switch_event_t **even
                                        *header_val++ = '\0';
                                }
                        }
-                       switch_event_add_header_string(listener->filters, SWITCH_STACK_BOTTOM, header_name, header_val);
+                       switch_event_add_header_string_dup(listener->filters, SWITCH_STACK_BOTTOM, header_name, header_val);
                        switch_snprintf(reply, reply_len, "+OK filter added. [%s]=[%s]", header_name, header_val);
                } else {
                        switch_snprintf(reply, reply_len, "-ERR invalid syntax");
@@ -2026,10 +2026,10 @@ static switch_status_t parse_command(listener_t *listener, switch_event_t **even
                                switch_caller_profile_event_set_data(switch_channel_get_caller_profile(channel), "Channel", call_event);
                                switch_channel_event_set_data(channel, call_event);
                        }
-                       switch_event_add_header_string(call_event, SWITCH_STACK_BOTTOM, "Content-Type", "command/reply");
-                       switch_event_add_header_string(call_event, SWITCH_STACK_BOTTOM, "Reply-Text", "+OK\n");
-                       switch_event_add_header_string(call_event, SWITCH_STACK_BOTTOM, "Socket-Mode", switch_test_flag(listener, LFLAG_ASYNC) ? "async" : "static");
-                       switch_event_add_header_string(call_event, SWITCH_STACK_BOTTOM, "Control", switch_test_flag(listener, LFLAG_FULL) ? "full" : "single-channel");
+                       switch_event_add_header_string_dup(call_event, SWITCH_STACK_BOTTOM, "Content-Type", "command/reply");
+                       switch_event_add_header_string_dup(call_event, SWITCH_STACK_BOTTOM, "Reply-Text", "+OK\n");
+                       switch_event_add_header_string_dup(call_event, SWITCH_STACK_BOTTOM, "Socket-Mode", switch_test_flag(listener, LFLAG_ASYNC) ? "async" : "static");
+                       switch_event_add_header_string_dup(call_event, SWITCH_STACK_BOTTOM, "Control", switch_test_flag(listener, LFLAG_FULL) ? "full" : "single-channel");
 
                        switch_event_serialize(call_event, &event_str, SWITCH_TRUE);
                        switch_assert(event_str);
@@ -2238,7 +2238,7 @@ static switch_status_t parse_command(listener_t *listener, switch_event_t **even
                char uuid_str[SWITCH_UUID_FORMATTED_LENGTH + 1];
                switch_uuid_str(uuid_str, sizeof(uuid_str));
 
-               switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-UUID", uuid_str);
+               switch_event_add_header_string_dup(*event, SWITCH_STACK_BOTTOM, "Event-UUID", uuid_str);
 
                strip_cr(cmd);
 
index 6d956376a8365541ef2fb723d476ac6f9b88dc88..980bd2904f24bfeb8df6878a7e154b3b0b472134 100644 (file)
@@ -267,7 +267,7 @@ static size_t header_callback(char *buffer, size_t size, size_t nitems, void *us
        char buf[1024];
        if(len > 2 && len < 1024) {
                snprintf(buf, sizeof(buf), "%s", buffer);
-               switch_event_add_header_string(event, SWITCH_STACK_PUSH | SWITCH_STACK_BOTTOM, "Reply-Headers", buf);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_PUSH | SWITCH_STACK_BOTTOM, "Reply-Headers", buf);
        }
        return nitems * size;
 }
@@ -538,8 +538,8 @@ SWITCH_STANDARD_API(kz_contact_fun)
 
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
        switch_assert(params);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "action", "call");
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "Fetch-Exclude-Cache", "true");
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "action", "call");
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "Fetch-Exclude-Cache", "true");
 
        /*
        if (stream->param_event) {
@@ -549,9 +549,9 @@ SWITCH_STANDARD_API(kz_contact_fun)
 
        /*
        if (session) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "Fetch-Call-UUID", switch_core_session_get_uuid(session));
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "Fetch-Call-UUID", switch_core_session_get_uuid(session));
        } else if (stream->param_event && (var = switch_event_get_header(stream->param_event, "ent_originate_aleg_uuid")) != NULL) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "Fetch-Call-UUID", var);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "Fetch-Call-UUID", var);
        }
        */
 
index 5a0165096948e842e0c0b516f898fc3ab8747e24..e0179dd4ebd34cc78d623b394c0408f2cb7a30a6 100644 (file)
@@ -183,7 +183,7 @@ SWITCH_STANDARD_APP(prefix_unset_function)
                const char *name = ei->name;
                char *value = ei->value;
                if (!strncasecmp(name, arg, strlen(arg))) {
-                       switch_event_add_header_string(clear, SWITCH_STACK_BOTTOM, name, value);
+                       switch_event_add_header_string_dup(clear, SWITCH_STACK_BOTTOM, name, value);
                }
        }
 
@@ -885,7 +885,7 @@ void *SWITCH_THREAD_FUNC kz_att_thread_run(switch_thread_t *thread, void *obj)
        b_channel = switch_core_session_get_channel(b_session);
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, "sofia::transferee") == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(b_channel, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "att_xfer_replaced_call_id", switch_core_session_get_uuid(peer_session));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "att_xfer_replaced_call_id", switch_core_session_get_uuid(peer_session));
                switch_event_fire(&event);
        }
 
index ef45af0ea369fd37f3a92bace17211971d2a71cb..c71b51b5ad56bcd56a38993b60a4f80e416a4fde 100644 (file)
@@ -862,7 +862,7 @@ static void fetch_config_filters(switch_memory_pool_t *pool)
        switch_event_t *params;
 
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "Action", "request-filter");
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "Action", "request-filter");
 
        if (!(xml = switch_xml_open_cfg(cf, &cfg, params))) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to open configuration file %s\n", cf);
@@ -898,7 +898,7 @@ static void fetch_config_handlers(switch_memory_pool_t *pool)
        switch_event_t *params;
 
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "Action", "request-handlers");
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "Action", "request-handlers");
 
        if (!(xml = switch_xml_open_cfg(cf, &cfg, params))) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to open configuration file %s\n", cf);
index 4ddfeddae4b587d61e9e3d9749e6baac0a511ace..3f1eff2384a3aeb7e450b77ee16b7af05dbca0dc 100644 (file)
@@ -52,7 +52,7 @@ static void kz_tweaks_variables_to_event(switch_core_session_t *session, switch_
        switch_channel_t *channel = switch_core_session_get_channel(session);
        for(i = 0; x_bridge_variables[i] != NULL; i++) {
                const char *val = switch_channel_get_variable_dup(channel, x_bridge_variables[i], SWITCH_FALSE, -1);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, x_bridge_variables[i], val);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, x_bridge_variables[i], val);
        }
 }
 
@@ -113,10 +113,10 @@ static switch_call_cause_t kz_endpoint_outgoing_channel(switch_core_session_t *s
 
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
        switch_assert(params);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "as_channel", "true");
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "action", "user_call");
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "as_channel", "true");
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "action", "user_call");
        if (session) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
        }
 
        if (var_event) {
@@ -156,7 +156,7 @@ static switch_call_cause_t kz_endpoint_outgoing_channel(switch_core_session_t *s
                        } else {
                                switch_event_del_header(var_event, pvar);
                        }
-                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, pvar, val);
+                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, pvar, val);
                }
        }
 
@@ -178,7 +178,7 @@ static switch_call_cause_t kz_endpoint_outgoing_channel(switch_core_session_t *s
                                        switch_event_del_header(var_event, pvar + 9);
                                }
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "adding dialog var to var_event => %s = %s\n", pvar + 9, val);
-                               switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, pvar + 9, val);
+                               switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, pvar + 9, val);
                        }
                }
        }
@@ -241,8 +241,8 @@ static switch_call_cause_t kz_endpoint_outgoing_channel(switch_core_session_t *s
        dialed_user = (char *)switch_xml_attr(x_user, "id");
 
        if (var_event) {
-               switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "dialed_user", dialed_user);
-               switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "dialed_domain", domain);
+               switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "dialed_user", dialed_user);
+               switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "dialed_domain", domain);
        }
 
        if (!dest) {
@@ -293,8 +293,8 @@ static switch_call_cause_t kz_endpoint_outgoing_channel(switch_core_session_t *s
                        switch_assert(event);
                }
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "dialed_user", dialed_user);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "dialed_domain", domain);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "dialed_user", dialed_user);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "dialed_domain", domain);
        }
 
        if ((x_params = switch_xml_child(x_user, "profile-variables"))) {
@@ -302,7 +302,7 @@ static switch_call_cause_t kz_endpoint_outgoing_channel(switch_core_session_t *s
                        const char *pvar = switch_xml_attr_soft(x_param, "name");
                        const char *val = switch_xml_attr(x_param, "value");
                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "adding profile variable to event => %s = %s\n", pvar, val);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, pvar, val);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, pvar, val);
                }
        }
 
@@ -311,7 +311,7 @@ static switch_call_cause_t kz_endpoint_outgoing_channel(switch_core_session_t *s
                        const char *pvar = switch_xml_attr_soft(x_param, "name");
                        const char *val = switch_xml_attr(x_param, "value");
                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "adding variable to event => %s = %s\n", pvar, val);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, pvar, val);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, pvar, val);
                }
        }
 
@@ -323,7 +323,7 @@ static switch_call_cause_t kz_endpoint_outgoing_channel(switch_core_session_t *s
                        if (!strncasecmp(pvar, "dial-var-", 9)) {
                                switch_event_del_header(event, pvar + 9);
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "adding dialog var to event => %s = %s\n", pvar + 9, val);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, pvar + 9, val);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, pvar + 9, val);
                        }
                }
        }
index 3d1f18326b2c293f704fbf804021efbc149b1fa4..54014e3a333e33bc737f006ac517db3724e523f7 100644 (file)
@@ -103,10 +103,10 @@ static switch_status_t kazoo_event_dup(switch_event_t **clone, switch_event_t *e
         if (header->idx) {
             int i;
             for (i = 0; i < header->idx; i++) {
-                switch_event_add_header_string(*clone, SWITCH_STACK_PUSH, header->name, header->array[i]);
+                switch_event_add_header_string_dup(*clone, SWITCH_STACK_PUSH, header->name, header->array[i]);
             }
         } else {
-            switch_event_add_header_string(*clone, SWITCH_STACK_BOTTOM, header->name, header->value);
+            switch_event_add_header_string_dup(*clone, SWITCH_STACK_BOTTOM, header->name, header->value);
         }
     }
 
@@ -201,8 +201,8 @@ static void event_handler(switch_event_t *event) {
 
        ei_x_encode_version(ebuf);
 
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Target-Node", event_binding->stream->node->peer_nodename);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Switch-Nodename", kazoo_globals.ei_cnode.thisnodename);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Target-Node", event_binding->stream->node->peer_nodename);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Switch-Nodename", kazoo_globals.ei_cnode.thisnodename);
 
        if(event_stream->node->legacy) {
                res = encode_event_old(event, ebuf);
index 5023e393440436428ed8ab6db5b7b680ce1b57aa..25dd96c7412f30ff40eb1c3c240e404209c90ad3 100644 (file)
@@ -162,7 +162,7 @@ static switch_xml_t fetch_handler(const char *section, const char *tag_name, con
                }
        }
 
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Switch-Nodename", kazoo_globals.ei_cnode.thisnodename);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Switch-Nodename", kazoo_globals.ei_cnode.thisnodename);
 
        /* prepare the reply collector */
        switch_uuid_get(&uuid);
@@ -188,16 +188,16 @@ static switch_xml_t fetch_handler(const char *section, const char *tag_name, con
                }
        }
 
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Fetch-UUID", reply.uuid_str);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Fetch-Section", section);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Fetch-Tag", tag_name);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Fetch-Key-Name", key_name);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Fetch-Key-Value", key_value);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Fetch-UUID", reply.uuid_str);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Fetch-Section", section);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Fetch-Tag", tag_name);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Fetch-Key-Name", key_name);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Fetch-Key-Value", key_value);
        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Fetch-Timeout", "%u", profile->fetch_timeout);
        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Fetch-Timestamp-Micro", "%" SWITCH_UINT64_T_FMT, (uint64_t)now);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Kazoo-Version", VERSION);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Kazoo-Bundle", BUNDLE);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Kazoo-Release", RELEASE);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Kazoo-Version", VERSION);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Kazoo-Bundle", BUNDLE);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Kazoo-Release", RELEASE);
 
        kz_event_decode(event);
 
index fae09bee2fbc851478bd0b56e6626d8a5b537849..c76dcd94e89f53c9c0fcca00dbc484ba91ffeccf 100644 (file)
@@ -229,13 +229,13 @@ SWITCH_DECLARE(switch_status_t) kazoo_api_execute(const char *cmd, const char *a
 
        if (stream->param_event) {
                if (cmd_used && *cmd_used) {
-                       switch_event_add_header_string(stream->param_event, SWITCH_STACK_BOTTOM, "API-Command", cmd_used);
+                       switch_event_add_header_string_dup(stream->param_event, SWITCH_STACK_BOTTOM, "API-Command", cmd_used);
                }
                if (arg_used && *arg_used) {
-                       switch_event_add_header_string(stream->param_event, SWITCH_STACK_BOTTOM, "API-Command-Argument", arg_used);
+                       switch_event_add_header_string_dup(stream->param_event, SWITCH_STACK_BOTTOM, "API-Command-Argument", arg_used);
                }
                if (arg_expanded && *arg_expanded) {
-                       switch_event_add_header_string(stream->param_event, SWITCH_STACK_BOTTOM, "API-Command-Argument-Expanded", arg_expanded);
+                       switch_event_add_header_string_dup(stream->param_event, SWITCH_STACK_BOTTOM, "API-Command-Argument-Expanded", arg_expanded);
                }
        }
 
@@ -706,7 +706,7 @@ static switch_status_t handle_request_command(ei_node_t *ei_node, erlang_pid *pi
        }
 
        log_sendmsg_request(uuid_str, event);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event-uuid", cmd_uuid_str);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event-uuid", cmd_uuid_str);
 
        switch_core_session_queue_private_event(session, &event, SWITCH_FALSE);
        switch_core_session_rwunlock(session);
@@ -746,9 +746,9 @@ static switch_status_t handle_request_commands(ei_node_t *ei_node, erlang_pid *p
                }
                log_sendmsg_request(uuid_str, event);
                if(n == (propslist_length - 1)) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event-uuid", cmd_uuid_str);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event-uuid", cmd_uuid_str);
                } else {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event-uuid", "null");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event-uuid", "null");
 //                     switch_event_del_header_val(event, "event-uuid-name", NULL);
                }
                switch_core_session_queue_private_event(session, &event, SWITCH_FALSE);
index e647871855a644962afc8d052958d264f5d75771..90670d11fe309c537a068c4c6a7cdf756f33a63a 100644 (file)
@@ -67,8 +67,8 @@ static switch_status_t kz_tweaks_signal_bridge_on_hangup(switch_core_session_t *
        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "tweak signal bridge on hangup: %s , %s\n", switch_core_session_get_uuid(session), peer_uuid);
 
        if (switch_event_create(&my_event, SWITCH_EVENT_CHANNEL_UNBRIDGE) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(my_event, SWITCH_STACK_BOTTOM, "Bridge-A-Unique-ID", switch_core_session_get_uuid(session));
-               switch_event_add_header_string(my_event, SWITCH_STACK_BOTTOM, "Bridge-B-Unique-ID", peer_uuid);
+               switch_event_add_header_string_dup(my_event, SWITCH_STACK_BOTTOM, "Bridge-A-Unique-ID", switch_core_session_get_uuid(session));
+               switch_event_add_header_string_dup(my_event, SWITCH_STACK_BOTTOM, "Bridge-B-Unique-ID", peer_uuid);
                switch_channel_event_set_data(channel, my_event);
                switch_event_fire(&my_event);
        }
@@ -148,9 +148,9 @@ static void kz_tweaks_handle_bridge_replaces_call_id(switch_event_t *event)
                if (call_id && (call_session = switch_core_session_locate(call_id)) != NULL) {
                        switch_channel_t *call_channel = switch_core_session_get_channel(call_session);
                        if (switch_event_create(&my_event, SWITCH_EVENT_CHANNEL_BRIDGE) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(my_event, SWITCH_STACK_BOTTOM, "Bridge-A-Unique-ID", switch_core_session_get_uuid(call_session));
-                               switch_event_add_header_string(my_event, SWITCH_STACK_BOTTOM, "Bridge-B-Unique-ID", peer_uuid);
-                               switch_event_add_header_string(my_event, SWITCH_STACK_BOTTOM, "Bridge-Event-Processed", "true");
+                               switch_event_add_header_string_dup(my_event, SWITCH_STACK_BOTTOM, "Bridge-A-Unique-ID", switch_core_session_get_uuid(call_session));
+                               switch_event_add_header_string_dup(my_event, SWITCH_STACK_BOTTOM, "Bridge-B-Unique-ID", peer_uuid);
+                               switch_event_add_header_string_dup(my_event, SWITCH_STACK_BOTTOM, "Bridge-Event-Processed", "true");
                                switch_channel_event_set_data(call_channel, my_event);
                                switch_event_fire(&my_event);
                        }
@@ -317,7 +317,7 @@ static switch_status_t kz_tweaks_handle_loopback(switch_core_session_t *session)
                } else if(!strncmp(header->name, "sip_loopback_", 13)) {
                        kz_switch_event_add_variable_name_printf(to_add, SWITCH_STACK_BOTTOM, header->value, "sip_%s", header->name+13);
                } else if(!strncmp(header->name, "ecallmgr_", 9)) {
-                       switch_event_add_header_string(to_remove, SWITCH_STACK_BOTTOM, header->name, header->value);
+                       switch_event_add_header_string_dup(to_remove, SWITCH_STACK_BOTTOM, header->name, header->value);
                }
        }
        if(n) {
index 951707d179a2efdca84be6a99003bc55081fa026..9ae580505c13bbf4a6e284ffbf0b6eb382cb99e9 100644 (file)
@@ -600,7 +600,7 @@ void kz_expand_headers(switch_event_t *resolver, switch_event_t *event) {
        for(header = event->headers; header; header = header->next) {
                char *expanded = kz_event_expand_headers(resolver, header->value);
                if (expanded != header->value) {
-                       switch_event_add_header_string(clone, SWITCH_STACK_BOTTOM, header->name, expanded);
+                       switch_event_add_header_string_dup(clone, SWITCH_STACK_BOTTOM, header->name, expanded);
                        switch_safe_free(expanded);
                }
        }
index 6ed46489a79163446275bdd387990c4b39a86d88..f4f393452a5bb8ad2f627e7b2ee3719fd268e821 100644 (file)
@@ -1856,9 +1856,9 @@ void rayo_call_send(struct rayo_actor *call, struct rayo_message *msg)
                        if (!zstr(body)) {
                                switch_event_t *event;
                                if (switch_event_create(&event, SWITCH_EVENT_SEND_MESSAGE) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "content-type", "text/plain");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "uuid", rayo_call_get_uuid(RAYO_CALL(call)));
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "subject", iks_find_cdata(stanza, "subject"));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "content-type", "text/plain");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "uuid", rayo_call_get_uuid(RAYO_CALL(call)));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "subject", iks_find_cdata(stanza, "subject"));
                                        switch_event_add_body(event, "%s", body);
                                        switch_event_fire(&event);
                                }
@@ -2242,11 +2242,11 @@ static iks *exec_conference_app(switch_core_session_t *session, const char *comm
 
        /* send execute conference event to session */
        if (switch_event_create(&execute_event, SWITCH_EVENT_COMMAND) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "call-command", "execute");
-               switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "execute-app-name", "conference");
-               switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "execute-app-arg", command);
-               //switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "event_uuid", uuid);
-               switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "event-lock", "true");
+               switch_event_add_header_string_dup(execute_event, SWITCH_STACK_BOTTOM, "call-command", "execute");
+               switch_event_add_header_string_dup(execute_event, SWITCH_STACK_BOTTOM, "execute-app-name", "conference");
+               switch_event_add_header_string_dup(execute_event, SWITCH_STACK_BOTTOM, "execute-app-arg", command);
+               //switch_event_add_header_string_dup(execute_event, SWITCH_STACK_BOTTOM, "event_uuid", uuid);
+               switch_event_add_header_string_dup(execute_event, SWITCH_STACK_BOTTOM, "event-lock", "true");
                if (!switch_channel_test_flag(channel, CF_PROXY_MODE)) {
                        switch_channel_set_flag(channel, CF_BLOCK_BROADCAST_UNTIL_MEDIA);
                }
@@ -2703,9 +2703,9 @@ static void *SWITCH_THREAD_FUNC rayo_dial_thread(switch_thread_t *thread, void *
        }
 
        /* set originate channel variables */
-       switch_event_add_header_string(originate_vars, SWITCH_STACK_BOTTOM, "origination_uuid", rayo_call_get_uuid(call));
-       switch_event_add_header_string(originate_vars, SWITCH_STACK_BOTTOM, "rayo_dcp_jid", dcp_jid);
-       switch_event_add_header_string(originate_vars, SWITCH_STACK_BOTTOM, "rayo_call_jid", RAYO_JID(call));
+       switch_event_add_header_string_dup(originate_vars, SWITCH_STACK_BOTTOM, "origination_uuid", rayo_call_get_uuid(call));
+       switch_event_add_header_string_dup(originate_vars, SWITCH_STACK_BOTTOM, "rayo_dcp_jid", dcp_jid);
+       switch_event_add_header_string_dup(originate_vars, SWITCH_STACK_BOTTOM, "rayo_call_jid", RAYO_JID(call));
 
        if (!zstr(dial_from)) {
                char *from_uri = NULL;
@@ -2717,24 +2717,24 @@ static void *SWITCH_THREAD_FUNC rayo_dial_thread(switch_thread_t *thread, void *
                } else if (scheme == RAYO_URI_SCHEME_SIP) {
                        /* SIP URI */
                        if (!zstr(from_uri)) {
-                               switch_event_add_header_string(originate_vars, SWITCH_STACK_BOTTOM, "sip_from_uri", from_uri);
+                               switch_event_add_header_string_dup(originate_vars, SWITCH_STACK_BOTTOM, "sip_from_uri", from_uri);
                                switch_log_printf(SWITCH_CHANNEL_UUID_LOG(rayo_call_get_uuid(call)), SWITCH_LOG_DEBUG, "dial: sip_from_uri=%s\n", from_uri);
                        }
                        if (!zstr(from_display)) {
-                               switch_event_add_header_string(originate_vars, SWITCH_STACK_BOTTOM, "sip_from_display", from_display);
+                               switch_event_add_header_string_dup(originate_vars, SWITCH_STACK_BOTTOM, "sip_from_display", from_display);
                                switch_log_printf(SWITCH_CHANNEL_UUID_LOG(rayo_call_get_uuid(call)), SWITCH_LOG_DEBUG, "dial: sip_from_display=%s\n", from_display);
                        }
                }
                if (!zstr(from_uri)) {
-                       switch_event_add_header_string(originate_vars, SWITCH_STACK_BOTTOM, "origination_caller_id_number", from_uri);
+                       switch_event_add_header_string_dup(originate_vars, SWITCH_STACK_BOTTOM, "origination_caller_id_number", from_uri);
                        switch_log_printf(SWITCH_CHANNEL_UUID_LOG(rayo_call_get_uuid(call)), SWITCH_LOG_DEBUG, "dial: origination_caller_id_number=%s\n", from_uri);
                }
                if (!zstr(from_display)) {
-                       switch_event_add_header_string(originate_vars, SWITCH_STACK_BOTTOM, "origination_caller_id_name", from_display);
+                       switch_event_add_header_string_dup(originate_vars, SWITCH_STACK_BOTTOM, "origination_caller_id_name", from_display);
                        switch_log_printf(SWITCH_CHANNEL_UUID_LOG(rayo_call_get_uuid(call)), SWITCH_LOG_DEBUG, "dial: origination_caller_id_name=%s\n", from_display);
                } else if (scheme == RAYO_URI_SCHEME_TEL && !zstr(from_uri)) {
                        /* set caller ID name to same as number if telephone number and a name wasn't specified */
-                       switch_event_add_header_string(originate_vars, SWITCH_STACK_BOTTOM, "origination_caller_id_name", from_uri);
+                       switch_event_add_header_string_dup(originate_vars, SWITCH_STACK_BOTTOM, "origination_caller_id_name", from_uri);
                        switch_log_printf(SWITCH_CHANNEL_UUID_LOG(rayo_call_get_uuid(call)), SWITCH_LOG_DEBUG, "dial: origination_caller_id_name=%s\n", from_uri);
                }
        }
@@ -2752,7 +2752,7 @@ static void *SWITCH_THREAD_FUNC rayo_dial_thread(switch_thread_t *thread, void *
                                if (!zstr(name) && !zstr(value)) {
                                        char *header_name = switch_core_sprintf(dtdata->pool, "%s%s", RAYO_SIP_REQUEST_HEADER, name);
                                        switch_log_printf(SWITCH_CHANNEL_UUID_LOG(rayo_call_get_uuid(call)), SWITCH_LOG_DEBUG, "dial: Adding SIP header: %s: %s\n", name, value);
-                                       switch_event_add_header_string(originate_vars, SWITCH_STACK_BOTTOM, header_name, value);
+                                       switch_event_add_header_string_dup(originate_vars, SWITCH_STACK_BOTTOM, header_name, value);
                                }
                        }
                }
index 15dcd74aa7936d8ca02c51f54b5d0329f348b749..3532a69b3d9acaac0cc4dc961f80a5c76a13b2dc 100644 (file)
@@ -137,7 +137,7 @@ static void subscriber_execute(const char *uuid, const char *signal_type, subscr
                                const void *jid;
                                void *dont_care;
                                switch_core_hash_this(hi, &jid, NULL, &dont_care);
-                               switch_event_add_header_string(subscriber_list, SWITCH_STACK_BOTTOM, "execute", (const char *)jid);
+                               switch_event_add_header_string_dup(subscriber_list, SWITCH_STACK_BOTTOM, "execute", (const char *)jid);
                        }
                } else {
                        switch_log_printf(SWITCH_CHANNEL_UUID_LOG(uuid), SWITCH_LOG_DEBUG, "No subscribers for %s\n", signal_type);
index 6a85db561b9773ea08bb5f5f7661994a33d0b1ea..350b8d8d12ee34e7846d9c0355bd53d0d4294085 100644 (file)
@@ -174,20 +174,20 @@ static void rayo_cpa_detector_event(switch_event_t *event)
                        }
                        switch_log_printf(SWITCH_CHANNEL_UUID_LOG(uuid), SWITCH_LOG_DEBUG, "Got Rayo CPA event %s\n", signal_type);
                        if (switch_event_create_subclass(&cpa_event, SWITCH_EVENT_CUSTOM, "rayo::cpa") == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(cpa_event, SWITCH_STACK_BOTTOM, "Unique-ID", uuid);
-                               switch_event_add_header_string(cpa_event, SWITCH_STACK_BOTTOM, "detector-name", detector->name);
-                               switch_event_add_header_string(cpa_event, SWITCH_STACK_BOTTOM, "detector-uuid", detector->uuid);
+                               switch_event_add_header_string_dup(cpa_event, SWITCH_STACK_BOTTOM, "Unique-ID", uuid);
+                               switch_event_add_header_string_dup(cpa_event, SWITCH_STACK_BOTTOM, "detector-name", detector->name);
+                               switch_event_add_header_string_dup(cpa_event, SWITCH_STACK_BOTTOM, "detector-uuid", detector->uuid);
                                switch_event_add_header(cpa_event, SWITCH_STACK_BOTTOM, "signal-type", "%s%s:%s", RAYO_CPA_BASE, signal_type, RAYO_VERSION);
                                if (!zstr(detector->signal_value_header)) {
                                        const char *value = switch_event_get_header(event, detector->signal_value_header);
                                        if (!zstr(value)) {
-                                               switch_event_add_header_string(cpa_event, SWITCH_STACK_BOTTOM, "value", value);
+                                               switch_event_add_header_string_dup(cpa_event, SWITCH_STACK_BOTTOM, "value", value);
                                        }
                                }
                                if (!zstr(detector->signal_duration_header)) {
                                        const char *duration = switch_event_get_header(event, detector->signal_duration_header);
                                        if (!zstr(duration)) {
-                                               switch_event_add_header_string(cpa_event, SWITCH_STACK_BOTTOM, "duration", duration);
+                                               switch_event_add_header_string_dup(cpa_event, SWITCH_STACK_BOTTOM, "duration", duration);
                                        }
                                }
                                switch_event_fire(&cpa_event);
index b605702005702088465666f7c467f01f61943167..b9cfb715b75d72d66003a0ff7a0401050dc96bbf 100644 (file)
@@ -204,9 +204,9 @@ static iks *start_sendfax_component(struct rayo_actor *call, struct rayo_message
 
        /* execute txfax APP */
        if (switch_event_create(&execute_event, SWITCH_EVENT_COMMAND) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "call-command", "execute");
-               switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "execute-app-name", "txfax");
-               switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "execute-app-arg", fax_document);
+               switch_event_add_header_string_dup(execute_event, SWITCH_STACK_BOTTOM, "call-command", "execute");
+               switch_event_add_header_string_dup(execute_event, SWITCH_STACK_BOTTOM, "execute-app-name", "txfax");
+               switch_event_add_header_string_dup(execute_event, SWITCH_STACK_BOTTOM, "execute-app-arg", fax_document);
                if (!switch_channel_test_flag(channel, CF_PROXY_MODE)) {
                        switch_channel_set_flag(channel, CF_BLOCK_BROADCAST_UNTIL_MEDIA);
                }
@@ -307,9 +307,9 @@ static iks *start_receivefax_component(struct rayo_actor *call, struct rayo_mess
 
        /* execute rxfax APP */
        if (switch_event_create(&execute_event, SWITCH_EVENT_COMMAND) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "call-command", "execute");
-               switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "execute-app-name", "rxfax");
-               switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "execute-app-arg", receivefax_component->local_filename);
+               switch_event_add_header_string_dup(execute_event, SWITCH_STACK_BOTTOM, "call-command", "execute");
+               switch_event_add_header_string_dup(execute_event, SWITCH_STACK_BOTTOM, "execute-app-name", "rxfax");
+               switch_event_add_header_string_dup(execute_event, SWITCH_STACK_BOTTOM, "execute-app-arg", receivefax_component->local_filename);
                if (!switch_channel_test_flag(channel, CF_PROXY_MODE)) {
                        switch_channel_set_flag(channel, CF_BLOCK_BROADCAST_UNTIL_MEDIA);
                }
index 84a8e745cc9d5bb370e1a2bc2baa6d93c90ce838..25848dc19f8b31ff6083431b63a1df91d35cf8b3 100644 (file)
@@ -290,7 +290,7 @@ static switch_status_t input_handler_on_dtmf(switch_core_session_t *session, con
                                if (!components_to_remove) {
                                        switch_event_create_subclass(&components_to_remove, SWITCH_EVENT_CLONE, NULL);
                                }
-                               switch_event_add_header_string(components_to_remove, SWITCH_STACK_BOTTOM, "done", RAYO_JID(component));
+                               switch_event_add_header_string_dup(components_to_remove, SWITCH_STACK_BOTTOM, "done", RAYO_JID(component));
                        }
                }
 
@@ -338,7 +338,7 @@ static switch_bool_t input_handler_bug_callback(switch_media_bug_t *bug, void *u
                                        if (!components_to_remove) {
                                                switch_event_create_subclass(&components_to_remove, SWITCH_EVENT_CLONE, NULL);
                                        }
-                                       switch_event_add_header_string(components_to_remove, SWITCH_STACK_BOTTOM, "done", RAYO_JID(component));
+                                       switch_event_add_header_string_dup(components_to_remove, SWITCH_STACK_BOTTOM, "done", RAYO_JID(component));
                                }
                        }
 
index e04bea31a3832741d7c8e280f41758e18e1888e4..ff850fbb866b5637452a85a7637b5577406abe31 100644 (file)
@@ -91,9 +91,9 @@ SWITCH_STANDARD_APP(mod_smpp_app_send_function)
        /* Cycle through all of the channel headers, and ones with 'smpp_' prefix copy over without the prefix */
        for ( chan_var = switch_channel_variable_first(channel); chan_var; chan_var = chan_var->next) {
                if ( !strncmp(chan_var->name, "smpp_", 5) ) {
-                       switch_event_add_header_string(message, SWITCH_STACK_BOTTOM, chan_var->name + 5, chan_var->value);
+                       switch_event_add_header_string_dup(message, SWITCH_STACK_BOTTOM, chan_var->name + 5, chan_var->value);
                } else {
-                       switch_event_add_header_string(message, SWITCH_STACK_BOTTOM, chan_var->name, chan_var->value);
+                       switch_event_add_header_string_dup(message, SWITCH_STACK_BOTTOM, chan_var->name, chan_var->value);
                }
        }
 
@@ -138,8 +138,8 @@ SWITCH_STANDARD_API(mod_smpp_send_api)
                switch_goto_status(SWITCH_STATUS_GENERR, done);
        }
 
-       switch_event_add_header_string(message, SWITCH_STACK_BOTTOM, "to_user", argv[1]);
-       switch_event_add_header_string(message, SWITCH_STACK_BOTTOM, "from_user", argv[2]);
+       switch_event_add_header_string_dup(message, SWITCH_STACK_BOTTOM, "to_user", argv[1]);
+       switch_event_add_header_string_dup(message, SWITCH_STACK_BOTTOM, "from_user", argv[2]);
        switch_event_set_body(message, argv[3]);
 
        if (mod_smpp_gateway_send_message(gateway, message) != SWITCH_STATUS_SUCCESS) {
index a7407102bca62da9c4690076fc72fbaf0e034cd9..57c57b523d7680e9a383b536283d3cda0aa7539b 100644 (file)
@@ -127,7 +127,7 @@ switch_status_t mod_smpp_message_decode(mod_smpp_gateway_t *gateway, deliver_sm_
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to create new event\n");
        }
 
-       switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM, "endpoint", "mod_smpp");
+       switch_event_add_header_string_dup(evt, SWITCH_STACK_BOTTOM, "endpoint", "mod_smpp");
 
        str = switch_mprintf("%d", res->sequence_number);
        switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM | SWITCH_STACK_NODUP, "sequence_number", str);
@@ -138,8 +138,8 @@ switch_status_t mod_smpp_message_decode(mod_smpp_gateway_t *gateway, deliver_sm_
        str = switch_mprintf("%d", res->command_id);
        switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM | SWITCH_STACK_NODUP, "command_id", str);
 
-       switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM, "smpp_gateway", gateway->name);
-       switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM, "proto", "smpp");
+       switch_event_add_header_string_dup(evt, SWITCH_STACK_BOTTOM, "smpp_gateway", gateway->name);
+       switch_event_add_header_string_dup(evt, SWITCH_STACK_BOTTOM, "proto", "smpp");
 
        str = switch_mprintf("%d", res->source_addr_ton);
        switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM | SWITCH_STACK_NODUP, "source_addr_ton", str);
@@ -147,7 +147,7 @@ switch_status_t mod_smpp_message_decode(mod_smpp_gateway_t *gateway, deliver_sm_
        str = switch_mprintf("%d", res->source_addr_npi);
        switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM | SWITCH_STACK_NODUP, "source_addr_npi", str);
 
-       switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM, "from_user", (const char *) res->source_addr);
+       switch_event_add_header_string_dup(evt, SWITCH_STACK_BOTTOM, "from_user", (const char *) res->source_addr);
 
        str = switch_mprintf("%d", res->dest_addr_ton);
        switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM | SWITCH_STACK_NODUP, "dest_addr_ton", str);
@@ -155,13 +155,13 @@ switch_status_t mod_smpp_message_decode(mod_smpp_gateway_t *gateway, deliver_sm_
        str = switch_mprintf("%d", res->dest_addr_npi);
        switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM | SWITCH_STACK_NODUP, "dest_addr_npi", str);
 
-       switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM, "to_user", (const char *) res->destination_addr);
+       switch_event_add_header_string_dup(evt, SWITCH_STACK_BOTTOM, "to_user", (const char *) res->destination_addr);
 
        str = switch_mprintf("%d", res->data_coding);
        switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM | SWITCH_STACK_NODUP, "data_coding", str);
        str = NULL;
 
-       switch_event_add_header_string(evt, SWITCH_STACK_BOTTOM, "profile", gateway->profile);
+       switch_event_add_header_string_dup(evt, SWITCH_STACK_BOTTOM, "profile", gateway->profile);
 
        switch_event_add_body(evt, "%s", (const char *) res->short_message);
 
index ce789637cf2b19fcbcad63b2807646d18c01bbae..c2cb72854f54ae7ccda8a632147ba5512d86cce8 100644 (file)
@@ -119,11 +119,11 @@ static void *SWITCH_THREAD_FUNC open_pdf_thread_run(switch_thread_t *thread, voi
                        switch_event_t *event = NULL;
 
                        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, "imagick::info") == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "loaded");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", context->path);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "loaded");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", context->path);
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "pagecount", "%d", context->pagecount);
                                if (context->lazy_cookie) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "cookie", context->lazy_cookie);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "cookie", context->lazy_cookie);
                                }
                                switch_event_fire(&event);
                        }
index b297fa39e1fd9e23542fbcad59e95f2b1ac4aed5..a711195dc5f42c2293c9507739fe97d1701a64d8 100644 (file)
@@ -1146,7 +1146,7 @@ SWITCH_STANDARD_JSON_API(json_function)
 
        json_text = cJSON_PrintUnformatted(data);
        switch_event_create(&stream.param_event, SWITCH_EVENT_REQUEST_PARAMS);
-       switch_event_add_header_string(stream.param_event, SWITCH_STACK_BOTTOM, "JSON", json_text);
+       switch_event_add_header_string_dup(stream.param_event, SWITCH_STACK_BOTTOM, "JSON", json_text);
        switch_safe_free(json_text);
 
        v8_parse_and_execute(session, (char *) path->valuestring, &stream, NULL, NULL);
index 75bb7daba792c9e8999e35319b0b4ff40db2e79b..51d73e31d68c0b2bc252040e7a0187facc82e0e4 100644 (file)
@@ -182,7 +182,7 @@ JS_EVENT_FUNCTION_IMPL(AddHeader)
                        stack_kind = SWITCH_STACK_PUSH;
                }
 
-               switch_event_add_header_string(_event, stack_kind, hname, hval);
+               switch_event_add_header_string_dup(_event, stack_kind, hname, hval);
                info.GetReturnValue().Set(true);
                return;
        }
index 145984c83fdcec7b87cd817e3826006c77e09998..a81903a8e1911f94fc0e7ec291030eb58a939aae 100644 (file)
@@ -314,7 +314,7 @@ JS_EVENTHANDLER_FUNCTION_IMPL(AddFilter)
                        switch_event_create_plain(&_filters, SWITCH_EVENT_CLONE);
                }
 
-               switch_event_add_header_string(_filters, SWITCH_STACK_BOTTOM, headerName, headerVal);
+               switch_event_add_header_string_dup(_filters, SWITCH_STACK_BOTTOM, headerName, headerVal);
 
                info.GetReturnValue().Set(true);
 
@@ -470,10 +470,10 @@ static void *SWITCH_THREAD_FUNC api_exec(switch_thread_t *thread, void *obj)
        }
 
        if (switch_event_create(&event, SWITCH_EVENT_BACKGROUND_JOB) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Job-UUID", acs->uuid_str);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Job-Command", acs->cmd);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Job-UUID", acs->uuid_str);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Job-Command", acs->cmd);
                if (acs->arg) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Job-Command-Arg", acs->arg);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Job-Command-Arg", acs->arg);
                }
                switch_event_add_body(event, "%s", reply);
                switch_event_fire(&event);
index c5bd344c8dd5858922c9d42c454641bf90c7dbca..cd407007624a4e44e0d7243ff320d81a8a6c64af 100644 (file)
@@ -81,7 +81,7 @@ JS_REQUEST_FUNCTION_IMPL(AddHeader)
                String::Utf8Value str2(info[1]);
                const char *hname = js_safe_str(*str1);
                const char *hval = js_safe_str(*str2);
-               switch_event_add_header_string(this->_stream->param_event, SWITCH_STACK_BOTTOM, hname, hval);
+               switch_event_add_header_string_dup(this->_stream->param_event, SWITCH_STACK_BOTTOM, hname, hval);
                info.GetReturnValue().Set(true);
                return;
        }
index 59fe1202a898e9b38ce0f1cc35b7d29b3d868ec0..36e0a5331a64f458c066b6d67780ef1b2996dca9 100644 (file)
@@ -299,7 +299,7 @@ static switch_status_t do_config(void)
                                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Ignoring empty channel variable for session field \"%s\"\n", name);
                                        continue;
                                }
-                               switch_event_add_header_string(globals.session_fields, SWITCH_STACK_BOTTOM,
+                               switch_event_add_header_string_dup(globals.session_fields, SWITCH_STACK_BOTTOM,
                                        switch_core_strdup(globals.pool, name), switch_core_strdup(globals.pool, variable));
                        }
                }
index 5a2e201a72c961130d82266cdbef252577f62653..8384ea792e71cd08c4f56642dfb357e915c19ab0 100644 (file)
@@ -187,11 +187,11 @@ static switch_xml_t xml_url_fetch(const char *section, const char *tag_name, con
                        switch_assert(params);
                }
 
-               switch_event_add_header_string(params, SWITCH_STACK_TOP, "hostname", hostname);
-               switch_event_add_header_string(params, SWITCH_STACK_TOP, "section", switch_str_nil(section));
-               switch_event_add_header_string(params, SWITCH_STACK_TOP, "tag_name", switch_str_nil(tag_name));
-               switch_event_add_header_string(params, SWITCH_STACK_TOP, "key_name", switch_str_nil(key_name));
-               switch_event_add_header_string(params, SWITCH_STACK_TOP, "key_value", switch_str_nil(key_value));
+               switch_event_add_header_string_dup(params, SWITCH_STACK_TOP, "hostname", hostname);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_TOP, "section", switch_str_nil(section));
+               switch_event_add_header_string_dup(params, SWITCH_STACK_TOP, "tag_name", switch_str_nil(tag_name));
+               switch_event_add_header_string_dup(params, SWITCH_STACK_TOP, "key_name", switch_str_nil(key_name));
+               switch_event_add_header_string_dup(params, SWITCH_STACK_TOP, "key_value", switch_str_nil(key_value));
                dynamic_url = switch_event_expand_headers(params, binding->url);
                switch_assert(dynamic_url);
        } else {
index 43e25b6f9ef844f1f68ad4854aa3d2fb2b10bdb0..e0493c8df5323cf1b030458a5cf5d293fe149949 100644 (file)
@@ -211,7 +211,7 @@ static switch_status_t http_stream_write(switch_stream_handle_t *handle, const c
                                ret = HTTPWrite(r, val, (uint32_t) strlen(val));
                        }
                        /* flag to prevent running this more than once per http reply  */
-                       switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "Content-Type", strstr(val,":")+2);
+                       switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "Content-Type", strstr(val,":")+2);
                        ct = switch_event_get_header(evnt, "Content-Type");
                }
 
@@ -269,7 +269,7 @@ static abyss_bool user_attributes(const char *user, const char *domain_name,
 
        switch_event_create(&params, SWITCH_EVENT_REQUEST_PARAMS);
        switch_assert(params);
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "number_alias", "check");
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "number_alias", "check");
 
 
        if (switch_xml_locate_user_merged("id", user, domain_name, NULL, &x_user, params) != SWITCH_STATUS_SUCCESS) {
@@ -883,25 +883,25 @@ abyss_bool handler_hook(TSession * r)
                evnt = stream.param_event;
 
                if (html) {
-                       switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "Content-Type", "text/html");
+                       switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "Content-Type", "text/html");
                } else if (text) {
-                       switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "Content-Type", "text/plain");
+                       switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "Content-Type", "text/plain");
                } else if (xml) {
-                       switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "Content-Type", "text/xml");
+                       switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "Content-Type", "text/xml");
                }
                if (api) {
-                       switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "HTTP-API", "api");
+                       switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "HTTP-API", "api");
                }
-               if (fs_user)   switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "FreeSWITCH-User", fs_user);
-               if (fs_domain) switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "FreeSWITCH-Domain", fs_domain);
-               if (path_info) switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "HTTP-Path-Info", path_info);
-
-               if (info->host)        switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "HTTP-HOST", info->host);
-               if (info->from)        switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "HTTP-FROM", info->from);
-               if (info->useragent)   switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "HTTP-USER-AGENT", info->useragent);
-               if (info->referer)     switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "HTTP-REFERER", info->referer);
-               if (info->requestline) switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "HTTP-REQUESTLINE", info->requestline);
-               if (info->user)        switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "HTTP-USER", info->user);
+               if (fs_user)   switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "FreeSWITCH-User", fs_user);
+               if (fs_domain) switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "FreeSWITCH-Domain", fs_domain);
+               if (path_info) switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "HTTP-Path-Info", path_info);
+
+               if (info->host)        switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "HTTP-HOST", info->host);
+               if (info->from)        switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "HTTP-FROM", info->from);
+               if (info->useragent)   switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "HTTP-USER-AGENT", info->useragent);
+               if (info->referer)     switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "HTTP-REFERER", info->referer);
+               if (info->requestline) switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "HTTP-REQUESTLINE", info->requestline);
+               if (info->user)        switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "HTTP-USER", info->user);
                if (info->port)        switch_event_add_header(evnt, SWITCH_STACK_BOTTOM, "HTTP-PORT", "%u", info->port);
 
                {
@@ -956,7 +956,7 @@ abyss_bool handler_hook(TSession * r)
                        /* parse query and add kv-pairs as event headers  */
                        /* a kv pair starts with '&', '+' or \0 mark the end */
                        if (query) {
-                               switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "HTTP-QUERY", query);
+                               switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "HTTP-QUERY", query);
                                qd = strdup(query);
                        } else {
                                qd = strdup(uri);
@@ -976,7 +976,7 @@ abyss_bool handler_hook(TSession * r)
                                    /* "?" is absent in url so parse uri     */
                                                *((char *)uri + (next - q - 1)) = '\0';
                                                query = next;
-                                               switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "HTTP-QUERY", next);
+                                               switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "HTTP-QUERY", next);
                                                /* and strip uri                                     */
                                                /* the start of first kv pair marks the end of uri   */
                                                /* to prevent kv-pairs confusing fs api commands     */
@@ -996,7 +996,7 @@ abyss_bool handler_hook(TSession * r)
                                name = q;
                                if ((val = strchr(name, '='))) {
                                        *val++ = '\0';
-                                       switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, name, val);
+                                       switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, name, val);
                                }
                                q = next;
                        } while (q != NULL);
@@ -1005,7 +1005,7 @@ abyss_bool handler_hook(TSession * r)
                }
        }
 
-       switch_event_add_header_string(evnt, SWITCH_STACK_BOTTOM, "HTTP-URI", uri);
+       switch_event_add_header_string_dup(evnt, SWITCH_STACK_BOTTOM, "HTTP-URI", uri);
 
        /* We made it this far, always OK */
        if (!HTTPWrite(r, "HTTP/1.1 200 OK\r\n", (uint32_t) strlen("HTTP/1.1 200 OK\r\n"))) {
@@ -1273,7 +1273,7 @@ void stop_all_websockets()
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, "websocket::stophook") != SWITCH_STATUS_SUCCESS) {
                switch_log_printf(SWITCH_CHANNEL_LOG,SWITCH_LOG_ERROR, "Failed to create event!\n");
        }
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "stop", "now");
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "stop", "now");
        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "stopping all websockets ...\n");
        if (switch_event_fire(&event) != SWITCH_STATUS_SUCCESS) {
                switch_log_printf(SWITCH_CHANNEL_LOG,SWITCH_LOG_ERROR, "Failed to fire the event!\n");
index 37a3683039c36c8030595961ef57447f73be2eed..078a24bbbd75bb31a508ea185f67036d26404405 100644 (file)
@@ -325,88 +325,88 @@ SWITCH_DECLARE(void) switch_caller_profile_event_set_data(switch_caller_profile_
        switch_channel_timetable_t *times = NULL;
 
        switch_snprintf(header_name, sizeof(header_name), "%s-Direction", prefix);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->direction == SWITCH_CALL_DIRECTION_INBOUND ?
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->direction == SWITCH_CALL_DIRECTION_INBOUND ?
                                                                   "inbound" : "outbound");
 
        switch_snprintf(header_name, sizeof(header_name), "%s-Logical-Direction", prefix);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->logical_direction == SWITCH_CALL_DIRECTION_INBOUND ?
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->logical_direction == SWITCH_CALL_DIRECTION_INBOUND ?
                                                                   "inbound" : "outbound");
 
        if (!zstr(caller_profile->username)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-Username", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->username);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->username);
        }
        if (!zstr(caller_profile->dialplan)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-Dialplan", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->dialplan);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->dialplan);
        }
        if (!zstr(caller_profile->caller_id_name)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-Caller-ID-Name", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->caller_id_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->caller_id_name);
        }
        if (!zstr(caller_profile->caller_id_number)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-Caller-ID-Number", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->caller_id_number);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->caller_id_number);
        }
        if (!zstr(caller_profile->caller_id_name)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-Orig-Caller-ID-Name", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->orig_caller_id_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->orig_caller_id_name);
        }
        if (!zstr(caller_profile->caller_id_number)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-Orig-Caller-ID-Number", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->orig_caller_id_number);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->orig_caller_id_number);
        }
        if (!zstr(caller_profile->callee_id_name)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-Callee-ID-Name", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->callee_id_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->callee_id_name);
        }
        if (!zstr(caller_profile->callee_id_number)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-Callee-ID-Number", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->callee_id_number);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->callee_id_number);
        }
        if (!zstr(caller_profile->network_addr)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-Network-Addr", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->network_addr);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->network_addr);
        }
        if (!zstr(caller_profile->ani)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-ANI", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->ani);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->ani);
        }
        if (!zstr(caller_profile->aniii)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-ANI-II", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->aniii);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->aniii);
        }
        if (!zstr(caller_profile->destination_number)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-Destination-Number", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->destination_number);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->destination_number);
        }
        if (!zstr(caller_profile->uuid)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-Unique-ID", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->uuid);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->uuid);
        }
        if (!zstr(caller_profile->source)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-Source", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->source);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->source);
        }
        if (!zstr(caller_profile->transfer_source)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-Transfer-Source", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->transfer_source);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->transfer_source);
        }
        if (!zstr(caller_profile->context)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-Context", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->context);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->context);
        }
        if (!zstr(caller_profile->rdnis)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-RDNIS", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->rdnis);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->rdnis);
        }
        if (!zstr(caller_profile->chan_name)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-Channel-Name", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->chan_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->chan_name);
        }
        if (!zstr(caller_profile->profile_index)) {
                switch_snprintf(header_name, sizeof(header_name), "%s-Profile-Index", prefix);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->profile_index);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->profile_index);
        }
 
        if (caller_profile->soft) {
@@ -415,9 +415,9 @@ SWITCH_DECLARE(void) switch_caller_profile_event_set_data(switch_caller_profile_
                for (pn = caller_profile->soft; pn; pn = pn->next) {
                        if (switch_test_flag(caller_profile, SWITCH_CPF_SOFT_PREFIX)) {
                                switch_snprintf(header_name, sizeof(header_name), "%s-%s", prefix, pn->var);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, pn->val);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, pn->val);
                        } else {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, pn->var, pn->val);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, pn->var, pn->val);
                        }
                }
 
@@ -454,13 +454,13 @@ SWITCH_DECLARE(void) switch_caller_profile_event_set_data(switch_caller_profile_
        }
 
        switch_snprintf(header_name, sizeof(header_name), "%s-Screen-Bit", prefix);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, switch_test_flag(caller_profile, SWITCH_CPF_SCREEN) ? "true" : "false");
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, switch_test_flag(caller_profile, SWITCH_CPF_SCREEN) ? "true" : "false");
 
        switch_snprintf(header_name, sizeof(header_name), "%s-Privacy-Hide-Name", prefix);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, switch_test_flag(caller_profile, SWITCH_CPF_HIDE_NAME) ? "true" : "false");
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, switch_test_flag(caller_profile, SWITCH_CPF_HIDE_NAME) ? "true" : "false");
 
        switch_snprintf(header_name, sizeof(header_name), "%s-Privacy-Hide-Number", prefix);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, switch_test_flag(caller_profile, SWITCH_CPF_HIDE_NUMBER) ? "true" : "false");
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, switch_test_flag(caller_profile, SWITCH_CPF_HIDE_NUMBER) ? "true" : "false");
 }
 
 SWITCH_DECLARE(switch_status_t) switch_caller_extension_clone(switch_caller_extension_t **new_ext, switch_caller_extension_t *orig,
index ea3f66c246c97e4fd37c7dfb32e9a1029a3dcc03..8093c10f65f09d9d54e2b31502399144d2ed605e 100644 (file)
@@ -298,7 +298,7 @@ SWITCH_DECLARE(void) switch_channel_perform_set_callstate(switch_channel_t *chan
        switch_channel_check_device_state(channel, channel->callstate);
 
        if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_CALLSTATE) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Original-Channel-Call-State", switch_channel_callstate2str(o_callstate));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Original-Channel-Call-State", switch_channel_callstate2str(o_callstate));
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-Call-State-Number", "%d", callstate);
                switch_channel_event_set_data(channel, event);
                switch_event_fire(&event);
@@ -803,18 +803,18 @@ SWITCH_DECLARE(void) switch_channel_perform_presence(switch_channel_t *channel,
 
        if (switch_event_create(&event, type) == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(channel, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", "any");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", __FILE__);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", id);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "proto", "any");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "login", __FILE__);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "from", id);
                if (type == SWITCH_EVENT_PRESENCE_IN) {
                        if (!rpid) {
                                rpid = "unknown";
                        }
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", rpid);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "status", status);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "rpid", rpid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "status", status);
                }
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
 
 
                if (!strcasecmp(status, "idle") || !switch_channel_up_nosig(channel)) {
@@ -835,22 +835,22 @@ SWITCH_DECLARE(void) switch_channel_perform_presence(switch_channel_t *channel,
                        }
                }
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "presence-call-info-state", call_info_state);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "presence-call-info-state", call_info_state);
 
                if (call_info) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "presence-call-info", call_info);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "presence-call-info", call_info);
                }
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "presence-call-direction",
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "presence-call-direction",
                                                                           channel->direction == SWITCH_CALL_DIRECTION_OUTBOUND ? "outbound" : "inbound");
 
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", channel->event_count++);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Presence-Calling-File", file);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Presence-Calling-Function", func);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Presence-Calling-File", file);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Presence-Calling-Function", func);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Presence-Calling-Line", "%d", line);
 
                if (switch_true(switch_channel_get_variable(channel, "presence_privacy"))) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Presence-Privacy", "true");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Presence-Privacy", "true");
                }
 
                switch_event_fire(&event);
@@ -959,7 +959,7 @@ SWITCH_DECLARE(switch_status_t) switch_channel_get_scope_variables(switch_channe
                for (ep = channel->scope_variables; ep; ep = ep->next) {
                        for (hp = ep->headers; hp; hp = hp->next) {
                                if (!switch_event_get_header(new_event, hp->value)) {
-                                       switch_event_add_header_string(new_event, SWITCH_STACK_BOTTOM, hp->name, hp->value);
+                                       switch_event_add_header_string_dup(new_event, SWITCH_STACK_BOTTOM, hp->name, hp->value);
                                }
                        }
                }
@@ -1244,7 +1244,7 @@ SWITCH_DECLARE(void) switch_channel_process_export(switch_channel_t *channel, sw
 
        if (var_event) {
                switch_event_del_header(var_event, export_varname);
-               switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, export_varname, export_vars);
+               switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, export_varname, export_vars);
        }
 
        if (peer_channel) {
@@ -1265,7 +1265,7 @@ SWITCH_DECLARE(void) switch_channel_process_export(switch_channel_t *channel, sw
                                }
                                if (var_event) {
                                        switch_event_del_header(var_event, vvar);
-                                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, vvar, vval);
+                                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, vvar, vval);
                                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(channel->session), SWITCH_LOG_DEBUG,
                                                                          "%s EXPORTING[%s] [%s]=[%s] to event\n",
                                                                          switch_channel_get_name(channel),
@@ -1443,7 +1443,7 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_log_tag(switch_channel_t *cha
                if (zstr(tagvalue)) {
                        switch_event_del_header(channel->log_tags, tagname);
                } else {
-                       switch_event_add_header_string(channel->log_tags, SWITCH_STACK_BOTTOM, tagname, tagvalue);
+                       switch_event_add_header_string_dup(channel->log_tags, SWITCH_STACK_BOTTOM, tagname, tagvalue);
                }
                status = SWITCH_STATUS_SUCCESS;
        }
@@ -1484,7 +1484,7 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_variable_var_check(switch_cha
                                ok = !switch_string_var_check_const(value);
                        }
                        if (ok) {
-                               switch_event_add_header_string(channel->variables, SWITCH_STACK_BOTTOM, varname, value);
+                               switch_event_add_header_string_dup(channel->variables, SWITCH_STACK_BOTTOM, varname, value);
                        } else {
                                switch_log_printf(SWITCH_CHANNEL_CHANNEL_LOG(channel), SWITCH_LOG_CRIT, "Invalid data (${%s} contains a variable)\n", varname);
                        }
@@ -1526,7 +1526,7 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_variable_strip_quotes_var_che
                                ok = !switch_string_var_check_const(r);
                        }
                        if (ok) {
-                               switch_event_add_header_string(channel->variables, SWITCH_STACK_BOTTOM, varname, r);
+                               switch_event_add_header_string_dup(channel->variables, SWITCH_STACK_BOTTOM, varname, r);
                        } else {
                                switch_log_printf(SWITCH_CHANNEL_CHANNEL_LOG(channel), SWITCH_LOG_CRIT, "Invalid data (${%s} contains a variable)\n", varname);
                        }
@@ -2649,63 +2649,63 @@ SWITCH_DECLARE(void) switch_channel_event_set_basic_data(switch_channel_t *chann
                originatee_caller_profile = caller_profile->originatee_caller_profile;
        }
 
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-State", switch_channel_state_name(channel->running_state));
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Call-State", switch_channel_callstate2str(channel->callstate));
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-State", switch_channel_state_name(channel->running_state));
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-Call-State", switch_channel_callstate2str(channel->callstate));
        switch_snprintf(state_num, sizeof(state_num), "%d", channel->state);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-State-Number", state_num);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Name", switch_channel_get_name(channel));
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(channel->session));
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Session-External-ID", switch_core_session_get_external_id(channel->session));
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-State-Number", state_num);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-Name", switch_channel_get_name(channel));
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(channel->session));
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Session-External-ID", switch_core_session_get_external_id(channel->session));
 
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Call-Direction",
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Call-Direction",
                                                                   channel->direction == SWITCH_CALL_DIRECTION_OUTBOUND ? "outbound" : "inbound");
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Presence-Call-Direction",
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Presence-Call-Direction",
                                                                   channel->direction == SWITCH_CALL_DIRECTION_OUTBOUND ? "outbound" : "inbound");
 
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-HIT-Dialplan",
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-HIT-Dialplan",
                                                                   switch_channel_direction(channel) == SWITCH_CALL_DIRECTION_INBOUND ||
                                                                   switch_channel_test_flag(channel, CF_DIALPLAN) ? "true" : "false");
 
 
        if ((v = switch_channel_get_variable_dup(channel, "presence_id", SWITCH_FALSE, -1))) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Presence-ID", v);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-Presence-ID", v);
        }
 
        if ((v = switch_channel_get_variable_dup(channel, "presence_data", SWITCH_FALSE, -1))) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Presence-Data", v);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-Presence-Data", v);
        }
 
 
        if ((v = switch_channel_get_variable_dup(channel, "presence_data_cols", SWITCH_FALSE, -1))) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Presence-Data-Cols", v);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Presence-Data-Cols", v);
                switch_event_add_presence_data_cols(channel, event, "PD-");
        }
 
        if ((v = switch_channel_get_variable_dup(channel, "call_uuid", SWITCH_FALSE, -1))) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Call-UUID", v);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-Call-UUID", v);
        } else {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Call-UUID", switch_core_session_get_uuid(channel->session));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-Call-UUID", switch_core_session_get_uuid(channel->session));
        }
 
        if (switch_channel_down_nosig(channel)) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Answer-State", "hangup");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Answer-State", "hangup");
        } else if (switch_channel_test_flag(channel, CF_ANSWERED)) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Answer-State", "answered");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Answer-State", "answered");
        } else if (switch_channel_test_flag(channel, CF_EARLY_MEDIA)) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Answer-State", "early");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Answer-State", "early");
        } else {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Answer-State", "ringing");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Answer-State", "ringing");
        }
 
        if (channel->hangup_cause) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Hangup-Cause", switch_channel_cause2str(channel->hangup_cause));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Hangup-Cause", switch_channel_cause2str(channel->hangup_cause));
        }
 
 
        switch_core_session_get_read_impl(channel->session, &impl);
 
        if (impl.iananame) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Read-Codec-Name", impl.iananame);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-Read-Codec-Name", impl.iananame);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-Read-Codec-Rate", "%u", impl.actual_samples_per_second);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-Read-Codec-Bit-Rate", "%d", impl.bits_per_second);
        }
@@ -2713,7 +2713,7 @@ SWITCH_DECLARE(void) switch_channel_event_set_basic_data(switch_channel_t *chann
        switch_core_session_get_write_impl(channel->session, &impl);
 
        if (impl.iananame) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Write-Codec-Name", impl.iananame);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-Write-Codec-Name", impl.iananame);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-Write-Codec-Rate", "%u", impl.actual_samples_per_second);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-Write-Codec-Bit-Rate", "%d", impl.bits_per_second);
        }
@@ -2725,10 +2725,10 @@ SWITCH_DECLARE(void) switch_channel_event_set_basic_data(switch_channel_t *chann
 
        /* Index Originator/ee's Profile */
        if (originator_caller_profile && channel->last_profile_type == LP_ORIGINATOR) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Other-Type", "originator");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Other-Type", "originator");
                switch_caller_profile_event_set_data(originator_caller_profile, "Other-Leg", event);
        } else if (originatee_caller_profile && channel->last_profile_type == LP_ORIGINATEE) {  /* Index Originatee's Profile */
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Other-Type", "originatee");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Other-Type", "originatee");
                switch_caller_profile_event_set_data(originatee_caller_profile, "Other-Leg", event);
        }
 
@@ -2796,7 +2796,7 @@ SWITCH_DECLARE(void) switch_channel_event_set_extended_data(switch_channel_t *ch
                                        switch_snprintf(buf, sizeof(buf), "scope_variable_%s", vvar);
 
                                        if (!switch_event_get_header(event, buf)) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, buf, vval);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, buf, vval);
                                        }
                                }
                        }
@@ -2812,7 +2812,7 @@ SWITCH_DECLARE(void) switch_channel_event_set_extended_data(switch_channel_t *ch
 
                                switch_assert(vvar && vval);
                                switch_snprintf(buf, sizeof(buf), "variable_%s", vvar);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, buf, vval);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, buf, vval);
                        }
                }
        }
@@ -3257,10 +3257,10 @@ SWITCH_DECLARE(void) switch_channel_flip_cid(switch_channel_t *channel)
 
        if (switch_event_create(&event, SWITCH_EVENT_CALL_UPDATE) == SWITCH_STATUS_SUCCESS) {
                const char *uuid = switch_channel_get_partner_uuid(channel);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Direction", "RECV");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Direction", "RECV");
 
                if (uuid) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridged-To", uuid);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridged-To", uuid);
                }
                switch_channel_event_set_data(channel, event);
                switch_event_fire(&event);
@@ -4450,7 +4450,7 @@ SWITCH_DECLARE(switch_status_t) switch_channel_get_variables_prefix(switch_chann
 
                for (hi = channel->variables->headers; hi; hi = hi->next) {
                        if (!strncmp(hi->name, prefix, strlen(prefix))) {
-                               switch_event_add_header_string(vars, SWITCH_STACK_BOTTOM, hi->name, hi->value);
+                               switch_event_add_header_string_dup(vars, SWITCH_STACK_BOTTOM, hi->name, hi->value);
                        }
                }
        }
@@ -5116,8 +5116,8 @@ SWITCH_DECLARE(void) switch_channel_clear_device_record(switch_channel_t *channe
                int x = 0;
                char prefix[80] = "";
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Type", "device");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Device-ID", channel->device_node->parent->device_id);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Type", "device");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Device-ID", channel->device_node->parent->device_id);
 
                switch_mutex_lock(channel->device_node->parent->mutex);
                for(np = channel->device_node->parent->uuid_list; np; np = np->next) {
@@ -5303,10 +5303,10 @@ static void switch_channel_check_device_state(switch_channel_t *channel, switch_
 
 
        if (switch_event_create(&event, SWITCH_EVENT_DEVICE_STATE) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Device-ID", drec->device_id);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Last-Device-State", switch_channel_device_state2str(drec->last_state));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Device-State", switch_channel_device_state2str(drec->state));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Device-Call-State", switch_channel_callstate2str(callstate));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Device-ID", drec->device_id);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Last-Device-State", switch_channel_device_state2str(drec->last_state));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Device-State", switch_channel_device_state2str(drec->state));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Device-Call-State", switch_channel_callstate2str(callstate));
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Device-Total-Legs", "%u", drec->stats.total);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Device-Legs-Offhook", "%u", drec->stats.offhook);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Device-Legs-Ringing", "%u", drec->stats.ringing);
index 2de5ac27ab3ef1720bd81f91503d342a0b83194c..d32560d6a5fcc1944b6577c4c7c825c865c79d8f 100644 (file)
@@ -437,9 +437,9 @@ SWITCH_DECLARE(void) switch_console_printf(switch_text_channel_t channel, const
        if (channel == SWITCH_CHANNEL_ID_EVENT &&
                switch_event_running() == SWITCH_STATUS_SUCCESS && switch_event_create(&event, SWITCH_EVENT_LOG) == SWITCH_STATUS_SUCCESS) {
 
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Log-Data", data);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Log-File", filep);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Log-Function", func);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Log-Data", data);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Log-File", filep);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Log-Function", func);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Log-Line", "%d", line);
                switch_event_fire(&event);
        }
index b9b92f40c77c73354f64a86a12f3a47ea6b50718..89687e905f92d4d3bcac2382478411ee38b0f53f 100644 (file)
@@ -147,8 +147,8 @@ static void check_ip(void)
        } else if (strcmp(hostname, runtime.hostname)) {
                if (switch_event_create(&event, SWITCH_EVENT_TRAP) == SWITCH_STATUS_SUCCESS) {
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "condition", "hostname-change");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "old-hostname", hostname ? hostname : "nil");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "new-hostname", runtime.hostname);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "old-hostname", hostname ? hostname : "nil");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "new-hostname", runtime.hostname);
                        switch_event_fire(&event);
                }
 
@@ -194,12 +194,12 @@ static void check_ip(void)
                if (switch_event_create(&event, SWITCH_EVENT_TRAP) == SWITCH_STATUS_SUCCESS) {
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "condition", "network-address-change");
                        if (!ok4) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "network-address-previous-v4", old_ip4);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "network-address-change-v4", main_ip4);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "network-address-previous-v4", old_ip4);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "network-address-change-v4", main_ip4);
                        }
                        if (!ok6) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "network-address-previous-v6", old_ip6);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "network-address-change-v6", main_ip6);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "network-address-previous-v6", old_ip6);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "network-address-change-v6", main_ip6);
                        }
                        switch_event_fire(&event);
                }
@@ -209,11 +209,11 @@ static void check_ip(void)
                if (switch_event_create(&event, SWITCH_EVENT_TRAP) == SWITCH_STATUS_SUCCESS) {
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "condition", "network-outage");
 
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "network-status-v4", ok4 == 2 ? "disconnected" : "active");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "network-address-v4", main_ip4);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "network-status-v4", ok4 == 2 ? "disconnected" : "active");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "network-address-v4", main_ip4);
 
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "network-status-v6", ok6 == 2 ? "disconnected" : "active");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "network-address-v6", main_ip6);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "network-status-v6", ok6 == 2 ? "disconnected" : "active");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "network-address-v6", main_ip6);
 
                        switch_event_fire(&event);
                }
@@ -451,7 +451,7 @@ SWITCH_DECLARE(void) switch_core_set_variable(const char *varname, const char *v
                if (value) {
                        char *v = strdup(value);
                        switch_string_var_check(v, SWITCH_TRUE);
-                       switch_event_add_header_string(runtime.global_vars, SWITCH_STACK_BOTTOM, varname, v);
+                       switch_event_add_header_string_dup(runtime.global_vars, SWITCH_STACK_BOTTOM, varname, v);
                        free(v);
                } else {
                        switch_event_del_header(runtime.global_vars, varname);
@@ -1637,8 +1637,8 @@ SWITCH_DECLARE(void) switch_load_network_lists(switch_bool_t reload)
 
                                                switch_event_create(&my_params, SWITCH_EVENT_GENERAL);
                                                switch_assert(my_params);
-                                               switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "domain", domain);
-                                               switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "purpose", "network-list");
+                                               switch_event_add_header_string_dup(my_params, SWITCH_STACK_BOTTOM, "domain", domain);
+                                               switch_event_add_header_string_dup(my_params, SWITCH_STACK_BOTTOM, "purpose", "network-list");
 
                                                if (switch_xml_locate_domain(domain, my_params, &xml_root, &x_domain) != SWITCH_STATUS_SUCCESS) {
                                                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Cannot locate domain %s\n", domain);
index 69883f8122b03e1b99685493158b5001c945d6bc..a310bfaddd6dd077307339f4bd5eaabc7c9c9ff2 100644 (file)
@@ -163,7 +163,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_set_real_read_codec(switch_c
        if (changed_read_codec && session->read_codec && session->read_impl.decoded_bytes_per_packet) {
                if (switch_event_create(&event, SWITCH_EVENT_CODEC) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_event_set_data(session->channel, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-read-codec-name", session->read_impl.iananame);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-read-codec-name", session->read_impl.iananame);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-read-codec-rate", "%d", session->read_impl.actual_samples_per_second);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-read-codec-bit-rate", "%d", session->read_impl.bits_per_second);
                        if (session->read_impl.actual_samples_per_second != session->read_impl.samples_per_second) {
@@ -272,7 +272,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_set_read_codec(switch_core_s
        if (session->read_impl.decoded_bytes_per_packet) {
                if (switch_event_create(&event, SWITCH_EVENT_CODEC) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_event_set_data(session->channel, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-read-codec-name", session->read_impl.iananame);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-read-codec-name", session->read_impl.iananame);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-read-codec-rate", "%d", session->read_impl.actual_samples_per_second);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-read-codec-bit-rate", "%d", session->read_impl.bits_per_second);
                        if (session->read_impl.actual_samples_per_second != session->read_impl.samples_per_second) {
@@ -443,7 +443,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_set_write_codec(switch_core_
        if (codec && session->write_impl.codec_id) {
                if (switch_event_create(&event, SWITCH_EVENT_CODEC) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_event_set_data(session->channel, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Write-Codec-Name", session->write_impl.iananame);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-Write-Codec-Name", session->write_impl.iananame);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-Write-Codec-Rate", "%d", session->write_impl.actual_samples_per_second);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Channel-Write-codec-bit-rate", "%d", session->write_impl.bits_per_second);
                        if (session->write_impl.actual_samples_per_second != session->write_impl.samples_per_second) {
@@ -503,7 +503,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_set_video_read_codec(switch_
 
        if (switch_event_create(&event, SWITCH_EVENT_CODEC) == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(session->channel, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-video-read-codec-name", codec->implementation->iananame);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-video-read-codec-name", codec->implementation->iananame);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-video-read-codec-rate", "%d", codec->implementation->actual_samples_per_second);
                switch_event_fire(&event);
        }
@@ -551,7 +551,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_set_video_write_codec(switch
 
        if (switch_event_create(&event, SWITCH_EVENT_CODEC) == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(session->channel, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-video-write-codec-name", codec->implementation->iananame);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "channel-video-write-codec-name", codec->implementation->iananame);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-video-write-codec-rate", "%d", codec->implementation->actual_samples_per_second);
                switch_event_fire(&event);
        }
index 3009ec48240a11ebf7e3d4ec1ee238398666ba52..77cfc2a9159c6fe3408e4c9319d72f06ea7dab3c 100644 (file)
@@ -246,7 +246,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_hash_delete_multi(switch_hash_t *has
                void *val;
                switch_core_hash_this(hi, &key, NULL, &val);
                if (!callback || callback(key, val, pData)) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "delete", (const char *) key);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "delete", (const char *) key);
                }
        }
 
index 0754494ee384f3266469cf0869ff2b256cdfe6cf..249151d16ce0f8ec5b5beec02e42d5b60d35a120 100644 (file)
@@ -2952,65 +2952,65 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_read_frame(switch_core_session
 
                                char *uuid = switch_core_session_get_uuid(session);
                                if (uuid) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
                                }
 
                                snprintf(value, sizeof(value), "%.8x", rtcp_frame.ssrc);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "SSRC", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "SSRC", value);
 
                                snprintf(value, sizeof(value), "%u", rtcp_frame.ntp_msw);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "NTP-Most-Significant-Word", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "NTP-Most-Significant-Word", value);
 
                                snprintf(value, sizeof(value), "%u", rtcp_frame.ntp_lsw);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "NTP-Least-Significant-Word", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "NTP-Least-Significant-Word", value);
 
                                snprintf(value, sizeof(value), "%u", rtcp_frame.timestamp);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "RTP-Timestamp", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "RTP-Timestamp", value);
 
                                snprintf(value, sizeof(value), "%u", rtcp_frame.packet_count);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Sender-Packet-Count", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Sender-Packet-Count", value);
 
                                snprintf(value, sizeof(value), "%u", rtcp_frame.octect_count);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Octect-Packet-Count", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Octect-Packet-Count", value);
 
                                snprintf(value, sizeof(value), "%u", engine->read_frame.timestamp);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Last-RTP-Timestamp", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Last-RTP-Timestamp", value);
 
                                snprintf(value, sizeof(value), "%u", engine->read_frame.rate);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "RTP-Rate", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "RTP-Rate", value);
 
                                snprintf(value, sizeof(value), "%" SWITCH_TIME_T_FMT, switch_time_now());
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Capture-Time", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Capture-Time", value);
 
                                // Add sources info
                                for (i = 0; i < rtcp_frame.report_count; i++) {
                                        snprintf(header, sizeof(header), "Source%u-SSRC", i);
                                        snprintf(value, sizeof(value), "%.8x", rtcp_frame.reports[i].ssrc);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header, value);
                                        snprintf(header, sizeof(header), "Source%u-Fraction", i);
                                        snprintf(value, sizeof(value), "%u", rtcp_frame.reports[i].fraction);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header, value);
                                        snprintf(header, sizeof(header), "Source%u-Lost", i);
                                        snprintf(value, sizeof(value), "%u", rtcp_frame.reports[i].lost);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header, value);
                                        snprintf(header, sizeof(header), "Source%u-Loss-Avg", i);
                                        snprintf(value, sizeof(value), "%u", rtcp_frame.reports[i].loss_avg);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header, value);
                                        snprintf(header, sizeof(header), "Source%u-Highest-Sequence-Number-Received", i);
                                        snprintf(value, sizeof(value), "%u", rtcp_frame.reports[i].highest_sequence_number_received);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header, value);
                                        snprintf(header, sizeof(header), "Source%u-Jitter", i);
                                        snprintf(value, sizeof(value), "%u", rtcp_frame.reports[i].jitter);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header, value);
                                        snprintf(header, sizeof(header), "Source%u-LSR", i);
                                        snprintf(value, sizeof(value), "%u", rtcp_frame.reports[i].lsr);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header, value);
                                        snprintf(header, sizeof(header), "Source%u-DLSR", i);
                                        snprintf(value, sizeof(value), "%u", rtcp_frame.reports[i].dlsr);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header, value);
                                        snprintf(header, sizeof(header), "Rtt%u-Avg", i);
                                        snprintf(value, sizeof(value), "%f", rtcp_frame.reports[i].rtt_avg);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header, value);
                                }
 
                                switch_event_fire(&event);
@@ -10145,10 +10145,10 @@ switch_status_t switch_core_media_sdp_map(const char *r_sdp, switch_event_t **fm
                                                switch_snprintf(key, sizeof(key), "%s", map->rm_encoding);
                                        }
 
-                                       switch_event_add_header_string(*pt, SWITCH_STACK_BOTTOM, key, buf);
+                                       switch_event_add_header_string_dup(*pt, SWITCH_STACK_BOTTOM, key, buf);
 
                                        if (map->rm_fmtp) {
-                                               switch_event_add_header_string(*fmtp, SWITCH_STACK_BOTTOM, key, map->rm_fmtp);
+                                               switch_event_add_header_string_dup(*fmtp, SWITCH_STACK_BOTTOM, key, map->rm_fmtp);
                                        }
                                }
                        }
index 2cfdee869d40a2538816d206472f49a3cf28b6ee..48e40beb112d0af8fc385fe6892c9af5e0c54e90 100644 (file)
@@ -280,7 +280,7 @@ SWITCH_DECLARE(uint32_t) switch_core_session_hupall_matching_var_ans(const char
                return r;
 
        switch_event_create(&vars, SWITCH_EVENT_CLONE);
-       switch_event_add_header_string(vars, SWITCH_STACK_BOTTOM, var_name, var_val);
+       switch_event_add_header_string_dup(vars, SWITCH_STACK_BOTTOM, var_name, var_val);
        r = switch_core_session_hupall_matching_vars_ans(vars, cause, type);
        switch_event_destroy(&vars);
        return r;
@@ -2048,7 +2048,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_set_uuid(switch_core_session
        switch_channel_set_variable(session->channel, "call_uuid", use_uuid);
 
        switch_event_create(&event, SWITCH_EVENT_CHANNEL_UUID);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Old-Unique-ID", session->uuid_str);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Old-Unique-ID", session->uuid_str);
        switch_core_hash_delete(session_manager.session_table, session->uuid_str);
        switch_set_string(session->uuid_str, use_uuid);
        switch_core_hash_insert(session_manager.session_table, session->uuid_str, session);
@@ -2684,18 +2684,18 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_execute_application_async(sw
        }
 
        if (switch_event_create(&execute_event, SWITCH_EVENT_COMMAND) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "call-command", "execute");
-               switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "execute-app-name", app);
+               switch_event_add_header_string_dup(execute_event, SWITCH_STACK_BOTTOM, "call-command", "execute");
+               switch_event_add_header_string_dup(execute_event, SWITCH_STACK_BOTTOM, "execute-app-name", app);
 
                if (arg) {
-                       switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "execute-app-arg", arg);
+                       switch_event_add_header_string_dup(execute_event, SWITCH_STACK_BOTTOM, "execute-app-arg", arg);
                }
 
                if (!switch_channel_test_flag(session->channel, CF_PROXY_MODE)) {
                        switch_channel_set_flag(session->channel, CF_BLOCK_BROADCAST_UNTIL_MEDIA);
                }
 
-               switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "event-lock", "true");
+               switch_event_add_header_string_dup(execute_event, SWITCH_STACK_BOTTOM, "event-lock", "true");
                switch_core_session_queue_private_event(session, &execute_event, SWITCH_FALSE);
 
                return SWITCH_STATUS_SUCCESS;
@@ -2937,10 +2937,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_exec(switch_core_session_t *
 
        if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_EXECUTE) == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(session->channel, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application", application_interface->interface_name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application-Data", expanded);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application-UUID", app_uuid);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application-UUID-Name", app_uuid_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application", application_interface->interface_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application-Data", expanded);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application-UUID", app_uuid);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application-UUID-Name", app_uuid_name);
                switch_event_fire(&event);
        }
 
@@ -2961,11 +2961,11 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_exec(switch_core_session_t *
        if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_EXECUTE_COMPLETE) == SWITCH_STATUS_SUCCESS) {
                const char *resp = switch_channel_get_variable(session->channel, SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE);
                switch_channel_event_set_data(session->channel, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application", application_interface->interface_name);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application-Data", expanded);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application-Response", resp ? resp : "_none_");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application-UUID", app_uuid);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application-UUID-Name", app_uuid_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application", application_interface->interface_name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application-Data", expanded);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application-Response", resp ? resp : "_none_");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application-UUID", app_uuid);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application-UUID-Name", app_uuid_name);
                switch_event_fire(&event);
        }
 
index b2bc14a1df697d54e6922ab802e8ea8c986a8302..2fa90c2cf7268ea2353280e2014ff7d523cbc823 100644 (file)
@@ -941,7 +941,7 @@ SWITCH_DECLARE(void) switch_core_session_reporting_state(switch_core_session_t *
        }
 
        if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_HANGUP_COMPLETE) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Hangup-Cause", switch_channel_cause2str(cause));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Hangup-Cause", switch_channel_cause2str(cause));
                switch_channel_event_set_data(session->channel, event);
                if (switch_true(switch_channel_get_variable(session->channel, "hangup_complete_with_xml"))) {
                        switch_xml_t cdr = NULL;
@@ -949,7 +949,7 @@ SWITCH_DECLARE(void) switch_core_session_reporting_state(switch_core_session_t *
 
                        if (switch_ivr_generate_xml_cdr(session, &cdr) == SWITCH_STATUS_SUCCESS) {
                                xml_cdr_text = switch_xml_toxml(cdr, SWITCH_FALSE);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CDR-Attached", "xml");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "CDR-Attached", "xml");
                                switch_event_add_body(event, "%s", xml_cdr_text);
                                switch_xml_free(cdr);
                                switch_safe_free(xml_cdr_text);
index fe71a6400ad4a562a832f833f77bc7f3047f916f..3266c1f69c65d567e8ef255f4a2a9d07a351f0b9 100644 (file)
@@ -453,7 +453,7 @@ SWITCH_DECLARE(bool) Event::addHeader(const char *header_name, const char *value
        this_check(false);
 
        if (event) {
-               return switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, value) == SWITCH_STATUS_SUCCESS ? true : false;
+               return switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, value) == SWITCH_STATUS_SUCCESS ? true : false;
        } else {
                switch_log_printf(SWITCH_CHANNEL_LOG,SWITCH_LOG_ERROR, "Trying to addHeader an event that does not exist!\n");
        }
index 4cc60fa60c0f6cc9e85a93588952701f490427b1..152caac8507a88e8699519f31b7086a5e99b8684 100644 (file)
@@ -779,7 +779,7 @@ SWITCH_DECLARE(switch_status_t) switch_event_create_subclass_detailed(const char
 
        if (subclass_name) {
                (*event)->subclass_name = DUP(subclass_name);
-               switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-Subclass", subclass_name);
+               switch_event_add_header_string_dup(*event, SWITCH_STACK_BOTTOM, "Event-Subclass", subclass_name);
        }
 
        return SWITCH_STATUS_SUCCESS;
@@ -788,7 +788,7 @@ SWITCH_DECLARE(switch_status_t) switch_event_create_subclass_detailed(const char
 SWITCH_DECLARE(switch_status_t) switch_event_set_priority(switch_event_t *event, switch_priority_t priority)
 {
        event->priority = priority;
-       switch_event_add_header_string(event, SWITCH_STACK_TOP, "priority", switch_priority_name(priority));
+       switch_event_add_header_string_dup(event, SWITCH_STACK_TOP, "priority", switch_priority_name(priority));
        return SWITCH_STATUS_SUCCESS;
 }
 
@@ -992,7 +992,7 @@ SWITCH_DECLARE(int) switch_event_add_array(switch_event_t *event, const char *va
        switch_separate_string_string(data, "|:", array, max);
 
        for(i = 0; i < max; i++) {
-               switch_event_add_header_string(event, SWITCH_STACK_PUSH, var, array[i]);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_PUSH, var, array[i]);
        }
 
        free(array);
@@ -1231,7 +1231,7 @@ SWITCH_DECLARE(switch_status_t) switch_event_set_subclass_name(switch_event_t *e
        switch_safe_free(event->subclass_name);
        event->subclass_name = DUP(subclass_name);
        switch_event_del_header(event, "Event-Subclass");
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Event-Subclass", event->subclass_name);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Event-Subclass", event->subclass_name);
        return SWITCH_STATUS_SUCCESS;
 }
 
@@ -1243,6 +1243,14 @@ SWITCH_DECLARE(switch_status_t) switch_event_add_header_string(switch_event_t *e
        return SWITCH_STATUS_GENERR;
 }
 
+SWITCH_DECLARE(switch_status_t) switch_event_add_header_string_dup(switch_event_t *event, switch_stack_t stack, const char *header_name, const char *data)
+{
+       if (data) {
+               return switch_event_base_add_header(event, stack, header_name, DUP(data));
+       }
+       return SWITCH_STATUS_GENERR;
+}
+
 SWITCH_DECLARE(switch_status_t) switch_event_set_body(switch_event_t *event, const char *body)
 {
        switch_safe_free(event->body);
@@ -1314,10 +1322,10 @@ SWITCH_DECLARE(void) switch_event_merge(switch_event_t *event, switch_event_t *t
                        int i;
 
                        for(i = 0; i < hp->idx; i++) {
-                               switch_event_add_header_string(event, SWITCH_STACK_PUSH, hp->name, hp->array[i]);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_PUSH, hp->name, hp->array[i]);
                        }
                } else {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, hp->name, hp->value);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, hp->name, hp->value);
                }
        }
 }
@@ -1342,10 +1350,10 @@ SWITCH_DECLARE(switch_status_t) switch_event_dup(switch_event_t **event, switch_
                if (hp->idx) {
                        int i;
                        for (i = 0; i < hp->idx; i++) {
-                               switch_event_add_header_string(*event, SWITCH_STACK_PUSH, hp->name, hp->array[i]);
+                               switch_event_add_header_string_dup(*event, SWITCH_STACK_PUSH, hp->name, hp->array[i]);
                        }
                } else {
-                       switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, hp->name, hp->value);
+                       switch_event_add_header_string_dup(*event, SWITCH_STACK_BOTTOM, hp->name, hp->value);
                }
        }
 
@@ -1398,17 +1406,17 @@ SWITCH_DECLARE(switch_status_t) switch_event_dup_reply(switch_event_t **event, s
                if (hp->idx) {
                        int i;
                        for (i = 0; i < hp->idx; i++) {
-                               switch_event_add_header_string(*event, SWITCH_STACK_PUSH, name, hp->array[i]);
+                               switch_event_add_header_string_dup(*event, SWITCH_STACK_PUSH, name, hp->array[i]);
                        }
                } else {
-                       switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, name, value);
+                       switch_event_add_header_string_dup(*event, SWITCH_STACK_BOTTOM, name, value);
                }
        }
 
-       switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "replying", "true");
+       switch_event_add_header_string_dup(*event, SWITCH_STACK_BOTTOM, "replying", "true");
 
        if (todup->body) {
-               switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "orig_body", todup->body);
+               switch_event_add_header_string_dup(*event, SWITCH_STACK_BOTTOM, "orig_body", todup->body);
        }
 
        (*event)->key = todup->key;
@@ -1450,7 +1458,7 @@ SWITCH_DECLARE(switch_status_t) switch_event_binary_deserialize(switch_event_t *
 
 
        while (tpl_unpack(tn, 1)) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, sh.name, sh.value);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, sh.name, sh.value);
        }
 
        *eventp = event;
@@ -1645,7 +1653,7 @@ SWITCH_DECLARE(switch_status_t) switch_event_create_array_pair(switch_event_t **
                        name = "Unknown";
                }
 
-               switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, name, val);
+               switch_event_add_header_string_dup(*event, SWITCH_STACK_BOTTOM, name, val);
        }
 
        return SWITCH_STATUS_SUCCESS;
@@ -1726,7 +1734,7 @@ SWITCH_DECLARE(switch_status_t) switch_event_create_brackets(char *data, char a,
 
                                if (switch_separate_string(var_array[x], '=', inner_var_array, (sizeof(inner_var_array) / sizeof(inner_var_array[0]))) == 2) {
                                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "Parsing variable [%s]=[%s]\n", inner_var_array[0], inner_var_array[1]);
-                                       switch_event_add_header_string(e, SWITCH_STACK_BOTTOM, inner_var_array[0], inner_var_array[1]);
+                                       switch_event_add_header_string_dup(e, SWITCH_STACK_BOTTOM, inner_var_array[0], inner_var_array[1]);
                                }
                        }
                }
@@ -1783,7 +1791,7 @@ SWITCH_DECLARE(switch_status_t) switch_event_create_json(switch_event_t **event,
                                        switch_name_event(value, &new_event->event_id);
                                }
 
-                               switch_event_add_header_string(new_event, SWITCH_STACK_BOTTOM, name, value);
+                               switch_event_add_header_string_dup(new_event, SWITCH_STACK_BOTTOM, name, value);
                        }
 
                } else if (name) {
@@ -1794,7 +1802,7 @@ SWITCH_DECLARE(switch_status_t) switch_event_create_json(switch_event_t **event,
                                        cJSON *item = cJSON_GetArrayItem(cjp, i);
 
                                        if (item && item->type == cJSON_String && item->valuestring) {
-                                               switch_event_add_header_string(new_event, SWITCH_STACK_PUSH, name, item->valuestring);
+                                               switch_event_add_header_string_dup(new_event, SWITCH_STACK_PUSH, name, item->valuestring);
                                        }
                                }
                        }
@@ -1969,21 +1977,21 @@ SWITCH_DECLARE(void) switch_event_prep_for_delivery_detailed(const char *file, c
        switch_mutex_unlock(EVENT_QUEUE_MUTEX);
 
 
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Event-Name", switch_event_name(event->event_id));
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Core-UUID", switch_core_get_uuid());
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FreeSWITCH-Hostname", switch_core_get_hostname());
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FreeSWITCH-Switchname", switch_core_get_switchname());
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FreeSWITCH-IPv4", guess_ip_v4);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FreeSWITCH-IPv6", guess_ip_v6);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Event-Name", switch_event_name(event->event_id));
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Core-UUID", switch_core_get_uuid());
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FreeSWITCH-Hostname", switch_core_get_hostname());
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FreeSWITCH-Switchname", switch_core_get_switchname());
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FreeSWITCH-IPv4", guess_ip_v4);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "FreeSWITCH-IPv6", guess_ip_v6);
 
        switch_time_exp_lt(&tm, ts);
        switch_strftime_nocheck(date, &retsize, sizeof(date), "%Y-%m-%d %T", &tm);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Event-Date-Local", date);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Event-Date-Local", date);
        switch_rfc822_date(date, ts);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Event-Date-GMT", date);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Event-Date-GMT", date);
        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Event-Date-Timestamp", "%" SWITCH_UINT64_T_FMT, (uint64_t) ts);
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Event-Calling-File", switch_cut_path(file));
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Event-Calling-Function", func);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Event-Calling-File", switch_cut_path(file));
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Event-Calling-Function", func);
        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Event-Calling-Line-Number", "%d", line);
        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Event-Sequence", "%" SWITCH_UINT64_T_FMT, seq);
 
@@ -2204,17 +2212,17 @@ SWITCH_DECLARE(switch_status_t) switch_event_create_pres_in_detailed(char *file,
        switch_event_t *pres_event;
 
        if (switch_event_create_subclass(&pres_event, SWITCH_EVENT_PRESENCE_IN, SWITCH_EVENT_SUBCLASS_ANY) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(pres_event, SWITCH_STACK_TOP, "proto", proto);
-               switch_event_add_header_string(pres_event, SWITCH_STACK_TOP, "login", login);
+               switch_event_add_header_string_dup(pres_event, SWITCH_STACK_TOP, "proto", proto);
+               switch_event_add_header_string_dup(pres_event, SWITCH_STACK_TOP, "login", login);
                switch_event_add_header(pres_event, SWITCH_STACK_TOP, "from", "%s@%s", from, from_domain);
-               switch_event_add_header_string(pres_event, SWITCH_STACK_TOP, "status", status);
-               switch_event_add_header_string(pres_event, SWITCH_STACK_TOP, "event_type", event_type);
-               switch_event_add_header_string(pres_event, SWITCH_STACK_TOP, "alt_event_type", alt_event_type);
+               switch_event_add_header_string_dup(pres_event, SWITCH_STACK_TOP, "status", status);
+               switch_event_add_header_string_dup(pres_event, SWITCH_STACK_TOP, "event_type", event_type);
+               switch_event_add_header_string_dup(pres_event, SWITCH_STACK_TOP, "alt_event_type", alt_event_type);
                switch_event_add_header(pres_event, SWITCH_STACK_TOP, "event_count", "%d", event_count);
-               switch_event_add_header_string(pres_event, SWITCH_STACK_TOP, "unique-id", alt_event_type);
-               switch_event_add_header_string(pres_event, SWITCH_STACK_TOP, "channel-state", channel_state);
-               switch_event_add_header_string(pres_event, SWITCH_STACK_TOP, "answer-state", answer_state);
-               switch_event_add_header_string(pres_event, SWITCH_STACK_TOP, "presence-call-direction", call_direction);
+               switch_event_add_header_string_dup(pres_event, SWITCH_STACK_TOP, "unique-id", alt_event_type);
+               switch_event_add_header_string_dup(pres_event, SWITCH_STACK_TOP, "channel-state", channel_state);
+               switch_event_add_header_string_dup(pres_event, SWITCH_STACK_TOP, "answer-state", answer_state);
+               switch_event_add_header_string_dup(pres_event, SWITCH_STACK_TOP, "presence-call-direction", call_direction);
                switch_event_fire_detailed(file, func, line, &pres_event, NULL);
                return SWITCH_STATUS_SUCCESS;
        }
@@ -2695,7 +2703,7 @@ SWITCH_DECLARE(void) switch_event_add_presence_data_cols(switch_channel_t *chann
                        switch_snprintf(header_name, sizeof(header_name), "%s%s", prefix, cols[i]);
 
                        val = switch_channel_get_variable(channel, cols[i]);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, val);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header_name, val);
                }
 
                switch_safe_free(data_copy);
@@ -3147,7 +3155,7 @@ SWITCH_DECLARE(void) switch_event_channel_permission_modify(const char *cookie,
        }
 
        if (set) {
-               switch_event_add_header_string(vals, SWITCH_STACK_BOTTOM, event_channel, "true");
+               switch_event_add_header_string_dup(vals, SWITCH_STACK_BOTTOM, event_channel, "true");
        } else {
                switch_event_del_header(vals, event_channel);
        }
index 77d957fb7c4b46cc3e65311cd8ae98504289c293..69aa2ff82e29c140f8334216f133b4b93a80b1fe 100644 (file)
@@ -3709,8 +3709,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_say(switch_core_session_t *session,
        switch_event_create(&hint_data, SWITCH_EVENT_REQUEST_PARAMS);
        switch_assert(hint_data);
 
-       switch_event_add_header_string(hint_data, SWITCH_STACK_BOTTOM, "macro_name", "say_app");
-       switch_event_add_header_string(hint_data, SWITCH_STACK_BOTTOM, "lang", chan_lang);
+       switch_event_add_header_string_dup(hint_data, SWITCH_STACK_BOTTOM, "macro_name", "say_app");
+       switch_event_add_header_string_dup(hint_data, SWITCH_STACK_BOTTOM, "lang", chan_lang);
        switch_channel_event_set_data(channel, hint_data);
 
        if (switch_xml_locate_language(&xml, &cfg, hint_data, &language, &phrases, &macros, chan_lang) != SWITCH_STATUS_SUCCESS) {
@@ -3817,8 +3817,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_say_string(switch_core_session_t *ses
        switch_event_create(&hint_data, SWITCH_EVENT_REQUEST_PARAMS);
        switch_assert(hint_data);
 
-       switch_event_add_header_string(hint_data, SWITCH_STACK_BOTTOM, "macro_name", "say_app");
-       switch_event_add_header_string(hint_data, SWITCH_STACK_BOTTOM, "lang", chan_lang);
+       switch_event_add_header_string_dup(hint_data, SWITCH_STACK_BOTTOM, "macro_name", "say_app");
+       switch_event_add_header_string_dup(hint_data, SWITCH_STACK_BOTTOM, "lang", chan_lang);
 
        if (channel) {
                switch_channel_event_set_data(channel, hint_data);
@@ -4322,7 +4322,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_create_message_reply(switch_event_t *
                abort();
        }
 
-       switch_event_add_header_string(*reply, SWITCH_STACK_BOTTOM, "proto", new_proto);
+       switch_event_add_header_string_dup(*reply, SWITCH_STACK_BOTTOM, "proto", new_proto);
 
        return status;
 }
@@ -4340,11 +4340,11 @@ SWITCH_DECLARE(char *) switch_ivr_check_presence_mapping(const char *exten_name,
        switch_assert(params);
 
        if ( !zstr(domain_name) ) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "domain", domain_name);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "domain", domain_name);
        }
 
        if ( !zstr(exten_name) ) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "exten", exten_name);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "exten", exten_name);
        }
 
        if (!(xml = switch_xml_open_cfg(cf, &cfg, params))) {
index 6dfdcf7248a94b76fc97e54cb095d6fdec97caea..352b75c25674028e4e4649fcd6dd81d418e56244 100644 (file)
@@ -1215,7 +1215,7 @@ static void merge_recording_variables(struct record_helper *rh, switch_event_t *
 
                        switch_assert(vvar && vval);
                        switch_snprintf(buf, sizeof(buf), "Recording-Variable-%s", vvar);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, buf, vval);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, buf, vval);
                }
        }
 }
@@ -1238,10 +1238,10 @@ static void send_record_stop_event(switch_channel_t *channel, switch_codec_imple
 
        if (switch_event_create(&event, SWITCH_EVENT_RECORD_STOP) == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(channel, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Record-File-Path", rh->file);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Record-File-Path", rh->file);
                merge_recording_variables(rh, event);
                if (!zstr(rh->completion_cause)) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Record-Completion-Cause", rh->completion_cause);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Record-Completion-Cause", rh->completion_cause);
                }
                switch_event_fire(&event);
        }
@@ -1479,7 +1479,7 @@ static switch_bool_t record_callback(switch_media_bug_t *bug, void *user_data, s
                                rh->start_event_sent = 1;
                                if (switch_event_create(&event, SWITCH_EVENT_RECORD_START) == SWITCH_STATUS_SUCCESS) {
                                        switch_channel_event_set_data(channel, event);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Record-File-Path", rh->file);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Record-File-Path", rh->file);
                                        merge_recording_variables(rh, event);
                                        switch_event_fire(&event);
                                }
@@ -3929,8 +3929,8 @@ static switch_status_t generate_on_dtmf(switch_core_session_t *session, const sw
                                                switch_channel_event_set_data(channel, event);
                                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "DTMF-Digit", "%c", dtmf->digit);
                                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "DTMF-Duration", "%u", dtmf->duration);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "DTMF-Source", "APP");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "DTMF-Conversion", "native:inband");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "DTMF-Source", "APP");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "DTMF-Conversion", "native:inband");
                                                if (switch_channel_test_flag(channel, CF_DIVERT_EVENTS)) {
                                                        switch_core_session_queue_event(session, &event);
                                                } else {
@@ -4267,7 +4267,7 @@ static switch_bool_t tone_detect_callback(switch_media_bug_t *bug, void *user_da
 
                                                if (switch_event_create(&event, SWITCH_EVENT_DETECTED_TONE) == SWITCH_STATUS_SUCCESS) {
                                                        switch_event_t *dup;
-                                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detected-Tone", cont->list[i].key);
+                                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Detected-Tone", cont->list[i].key);
 
                                                        if (switch_event_dup(&dup, event) == SWITCH_STATUS_SUCCESS) {
                                                                switch_event_fire(&dup);
@@ -4276,7 +4276,7 @@ static switch_bool_t tone_detect_callback(switch_media_bug_t *bug, void *user_da
                                                        if (switch_core_session_queue_event(cont->session, &event) != SWITCH_STATUS_SUCCESS) {
                                                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(switch_core_media_bug_get_session(bug)), SWITCH_LOG_ERROR,
                                                                                                  "Event queue failed!\n");
-                                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "delivery-failure", "true");
+                                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "delivery-failure", "true");
                                                                switch_event_fire(&event);
                                                        }
                                                }
@@ -5067,7 +5067,7 @@ static void *SWITCH_THREAD_FUNC speech_thread(switch_thread_t *thread, void *obj
 
                        if (switch_event_create(&event, SWITCH_EVENT_DETECTED_SPEECH) == SWITCH_STATUS_SUCCESS) {
                                if (status == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Speech-Type", "detected-speech");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Speech-Type", "detected-speech");
 
                                        if (headers) {
                                                switch_event_merge(event, headers);
@@ -5075,7 +5075,7 @@ static void *SWITCH_THREAD_FUNC speech_thread(switch_thread_t *thread, void *obj
 
                                        switch_event_add_body(event, "%s", xmlstr);
                                } else if (status == SWITCH_STATUS_MORE_DATA) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Speech-Type", "detected-partial-speech");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Speech-Type", "detected-partial-speech");
 
                                        if (headers) {
                                                switch_event_merge(event, headers);
@@ -5083,7 +5083,7 @@ static void *SWITCH_THREAD_FUNC speech_thread(switch_thread_t *thread, void *obj
 
                                        switch_event_add_body(event, "%s", xmlstr);
                                } else {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Speech-Type", "begin-speaking");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Speech-Type", "begin-speaking");
                                }
 
                                if (switch_test_flag(sth->ah, SWITCH_ASR_FLAG_FIRE_EVENTS)) {
@@ -5098,7 +5098,7 @@ static void *SWITCH_THREAD_FUNC speech_thread(switch_thread_t *thread, void *obj
 
                                if (switch_core_session_queue_event(sth->session, &event) != SWITCH_STATUS_SUCCESS) {
                                        switch_log_printf(SWITCH_CHANNEL_CHANNEL_LOG(channel), SWITCH_LOG_ERROR, "Event queue failed!\n");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "delivery-failure", "true");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "delivery-failure", "true");
                                        switch_event_fire(&event);
                                }
                        }
@@ -5113,7 +5113,7 @@ static void *SWITCH_THREAD_FUNC speech_thread(switch_thread_t *thread, void *obj
   done:
 
        if (switch_event_create(&event, SWITCH_EVENT_DETECTED_SPEECH) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Speech-Type", "closed");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Speech-Type", "closed");
                if (switch_test_flag(sth->ah, SWITCH_ASR_FLAG_FIRE_EVENTS)) {
                        switch_event_t *dup;
 
@@ -5126,7 +5126,7 @@ static void *SWITCH_THREAD_FUNC speech_thread(switch_thread_t *thread, void *obj
 
                if (switch_core_session_queue_event(sth->session, &event) != SWITCH_STATUS_SUCCESS) {
                        switch_log_printf(SWITCH_CHANNEL_CHANNEL_LOG(channel), SWITCH_LOG_ERROR, "Event queue failed!\n");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "delivery-failure", "true");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "delivery-failure", "true");
                        switch_event_fire(&event);
                }
        }
@@ -5695,10 +5695,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_broadcast(const char *uuid, const cha
                } else {
                        switch_core_session_get_app_flags(app, &app_flags);
                        if (switch_event_create(&event, SWITCH_EVENT_COMMAND) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-command", "execute");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute-app-name", app);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute-app-arg", path);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, (flags & SMF_PRIORITY) ? "event-lock-pri" : "event-lock", "true");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-command", "execute");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "execute-app-name", app);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "execute-app-arg", path);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, (flags & SMF_PRIORITY) ? "event-lock-pri" : "event-lock", "true");
 
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "lead-frames", "%d", 5);
 
@@ -5707,7 +5707,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_broadcast(const char *uuid, const cha
                                }
 
                                if ((flags & SMF_HOLD_BLEG)) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "hold-bleg", "true");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "hold-bleg", "true");
                                }
 
                                switch_core_session_queue_private_event(other_session, &event, (flags & SMF_PRIORITY));
@@ -5727,17 +5727,17 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_broadcast(const char *uuid, const cha
                        switch_core_session_execute_application(session, app, path);
                } else {
                        if (switch_event_create(&event, SWITCH_EVENT_COMMAND) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-command", "execute");
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute-app-name", app);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute-app-arg", path);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, (flags & SMF_PRIORITY) ? "event-lock-pri" : "event-lock", "true");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-command", "execute");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "execute-app-name", app);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "execute-app-arg", path);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, (flags & SMF_PRIORITY) ? "event-lock-pri" : "event-lock", "true");
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "lead-frames", "%d", 5);
 
                                if ((flags & SMF_LOOP)) {
                                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "loops", "%d", -1);
                                }
                                if ((flags & SMF_HOLD_BLEG)) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "hold-bleg", "true");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "hold-bleg", "true");
                                }
 
                                switch_core_session_queue_private_event(session, &event, (flags & SMF_PRIORITY));
@@ -5750,10 +5750,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_broadcast(const char *uuid, const cha
 
        if (cause) {
                if (switch_event_create(&event, SWITCH_EVENT_COMMAND) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-command", "execute");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute-app-name", "hangup");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "execute-app-arg", cause);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, (flags & SMF_PRIORITY) ? "event-lock-pri" : "event-lock", "true");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "call-command", "execute");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "execute-app-name", "hangup");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "execute-app-arg", cause);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, (flags & SMF_PRIORITY) ? "event-lock-pri" : "event-lock", "true");
                        switch_core_session_queue_private_event(session, &event, (flags & SMF_PRIORITY));
                }
        }
index f91fc2c69f3ff49107d6d21920c42fd2856770e8..14b6fc1f5b7b8c79b8f5067ddaf9c9fdc48ea174 100644 (file)
@@ -1235,15 +1235,15 @@ static switch_status_t uuid_bridge_on_soft_execute(switch_core_session_t *sessio
                /* fire events that will change the data table from "show channels" */
                if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_EXECUTE) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_event_set_data(channel, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application", "uuid_bridge");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application-Data", switch_core_session_get_uuid(other_session));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application", "uuid_bridge");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application-Data", switch_core_session_get_uuid(other_session));
                        switch_event_fire(&event);
                }
 
                if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_EXECUTE) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_event_set_data(other_channel, event);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application", "uuid_bridge");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application-Data", switch_core_session_get_uuid(session));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application", "uuid_bridge");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application-Data", switch_core_session_get_uuid(session));
                        switch_event_fire(&event);
                }
 
@@ -1377,8 +1377,8 @@ static switch_status_t signal_bridge_on_hibernate(switch_core_session_t *session
                if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_BRIDGE) == SWITCH_STATUS_SUCCESS) {
                        switch_core_session_t *other_session;
 
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridge-A-Unique-ID", switch_core_session_get_uuid(session));
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridge-B-Unique-ID", msg.string_arg);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridge-A-Unique-ID", switch_core_session_get_uuid(session));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridge-B-Unique-ID", msg.string_arg);
                        switch_channel_event_set_data(channel, event);
                        if ((other_session = switch_core_session_locate(msg.string_arg))) {
                                switch_channel_t *other_channel = switch_core_session_get_channel(other_session);
@@ -1479,8 +1479,8 @@ static switch_status_t signal_bridge_on_hangup(switch_core_session_t *session)
                if (switch_channel_test_flag(channel, CF_BRIDGE_ORIGINATOR)) {
                        switch_channel_clear_flag_recursive(channel, CF_BRIDGE_ORIGINATOR);
                        if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_UNBRIDGE) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridge-A-Unique-ID", switch_core_session_get_uuid(session));
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridge-B-Unique-ID", uuid);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridge-A-Unique-ID", switch_core_session_get_uuid(session));
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridge-B-Unique-ID", uuid);
                                switch_event_add_presence_data_cols(other_channel, event, "Bridge-B-PD-");
                                switch_channel_event_set_data(channel, event);
                                switch_event_fire(&event);
@@ -1492,8 +1492,8 @@ static switch_status_t signal_bridge_on_hangup(switch_core_session_t *session)
                if (switch_channel_test_flag(channel, CF_BRIDGE_ORIGINATOR)) {
                        switch_channel_clear_flag_recursive(channel, CF_BRIDGE_ORIGINATOR);
                        if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_UNBRIDGE) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridge-A-Unique-ID", switch_core_session_get_uuid(session));
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridge-B-Unique-ID", uuid);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridge-A-Unique-ID", switch_core_session_get_uuid(session));
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridge-B-Unique-ID", uuid);
                                switch_channel_event_set_data(channel, event);
                                switch_event_fire(&event);
                        }
@@ -1569,15 +1569,15 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_signal_bridge(switch_core_session_t *
        /* fire events that will change the data table from "show channels" */
        if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_EXECUTE) == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(caller_channel, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application", "signal_bridge");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application-Data", switch_core_session_get_uuid(peer_session));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application", "signal_bridge");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application-Data", switch_core_session_get_uuid(peer_session));
                switch_event_fire(&event);
        }
 
        if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_EXECUTE) == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(peer_channel, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application", "signal_bridge");
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Application-Data", switch_core_session_get_uuid(session));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application", "signal_bridge");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Application-Data", switch_core_session_get_uuid(session));
                switch_event_fire(&event);
        }
 
@@ -1687,8 +1687,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_multi_threaded_bridge(switch_core_ses
                switch_channel_set_bridge_time(peer_channel);
 
                if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_BRIDGE) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridge-A-Unique-ID", switch_core_session_get_uuid(session));
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridge-B-Unique-ID", switch_core_session_get_uuid(peer_session));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridge-A-Unique-ID", switch_core_session_get_uuid(session));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridge-B-Unique-ID", switch_core_session_get_uuid(peer_session));
                        switch_channel_event_set_data(caller_channel, event);
                        switch_event_add_presence_data_cols(peer_channel, event, "Bridge-B-PD-");
                        switch_event_fire(&event);
@@ -1877,8 +1877,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_multi_threaded_bridge(switch_core_ses
        switch_channel_set_variable(peer_channel, "call_uuid", switch_core_session_get_uuid(peer_session));
 
        if (br && switch_event_create(&event, SWITCH_EVENT_CHANNEL_UNBRIDGE) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridge-A-Unique-ID", switch_core_session_get_uuid(session));
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridge-B-Unique-ID", switch_core_session_get_uuid(peer_session));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridge-A-Unique-ID", switch_core_session_get_uuid(session));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Bridge-B-Unique-ID", switch_core_session_get_uuid(peer_session));
                switch_channel_event_set_data(caller_channel, event);
                switch_event_add_presence_data_cols(peer_channel, event, "Bridge-B-PD-");
                switch_event_fire(&event);
index 255c9a4f127cd46df961d2efb30f0b6b256684d8..d824c55b544c41394775b991a433c0f124ef2ada 100644 (file)
@@ -83,7 +83,7 @@ static void ivr_send_event(switch_core_session_t *session, char *event_type, swi
        switch_channel_t *channel = switch_core_session_get_channel(session);
        switch_event_t *event = NULL;
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, event_type) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Menu-Name", menu->name);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Menu-Name", menu->name);
                switch_channel_event_set_data(channel, event);
                switch_event_fire(&event);
        }
index 31b326bc1fb6103ddb27c7faab7394d660d2ad71..d5042046ce08386f1e21f27f72ea536c83f88efc 100644 (file)
@@ -1608,7 +1608,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_enterprise_originate(switch_core_sess
        }
 
        if (session) {
-               switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "ent_originate_aleg_uuid", switch_core_session_get_uuid(session));
+               switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "ent_originate_aleg_uuid", switch_core_session_get_uuid(session));
        }
 
        if (channel) {
@@ -1617,19 +1617,19 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_enterprise_originate(switch_core_sess
                switch_channel_process_export(channel, NULL, var_event, SWITCH_EXPORT_VARS_VARIABLE);
 
                if ((tmp_var = switch_channel_get_variable(channel, "effective_ani"))) {
-                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "origination_ani", tmp_var);
+                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "origination_ani", tmp_var);
                }
 
                if ((tmp_var = switch_channel_get_variable(channel, "effective_aniii"))) {
-                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "origination_aniii", tmp_var);
+                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "origination_aniii", tmp_var);
                }
 
                if ((tmp_var = switch_channel_get_variable(channel, "effective_caller_id_name"))) {
-                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "origination_caller_id_name", tmp_var);
+                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "origination_caller_id_name", tmp_var);
                }
 
                if ((tmp_var = switch_channel_get_variable(channel, "effective_caller_id_number"))) {
-                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "origination_caller_id_number", tmp_var);
+                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "origination_caller_id_number", tmp_var);
                }
        }
 
@@ -1661,11 +1661,11 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_enterprise_originate(switch_core_sess
 
        if (ovars && ovars != var_event) {
                for (hi = ovars->headers; hi; hi = hi->next) {
-                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, hi->name, hi->value);
+                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, hi->name, hi->value);
                }
        }
 
-       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "ignore_early_media", "true");
+       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "ignore_early_media", "true");
 
        if (data) {
                if (!(x_argc = switch_separate_string_string(data, SWITCH_ENT_ORIGINATE_DELIM, x_argv, MAX_PEERS))) {
@@ -2395,7 +2395,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
                                }
 
                                if (ok && !switch_event_get_header(var_event, hi->name)) {
-                                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, (char *) hi->name, (char *) hi->value);
+                                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, (char *) hi->name, (char *) hi->value);
                                }
                        }
                        switch_channel_variable_last(caller_channel);
@@ -2405,7 +2405,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
                   for (; hi; hi = switch_core_hash_next(&hi)) {
                   switch_core_hash_this(hi, &vvar, NULL, &vval);
                   if (vvar && vval) {
-                  switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, (void *) vvar, (char *) vval);
+                  switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, (void *) vvar, (char *) vval);
                   }
                   }
                   switch_channel_variable_last(caller_channel);
@@ -2621,7 +2621,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
 
        if (cid_name_override) {
                if (!cid_tmp) {
-                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "origination_caller_id_name", cid_name_override);
+                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "origination_caller_id_name", cid_name_override);
                }
        } else {
                cid_name_override = switch_event_get_header(var_event, "origination_caller_id_name");
@@ -2633,7 +2633,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
 
        if (cid_num_override) {
                if (!cid_tmp) {
-                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "origination_caller_id_number", cid_num_override);
+                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "origination_caller_id_number", cid_num_override);
                }
        } else {
                cid_num_override = switch_event_get_header(var_event, "origination_caller_id_number");
@@ -3018,14 +3018,14 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess
                                        }
                                }
 
-                               switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "originate_early_media", oglobals.early_ok ? "true" : "false");
+                               switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "originate_early_media", oglobals.early_ok ? "true" : "false");
 
 
                                if (caller_channel && switch_true(switch_channel_get_variable(caller_channel, "push_channel_name"))) {
                                        char *new_name = switch_core_session_sprintf(session, "%s__B", switch_channel_get_name(caller_channel));
-                                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "origination_channel_name", new_name);
+                                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "origination_channel_name", new_name);
                                        new_name = switch_core_session_sprintf(session, "_%s", switch_channel_get_name(caller_channel));
-                                       switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "sip_h_X-FS-Channel-Name", new_name);
+                                       switch_event_add_header_string_dup(var_event, SWITCH_STACK_BOTTOM, "sip_h_X-FS-Channel-Name", new_name);
                                }
 
 
@@ -4331,7 +4331,7 @@ SWITCH_DECLARE(void) switch_dial_handle_list_add_global_var(switch_dial_handle_l
                switch_event_create_plain(&hl->global_vars, SWITCH_EVENT_CHANNEL_DATA);
        }
 
-       switch_event_add_header_string(hl->global_vars, SWITCH_STACK_BOTTOM, var, val);
+       switch_event_add_header_string_dup(hl->global_vars, SWITCH_STACK_BOTTOM, var, val);
 }
 
 SWITCH_DECLARE(void) switch_dial_handle_list_add_global_var_printf(switch_dial_handle_list_t *hl, const char *var, const char *fmt, ...)
@@ -4490,7 +4490,7 @@ SWITCH_DECLARE(void) switch_dial_handle_add_global_var(switch_dial_handle_t *han
                switch_event_create_plain(&handle->global_vars, SWITCH_EVENT_CHANNEL_DATA);
        }
 
-       switch_event_add_header_string(handle->global_vars, SWITCH_STACK_BOTTOM, var, val);
+       switch_event_add_header_string_dup(handle->global_vars, SWITCH_STACK_BOTTOM, var, val);
 }
 
 SWITCH_DECLARE(void) switch_dial_handle_add_global_var_printf(switch_dial_handle_t *handle, const char *var, const char *fmt, ...)
@@ -4519,7 +4519,7 @@ SWITCH_DECLARE(switch_status_t) switch_dial_handle_add_leg_var(switch_dial_leg_t
                switch_event_create_plain(&leg->leg_vars, SWITCH_EVENT_CHANNEL_DATA);
        }
 
-       switch_event_add_header_string(leg->leg_vars, SWITCH_STACK_BOTTOM, var, val);
+       switch_event_add_header_string_dup(leg->leg_vars, SWITCH_STACK_BOTTOM, var, val);
 
        return SWITCH_STATUS_SUCCESS;
        
index 25486eee7fe4a1bc4d87c07e087df9f02232176b..7db16b7353d04ec75bf66e42e766ebde90fbfcf9 100644 (file)
@@ -75,12 +75,12 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_phrase_macro_event(switch_core_sessio
        switch_event_create(&hint_data, SWITCH_EVENT_REQUEST_PARAMS);
        switch_assert(hint_data);
 
-       switch_event_add_header_string(hint_data, SWITCH_STACK_BOTTOM, "macro_name", macro_name);
-       switch_event_add_header_string(hint_data, SWITCH_STACK_BOTTOM, "lang", chan_lang);
+       switch_event_add_header_string_dup(hint_data, SWITCH_STACK_BOTTOM, "macro_name", macro_name);
+       switch_event_add_header_string_dup(hint_data, SWITCH_STACK_BOTTOM, "lang", chan_lang);
        if (data) {
-               switch_event_add_header_string(hint_data, SWITCH_STACK_BOTTOM, "data", data);
+               switch_event_add_header_string_dup(hint_data, SWITCH_STACK_BOTTOM, "data", data);
                if (event) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "data", data);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "data", data);
                }
        } else {
                data = "";
@@ -376,7 +376,7 @@ static void merge_recording_variables(switch_event_t *vars, switch_event_t *even
 
                        switch_assert(vvar && vval);
                        switch_snprintf(buf, sizeof(buf), "Recording-Variable-%s", vvar);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, buf, vval);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, buf, vval);
                }
        }
 }
@@ -766,7 +766,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_file_event(switch_core_session
 
        if (switch_event_create(&event, SWITCH_EVENT_RECORD_START) == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(channel, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Record-File-Path", file);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Record-File-Path", file);
                merge_recording_variables(vars, event);
                switch_event_fire(&event);
        }
@@ -1029,7 +1029,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_file_event(switch_core_session
 
        if (switch_event_create(&event, SWITCH_EVENT_RECORD_STOP) == SWITCH_STATUS_SUCCESS) {
                switch_channel_event_set_data(channel, event);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Record-File-Path", file);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Record-File-Path", file);
                merge_recording_variables(vars, event);
                switch_event_fire(&event);
        }
@@ -1651,12 +1651,12 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess
                if (switch_event_create(&event, SWITCH_EVENT_PLAYBACK_START) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_event_set_data(channel, event);
                        if (!strncasecmp(file, "local_stream:", 13)) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Playback-File-Type", "local_stream");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Playback-File-Type", "local_stream");
                        }
                        if (!strncasecmp(file, "tone_stream:", 12)) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Playback-File-Type", "tone_stream");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Playback-File-Type", "tone_stream");
                        }
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Playback-File-Path", file);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Playback-File-Path", file);
                        if (fh->params) {
                                switch_event_merge(event, fh->params);
                        }
@@ -2025,16 +2025,16 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess
                if (switch_event_create(&event, SWITCH_EVENT_PLAYBACK_STOP) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_event_set_data(channel, event);
                        if (!strncasecmp(file, "local_stream:", 13)) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Playback-File-Type", "local_stream");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Playback-File-Type", "local_stream");
                        }
                        if (!strncasecmp(file, "tone_stream:", 12)) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Playback-File-Type", "tone_stream");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Playback-File-Type", "tone_stream");
                        }
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Playback-File-Path", file);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Playback-File-Path", file);
                        if (status == SWITCH_STATUS_BREAK) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Playback-Status", "break");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Playback-Status", "break");
                        } else {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Playback-Status", "done");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Playback-Status", "done");
                        }
                        if (fh->params) {
                                switch_event_merge(event, fh->params);
index e64008887aa0f6b3822107154fd7b5ae3a72b91e..81a6409776d2a665bd4da094edb868e6c3a766f8 100644 (file)
@@ -62,9 +62,9 @@ SWITCH_DECLARE(void) switch_limit_fire_event(const char *backend, const char *re
        switch_event_t *event;
 
        if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, LIMIT_EVENT_USAGE) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "backend", backend);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "realm", realm);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", key);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "backend", backend);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "realm", realm);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", key);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "usage", "%d", usage);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "rate", "%d", rate);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "max", "%d", max);
index cf9c8f368ec8bdac6a4be41a132a950571825156..161f428441eef02d2cab9e7f8960ce61d1f4e608 100644 (file)
@@ -172,10 +172,10 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding Endpoint '%s'\n", ptr->interface_name);
                                switch_core_hash_insert(loadable_modules.endpoint_hash, ptr->interface_name, (const void *) ptr);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "endpoint");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "endpoint");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
                                        
                                        if (!event_hash) {
                                                switch_event_fire(&event);
@@ -243,11 +243,11 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                                        }
 
                                        if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "codec");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "module", new_module->module_interface->module_name);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "codec");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "module", new_module->module_interface->module_name);
 
                                                if (!event_hash) {
                                                        switch_event_fire(&event);
@@ -272,10 +272,10 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                        } else {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding Dialplan '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "dialplan");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "dialplan");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
 
                                        if (!event_hash) {
                                                switch_event_fire(&event);
@@ -300,10 +300,10 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                        } else {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding Timer '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "timer");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "timer");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
 
                                        if (!event_hash) {
                                                switch_event_fire(&event);
@@ -328,12 +328,12 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                        } else {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding Application '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "application");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "description", switch_str_nil(ptr->short_desc));
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "syntax", switch_str_nil(ptr->syntax));
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "application");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "description", switch_str_nil(ptr->short_desc));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "syntax", switch_str_nil(ptr->syntax));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
 
                                        if (!event_hash) {
                                                switch_event_fire(&event);
@@ -358,12 +358,12 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                        } else {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding Chat Application '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "application");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "description", switch_str_nil(ptr->short_desc));
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "syntax", switch_str_nil(ptr->syntax));
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "application");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "description", switch_str_nil(ptr->short_desc));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "syntax", switch_str_nil(ptr->syntax));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
 
                                        if (!event_hash) {
                                                switch_event_fire(&event);
@@ -388,12 +388,12 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                        } else {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding API Function '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "api");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "description", switch_str_nil(ptr->desc));
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "syntax", switch_str_nil(ptr->syntax));
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "api");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "description", switch_str_nil(ptr->desc));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "syntax", switch_str_nil(ptr->syntax));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
 
                                        if (!event_hash) {
                                                switch_event_fire(&event);
@@ -418,12 +418,12 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                        } else {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding JSON API Function '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "json_api");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "description", switch_str_nil(ptr->desc));
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "syntax", switch_str_nil(ptr->syntax));
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "json_api");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "description", switch_str_nil(ptr->desc));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "syntax", switch_str_nil(ptr->syntax));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
 
                                        if (!event_hash) {
                                                switch_event_fire(&event);
@@ -454,11 +454,11 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                                for (i = 0; ptr->extens[i]; i++) {
                                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding File Format '%s'\n", ptr->extens[i]);
                                        if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "file");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->extens[i]);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "module", new_module->module_interface->module_name);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "file");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->extens[i]);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "module", new_module->module_interface->module_name);
 
                                                if (!event_hash) {
                                                        switch_event_fire(&event);
@@ -499,11 +499,11 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                                for (i = 0; ptr->prefixes[i]; i++) {
                                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding dsn prefix '%s'\n", ptr->prefixes[i]);
                                        if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "database");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->prefixes[i]);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "module", new_module->module_interface->module_name);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "database");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->prefixes[i]);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "module", new_module->module_interface->module_name);
 
                                                if (!event_hash) {
                                                        switch_event_fire(&event);
@@ -536,10 +536,10 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                        } else {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding Speech interface '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "speech");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "speech");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
 
                                        if (!event_hash) {
                                                switch_event_fire(&event);
@@ -564,10 +564,10 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                        } else {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding ASR interface '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "asr");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "asr");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
 
                                        if (!event_hash) {
                                                switch_event_fire(&event);
@@ -592,10 +592,10 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                        } else {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding Directory interface '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "directory");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "directory");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
 
                                        if (!event_hash) {
                                                switch_event_fire(&event);
@@ -620,10 +620,10 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                        } else {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding Chat interface '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "chat");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "chat");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
 
                                        if (!event_hash) {
                                                switch_event_fire(&event);
@@ -648,10 +648,10 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                        } else {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding Say interface '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "say");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "say");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
 
                                        if (!event_hash) {
                                                switch_event_fire(&event);
@@ -682,10 +682,10 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                                                                          "Adding Management interface '%s' OID[%s.%s]\n", key, FREESWITCH_OID_PREFIX, ptr->relative_oid);
                                        switch_core_hash_insert(loadable_modules.management_hash, ptr->relative_oid, (const void *) ptr);
                                        if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "management");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->relative_oid);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "management");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->relative_oid);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
 
                                                if (!event_hash) {
                                                        switch_event_fire(&event);
@@ -716,10 +716,10 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
                                                                          "Adding Limit interface '%s'\n", ptr->interface_name);
                                        switch_core_hash_insert(loadable_modules.limit_hash, ptr->interface_name, (const void *) ptr);
                                        if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "limit");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "limit");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
 
                                                if (!event_hash) {
                                                        switch_event_fire(&event);
@@ -738,10 +738,10 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
 
        if (!added) {
                if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "generic");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", new_module->key);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "generic");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", new_module->key);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", new_module->key);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", new_module->filename);
 
                        if (!event_hash) {
                                switch_event_fire(&event);
@@ -816,7 +816,7 @@ static switch_status_t do_chat_send(switch_event_t *message_event)
 
        if (!(proto = switch_event_get_header(message_event, "proto"))) {
                proto = "global";
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "proto", proto);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "proto", proto);
        }
 
        replying = switch_event_get_header(message_event, "replying");
@@ -871,12 +871,12 @@ static switch_status_t do_chat_send(switch_event_t *message_event)
 
        if ( switch_true(switch_event_get_header(message_event, "blocking")) ) {
                if (status == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(dup, SWITCH_STACK_BOTTOM, "Delivery-Failure", "false");
+                       switch_event_add_header_string_dup(dup, SWITCH_STACK_BOTTOM, "Delivery-Failure", "false");
                } else {
-                       switch_event_add_header_string(dup, SWITCH_STACK_BOTTOM, "Delivery-Failure", "true");
+                       switch_event_add_header_string_dup(dup, SWITCH_STACK_BOTTOM, "Delivery-Failure", "true");
                }
        } else {
-               switch_event_add_header_string(dup, SWITCH_STACK_BOTTOM, "Nonblocking-Delivery", "true");
+               switch_event_add_header_string_dup(dup, SWITCH_STACK_BOTTOM, "Nonblocking-Delivery", "true");
        }
 
        switch_event_fire(&dup);
@@ -1035,15 +1035,15 @@ SWITCH_DECLARE(switch_status_t) switch_core_chat_send_args(const char *dest_prot
        switch_status_t status;
 
        if (switch_event_create(&message_event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "proto", proto);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "from", from);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "to", to);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "subject", subject);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "type", type);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "hint", hint);
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "skip_global_process", "true");
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "proto", proto);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "from", from);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "to", to);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "subject", subject);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "type", type);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "hint", hint);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "skip_global_process", "true");
                if (blocking) {
-                       switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "blocking", "true");
+                       switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "blocking", "true");
                }
 
                if (body) {
@@ -1054,7 +1054,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_chat_send_args(const char *dest_prot
        }
 
        if (dest_proto) {
-               switch_event_add_header_string(message_event, SWITCH_STACK_BOTTOM, "dest_proto", dest_proto);
+               switch_event_add_header_string_dup(message_event, SWITCH_STACK_BOTTOM, "dest_proto", dest_proto);
        }
 
 
@@ -1077,7 +1077,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_chat_send(const char *dest_proto, sw
        switch_event_dup(&dup, message_event);
 
        if (dest_proto) {
-               switch_event_add_header_string(dup, SWITCH_STACK_BOTTOM, "dest_proto", dest_proto);
+               switch_event_add_header_string_dup(dup, SWITCH_STACK_BOTTOM, "dest_proto", dest_proto);
        }
 
        chat_queue_message(&dup);
@@ -1089,7 +1089,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_chat_deliver(const char *dest_proto,
 {
 
        if (dest_proto) {
-               switch_event_add_header_string(*message_event, SWITCH_STACK_BOTTOM, "dest_proto", dest_proto);
+               switch_event_add_header_string_dup(*message_event, SWITCH_STACK_BOTTOM, "dest_proto", dest_proto);
        }
 
        chat_queue_message(message_event);
@@ -1122,8 +1122,8 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
 
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Deleting Endpoint '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "endpoint");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "endpoint");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
                                        switch_event_fire(&event);
                                        removed++;
                                }
@@ -1176,9 +1176,9 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
                                                }
                                        }
                                        if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "codec");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "module", old_module->module_interface->module_name);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "codec");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "module", old_module->module_interface->module_name);
                                                switch_event_fire(&event);
                                                removed++;
                                        }
@@ -1194,8 +1194,8 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
                        if (ptr->interface_name) {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Deleting Dialplan '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "dialplan");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "dialplan");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
                                        switch_event_fire(&event);
                                        removed++;
                                }
@@ -1211,8 +1211,8 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
                        if (ptr->interface_name) {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Deleting Timer '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "timer");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "timer");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
                                        switch_event_fire(&event);
                                        removed++;
                                }
@@ -1236,10 +1236,10 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
                                }
 
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "application");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "description", switch_str_nil(ptr->short_desc));
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "syntax", switch_str_nil(ptr->syntax));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "application");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "description", switch_str_nil(ptr->short_desc));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "syntax", switch_str_nil(ptr->syntax));
                                        switch_event_fire(&event);
                                        removed++;
                                }
@@ -1263,10 +1263,10 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
                                }
 
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "application");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "description", switch_str_nil(ptr->short_desc));
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "syntax", switch_str_nil(ptr->syntax));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "application");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "description", switch_str_nil(ptr->short_desc));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "syntax", switch_str_nil(ptr->syntax));
                                        switch_event_fire(&event);
                                        removed++;
                                }
@@ -1293,12 +1293,12 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
 
 
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "api");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "description", switch_str_nil(ptr->desc));
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "syntax", switch_str_nil(ptr->syntax));
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "key", old_module->key);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "filename", old_module->filename);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "api");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "description", switch_str_nil(ptr->desc));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "syntax", switch_str_nil(ptr->syntax));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "key", old_module->key);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "filename", old_module->filename);
                                        switch_event_fire(&event);
                                        removed++;
                                }
@@ -1325,10 +1325,10 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
 
 
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "json_api");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "description", switch_str_nil(ptr->desc));
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "syntax", switch_str_nil(ptr->syntax));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "json_api");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "description", switch_str_nil(ptr->desc));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "syntax", switch_str_nil(ptr->syntax));
                                        switch_event_fire(&event);
                                        removed++;
                                }
@@ -1357,9 +1357,9 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
                                for (i = 0; ptr->extens[i]; i++) {
                                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Deleting File Format '%s'\n", ptr->extens[i]);
                                        if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "file");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->extens[i]);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "module", old_module->module_interface->module_name);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "file");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->extens[i]);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "module", old_module->module_interface->module_name);
                                                switch_event_fire(&event);
                                                removed++;
                                        }
@@ -1409,9 +1409,9 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
                                for (i = 0; ptr->prefixes[i]; i++) {
                                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Deleting dsn prefix '%s'\n", ptr->prefixes[i]);
                                        if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "database");
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->prefixes[i]);
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "module", old_module->module_interface->module_name);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "database");
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->prefixes[i]);
+                                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "module", old_module->module_interface->module_name);
                                                switch_event_fire(&event);
                                                removed++;
                                        }
@@ -1462,8 +1462,8 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
 
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Deleting Speech interface '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "speech");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "speech");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
                                        switch_event_fire(&event);
                                        removed++;
                                }
@@ -1489,8 +1489,8 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
 
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Deleting Asr interface '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "asr");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "asr");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
                                        switch_event_fire(&event);
                                        removed++;
                                }
@@ -1516,8 +1516,8 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
 
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Deleting Directory interface '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "directory");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "directory");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
                                        switch_event_fire(&event);
                                        removed++;
                                }
@@ -1543,8 +1543,8 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
 
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Deleting Chat interface '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "chat");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "chat");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
                                        switch_event_fire(&event);
                                        removed++;
                                }
@@ -1568,8 +1568,8 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
                                }
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Deleting Say interface '%s'\n", ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "say");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "say");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
                                        switch_event_fire(&event);
                                        removed++;
                                }
@@ -1587,8 +1587,8 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
                                                                  "Deleting Management interface '%s' OID[%s.%s]\n", old_module->key, FREESWITCH_OID_PREFIX, ptr->relative_oid);
                                switch_core_hash_delete(loadable_modules.management_hash, ptr->relative_oid);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "management");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->relative_oid);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "management");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->relative_oid);
                                        switch_event_fire(&event);
                                        removed++;
                                }
@@ -1605,8 +1605,8 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
                                                                  "Deleting Limit interface '%s'\n", ptr->interface_name);
                                switch_core_hash_delete(loadable_modules.limit_hash, ptr->interface_name);
                                if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "limit");
-                                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "limit");
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", ptr->interface_name);
                                        switch_event_fire(&event);
                                        removed++;
                                }
@@ -1616,8 +1616,8 @@ static switch_status_t switch_loadable_module_unprocess(switch_loadable_module_t
 
        if (!removed) {
                if (switch_event_create(&event, SWITCH_EVENT_MODULE_UNLOAD) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "generic");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "name", old_module->key);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "type", "generic");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "name", old_module->key);
                        switch_event_fire(&event);
                        removed++;
                }
@@ -2951,10 +2951,10 @@ SWITCH_DECLARE(switch_status_t) switch_api_execute(const char *cmd, const char *
 
        if (stream->param_event) {
                if (cmd_used && *cmd_used) {
-                       switch_event_add_header_string(stream->param_event, SWITCH_STACK_BOTTOM, "API-Command", cmd_used);
+                       switch_event_add_header_string_dup(stream->param_event, SWITCH_STACK_BOTTOM, "API-Command", cmd_used);
                }
                if (arg_used && *arg_used) {
-                       switch_event_add_header_string(stream->param_event, SWITCH_STACK_BOTTOM, "API-Command-Argument", arg_used);
+                       switch_event_add_header_string_dup(stream->param_event, SWITCH_STACK_BOTTOM, "API-Command-Argument", arg_used);
                }
        }
 
index 74a5713635b40b309b2f146a35e9961c2ad05458..db827106901c72dd4e3213c3803326afdae6c4b2 100644 (file)
@@ -193,7 +193,7 @@ SWITCH_DECLARE(cJSON *) switch_log_node_to_json(const switch_log_node_t *node, i
                                        if (!log_fields) {
                                                switch_event_create_plain(&log_fields, SWITCH_EVENT_CHANNEL_DATA);
                                        }
-                                       switch_event_add_header_string(log_fields, SWITCH_STACK_BOTTOM, hp->name, val);
+                                       switch_event_add_header_string_dup(log_fields, SWITCH_STACK_BOTTOM, hp->name, val);
                                }
                        }
                }
@@ -650,13 +650,13 @@ SWITCH_DECLARE(void) switch_log_meta_vprintf(switch_text_channel_t channel, cons
        if (channel == SWITCH_CHANNEL_ID_EVENT) {
                switch_event_t *event;
                if (switch_event_running() == SWITCH_STATUS_SUCCESS && switch_event_create(&event, SWITCH_EVENT_LOG) == SWITCH_STATUS_SUCCESS) {
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Log-Data", data);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Log-File", filep);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Log-Function", funcp);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Log-Data", data);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Log-File", filep);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Log-Function", funcp);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Log-Line", "%d", line);
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Log-Level", "%d", (int) level);
                        if (!zstr(userdata)) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "User-Data", userdata);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "User-Data", userdata);
                        }
                        switch_event_fire(&event);
                        data = NULL;
index 1f5db7ac2012e3b6f4c43ea287c3a9d3771fe23b..681feadae19b49850132b41588d1721ff2a62608 100644 (file)
@@ -664,7 +664,7 @@ SWITCH_DECLARE(switch_status_t) switch_msrp_msg_add_header(switch_msrp_msg_t *ms
                return SWITCH_STATUS_MEMERR;
        }
 
-       status = switch_event_add_header_string(msrp_msg->headers, SWITCH_STACK_BOTTOM, switch_msrp_msg_header_name(htype), data);
+       status = switch_event_add_header_string_dup(msrp_msg->headers, SWITCH_STACK_BOTTOM, switch_msrp_msg_header_name(htype), data);
 
        switch (htype) {
        case MSRP_H_TRASACTION_ID:
index f6b9bc553b859c2c6b8e81b05a8b66eeb00a7250..90286ebe75eb09f3dd7da551ea3975657191942b 100644 (file)
@@ -330,9 +330,9 @@ static void *SWITCH_THREAD_FUNC switch_nat_multicast_runtime(switch_thread_t * t
                        do_repub = SWITCH_TRUE;
 
                        switch_event_create(&event, SWITCH_EVENT_TRAP);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "condition", "network-external-address-change");
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "network-external-address-previous-v4", nat_globals.pub_addr);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "network-external-address-change-v4", newip);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "condition", "network-external-address-change");
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "network-external-address-previous-v4", nat_globals.pub_addr);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "network-external-address-change-v4", newip);
                        switch_event_fire(&event);
 
                        switch_set_string(nat_globals.pub_addr, newip);
@@ -606,10 +606,10 @@ SWITCH_DECLARE(switch_status_t) switch_nat_add_mapping_internal(switch_port_t po
 
        if (publish && status == SWITCH_STATUS_SUCCESS) {
                switch_event_create(&event, SWITCH_EVENT_NAT);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "op", "add");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "op", "add");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "port", "%d", port);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "proto", "%d", proto);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "sticky", (sticky ? "true" : "false"));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "sticky", (sticky ? "true" : "false"));
                switch_event_fire(&event);
        }
 
@@ -640,7 +640,7 @@ SWITCH_DECLARE(switch_status_t) switch_nat_del_mapping(switch_port_t port, switc
 
        if (status == SWITCH_STATUS_SUCCESS) {
                switch_event_create(&event, SWITCH_EVENT_NAT);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "op", "del");
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "op", "del");
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "port", "%d", port);
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "proto", "%d", proto);
                switch_event_fire(&event);
index 21e54b29fef86e7bf85a75c7fec72f2419aba6be..ad3c37f49b87c0eb4db14880ac1e55640c67d486 100644 (file)
@@ -314,7 +314,7 @@ SWITCH_DECLARE_NONSTD(void) switch_regex_set_event_header_callback(const char *v
 {
 
        switch_event_t *event = (switch_event_t *) user_data;
-       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, var, val);
+       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, var, val);
 }
 
 
index e8a3d30da1a74c41a6890db68a623a7f598ab318..8bf599d2c7080e9728248a45f00980b9b061c517 100644 (file)
@@ -1912,40 +1912,40 @@ static void switch_send_rtcp_event(switch_rtp_t *rtp_session ,struct switch_rtcp
                                uint32_t tmpLost;
                                char *uuid = switch_core_session_get_uuid(rtp_session->session);
                                if (uuid) {
-                                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(rtp_session->session));
+                                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(rtp_session->session));
                                }
 
                                snprintf(value, sizeof(value), "%.8x", rtp_session->stats.rtcp.ssrc);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "SSRC", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "SSRC", value);
 
                                snprintf(value, sizeof(value), "%u", ntohl(sr->sender_info.ntp_msw));
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "NTP-Most-Significant-Word", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "NTP-Most-Significant-Word", value);
 
                                snprintf(value, sizeof(value), "%u", ntohl(sr->sender_info.ntp_lsw));
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "NTP-Least-Significant-Word", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "NTP-Least-Significant-Word", value);
 
                                snprintf(value, sizeof(value), "%u", ntohl(sr->sender_info.ts));
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "RTP-Timestamp", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "RTP-Timestamp", value);
 
                                snprintf(value, sizeof(value), "%u", ntohl(sr->sender_info.pc));
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Sender-Packet-Count", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Sender-Packet-Count", value);
 
                                snprintf(value, sizeof(value), "%u", ntohl(sr->sender_info.oc));
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Octect-Packet-Count", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Octect-Packet-Count", value);
 
                                snprintf(value, sizeof(value), "%u", ntohl(sr->sender_info.ts));
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Last-RTP-Timestamp", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Last-RTP-Timestamp", value);
 
                                snprintf(value, sizeof(value), "%" SWITCH_TIME_T_FMT, switch_time_now());
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Capture-Time", value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Capture-Time", value);
 
                                /* Add sources info */
                                snprintf(header, sizeof(header), "Source-SSRC");
                                snprintf(value, sizeof(value), "%.8x", rtp_session->stats.rtcp.peer_ssrc);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header, value);
                                snprintf(header, sizeof(header), "Source-Fraction");
                                snprintf(value, sizeof(value), "%u", (uint8_t)rtcp_report_block->fraction);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header, value);
                                snprintf(header, sizeof(header), "Source-Lost");
 #if SWITCH_BYTE_ORDER == __BIG_ENDIAN
                                tmpLost = rtcp_report_block->lost; /* signed 24bit will extended signess to int32_t automatically */
@@ -1954,19 +1954,19 @@ static void switch_send_rtcp_event(switch_rtp_t *rtp_session ,struct switch_rtcp
                                tmpLost = tmpLost | ((tmpLost & 0x00800000) ? 0xff000000 : 0x00000000); /* ...and signess compensation */
 #endif
                                snprintf(value, sizeof(value), "%u", tmpLost);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header, value);
                                snprintf(header, sizeof(header), "Source-Highest-Sequence-Number-Received");
                                snprintf(value, sizeof(value), "%u", ntohl(rtcp_report_block->highest_sequence_number_received));
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header, value);
                                snprintf(header, sizeof(header), "Source-Jitter");
                                snprintf(value, sizeof(value), "%u", ntohl(rtcp_report_block->jitter));
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header, value);
                                snprintf(header, sizeof(header), "Source-LSR");
                                snprintf(value, sizeof(value), "%u", ntohl(rtcp_report_block->lsr));
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header, value);
                                snprintf(header, sizeof(header), "Source-DLSR");
                                snprintf(value, sizeof(value), "%u", ntohl(rtcp_report_block->dlsr));
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header, value);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, header, value);
 
                                switch_event_fire(&event);
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_DEBUG10, "Dispatched RTCP SEND event\n");
@@ -4200,7 +4200,7 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_add_crypto_key(switch_rtp_t *rtp_sess
                } else {
                        switch_event_add_header(fsevent, SWITCH_STACK_BOTTOM, "secure_type", "srtp:sdes:%s", switch_channel_get_variable(channel, "rtp_has_crypto"));
                }
-               switch_event_add_header_string(fsevent, SWITCH_STACK_BOTTOM, "caller-unique-id", switch_channel_get_uuid(channel));
+               switch_event_add_header_string_dup(fsevent, SWITCH_STACK_BOTTOM, "caller-unique-id", switch_channel_get_uuid(channel));
                switch_event_fire(&fsevent);
        }
 
index 9c0f29a35b8f06950f8142b695af3842235e0f06..9b9bd2aff23ab9bb90ac34a5c2026df60975e80d 100644 (file)
@@ -72,8 +72,8 @@ static void switch_scheduler_execute(switch_scheduler_task_container_t *tp)
                tp->executed = 0;
                if (switch_event_create(&event, SWITCH_EVENT_RE_SCHEDULE) == SWITCH_STATUS_SUCCESS) {
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Task-ID", "%u", tp->task.task_id);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Task-Desc", tp->desc);
-                       switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Task-Group", switch_str_nil(tp->task.group));
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Task-Desc", tp->desc);
+                       switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Task-Group", switch_str_nil(tp->task.group));
                        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Task-Runtime", "%" SWITCH_INT64_T_FMT, tp->task.runtime);
                        switch_queue_push(globals.event_queue, event);
                        event = NULL;
@@ -150,8 +150,8 @@ static int task_thread_loop(int done)
 
                        if (switch_event_create(&event, SWITCH_EVENT_DEL_SCHEDULE) == SWITCH_STATUS_SUCCESS) {
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Task-ID", "%u", tofree->task.task_id);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Task-Desc", tofree->desc);
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Task-Group", switch_str_nil(tofree->task.group));
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Task-Desc", tofree->desc);
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Task-Group", switch_str_nil(tofree->task.group));
                                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Task-Runtime", "%" SWITCH_INT64_T_FMT, tofree->task.runtime);
                                switch_queue_push(globals.event_queue, event);
                                event = NULL;
@@ -265,8 +265,8 @@ SWITCH_DECLARE(uint32_t) switch_scheduler_add_task_ex(time_t task_runtime,
 
        if (switch_event_create(&event, SWITCH_EVENT_ADD_SCHEDULE) == SWITCH_STATUS_SUCCESS) {
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Task-ID", "%u", tp->task.task_id);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Task-Desc", tp->desc);
-               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Task-Group", switch_str_nil(tp->task.group));
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Task-Desc", tp->desc);
+               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Task-Group", switch_str_nil(tp->task.group));
                switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Task-Runtime", "%" SWITCH_INT64_T_FMT, tp->task.runtime);
                switch_queue_push(globals.event_queue, event);
                event = NULL;
index d8b830943a9cf9a15733019da88570febcdfc520..cfc80d7498d1a43ad0f1a530a916502f1eb0f228 100644 (file)
@@ -4218,7 +4218,7 @@ SWITCH_DECLARE(void) switch_http_parse_qs(switch_http_request_t *request, char *
                name = q;
                if ((val = strchr(name, '='))) {
                        *val++ = '\0';
-                       switch_event_add_header_string(request->headers, SWITCH_STACK_BOTTOM, name, val);
+                       switch_event_add_header_string_dup(request->headers, SWITCH_STACK_BOTTOM, name, val);
                }
                q = next;
        } while (q);
@@ -4366,7 +4366,7 @@ SWITCH_DECLARE(switch_status_t) switch_http_parse_header(char *buffer, uint32_t
 
                if (len && *(value + len - 1) == '\r') *(value + len - 1) = '\0';
 
-               switch_event_add_header_string(request->headers, SWITCH_STACK_BOTTOM, header, value);
+               switch_event_add_header_string_dup(request->headers, SWITCH_STACK_BOTTOM, header, value);
 
                if (!strncasecmp(header, "User-Agent", 10)) {
                        request->user_agent = value;
index e35d87712fb40ce66129c78ae17a94aa231848f6..1407dead901063dfb649d84a6a92255309a82c4a 100644 (file)
@@ -1849,7 +1849,7 @@ static void parse_codecs(my_vpx_cfg_t *my_cfg, switch_xml_t codecs)
 
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "codec: %s, profile: %s\n", name, profile);
 
-               switch_event_add_header_string(my_cfg->codecs, SWITCH_STACK_BOTTOM, name, profile);
+               switch_event_add_header_string_dup(my_cfg->codecs, SWITCH_STACK_BOTTOM, name, profile);
        }
 }
 
index c43a530252e5c5f6ecfa2b1520c5bf66e5bffb5a..6a13fa143e7441fd6ef244b4e1ac0f3d7e97d971 100644 (file)
@@ -1818,7 +1818,7 @@ SWITCH_DECLARE(switch_status_t) switch_xml_locate_domain(const char *domain_name
        if (!params) {
                switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS);
                switch_assert(my_params);
-               switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "domain", domain_name);
+               switch_event_add_header_string_dup(my_params, SWITCH_STACK_BOTTOM, "domain", domain_name);
                params = my_params;
        }
 
@@ -1848,11 +1848,11 @@ SWITCH_DECLARE(switch_status_t) switch_xml_locate_group(const char *group_name,
        }
 
        if (group_name) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "group_name", group_name);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "group_name", group_name);
        }
 
        if (domain_name) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "domain", domain_name);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "domain", domain_name);
        }
 
        if ((status = switch_xml_locate_domain(domain_name, params, root, domain)) != SWITCH_STATUS_SUCCESS) {
@@ -2195,18 +2195,18 @@ SWITCH_DECLARE(switch_status_t) switch_xml_locate_user(const char *key,
                params = my_params;
        }
 
-       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "key", key);
+       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "key", key);
 
        if (user_name) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "user", user_name);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "user", user_name);
        }
 
        if (domain_name) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "domain", domain_name);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "domain", domain_name);
        }
 
        if (ip) {
-               switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "ip", ip);
+               switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "ip", ip);
        }
 
        if ((status = switch_xml_locate_domain(domain_name, params, root, domain)) != SWITCH_STATUS_SUCCESS) {
@@ -3337,7 +3337,7 @@ SWITCH_DECLARE(switch_status_t) switch_xml_locate_language(switch_xml_t *root, s
                        *secondary++ = '\0';
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING,
                                                          "language %s not found. trying %s by removing %s\n", str_language, str_language_dup, secondary);
-                       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "lang", str_language_dup);
+                       switch_event_add_header_string_dup(params, SWITCH_STACK_BOTTOM, "lang", str_language_dup);
                        status = switch_xml_locate_language_ex(root, node, params, language, phrases, macros, str_language_dup);
                }
                switch_safe_free(str_language_dup);
index 6d67ccdad4002a409bc113ad30e0227a9e5b32f0..1abef85a7318dd8cce620f2bc31668b09e80b063 100644 (file)
@@ -61,7 +61,7 @@ SWITCH_DECLARE(switch_size_t) switch_event_import_xml(switch_xml_t xml, const ch
                const char *key = switch_xml_attr_soft(node, keyname);
                const char *value = switch_xml_attr_soft(node, valuename);
                if (key && value) {
-                       switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, key, value);
+                       switch_event_add_header_string_dup(*event, SWITCH_STACK_BOTTOM, key, value);
                        count++;
                }
        }
index 5689513cbc85120c70afb218158c75ba1bab59a1..36cf5e1fc7e8ca7bc241c2b7aed20caf373d776a 100644 (file)
@@ -56,12 +56,12 @@ FST_CORE_BEGIN("./conf")
                        switch_event_t* event;
 
                        if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_CALLSTATE) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Call-State-Number[0]", "1");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-Call-State-Number[0]", "1");
                                switch_event_fire(&event);
                        }
 
                        if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_CALLSTATE) == SWITCH_STATUS_SUCCESS) {
-                               switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Channel-Call-State-Number[5000]", "12");
+                               switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, "Channel-Call-State-Number[5000]", "12");
                                switch_event_fire(&event);
                        }
                }
index bf8c3f43d2c94bf87f76499627a2fc714301f720..489deaed306aca3a16f992d62f38a8fb02ff1286 100644 (file)
@@ -45,13 +45,13 @@ FST_TEST_BEGIN(benchmark)
 
 #ifndef BENCHMARK
   for ( x = 0; x < loops; x++) {
-    status = switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, index[x], index[x]);
+    status = switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, index[x], index[x]);
     fst_xcheck(status == SWITCH_STATUS_SUCCESS, "Failed to add header to event");
   }
 #else 
   small_start_ts = switch_time_now();
   for ( x = 0; x < loops; x++) {
-    if ( switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, index[x], index[x]) != SWITCH_STATUS_SUCCESS) {
+    if ( switch_event_add_header_string_dup(event, SWITCH_STACK_BOTTOM, index[x], index[x]) != SWITCH_STATUS_SUCCESS) {
       fst_fail("Failed to add header to event");
     }
   }
index 7b6a5e86c824725b459bb3316b90eb9b41286f51..e92dc00e473506b9bddbc4b488f50a3d9bc98d9b 100644 (file)
@@ -135,12 +135,12 @@ FST_CORE_BEGIN("./conf_async")
                        // record READ stream only- should be complete silence which will trigger the initial timeout.
                        // Min seconds set to 2, which will cause the recording to be discarded.
                        // Expect the record_start_test_pass and record_stop_test_pass variables set to true
-                       switch_event_add_header_string(rec_vars, SWITCH_STACK_BOTTOM, "execute_on_record_start", "set record_start_test_pass=true");
-                       switch_event_add_header_string(rec_vars, SWITCH_STACK_BOTTOM, "execute_on_record_stop", "set record_stop_test_pass=true");
-                       switch_event_add_header_string(rec_vars, SWITCH_STACK_BOTTOM, SWITCH_RECORD_POST_PROCESS_EXEC_APP_VARIABLE, "set record_post_process_test_pass=true");
-                       switch_event_add_header_string(rec_vars, SWITCH_STACK_BOTTOM, "RECORD_READ_ONLY", "true");
-                       switch_event_add_header_string(rec_vars, SWITCH_STACK_BOTTOM, "RECORD_INITIAL_TIMEOUT_MS", "500");
-                       switch_event_add_header_string(rec_vars, SWITCH_STACK_BOTTOM, "RECORD_MIN_SEC", "2");
+                       switch_event_add_header_string_dup(rec_vars, SWITCH_STACK_BOTTOM, "execute_on_record_start", "set record_start_test_pass=true");
+                       switch_event_add_header_string_dup(rec_vars, SWITCH_STACK_BOTTOM, "execute_on_record_stop", "set record_stop_test_pass=true");
+                       switch_event_add_header_string_dup(rec_vars, SWITCH_STACK_BOTTOM, SWITCH_RECORD_POST_PROCESS_EXEC_APP_VARIABLE, "set record_post_process_test_pass=true");
+                       switch_event_add_header_string_dup(rec_vars, SWITCH_STACK_BOTTOM, "RECORD_READ_ONLY", "true");
+                       switch_event_add_header_string_dup(rec_vars, SWITCH_STACK_BOTTOM, "RECORD_INITIAL_TIMEOUT_MS", "500");
+                       switch_event_add_header_string_dup(rec_vars, SWITCH_STACK_BOTTOM, "RECORD_MIN_SEC", "2");
 
                        status = switch_ivr_record_session_event(fst_session, record_filename, 0, NULL, rec_vars);
                        fst_xcheck(status == SWITCH_STATUS_SUCCESS, "Expect switch_ivr_record_session() to return SWITCH_STATUS_SUCCESS");
index 5603e18f0ecfe0f049ba640f0d3b4a39c2fe73ad..e524cde7f6d547e2d53d0ce4837f64c39d4bb3a5 100644 (file)
@@ -121,7 +121,7 @@ FST_CORE_BEGIN("./conf")
                        switch_call_cause_t cause;
                        switch_event_t *ovars = NULL;
                        switch_event_create(&ovars, SWITCH_EVENT_CLONE);
-                       switch_event_add_header_string(ovars, SWITCH_STACK_BOTTOM, "origination_external_id", "zzzz");
+                       switch_event_add_header_string_dup(ovars, SWITCH_STACK_BOTTOM, "origination_external_id", "zzzz");
                        status = switch_ivr_originate(NULL, &session, &cause, "null/+15553334444", 2, NULL, NULL, NULL, NULL, ovars, SOF_NONE, NULL, NULL);
                        fst_requires(session);
                        fst_check(status == SWITCH_STATUS_SUCCESS);
index c23a2d3332abfc6cb1f7466357b9070247f87b94..a451ecb201e02e8deda6301ebd6a90b0b3dd7cd3 100644 (file)
@@ -408,9 +408,9 @@ FST_CORE_BEGIN("./conf_playsay")
                        fst_requires(rec_vars);
                        switch_event_bind("record_file_event", SWITCH_EVENT_RECORD_START, SWITCH_EVENT_SUBCLASS_ANY, on_record_start, NULL);
                        switch_event_bind("record_file_event", SWITCH_EVENT_RECORD_STOP, SWITCH_EVENT_SUBCLASS_ANY, on_record_stop, NULL);
-                       switch_event_add_header_string(rec_vars, SWITCH_STACK_BOTTOM, "execute_on_record_start", "set record_start_test_pass=true");
-                       switch_event_add_header_string(rec_vars, SWITCH_STACK_BOTTOM, "execute_on_record_stop", "set record_stop_test_pass=true");
-                       switch_event_add_header_string(rec_vars, SWITCH_STACK_BOTTOM, "ID", "foo");
+                       switch_event_add_header_string_dup(rec_vars, SWITCH_STACK_BOTTOM, "execute_on_record_start", "set record_start_test_pass=true");
+                       switch_event_add_header_string_dup(rec_vars, SWITCH_STACK_BOTTOM, "execute_on_record_stop", "set record_stop_test_pass=true");
+                       switch_event_add_header_string_dup(rec_vars, SWITCH_STACK_BOTTOM, "ID", "foo");
                        switch_ivr_displace_session(fst_session, "file_string://silence_stream://500,0!tone_stream://%%(2000,0,350,440)", 0, "r");
                        status = switch_ivr_record_file_event(fst_session, NULL, record_filename, NULL, 4, rec_vars);
                        fst_check(status == SWITCH_STATUS_SUCCESS);
@@ -438,7 +438,7 @@ FST_CORE_BEGIN("./conf_playsay")
                        switch_event_bind("record_file_event", SWITCH_EVENT_RECORD_STOP, SWITCH_EVENT_SUBCLASS_ANY, on_record_stop, NULL);
                        switch_channel_set_variable(fst_channel, "execute_on_record_start_1", "set record_start_test_pass=true");
                        switch_channel_set_variable(fst_channel, "execute_on_record_stop_1", "set record_stop_test_pass=true");
-                       switch_event_add_header_string(rec_vars, SWITCH_STACK_BOTTOM, "ID", "foo");
+                       switch_event_add_header_string_dup(rec_vars, SWITCH_STACK_BOTTOM, "ID", "foo");
                        switch_ivr_displace_session(fst_session, "file_string://silence_stream://500,0!tone_stream://%%(2000,0,350,440)", 0, "r");
                        status = switch_ivr_record_file_event(fst_session, NULL, record_filename, NULL, 4, rec_vars);
                        fst_check(status == SWITCH_STATUS_SUCCESS);