]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-7870: [mod_conference] allow jsonapi commands to take string variant of id attr
authorMichael Jerris <mike@jerris.com>
Wed, 22 Jul 2015 22:13:03 +0000 (18:13 -0400)
committerMichael Jerris <mike@jerris.com>
Wed, 22 Jul 2015 22:13:10 +0000 (18:13 -0400)
src/mod/applications/mod_conference/conference_event.c

index 973fc403ac154fa619ae30c5f089324b26244da0..7367b1000b0973f65bed53b4393ad72894d0083f 100644 (file)
@@ -49,7 +49,7 @@ void conference_event_mod_channel_handler(const char *event_channel, cJSON *json
        char *value = NULL;
        cJSON *jid = 0;
        char *conference_name = strdup(event_channel + 15);
-       int cid = 0;
+       char cid[32] = "";
        char *p;
        switch_stream_handle_t stream = { 0 };
        char *exec = NULL;
@@ -64,7 +64,11 @@ void conference_event_mod_channel_handler(const char *event_channel, cJSON *json
        if ((data = cJSON_GetObjectItem(json, "data"))) {
                action = cJSON_GetObjectCstr(data, "command");
                if ((jid = cJSON_GetObjectItem(data, "id"))) {
-                       cid = jid->valueint;
+                       if (jid->valueint) {
+                               switch_snprintf(cid, sizeof(cid), "%d", jid->valueint);
+                       } else if (!zstr(jid->valuestring)) {
+                               switch_snprintf(cid, sizeof(cid), "%s", jid->valuestring);
+                       }
                }
 
                if ((jvalue = cJSON_GetObjectItem(data, "value"))) {
@@ -87,7 +91,7 @@ void conference_event_mod_channel_handler(const char *event_channel, cJSON *json
                }
        }
 
-       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "conf %s CMD %s [%s] %d\n", conference_name, key, action, cid);
+       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "conf %s CMD %s [%s] %s\n", conference_name, key, action, cid);
 
        if (zstr(action)) {
                goto end;
@@ -123,15 +127,20 @@ void conference_event_mod_channel_handler(const char *event_channel, cJSON *json
 
                exec = switch_mprintf("%s %s %s %s", conference_name, action, argv[0], argv[1]);
 
-       } else if (!strcasecmp(action, "transfer") && cid) {
+       } else if (!strcasecmp(action, "transfer")) {
                conference_member_t *member;
                conference_obj_t *conference;
 
+               if (cid[0] == '\0') {
+                       stream.write_function(&stream, "-ERR Call transfer requires id");
+                       goto end;
+               }
+
                exec = switch_mprintf("%s %s %s", argv[0], switch_str_nil(argv[1]), switch_str_nil(argv[2]));
                stream.write_function(&stream, "+OK Call transferred to %s", argv[0]);
 
                if ((conference = conference_find(conference_name, NULL))) {
-                       if ((member = conference_member_get(conference, cid))) {
+                       if ((member = conference_member_get(conference, atoi(cid)))) {
                                switch_ivr_session_transfer(member->session, argv[0], argv[1], argv[2]);
                                switch_thread_rwlock_unlock(member->rwlock);
                        }