Sat Aug 6 00:39:56 2011

Asterisk developer's documentation


func_channel.c File Reference

Channel info dialplan function. More...

#include "asterisk.h"
#include <regex.h>
#include "asterisk/module.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/utils.h"
#include "asterisk/app.h"
#include "asterisk/indications.h"
#include "asterisk/stringfields.h"

Go to the source code of this file.

Defines

#define locked_copy_string(chan, dest, source, len)
#define locked_string_field_set(chan, field, source)

Functions

static void __reg_module (void)
static void __unreg_module (void)
static int func_channel_read (struct ast_channel *chan, char *function, char *data, char *buf, size_t len)
static int func_channel_write (struct ast_channel *chan, char *function, char *data, const char *value)
static int func_channel_write_real (struct ast_channel *chan, char *function, char *data, const char *value)
static int load_module (void)
static int unload_module (void)

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT | AST_MODFLAG_BUILDSUM, .description = "Channel information dialplan function" , .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 = "361d7bb937402d51e4658efb5b4d76e4" , .load = load_module, .unload = unload_module, }
static const struct ast_module_infoast_module_info = &__mod_info
static struct ast_custom_function channel_function
char * transfercapability_table [0x20]


Detailed Description

Channel info dialplan function.

Author:
Kevin P. Fleming <kpfleming@digium.com>

Definition in file func_channel.c.


Define Documentation

#define locked_copy_string ( chan,
dest,
source,
len   ) 

Value:

do { \
      ast_channel_lock(chan); \
      ast_copy_string(dest, source, len); \
      ast_channel_unlock(chan); \
   } while (0)

Definition at line 39 of file func_channel.c.

Referenced by func_channel_read().

#define locked_string_field_set ( chan,
field,
source   ) 

Value:

do { \
      ast_channel_lock(chan); \
      ast_string_field_set(chan, field, source); \
      ast_channel_unlock(chan); \
   } while (0)

Definition at line 45 of file func_channel.c.

Referenced by func_channel_write_real().


Function Documentation

static void __reg_module ( void   )  [static]

Definition at line 218 of file func_channel.c.

static void __unreg_module ( void   )  [static]

Definition at line 218 of file func_channel.c.

static int func_channel_read ( struct ast_channel chan,
char *  function,
char *  data,
char *  buf,
size_t  len 
) [static]

Definition at line 58 of file func_channel.c.

References ast_channel::_state, ast_copy_string(), AST_FORMAT_AUDIO_MASK, AST_FORMAT_VIDEO_MASK, ast_getformatname(), ast_log(), ast_print_group(), ast_state2str(), ast_channel::callgroup, tone_zone::country, ast_channel_tech::func_channel_read, ast_channel::language, locked_copy_string, LOG_WARNING, ast_channel::musicclass, ast_channel::nativeformats, ast_channel::readformat, ast_channel::tech, ast_channel::transfercapability, ast_channel_tech::type, ast_channel::writeformat, and ast_channel::zone.

00060 {
00061    int ret = 0;
00062 
00063    if (!strcasecmp(data, "audionativeformat"))
00064       /* use the _multiple version when chan->nativeformats holds multiple formats */
00065       /* ast_getformatname_multiple(buf, len, chan->nativeformats & AST_FORMAT_AUDIO_MASK); */
00066       ast_copy_string(buf, ast_getformatname(chan->nativeformats & AST_FORMAT_AUDIO_MASK), len);
00067    else if (!strcasecmp(data, "videonativeformat"))
00068       /* use the _multiple version when chan->nativeformats holds multiple formats */
00069       /* ast_getformatname_multiple(buf, len, chan->nativeformats & AST_FORMAT_VIDEO_MASK); */
00070       ast_copy_string(buf, ast_getformatname(chan->nativeformats & AST_FORMAT_VIDEO_MASK), len);
00071    else if (!strcasecmp(data, "audioreadformat"))
00072       ast_copy_string(buf, ast_getformatname(chan->readformat), len);
00073    else if (!strcasecmp(data, "audiowriteformat"))
00074       ast_copy_string(buf, ast_getformatname(chan->writeformat), len);
00075    else if (!strcasecmp(data, "tonezone") && chan->zone)
00076       locked_copy_string(chan, buf, chan->zone->country, len);
00077    else if (!strcasecmp(data, "language"))
00078       locked_copy_string(chan, buf, chan->language, len);
00079    else if (!strcasecmp(data, "musicclass"))
00080       locked_copy_string(chan, buf, chan->musicclass, len);
00081    else if (!strcasecmp(data, "state"))
00082       locked_copy_string(chan, buf, ast_state2str(chan->_state), len);
00083    else if (!strcasecmp(data, "channeltype"))
00084       locked_copy_string(chan, buf, chan->tech->type, len);
00085    else if (!strcasecmp(data, "transfercapability"))
00086       locked_copy_string(chan, buf, transfercapability_table[chan->transfercapability & 0x1f], len);
00087    else if (!strcasecmp(data, "callgroup")) {
00088       char groupbuf[256];
00089       locked_copy_string(chan, buf,  ast_print_group(groupbuf, sizeof(groupbuf), chan->callgroup), len);
00090    } else if (!chan->tech->func_channel_read
00091        || chan->tech->func_channel_read(chan, function, data, buf, len)) {
00092       ast_log(LOG_WARNING, "Unknown or unavailable item requested: '%s'\n", data);
00093       ret = -1;
00094    }
00095 
00096    return ret;
00097 }

static int func_channel_write ( struct ast_channel chan,
char *  function,
char *  data,
const char *  value 
) [static]

Definition at line 142 of file func_channel.c.

References AST_CHAN_WRITE_INFO_T_VERSION, ast_channel_setoption(), AST_OPTION_CHANNEL_WRITE, ast_channel::data, and func_channel_write_real().

00143 {
00144    int res;
00145    ast_chan_write_info_t write_info = {
00146       .version = AST_CHAN_WRITE_INFO_T_VERSION,
00147       .write_fn = func_channel_write_real,
00148       .chan = chan,
00149       .function = function,
00150       .data = data,
00151       .value = value,
00152    };
00153 
00154    res = func_channel_write_real(chan, function, data, value);
00155    ast_channel_setoption(chan, AST_OPTION_CHANNEL_WRITE, &write_info, sizeof(write_info), 0);
00156 
00157    return res;
00158 }

static int func_channel_write_real ( struct ast_channel chan,
char *  function,
char *  data,
const char *  value 
) [static]

Definition at line 99 of file func_channel.c.

References ast_channel_setoption(), ast_get_group(), ast_get_indication_zone(), ast_log(), AST_OPTION_RXGAIN, AST_OPTION_TXGAIN, ast_channel::callgroup, ast_channel_tech::func_channel_write, language, locked_string_field_set, LOG_ERROR, LOG_WARNING, musicclass, ast_channel::tech, ast_channel::transfercapability, and ast_channel::zone.

Referenced by func_channel_write().

00101 {
00102    int ret = 0;
00103    signed char gainset;
00104 
00105    if (!strcasecmp(data, "language"))
00106       locked_string_field_set(chan, language, value);
00107    else if (!strcasecmp(data, "musicclass"))
00108       locked_string_field_set(chan, musicclass, value);
00109    else if (!strcasecmp(data, "tonezone")) {
00110       struct tone_zone *new_zone;
00111       if (!(new_zone = ast_get_indication_zone(value))) {
00112          ast_log(LOG_ERROR, "Unknown country code '%s' for tonezone. Check indications.conf for available country codes.\n", value);
00113          ret = -1;   
00114       } else 
00115          chan->zone = new_zone;
00116    } else if (!strcasecmp(data, "callgroup"))
00117       chan->callgroup = ast_get_group(value);
00118    else if (!strcasecmp(data, "txgain")) {
00119       sscanf(value, "%4hhd", &gainset);
00120       ast_channel_setoption(chan, AST_OPTION_TXGAIN, &gainset, sizeof(gainset), 0);
00121    } else if (!strcasecmp(data, "rxgain")) {
00122       sscanf(value, "%4hhd", &gainset);
00123       ast_channel_setoption(chan, AST_OPTION_RXGAIN, &gainset, sizeof(gainset), 0);
00124    } else if (!strcasecmp(data, "transfercapability")) {
00125       unsigned short i;
00126       for (i = 0; i < 0x20; i++) {
00127          if (!strcasecmp(transfercapability_table[i], value) && strcmp(value, "UNK")) {
00128             chan->transfercapability = i;
00129             break;
00130          }
00131       }
00132    } else if (!chan->tech->func_channel_write
00133        || chan->tech->func_channel_write(chan, function, data, value)) {
00134       ast_log(LOG_WARNING, "Unknown or unavailable item requested: '%s'\n",
00135             data);
00136       ret = -1;
00137    }
00138 
00139    return ret;
00140 }

static int load_module ( void   )  [static]

Definition at line 213 of file func_channel.c.

References ast_custom_function_register(), and channel_function.

00214 {
00215    return ast_custom_function_register(&channel_function);
00216 }

static int unload_module ( void   )  [static]

Definition at line 208 of file func_channel.c.

References ast_custom_function_unregister(), and channel_function.

00209 {
00210    return ast_custom_function_unregister(&channel_function);
00211 }


Variable Documentation

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT | AST_MODFLAG_BUILDSUM, .description = "Channel information dialplan function" , .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 = "361d7bb937402d51e4658efb5b4d76e4" , .load = load_module, .unload = unload_module, } [static]

Definition at line 218 of file func_channel.c.

const struct ast_module_info* ast_module_info = &__mod_info [static]

Definition at line 218 of file func_channel.c.

struct ast_custom_function channel_function [static]

Definition at line 160 of file func_channel.c.

Referenced by load_module(), and unload_module().

char* transfercapability_table[0x20]

Initial value:

 {
   "SPEECH", "UNK", "UNK", "UNK", "UNK", "UNK", "UNK", "UNK",
   "DIGITAL", "RESTRICTED_DIGITAL", "UNK", "UNK", "UNK", "UNK", "UNK", "UNK",
   "3K1AUDIO", "DIGITAL_W_TONES", "UNK", "UNK", "UNK", "UNK", "UNK", "UNK",
   "VIDEO", "UNK", "UNK", "UNK", "UNK", "UNK", "UNK", "UNK", }

Definition at line 52 of file func_channel.c.


Generated on Sat Aug 6 00:39:56 2011 for Asterisk - the Open Source PBX by  doxygen 1.4.7