<p>Joshua Colp has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/16296">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">app_dahdiras: Remove deprecated module.<br><br>ASTERISK-29591<br><br>Change-Id: I021d37b729631d40f84e35bb21e2893777be1858<br>---<br>D apps/app_dahdiras.c<br>A doc/CHANGES-staging/app_dahdiras_removal.txt<br>2 files changed, 6 insertions(+), 233 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/96/16296/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/apps/app_dahdiras.c b/apps/app_dahdiras.c</span><br><span>deleted file mode 100644</span><br><span>index d2ec137..0000000</span><br><span>--- a/apps/app_dahdiras.c</span><br><span>+++ /dev/null</span><br><span>@@ -1,233 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-/*</span><br><span style="color: hsl(0, 100%, 40%);">- * Asterisk -- An open source telephony toolkit.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * Copyright (C) 1999 - 2005, Digium, Inc.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * Mark Spencer <markster@digium.com></span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * See http://www.asterisk.org for more information about</span><br><span style="color: hsl(0, 100%, 40%);">- * the Asterisk project. Please do not directly contact</span><br><span style="color: hsl(0, 100%, 40%);">- * any of the maintainers of this project for assistance;</span><br><span style="color: hsl(0, 100%, 40%);">- * the project provides a web site, mailing lists and IRC</span><br><span style="color: hsl(0, 100%, 40%);">- * channels for your use.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * This program is free software, distributed under the terms of</span><br><span style="color: hsl(0, 100%, 40%);">- * the GNU General Public License Version 2. See the LICENSE file</span><br><span style="color: hsl(0, 100%, 40%);">- * at the top of the source tree.</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! \file</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * \brief Execute an ISDN RAS</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * \author Mark Spencer <markster@digium.com></span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * \ingroup applications</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*** MODULEINFO</span><br><span style="color: hsl(0, 100%, 40%);">- <depend>dahdi</depend></span><br><span style="color: hsl(0, 100%, 40%);">-      <support_level>deprecated</support_level></span><br><span style="color: hsl(0, 100%, 40%);">-   <deprecated_in>16</deprecated_in></span><br><span style="color: hsl(0, 100%, 40%);">-   <removed_in>19</removed_in></span><br><span style="color: hsl(0, 100%, 40%);">- ***/</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk.h"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include <sys/ioctl.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <sys/wait.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <signal.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <fcntl.h></span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include <dahdi/user.h></span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/lock.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/file.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/channel.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/pbx.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/module.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/app.h"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*** DOCUMENTATION</span><br><span style="color: hsl(0, 100%, 40%);">-   <application name="DAHDIRAS" language="en_US"></span><br><span style="color: hsl(0, 100%, 40%);">-                <synopsis></span><br><span style="color: hsl(0, 100%, 40%);">-                        Executes DAHDI ISDN RAS application.</span><br><span style="color: hsl(0, 100%, 40%);">-            </synopsis></span><br><span style="color: hsl(0, 100%, 40%);">-               <syntax></span><br><span style="color: hsl(0, 100%, 40%);">-                  <parameter name="args" required="true"></span><br><span style="color: hsl(0, 100%, 40%);">-                               <para>A list of parameters to pass to the pppd daemon,</span><br><span style="color: hsl(0, 100%, 40%);">-                            separated by <literal>,</literal> characters.</para></span><br><span style="color: hsl(0, 100%, 40%);">-                  </parameter></span><br><span style="color: hsl(0, 100%, 40%);">-              </syntax></span><br><span style="color: hsl(0, 100%, 40%);">-         <description></span><br><span style="color: hsl(0, 100%, 40%);">-                     <para>Executes a RAS server using pppd on the given channel.</span><br><span style="color: hsl(0, 100%, 40%);">-                      The channel must be a clear channel (i.e. PRI source) and a DAHDI</span><br><span style="color: hsl(0, 100%, 40%);">-                       channel to be able to use this function (No modem emulation is included).</para></span><br><span style="color: hsl(0, 100%, 40%);">-                  <para>Your pppd must be patched to be DAHDI aware.</para></span><br><span style="color: hsl(0, 100%, 40%);">-           </description></span><br><span style="color: hsl(0, 100%, 40%);">-    </application></span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- ***/</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static const char app[] = "DAHDIRAS";</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define PPP_MAX_ARGS    32</span><br><span style="color: hsl(0, 100%, 40%);">-#define PPP_EXEC      "/usr/sbin/pppd"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static pid_t spawn_ras(struct ast_channel *chan, char *args)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- pid_t pid;</span><br><span style="color: hsl(0, 100%, 40%);">-      char *c;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        char *argv[PPP_MAX_ARGS];</span><br><span style="color: hsl(0, 100%, 40%);">-       int argc = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-   char *stringp=NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     /* Start by forking */</span><br><span style="color: hsl(0, 100%, 40%);">-  pid = ast_safe_fork(1);</span><br><span style="color: hsl(0, 100%, 40%);">- if (pid) {</span><br><span style="color: hsl(0, 100%, 40%);">-              return pid;</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Execute RAS on File handles */</span><br><span style="color: hsl(0, 100%, 40%);">-       dup2(ast_channel_fd(chan, 0), STDIN_FILENO);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    /* Drop high priority */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (ast_opt_high_priority)</span><br><span style="color: hsl(0, 100%, 40%);">-              ast_set_priority(0);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    /* Close other file descriptors */</span><br><span style="color: hsl(0, 100%, 40%);">-      ast_close_fds_above_n(STDERR_FILENO);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   /* Reset all arguments */</span><br><span style="color: hsl(0, 100%, 40%);">-       memset(argv, 0, sizeof(argv));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  /* First argument is executable, followed by standard</span><br><span style="color: hsl(0, 100%, 40%);">-      arguments for DAHDI PPP */</span><br><span style="color: hsl(0, 100%, 40%);">-   argv[argc++] = PPP_EXEC;</span><br><span style="color: hsl(0, 100%, 40%);">-        argv[argc++] = "nodetach";</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    /* And all the other arguments */</span><br><span style="color: hsl(0, 100%, 40%);">-       stringp=args;</span><br><span style="color: hsl(0, 100%, 40%);">-   c = strsep(&stringp, ",");</span><br><span style="color: hsl(0, 100%, 40%);">-        while(c && strlen(c) && (argc < (PPP_MAX_ARGS - 4))) {</span><br><span style="color: hsl(0, 100%, 40%);">-               argv[argc++] = c;</span><br><span style="color: hsl(0, 100%, 40%);">-               c = strsep(&stringp, ",");</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (geteuid() == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-           argv[argc++] = "plugin";</span><br><span style="color: hsl(0, 100%, 40%);">-              argv[argc++] = "dahdi.so";</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-       argv[argc++] = "stdin";</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Finally launch PPP */</span><br><span style="color: hsl(0, 100%, 40%);">-        execv(PPP_EXEC, argv);</span><br><span style="color: hsl(0, 100%, 40%);">-  fprintf(stderr, "Failed to exec PPPD!\n");</span><br><span style="color: hsl(0, 100%, 40%);">-    exit(1);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void run_ras(struct ast_channel *chan, char *args)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     pid_t pid;</span><br><span style="color: hsl(0, 100%, 40%);">-      int status;</span><br><span style="color: hsl(0, 100%, 40%);">-     int res;</span><br><span style="color: hsl(0, 100%, 40%);">-        int signalled = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-      struct dahdi_bufferinfo savebi;</span><br><span style="color: hsl(0, 100%, 40%);">- int x;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  res = ioctl(ast_channel_fd(chan, 0), DAHDI_GET_BUFINFO, &savebi);</span><br><span style="color: hsl(0, 100%, 40%);">-   if(res) {</span><br><span style="color: hsl(0, 100%, 40%);">-               ast_log(LOG_WARNING, "Unable to check buffer policy on channel %s\n", ast_channel_name(chan));</span><br><span style="color: hsl(0, 100%, 40%);">-                return;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       pid = spawn_ras(chan, args);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (pid < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-               ast_log(LOG_WARNING, "Failed to spawn RAS\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                for (;;) {</span><br><span style="color: hsl(0, 100%, 40%);">-                      res = waitpid(pid, &status, WNOHANG);</span><br><span style="color: hsl(0, 100%, 40%);">-                       if (!res) {</span><br><span style="color: hsl(0, 100%, 40%);">-                             /* Check for hangup */</span><br><span style="color: hsl(0, 100%, 40%);">-                          if (ast_check_hangup(chan) && !signalled) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                     ast_debug(1, "Channel '%s' hungup.  Signalling RAS at %d to die...\n", ast_channel_name(chan), pid);</span><br><span style="color: hsl(0, 100%, 40%);">-                                  kill(pid, SIGTERM);</span><br><span style="color: hsl(0, 100%, 40%);">-                                     signalled=1;</span><br><span style="color: hsl(0, 100%, 40%);">-                            }</span><br><span style="color: hsl(0, 100%, 40%);">-                               /* Try again */</span><br><span style="color: hsl(0, 100%, 40%);">-                         sleep(1);</span><br><span style="color: hsl(0, 100%, 40%);">-                               continue;</span><br><span style="color: hsl(0, 100%, 40%);">-                       }</span><br><span style="color: hsl(0, 100%, 40%);">-                       if (res < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                               ast_log(LOG_WARNING, "waitpid returned %d: %s\n", res, strerror(errno));</span><br><span style="color: hsl(0, 100%, 40%);">-                      }</span><br><span style="color: hsl(0, 100%, 40%);">-                       if (WIFEXITED(status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                ast_verb(3, "RAS on %s terminated with status %d\n", ast_channel_name(chan), WEXITSTATUS(status));</span><br><span style="color: hsl(0, 100%, 40%);">-                    } else if (WIFSIGNALED(status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                               ast_verb(3, "RAS on %s terminated with signal %d\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                                   ast_channel_name(chan), WTERMSIG(status));</span><br><span style="color: hsl(0, 100%, 40%);">-                     } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                                ast_verb(3, "RAS on %s terminated weirdly.\n", ast_channel_name(chan));</span><br><span style="color: hsl(0, 100%, 40%);">-                       }</span><br><span style="color: hsl(0, 100%, 40%);">-                       /* Throw back into audio mode */</span><br><span style="color: hsl(0, 100%, 40%);">-                        x = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-                  ioctl(ast_channel_fd(chan, 0), DAHDI_AUDIOMODE, &x);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                        /* Restore saved values */</span><br><span style="color: hsl(0, 100%, 40%);">-                      res = ioctl(ast_channel_fd(chan, 0), DAHDI_SET_BUFINFO, &savebi);</span><br><span style="color: hsl(0, 100%, 40%);">-                   if (res < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                               ast_log(LOG_WARNING, "Unable to set buffer policy on channel %s\n", ast_channel_name(chan));</span><br><span style="color: hsl(0, 100%, 40%);">-                  }</span><br><span style="color: hsl(0, 100%, 40%);">-                       break;</span><br><span style="color: hsl(0, 100%, 40%);">-          }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-       ast_safe_fork_cleanup();</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static int dahdiras_exec(struct ast_channel *chan, const char *data)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-  int res=-1;</span><br><span style="color: hsl(0, 100%, 40%);">-     char *args;</span><br><span style="color: hsl(0, 100%, 40%);">-     struct dahdi_params dahdip;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     if (!data)</span><br><span style="color: hsl(0, 100%, 40%);">-              data = "";</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    args = ast_strdupa(data);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Answer the channel if it's not up */</span><br><span style="color: hsl(0, 100%, 40%);">-     if (ast_channel_state(chan) != AST_STATE_UP)</span><br><span style="color: hsl(0, 100%, 40%);">-            ast_answer(chan);</span><br><span style="color: hsl(0, 100%, 40%);">-       if (strcasecmp(ast_channel_tech(chan)->type, "DAHDI")) {</span><br><span style="color: hsl(0, 100%, 40%);">-           /* If it's not a DAHDI channel, we're done.  Wait a couple of</span><br><span style="color: hsl(0, 100%, 40%);">-              seconds and then hangup... */</span><br><span style="color: hsl(0, 100%, 40%);">-                ast_verb(2, "Channel %s is not a DAHDI channel\n", ast_channel_name(chan));</span><br><span style="color: hsl(0, 100%, 40%);">-           sleep(2);</span><br><span style="color: hsl(0, 100%, 40%);">-       } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                memset(&dahdip, 0, sizeof(dahdip));</span><br><span style="color: hsl(0, 100%, 40%);">-         if (ioctl(ast_channel_fd(chan, 0), DAHDI_GET_PARAMS, &dahdip)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    ast_log(LOG_WARNING, "Unable to get DAHDI parameters\n");</span><br><span style="color: hsl(0, 100%, 40%);">-             } else if (dahdip.sigtype != DAHDI_SIG_CLEAR) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 ast_verb(2, "Channel %s is not a clear channel\n", ast_channel_name(chan));</span><br><span style="color: hsl(0, 100%, 40%);">-           } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        /* Everything should be okay.  Run PPP. */</span><br><span style="color: hsl(0, 100%, 40%);">-                      ast_verb(3, "Starting RAS on %s\n", ast_channel_name(chan));</span><br><span style="color: hsl(0, 100%, 40%);">-                  /* Execute RAS */</span><br><span style="color: hsl(0, 100%, 40%);">-                       run_ras(chan, args);</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-       return res;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static int unload_module(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     return ast_unregister_application(app);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static int load_module(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   return ((ast_register_application_xml(app, dahdiras_exec)) ? AST_MODULE_LOAD_DECLINE : AST_MODULE_LOAD_SUCCESS);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-AST_MODULE_INFO_STANDARD_DEPRECATED(ASTERISK_GPL_KEY, "DAHDI ISDN Remote Access Server");</span><br><span>diff --git a/doc/CHANGES-staging/app_dahdiras_removal.txt b/doc/CHANGES-staging/app_dahdiras_removal.txt</span><br><span>new file mode 100644</span><br><span>index 0000000..7baa7ff</span><br><span>--- /dev/null</span><br><span>+++ b/doc/CHANGES-staging/app_dahdiras_removal.txt</span><br><span>@@ -0,0 +1,6 @@</span><br><span style="color: hsl(120, 100%, 40%);">+Subject: app_dahdiras</span><br><span style="color: hsl(120, 100%, 40%);">+Master-Only: True</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+This module was deprecated in Asterisk 16</span><br><span style="color: hsl(120, 100%, 40%);">+and is now being removed in accordance with</span><br><span style="color: hsl(120, 100%, 40%);">+the Asterisk Module Deprecation policy.</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/16296">change 16296</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/+/16296"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 19 </div>
<div style="display:none"> Gerrit-Change-Id: I021d37b729631d40f84e35bb21e2893777be1858 </div>
<div style="display:none"> Gerrit-Change-Number: 16296 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Joshua Colp <jcolp@sangoma.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>