Fri Nov 12 11:52:00 2010

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"
Include dependency graph for app_softhangup.c:

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, void *data)
static int unload_module (void)

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .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 = "0901e4e500243c855563a2d78b0c03e4" , .load = load_module, .unload = unload_module, }
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 137 of file app_softhangup.c.

static void __unreg_module ( void   )  [static]

Definition at line 137 of file app_softhangup.c.

static int load_module ( void   )  [static]

Definition at line 132 of file app_softhangup.c.

References ast_register_application_xml, and softhangup_exec().

00133 {
00134    return ast_register_application_xml(app, softhangup_exec);
00135 }

static int softhangup_exec ( struct ast_channel chan,
void *  data 
) [static]

Definition at line 72 of file app_softhangup.c.

References app_opts, AST_APP_ARG, ast_app_parse_options(), AST_CHANNEL_NAME, ast_channel_unlock, ast_copy_string(), AST_DECLARE_APP_ARGS, ast_log(), ast_softhangup(), AST_SOFTHANGUP_EXPLICIT, AST_STANDARD_APP_ARGS, ast_strlen_zero(), ast_test_flag, ast_walk_channel_by_name_prefix_locked(), LOG_WARNING, ast_channel::name, name, OPTION_ALL, parse(), ast_channel::tech, and ast_channel_tech::type.

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    
00084    if (ast_strlen_zero(data)) {
00085       ast_log(LOG_WARNING, "SoftHangup requires an argument (Technology/resource)\n");
00086       return 0;
00087    }
00088 
00089    parse = ast_strdupa(data);
00090    AST_STANDARD_APP_ARGS(args, parse);
00091 
00092    if (args.argc == 2)
00093       ast_app_parse_options(app_opts, &flags, opts, args.options);
00094    lenmatch = strlen(args.channel);
00095 
00096    for (c = ast_walk_channel_by_name_prefix_locked(NULL, args.channel, lenmatch);
00097        c;
00098        c = ast_walk_channel_by_name_prefix_locked(c, args.channel, lenmatch)) {
00099       ast_copy_string(name, c->name, sizeof(name));
00100       if (ast_test_flag(&flags, OPTION_ALL)) {
00101          /* CAPI is set up like CAPI[foo/bar]/clcnt */ 
00102          if (!strcmp(c->tech->type, "CAPI")) {
00103             cut = strrchr(name, '/');
00104          /* Basically everything else is Foo/Bar-Z */
00105          } else {
00106             /* use strrchr() because Foo/Bar-Z could actually be Foo/B-a-r-Z */
00107             cut = strrchr(name,'-');
00108          }
00109          /* Get rid of what we've cut */
00110          if (cut)
00111             *cut = 0;
00112       }
00113       if (!strcasecmp(name, args.channel)) {
00114          ast_log(LOG_WARNING, "Soft hanging %s up.\n", c->name);
00115          ast_softhangup(c, AST_SOFTHANGUP_EXPLICIT);
00116          if (!ast_test_flag(&flags, OPTION_ALL)) {
00117             ast_channel_unlock(c);
00118             break;
00119          }
00120       }
00121       ast_channel_unlock(c);
00122    }
00123 
00124    return 0;
00125 }

static int unload_module ( void   )  [static]

Definition at line 127 of file app_softhangup.c.

References ast_unregister_application().

00128 {
00129    return ast_unregister_application(app);
00130 }


Variable Documentation

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .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 = "0901e4e500243c855563a2d78b0c03e4" , .load = load_module, .unload = unload_module, } [static]

Definition at line 137 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.

Referenced by softhangup_exec().

Definition at line 137 of file app_softhangup.c.


Generated by  doxygen 1.6.2