Mon Jun 27 16:51:00 2011

Asterisk developer's documentation


app_softhangup.c File Reference

SoftHangup application. More...

#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_infoast_module_info = &__mod_info


Detailed Description

SoftHangup application.

Author:
Mark Spencer <markster@digium.com>

Definition in file app_softhangup.c.


Enumeration Type Documentation

anonymous enum

Enumerator:
OPTION_ALL 

Definition at line 64 of file app_softhangup.c.

00064      {
00065    OPTION_ALL = (1 << 0),
00066 };


Function Documentation

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 }


Variable Documentation

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.


Generated on Mon Jun 27 16:51:00 2011 for Asterisk - The Open Source Telephony Project by  doxygen 1.4.7