]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9549 #resolve [Add userVariables to DMTF and INFO messages]
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 20 Sep 2016 18:57:34 +0000 (13:57 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 20 Sep 2016 18:57:34 +0000 (13:57 -0500)
src/mod/endpoints/mod_verto/mod_verto.c

index 816d65f3019213700782070fb044bbc95e135078..725d7322de4cd0d37c902e43e7f390008571a310 100644 (file)
@@ -3232,6 +3232,31 @@ static switch_bool_t verto__attach_func(const char *method, cJSON *params, jsock
        return SWITCH_FALSE;    
 }
 
+static void parse_user_vars(cJSON *obj, switch_core_session_t *session)
+{
+       cJSON *json_ptr;
+
+       switch_assert(obj);
+       switch_assert(session);
+
+       if ((json_ptr = cJSON_GetObjectItem(obj, "userVariables"))) {
+               cJSON * i;
+               switch_channel_t *channel = switch_core_session_get_channel(session);
+
+               for(i = json_ptr->child; i; i = i->next) {
+                       char *varname = switch_core_session_sprintf(session, "verto_dvar_%s", i->string);
+
+                       if (i->type == cJSON_True) {
+                               switch_channel_set_variable(channel, varname, "true");
+                       } else if (i->type == cJSON_False) {
+                               switch_channel_set_variable(channel, varname, "false");
+                       } else if (!zstr(i->string) && !zstr(i->valuestring)) {
+                               switch_channel_set_variable(channel, varname, i->valuestring);
+                       }
+               }
+       }
+}
+
 static switch_bool_t verto__info_func(const char *method, cJSON *params, jsock_t *jsock, cJSON **response)
 {
        cJSON *msg = NULL, *dialog = NULL;
@@ -3247,6 +3272,8 @@ static switch_bool_t verto__info_func(const char *method, cJSON *params, jsock_t
                
                if ((session = switch_core_session_locate(call_id))) {
 
+                       parse_user_vars(dialog, session);
+
                        if ((dtmf = cJSON_GetObjectCstr(params, "dtmf"))) {  
                                verto_pvt_t *tech_pvt = switch_core_session_get_private_class(session, SWITCH_PVT_SECONDARY);
                                char *send = switch_mprintf("~%s", dtmf);
@@ -3353,7 +3380,7 @@ static switch_bool_t verto__info_func(const char *method, cJSON *params, jsock_t
 
 static switch_bool_t verto__invite_func(const char *method, cJSON *params, jsock_t *jsock, cJSON **response)
 {
-       cJSON *obj = cJSON_CreateObject(), *screenShare = NULL, *dedEnc = NULL, *mirrorInput, *json_ptr = NULL, *bandwidth = NULL, *canvas = NULL;
+       cJSON *obj = cJSON_CreateObject(), *screenShare = NULL, *dedEnc = NULL, *mirrorInput, *bandwidth = NULL, *canvas = NULL;
        switch_core_session_t *session = NULL;
        switch_channel_t *channel;
        switch_event_t *var_event;
@@ -3493,21 +3520,7 @@ static switch_bool_t verto__invite_func(const char *method, cJSON *params, jsock
                }
        }
 
-       if ((json_ptr = cJSON_GetObjectItem(dialog, "userVariables"))) {
-               cJSON * i;
-
-               for(i = json_ptr->child; i; i = i->next) {
-                       char *varname = switch_core_session_sprintf(session, "verto_dvar_%s", i->string);
-
-                       if (i->type == cJSON_True) {
-                               switch_channel_set_variable(channel, varname, "true");
-                       } else if (i->type == cJSON_False) {
-                               switch_channel_set_variable(channel, varname, "false");
-                       } else if (!zstr(i->string) && !zstr(i->valuestring)) {
-                               switch_channel_set_variable(channel, varname, i->valuestring);
-                       }
-               }
-       }
+       parse_user_vars(dialog, session);
 
        switch_snprintf(name, sizeof(name), "verto.rtc/%s", destination_number);
        switch_channel_set_name(channel, name);