]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
avoiding initial paradox of doom
authorAnthony Minessale <anthony.minessale@gmail.com>
Fri, 27 Feb 2009 16:35:42 +0000 (16:35 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Fri, 27 Feb 2009 16:35:42 +0000 (16:35 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12326 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/event_handlers/mod_event_socket/mod_event_socket.c
src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c

index aff4288c1c9e3b542054d978f22e64b6318c80e3..6858dc1448147d548e7d430c086dcab366ff9f6d 100644 (file)
@@ -906,7 +906,7 @@ SWITCH_STANDARD_API(event_sink_function)
                char *api_command = switch_event_get_header(stream->param_event, "fsapi-command");
                char *api_args = switch_event_get_header(stream->param_event, "fsapi-args");
                switch_event_t *event, *oevent;
-
+               
                if (!(api_command)) {
                        stream->write_function(stream, "<data><reply type=\"error\">INVALID API COMMAND!</reply></data>\n");
                        goto end;
@@ -916,6 +916,12 @@ SWITCH_STANDARD_API(event_sink_function)
                switch_event_create(&event, SWITCH_EVENT_REQUEST_PARAMS);
                oevent = stream->param_event;
                stream->param_event = event;
+
+               if (!strcasecmp(api_command, "unload") && !strcasecmp(api_args, "mod_event_socket")) {
+                       api_command = "bgapi";
+                       api_args = "unload mod_event_socket";
+               }
+
                switch_api_execute(api_command, api_args, NULL, stream);
                stream->param_event = oevent;
                stream->write_function(stream, " </api-command>\n</data>");
@@ -1341,9 +1347,14 @@ static switch_status_t parse_command(listener_t *listener, switch_event_t **even
 {
        switch_status_t status = SWITCH_STATUS_SUCCESS;
        char *cmd = switch_event_get_header(*event, "command");
-
+       char cheat[] = "api bgapi unload mod_event_socket";
+       
        *reply = '\0';
 
+       if (switch_stristr("unload mod_event_socket", cmd)) {
+               cmd = cheat;
+       }
+
        if (!strncasecmp(cmd, "exit", 4)) {
                switch_clear_flag_locked(listener, LFLAG_RUNNING);
                switch_snprintf(reply, reply_len, "+OK bye");
index f8b2ba8c9d99399f3a8e14912e7454a5145a3c0c..166d9fd672233fe43286c4931d5c64637dbf31aa 100644 (file)
@@ -453,6 +453,7 @@ abyss_bool handler_hook(TSession * r)
        char *path_info = NULL;
        abyss_bool ret = TRUE;
        int html = 0, text = 0, xml = 0;
+       const char *api_str;
 
        stream.data = r;
        stream.write_function = http_stream_write;
@@ -681,8 +682,14 @@ abyss_bool handler_hook(TSession * r)
                ConnWrite(r->conn, "\r\n", 2);
        }
 
+       if (switch_stristr("unload", command) && switch_stristr("mod_xml_rpc", r->requestInfo.query)) {
+               command = "bgapi";
+               api_str = "unload mod_xml_rpc";
+       } else {
+               api_str = r->requestInfo.query;
+       }
 
-       if (switch_api_execute(command, r->requestInfo.query, NULL, &stream) == SWITCH_STATUS_SUCCESS) {
+       if (switch_api_execute(command, api_str, NULL, &stream) == SWITCH_STATUS_SUCCESS) {
                ResponseStatus(r, 200);
                r->responseStarted = TRUE;
                //r->done = TRUE;
@@ -711,6 +718,8 @@ static xmlrpc_value *freeswitch_api(xmlrpc_env * const envP, xmlrpc_value * cons
        char *command = NULL, *arg = NULL;
        switch_stream_handle_t stream = { 0 };
        xmlrpc_value *val = NULL;
+       const char *x_command = "bgapi", x_arg= "unload mod_xml_rpc";
+
 
        /* Parse our argument array. */
        xmlrpc_decompose_value(envP, paramArrayP, "(ss)", &command, &arg);
@@ -720,6 +729,13 @@ static xmlrpc_value *freeswitch_api(xmlrpc_env * const envP, xmlrpc_value * cons
                return NULL;
        }
 
+       if (switch_stristr("unload", command) && switch_stristr("mod_xml_rpc", arg)) {
+               switch_safe_free(command);
+               command = x_command;
+               switch_safe_free(arg);
+               arg = x_arg;
+       }
+
        SWITCH_STANDARD_STREAM(stream);
        if (switch_api_execute(command, arg, NULL, &stream) == SWITCH_STATUS_SUCCESS) {
                /* Return our result. */
@@ -730,8 +746,14 @@ static xmlrpc_value *freeswitch_api(xmlrpc_env * const envP, xmlrpc_value * cons
        }
 
        /* xmlrpc-c requires us to free memory it malloced from xmlrpc_decompose_value */
-       switch_safe_free(command);
-       switch_safe_free(arg);
+       if (command != x_command) {
+               switch_safe_free(command);
+       }
+
+       if (arg != x_arg) {
+               switch_safe_free(arg);
+       }
+
        return val;
 }