]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Manager: Fix Manager Action ModuleLoad to give correct response when reloading
authorJonathan Rose <jrose@digium.com>
Tue, 27 Jan 2015 17:22:52 +0000 (17:22 +0000)
committerJonathan Rose <jrose@digium.com>
Tue, 27 Jan 2015 17:22:52 +0000 (17:22 +0000)
Prior to this patch, ModuleLoad would respond with an error indicating that
the requested module wasn't found in spite of finding and reloading the
module.

Review: https://reviewboard.asterisk.org/r/4373/
ASTERISK-24721 #close

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431153 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/manager.c

index 29a8a83e9db3c1a444fc77d5460d4868ec073674..36041333ffc25dc037716a87b409bb8d8386d759 100644 (file)
@@ -6025,14 +6025,31 @@ static int manager_moduleload(struct mansession *s, const struct message *m)
                        astman_send_ack(s, m, "Module unloaded.");
                }
        } else if (!strcasecmp(loadtype, "reload")) {
+               /* TODO: Unify the ack/error messages here with action_reload */
                if (!ast_strlen_zero(module)) {
-                       res = ast_module_reload(module);
-                       if (res == 0) {
+                       enum ast_module_reload_result reload_res = ast_module_reload(module);
+
+                       switch (reload_res) {
+                       case AST_MODULE_RELOAD_NOT_FOUND:
                                astman_send_error(s, m, "No such module.");
-                       } else if (res == 1) {
+                               break;
+                       case AST_MODULE_RELOAD_NOT_IMPLEMENTED:
                                astman_send_error(s, m, "Module does not support reload action.");
-                       } else {
+                               break;
+                       case AST_MODULE_RELOAD_ERROR:
+                               astman_send_error(s, m, "An unknown error occurred");
+                               break;
+                       case AST_MODULE_RELOAD_IN_PROGRESS:
+                               astman_send_error(s, m, "A reload is in progress");
+                               break;
+                       case AST_MODULE_RELOAD_UNINITIALIZED:
+                               astman_send_error(s, m, "Module not initialized");
+                               break;
+                       case AST_MODULE_RELOAD_QUEUED:
+                       case AST_MODULE_RELOAD_SUCCESS:
+                               /* Treat a queued request as success */
                                astman_send_ack(s, m, "Module reloaded.");
+                               break;
                        }
                } else {
                        ast_module_reload(NULL);        /* Reload all modules */