#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_info * | ast_module_info = &__mod_info |
static struct ast_custom_function | channel_function |
char * | transfercapability_table [0x20] |
Definition in file func_channel.c.
#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().
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 }
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] |
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.