diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2002-05-13 22:29:39 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2002-05-13 22:29:39 +0000 |
commit | 1642b09aba30d6f0b95a11bf079f99db94fdac02 (patch) | |
tree | 64c5de0a1afb1872ee474057eb3f244015f2801c /apps/app_getcpeid.c | |
parent | 1c5b980de51d4caaa1d463fd0f702305b87aec4e (diff) |
Version 0.1.12 from FTP
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@446 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_getcpeid.c')
-rwxr-xr-x | apps/app_getcpeid.c | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/apps/app_getcpeid.c b/apps/app_getcpeid.c new file mode 100755 index 000000000..b4367499b --- /dev/null +++ b/apps/app_getcpeid.c @@ -0,0 +1,149 @@ +/* + * Asterisk -- A telephony toolkit for Linux. + * + * Execute arbitrary system commands + * + * Copyright (C) 1999, Mark Spencer + * + * Mark Spencer <markster@linux-support.net> + * + * This program is free software, distributed under the terms of + * the GNU General Public License + */ + +#include <asterisk/lock.h> +#include <asterisk/file.h> +#include <asterisk/logger.h> +#include <asterisk/channel.h> +#include <asterisk/pbx.h> +#include <asterisk/module.h> +#include <asterisk/adsi.h> +#include <asterisk/options.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <stdlib.h> + +#include <pthread.h> + + +static char *tdesc = "Get ADSI CPE ID"; + +static char *app = "GetCPEID"; + +static char *synopsis = "Get ADSI CPE ID"; + +static char *descrip = +" GetCPEID: Obtains and displays CPE ID and other information in order to\n" +"properly setup zapata.conf for on-hook operations. Returns -1 on hanup\n" +"only."; + +STANDARD_LOCAL_USER; + +LOCAL_USER_DECL; + +static int cpeid_setstatus(struct ast_channel *chan, char *stuff[], int voice) +{ + int justify[5] = { ADSI_JUST_CENT, ADSI_JUST_LEFT, ADSI_JUST_LEFT, ADSI_JUST_LEFT }; + char *tmp[5]; + int x; + for (x=0;x<4;x++) + tmp[x] = stuff[x]; + tmp[4] = NULL; + return adsi_print(chan, tmp, justify, voice); +} + +static int cpeid_exec(struct ast_channel *chan, void *idata) +{ + int res=0; + struct localuser *u; + unsigned char cpeid[4]; + int gotgeometry = 0; + int gotcpeid = 0; + int width, height, buttons; + char data[4][80]; + char *stuff[4]; + + LOCAL_USER_ADD(u); + stuff[0] = data[0]; + stuff[1] = data[1]; + stuff[2] = data[2]; + stuff[3] = data[3]; + memset(data, 0, sizeof(data)); + strcpy(stuff[0], "** CPE Info **"); + strcpy(stuff[1], "Identifying CPE..."); + strcpy(stuff[2], "Please wait..."); + res = adsi_load_session(chan, NULL, 0, 1); + if (res > 0) { + cpeid_setstatus(chan, stuff, 0); + res = adsi_get_cpeid(chan, cpeid, 0); + if (res > 0) { + gotcpeid = 1; + if (option_verbose > 2) + ast_verbose(VERBOSE_PREFIX_3 "Got CPEID of '%02x:%02x:%02x:%02x' on '%s'\n", cpeid[0], cpeid[1], cpeid[2], cpeid[3], chan->name); + } + if (res > -1) { + strcpy(stuff[1], "Measuring CPE..."); + strcpy(stuff[2], "Please wait..."); + cpeid_setstatus(chan, stuff, 0); + res = adsi_get_cpeinfo(chan, &width, &height, &buttons, 0); + if (res > -1) { + if (option_verbose > 2) + ast_verbose(VERBOSE_PREFIX_3 "CPE has %d lines, %d columns, and %d buttons on '%s'\n", height, width, buttons, chan->name); + gotgeometry = 1; + } + } + if (res > -1) { + if (gotcpeid) + sprintf(stuff[1], "CPEID: %02x:%02x:%02x:%02x", cpeid[0], cpeid[1], cpeid[2], cpeid[3]); + else + strcpy(stuff[1], "CPEID Unknown"); + if (gotgeometry) + sprintf(stuff[2], "Geom: %dx%d, %d buttons", width, height, buttons); + else + strcpy(stuff[2], "Geometry unknown"); + strcpy(stuff[3], "Press # to exit"); + cpeid_setstatus(chan, stuff, 1); + for(;;) { + res = ast_waitfordigit(chan, 1000); + if (res < 0) + break; + if (res == '#') { + res = 0; + break; + } + } + adsi_unload_session(chan); + } + } + LOCAL_USER_REMOVE(u); + return res; +} + +int unload_module(void) +{ + STANDARD_HANGUP_LOCALUSERS; + return ast_unregister_application(app); +} + +int load_module(void) +{ + return ast_register_application(app, cpeid_exec, synopsis, descrip); +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + int res; + STANDARD_USECOUNT(res); + return res; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} |