<p>N A has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/15962">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">app_reload: New Reload application<br><br>Adds an application to reload modules<br>from within the dialplan.<br><br>ASTERISK-29454<br><br>Change-Id: Ic8ab025d8b38dd525b872b41c465c999c5810774<br>---<br>A apps/app_reload.c<br>A doc/CHANGES-staging/app_reload.txt<br>2 files changed, 130 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/62/15962/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/apps/app_reload.c b/apps/app_reload.c</span><br><span>new file mode 100644</span><br><span>index 0000000..486501d</span><br><span>--- /dev/null</span><br><span>+++ b/apps/app_reload.c</span><br><span>@@ -0,0 +1,126 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * Asterisk -- An open source telephony toolkit.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2021, Naveen Albert</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Naveen Albert <asterisk@phreaknet.org></span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * See http://www.asterisk.org for more information about</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Asterisk project. Please do not directly contact</span><br><span style="color: hsl(120, 100%, 40%);">+ * any of the maintainers of this project for assistance;</span><br><span style="color: hsl(120, 100%, 40%);">+ * the project provides a web site, mailing lists and IRC</span><br><span style="color: hsl(120, 100%, 40%);">+ * channels for your use.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software, distributed under the terms of</span><br><span style="color: hsl(120, 100%, 40%);">+ * the GNU General Public License Version 2. See the LICENSE file</span><br><span style="color: hsl(120, 100%, 40%);">+ * at the top of the source tree.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*! \file</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Reload Asterisk modules</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \author Naveen Albert <asterisk@phreaknet.org></span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \ingroup applications</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*** MODULEINFO</span><br><span style="color: hsl(120, 100%, 40%);">+        <support_level>extended</support_level></span><br><span style="color: hsl(120, 100%, 40%);">+ ***/</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include "asterisk.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include "asterisk/logger.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "asterisk/channel.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "asterisk/pbx.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "asterisk/module.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "asterisk/app.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*** DOCUMENTATION</span><br><span style="color: hsl(120, 100%, 40%);">+      <application name="Reload" language="en_US"></span><br><span style="color: hsl(120, 100%, 40%);">+                <synopsis></span><br><span style="color: hsl(120, 100%, 40%);">+                      Reloads an Asterisk module.</span><br><span style="color: hsl(120, 100%, 40%);">+           </synopsis></span><br><span style="color: hsl(120, 100%, 40%);">+             <syntax></span><br><span style="color: hsl(120, 100%, 40%);">+                        <parameter name="module" required="false"></span><br><span style="color: hsl(120, 100%, 40%);">+                          <para>The full name of the target module or resource to reload.</span><br><span style="color: hsl(120, 100%, 40%);">+                         Common aliases such as <literal>dialplan</literal>, <literal>voicemail</literal>,</span><br><span style="color: hsl(120, 100%, 40%);">+                             and <literal>moh</literal> may be used. If omitted, everything will be reloaded.</para></span><br><span style="color: hsl(120, 100%, 40%);">+                     </parameter></span><br><span style="color: hsl(120, 100%, 40%);">+            </syntax></span><br><span style="color: hsl(120, 100%, 40%);">+               <description></span><br><span style="color: hsl(120, 100%, 40%);">+                   <para>Reloads the specified (or all) Asterisk modules and reports success or failure. Note</span><br><span style="color: hsl(120, 100%, 40%);">+                      that if a module is reloaded successfully but there are errors with the configuration,</span><br><span style="color: hsl(120, 100%, 40%);">+                        this is considered a success.</para></span><br><span style="color: hsl(120, 100%, 40%);">+                    <para>Sets <variable>RELOADSTATUS</variable> to one of the following values:</para></span><br><span style="color: hsl(120, 100%, 40%);">+                   <variablelist></span><br><span style="color: hsl(120, 100%, 40%);">+                          <variable name="RELOADSTATUS"></span><br><span style="color: hsl(120, 100%, 40%);">+                                        <value name="SUCCESS"></span><br><span style="color: hsl(120, 100%, 40%);">+                                                Module(s) reloaded.</span><br><span style="color: hsl(120, 100%, 40%);">+                                   </value></span><br><span style="color: hsl(120, 100%, 40%);">+                                        <value name="FAILURE"></span><br><span style="color: hsl(120, 100%, 40%);">+                                                Intended module(s) not completely reloaded successfully.</span><br><span style="color: hsl(120, 100%, 40%);">+                                      </value></span><br><span style="color: hsl(120, 100%, 40%);">+                                </variable></span><br><span style="color: hsl(120, 100%, 40%);">+                     </variablelist></span><br><span style="color: hsl(120, 100%, 40%);">+         </description></span><br><span style="color: hsl(120, 100%, 40%);">+  </application></span><br><span style="color: hsl(120, 100%, 40%);">+ ***/</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static char *app = "Reload";</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static int reload_exec(struct ast_channel *chan, const char *data)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        char *parse, *target = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+  enum ast_module_reload_result res;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  AST_DECLARE_APP_ARGS(args,</span><br><span style="color: hsl(120, 100%, 40%);">+            AST_APP_ARG(target);</span><br><span style="color: hsl(120, 100%, 40%);">+  );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  parse = ast_strdupa(data);</span><br><span style="color: hsl(120, 100%, 40%);">+    AST_STANDARD_APP_ARGS(args, parse);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ target = ast_strdupa(args.target);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Common aliases that will be familiar from the CLI */</span><br><span style="color: hsl(120, 100%, 40%);">+       if (!ast_strlen_zero(target)) {</span><br><span style="color: hsl(120, 100%, 40%);">+               if (!strcmp(target, "dialplan")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  target = "pbx_config";</span><br><span style="color: hsl(120, 100%, 40%);">+              } else if (!strcmp(target, "dahdi")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      target = "chan_dahdi";</span><br><span style="color: hsl(120, 100%, 40%);">+              } else if (!strcmp(target, "sip")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        target = "chan_sip";</span><br><span style="color: hsl(120, 100%, 40%);">+                } else if (!strcmp(target, "pjsip")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      target = "chan_pjsip";</span><br><span style="color: hsl(120, 100%, 40%);">+              } else if (!strcmp(target, "iax2")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       target = "chan_iax2";</span><br><span style="color: hsl(120, 100%, 40%);">+               } else if (!strcmp(target, "voicemail")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  target = "app_voicemail";</span><br><span style="color: hsl(120, 100%, 40%);">+           } else if (!strcmp(target, "moh")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        target = "res_musiconhold";</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   res = ast_module_reload(target);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if (res == AST_MODULE_RELOAD_SUCCESS) {</span><br><span style="color: hsl(120, 100%, 40%);">+               pbx_builtin_setvar_helper(chan, "RELOADSTATUS", "SUCCESS");</span><br><span style="color: hsl(120, 100%, 40%);">+       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              pbx_builtin_setvar_helper(chan, "RELOADSTATUS", "FAILURE");</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static int unload_module(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     return ast_unregister_application(app);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static int load_module(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ return ast_register_application_xml(app, reload_exec);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Reload module(s)");</span><br><span>diff --git a/doc/CHANGES-staging/app_reload.txt b/doc/CHANGES-staging/app_reload.txt</span><br><span>new file mode 100644</span><br><span>index 0000000..308db15</span><br><span>--- /dev/null</span><br><span>+++ b/doc/CHANGES-staging/app_reload.txt</span><br><span>@@ -0,0 +1,4 @@</span><br><span style="color: hsl(120, 100%, 40%);">+Subject: New Reload application</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Adds an application to reload modules</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/15962">change 15962</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/c/asterisk/+/15962"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 16 </div>
<div style="display:none"> Gerrit-Change-Id: Ic8ab025d8b38dd525b872b41c465c999c5810774 </div>
<div style="display:none"> Gerrit-Change-Number: 15962 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: N A <mail@interlinked.x10host.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>