]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Add optional <variables> and <params> tag to <gateway> tag.
authorAnthony Minessale <anthony.minessale@gmail.com>
Tue, 21 Oct 2008 22:40:20 +0000 (22:40 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Tue, 21 Oct 2008 22:40:20 +0000 (22:40 +0000)
current gateways are:
<gateway>
 <param name="foo" value="bar"/>
</gateway>

now can also be:
<gateway>
 <params>
  <param name="foo" value="bar"/>
 </params>
</gateway>

now can also be:
<gateway>
 <params>
  <param name="foo" value="bar"/>
 </params>
 <variables>
  <variable name="myvar" val="myval"/>
 </variables>
</gateway>

any variables will be set on all outgoing channels using that gateway.

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10103 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/endpoints/mod_sofia/mod_sofia.c
src/mod/endpoints/mod_sofia/mod_sofia.h
src/mod/endpoints/mod_sofia/sofia_reg.c

index 46a1c3e90abfaa731838022186048a0c058f50e4..ff3ffe81cced8a4b033d83e995978ca43321703d 100644 (file)
@@ -2029,6 +2029,16 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
                } else {
                        tech_pvt->invite_contact = switch_core_session_strdup(nsession, gateway_ptr->register_contact);
                }
+
+               if (gateway_ptr->vars) {
+                       switch_event_header_t *hp;
+                       for(hp = gateway_ptr->vars->headers; hp; hp = hp->next) {
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s setting variable [%s]=[%s]\n",
+                                                                 switch_channel_get_name(nchannel), hp->name, hp->value);
+                               switch_channel_set_variable(nchannel, hp->name, hp->value);
+                       }
+               }
+
        } else {
                if (!(dest = strchr(profile_name, '/'))) {
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid URL\n");
index edd38544fe7c2be54e28e760e959136368ae9d54..da2f44e8d060a31a6e2c4b8eb23e0a8101a9e3be 100644 (file)
@@ -297,6 +297,7 @@ struct sofia_gateway {
        reg_state_t state;
        switch_memory_pool_t *pool;
        int deleted;
+       switch_event_t *vars;
        struct sofia_gateway *next;
 };
 
index 98acede608ce2604ed0653ade8a4ad49a27e94c0..ce339001fd1d19d14ec1a58fe7810de3cf67b69c 100644 (file)
@@ -93,6 +93,9 @@ void sofia_reg_check_gateway(sofia_profile_t *profile, time_t now)
                        switch_core_hash_delete(mod_sofia_globals.gateway_hash, gateway_ptr->register_from);
                        switch_core_hash_delete(mod_sofia_globals.gateway_hash, gateway_ptr->register_contact);
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Deleted gateway %s\n", gateway_ptr->name);
+                       if (gateway_ptr->vars) {
+                               switch_event_destroy(&gateway_ptr->vars);
+                       }
                } else {
                        last = gateway_ptr;
                }