Thu Apr 28 2011 17:15:33

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
__MODULE_INFO_SECTION 
__mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "Hangs up the requested channel" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .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.

     {
   OPTION_ALL = (1 << 0),
};

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]
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_strdupa, 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().

{
   struct ast_channel *c = NULL;
   char *cut, *opts[0];
   char name[AST_CHANNEL_NAME] = "", *parse;
   struct ast_flags flags = {0};
   int lenmatch;
   AST_DECLARE_APP_ARGS(args,
      AST_APP_ARG(channel);
      AST_APP_ARG(options);
   );
   
   if (ast_strlen_zero(data)) {
      ast_log(LOG_WARNING, "SoftHangup requires an argument (Technology/resource)\n");
      return 0;
   }

   parse = ast_strdupa(data);
   AST_STANDARD_APP_ARGS(args, parse);

   if (args.argc == 2)
      ast_app_parse_options(app_opts, &flags, opts, args.options);
   lenmatch = strlen(args.channel);

   for (c = ast_walk_channel_by_name_prefix_locked(NULL, args.channel, lenmatch);
       c;
       c = ast_walk_channel_by_name_prefix_locked(c, args.channel, lenmatch)) {
      ast_copy_string(name, c->name, sizeof(name));
      if (ast_test_flag(&flags, OPTION_ALL)) {
         /* CAPI is set up like CAPI[foo/bar]/clcnt */ 
         if (!strcmp(c->tech->type, "CAPI")) {
            cut = strrchr(name, '/');
         /* Basically everything else is Foo/Bar-Z */
         } else {
            /* use strrchr() because Foo/Bar-Z could actually be Foo/B-a-r-Z */
            cut = strrchr(name,'-');
         }
         /* Get rid of what we've cut */
         if (cut)
            *cut = 0;
      }
      if (!strcasecmp(name, args.channel)) {
         ast_log(LOG_WARNING, "Soft hanging %s up.\n", c->name);
         ast_softhangup(c, AST_SOFTHANGUP_EXPLICIT);
         if (!ast_test_flag(&flags, OPTION_ALL)) {
            ast_channel_unlock(c);
            break;
         }
      }
      ast_channel_unlock(c);
   }

   return 0;
}
static int unload_module ( void  ) [static]

Definition at line 127 of file app_softhangup.c.

References ast_unregister_application().


Variable Documentation

struct ast_module_info __MODULE_INFO_SECTION __mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "Hangs up the requested channel" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .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.