#include "asterisk.h"
#include "asterisk/file.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/lock.h"
#include "asterisk/app.h"
Go to the source code of this file.
Enumerations | |
enum | { OPTION_ALL = (1 << 0) } |
Functions | |
static void | __reg_module (void) |
static void | __unreg_module (void) |
static int | load_module (void) |
static int | softhangup_exec (struct ast_channel *chan, const char *data) |
static int | unload_module (void) |
Variables | |
static struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Hangs up the requested channel" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "8586c2a7d357cb591cc3a6607a8f62d1" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } |
static char * | app = "SoftHangup" |
static struct ast_app_option | app_opts [128] = { [ 'a' ] = { .flag = OPTION_ALL },} |
static struct ast_module_info * | ast_module_info = &__mod_info |
Definition in file app_softhangup.c.
anonymous enum |
static void __reg_module | ( | void | ) | [static] |
Definition at line 145 of file app_softhangup.c.
static void __unreg_module | ( | void | ) | [static] |
Definition at line 145 of file app_softhangup.c.
static int load_module | ( | void | ) | [static] |
Definition at line 140 of file app_softhangup.c.
References ast_register_application_xml, and softhangup_exec().
00141 { 00142 return ast_register_application_xml(app, softhangup_exec); 00143 }
static int softhangup_exec | ( | struct ast_channel * | chan, | |
const char * | data | |||
) | [static] |
Definition at line 72 of file app_softhangup.c.
References app_opts, args, AST_APP_ARG, ast_app_parse_options(), ast_channel_iterator_by_name_new(), ast_channel_iterator_destroy(), ast_channel_iterator_next(), ast_channel_lock, AST_CHANNEL_NAME, ast_channel_unlock, ast_channel_unref, ast_copy_string(), AST_DECLARE_APP_ARGS, ast_log(), ast_softhangup(), AST_SOFTHANGUP_EXPLICIT, AST_STANDARD_APP_ARGS, ast_strdupa, ast_strlen_zero(), ast_test_flag, ast_flags::flags, LOG_WARNING, name, OPTION_ALL, and parse().
Referenced by load_module().
00073 { 00074 struct ast_channel *c = NULL; 00075 char *cut, *opts[0]; 00076 char name[AST_CHANNEL_NAME] = "", *parse; 00077 struct ast_flags flags = {0}; 00078 int lenmatch; 00079 AST_DECLARE_APP_ARGS(args, 00080 AST_APP_ARG(channel); 00081 AST_APP_ARG(options); 00082 ); 00083 struct ast_channel_iterator *iter; 00084 00085 if (ast_strlen_zero(data)) { 00086 ast_log(LOG_WARNING, "SoftHangup requires an argument (Technology/resource)\n"); 00087 return 0; 00088 } 00089 00090 parse = ast_strdupa(data); 00091 AST_STANDARD_APP_ARGS(args, parse); 00092 00093 if (args.argc == 2) 00094 ast_app_parse_options(app_opts, &flags, opts, args.options); 00095 lenmatch = strlen(args.channel); 00096 00097 if (!(iter = ast_channel_iterator_by_name_new(args.channel, lenmatch))) { 00098 return -1; 00099 } 00100 00101 while ((c = ast_channel_iterator_next(iter))) { 00102 ast_channel_lock(c); 00103 ast_copy_string(name, c->name, sizeof(name)); 00104 if (ast_test_flag(&flags, OPTION_ALL)) { 00105 /* CAPI is set up like CAPI[foo/bar]/clcnt */ 00106 if (!strcmp(c->tech->type, "CAPI")) { 00107 cut = strrchr(name, '/'); 00108 /* Basically everything else is Foo/Bar-Z */ 00109 } else { 00110 /* use strrchr() because Foo/Bar-Z could actually be Foo/B-a-r-Z */ 00111 cut = strrchr(name,'-'); 00112 } 00113 /* Get rid of what we've cut */ 00114 if (cut) 00115 *cut = 0; 00116 } 00117 if (!strcasecmp(name, args.channel)) { 00118 ast_log(LOG_WARNING, "Soft hanging %s up.\n", c->name); 00119 ast_softhangup(c, AST_SOFTHANGUP_EXPLICIT); 00120 if (!ast_test_flag(&flags, OPTION_ALL)) { 00121 ast_channel_unlock(c); 00122 c = ast_channel_unref(c); 00123 break; 00124 } 00125 } 00126 ast_channel_unlock(c); 00127 c = ast_channel_unref(c); 00128 } 00129 00130 ast_channel_iterator_destroy(iter); 00131 00132 return 0; 00133 }
static int unload_module | ( | void | ) | [static] |
Definition at line 135 of file app_softhangup.c.
References ast_unregister_application().
00136 { 00137 return ast_unregister_application(app); 00138 }
struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Hangs up the requested channel" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "8586c2a7d357cb591cc3a6607a8f62d1" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } [static] |
Definition at line 145 of file app_softhangup.c.
char* app = "SoftHangup" [static] |
Definition at line 62 of file app_softhangup.c.
struct ast_app_option app_opts[128] = { [ 'a' ] = { .flag = OPTION_ALL },} [static] |
Definition at line 70 of file app_softhangup.c.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 145 of file app_softhangup.c.