aboutsummaryrefslogtreecommitdiffstats
path: root/1.2-netsec/pbx/pbx_realtime.c
diff options
context:
space:
mode:
Diffstat (limited to '1.2-netsec/pbx/pbx_realtime.c')
-rw-r--r--1.2-netsec/pbx/pbx_realtime.c274
1 files changed, 0 insertions, 274 deletions
diff --git a/1.2-netsec/pbx/pbx_realtime.c b/1.2-netsec/pbx/pbx_realtime.c
deleted file mode 100644
index 4e9aba1fe..000000000
--- a/1.2-netsec/pbx/pbx_realtime.c
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Asterisk -- An open source telephony toolkit.
- *
- * Copyright (C) 1999 - 2005, Digium, Inc.
- *
- * Mark Spencer <markster@digium.com>
- *
- * See http://www.asterisk.org for more information about
- * the Asterisk project. Please do not directly contact
- * any of the maintainers of this project for assistance;
- * the project provides a web site, mailing lists and IRC
- * channels for your use.
- *
- * This program is free software, distributed under the terms of
- * the GNU General Public License Version 2. See the LICENSE file
- * at the top of the source tree.
- */
-
-/*! \file
- *
- * \brief Realtime PBX Module
- *
- * \arg See also: \ref AstARA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-
-#include "asterisk.h"
-
-ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
-
-#include "asterisk/file.h"
-#include "asterisk/logger.h"
-#include "asterisk/channel.h"
-#include "asterisk/config.h"
-#include "asterisk/options.h"
-#include "asterisk/pbx.h"
-#include "asterisk/module.h"
-#include "asterisk/frame.h"
-#include "asterisk/term.h"
-#include "asterisk/manager.h"
-#include "asterisk/file.h"
-#include "asterisk/cli.h"
-#include "asterisk/lock.h"
-#include "asterisk/md5.h"
-#include "asterisk/linkedlists.h"
-#include "asterisk/chanvars.h"
-#include "asterisk/sched.h"
-#include "asterisk/io.h"
-#include "asterisk/utils.h"
-#include "asterisk/crypto.h"
-#include "asterisk/astdb.h"
-
-#define MODE_MATCH 0
-#define MODE_MATCHMORE 1
-#define MODE_CANMATCH 2
-
-#define EXT_DATA_SIZE 256
-
-static char *tdesc = "Realtime Switch";
-
-/* Realtime switch looks up extensions in the supplied realtime table.
-
- [context@][realtimetable][/options]
-
- If the realtimetable is omitted it is assumed to be "extensions". If no context is
- specified the context is assumed to be whatever is the container.
-
- The realtime table should have entries for context,exten,priority,app,args
-
- The realtime table currently does not support callerid fields.
-
-*/
-
-
-#define REALTIME_COMMON(mode) \
- char *buf; \
- char *opts; \
- const char *cxt; \
- char *table; \
- int res=-1; \
- struct ast_variable *var=NULL; \
- buf = ast_strdupa(data); \
- if (buf) { \
- opts = strchr(buf, '/'); \
- if (opts) { \
- *opts='\0'; \
- opts++; \
- } else \
- opts=""; \
- table = strchr(buf, '@'); \
- if (table) { \
- *table = '\0'; \
- table++;\
- cxt = buf; \
- } else cxt = NULL; \
- if (ast_strlen_zero(cxt)) \
- cxt = context;\
- if (ast_strlen_zero(table)) \
- table = "extensions"; \
- var = realtime_switch_common(table, cxt, exten, priority, mode); \
- } else \
- res = -1;
-
-static struct ast_variable *realtime_switch_common(const char *table, const char *context, const char *exten, int priority, int mode)
-{
- struct ast_variable *var;
- struct ast_config *cfg;
- char pri[20];
- char *ematch;
- char rexten[AST_MAX_EXTENSION + 20]="";
- int match;
- snprintf(pri, sizeof(pri), "%d", priority);
- switch(mode) {
- case MODE_MATCHMORE:
- ematch = "exten LIKE";
- snprintf(rexten, sizeof(rexten), "%s_%%", exten);
- break;
- case MODE_CANMATCH:
- ematch = "exten LIKE";
- snprintf(rexten, sizeof(rexten), "%s%%", exten);
- break;
- case MODE_MATCH:
- default:
- ematch = "exten";
- strncpy(rexten, exten, sizeof(rexten) - 1);
- }
- var = ast_load_realtime(table, ematch, rexten, "context", context, "priority", pri, NULL);
- if (!var) {
- cfg = ast_load_realtime_multientry(table, "exten LIKE", "\\_%", "context", context, "priority", pri, NULL);
- if (cfg) {
- char *cat = ast_category_browse(cfg, NULL);
-
- while(cat) {
- switch(mode) {
- case MODE_MATCHMORE:
- match = ast_extension_close(cat, exten, 1);
- break;
- case MODE_CANMATCH:
- match = ast_extension_close(cat, exten, 0);
- break;
- case MODE_MATCH:
- default:
- match = ast_extension_match(cat, exten);
- }
- if (match) {
- var = ast_category_detach_variables(ast_category_get(cfg, cat));
- break;
- }
- cat = ast_category_browse(cfg, cat);
- }
- ast_config_destroy(cfg);
- }
- }
- return var;
-}
-
-static int realtime_exists(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data)
-{
- REALTIME_COMMON(MODE_MATCH);
- if (var) ast_variables_destroy(var);
- if (var)
- res = 1;
- return res > 0 ? res : 0;
-}
-
-static int realtime_canmatch(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data)
-{
- REALTIME_COMMON(MODE_CANMATCH);
- if (var) ast_variables_destroy(var);
- if (var)
- res = 1;
- return res > 0 ? res : 0;
-}
-
-static int realtime_exec(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, int newstack, const char *data)
-{
- char app[256];
- char appdata[512]="";
- char *tmp="";
- char tmp1[80];
- char tmp2[80];
- char tmp3[EXT_DATA_SIZE];
- struct ast_app *a;
- struct ast_variable *v;
- REALTIME_COMMON(MODE_MATCH);
- if (var) {
- v = var;
- while(v) {
- if (!strcasecmp(v->name, "app"))
- strncpy(app, v->value, sizeof(app) -1 );
- else if (!strcasecmp(v->name, "appdata"))
- tmp = ast_strdupa(v->value);
- v = v->next;
- }
- ast_variables_destroy(var);
- if (!ast_strlen_zero(app)) {
- a = pbx_findapp(app);
- if (a) {
- if(!ast_strlen_zero(tmp))
- pbx_substitute_variables_helper(chan, tmp, appdata, sizeof(appdata) - 1);
- if (option_verbose > 2)
- ast_verbose( VERBOSE_PREFIX_3 "Executing %s(\"%s\", \"%s\")\n",
- term_color(tmp1, app, COLOR_BRCYAN, 0, sizeof(tmp1)),
- term_color(tmp2, chan->name, COLOR_BRMAGENTA, 0, sizeof(tmp2)),
- term_color(tmp3, (!ast_strlen_zero(appdata) ? (char *)appdata : ""), COLOR_BRMAGENTA, 0, sizeof(tmp3)));
- manager_event(EVENT_FLAG_CALL, "Newexten",
- "Channel: %s\r\n"
- "Context: %s\r\n"
- "Extension: %s\r\n"
- "Priority: %d\r\n"
- "Application: %s\r\n"
- "AppData: %s\r\n"
- "Uniqueid: %s\r\n",
- chan->name, chan->context, chan->exten, chan->priority, app, appdata ? appdata : "(NULL)", chan->uniqueid);
-
- res = pbx_exec(chan, a, appdata, newstack);
- } else
- ast_log(LOG_NOTICE, "No such application '%s' for extension '%s' in context '%s'\n", app, exten, context);
- }
- }
- return res;
-}
-
-static int realtime_matchmore(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data)
-{
- REALTIME_COMMON(MODE_MATCHMORE);
- if (var) ast_variables_destroy(var);
- if (var)
- res = 1;
- return res > 0 ? res : 0;
-}
-
-static struct ast_switch realtime_switch =
-{
- name: "Realtime",
- description: "Realtime Dialplan Switch",
- exists: realtime_exists,
- canmatch: realtime_canmatch,
- exec: realtime_exec,
- matchmore: realtime_matchmore,
-};
-
-char *description(void)
-{
- return tdesc;
-}
-
-int usecount(void)
-{
- return 1;
-}
-
-char *key()
-{
- return ASTERISK_GPL_KEY;
-}
-
-int unload_module(void)
-{
- ast_unregister_switch(&realtime_switch);
- return 0;
-}
-
-int load_module(void)
-{
- ast_register_switch(&realtime_switch);
- return 0;
-}
-