From a64eaf9e1c94f19cccbed70dd8b021b5556dfaaf Mon Sep 17 00:00:00 2001 From: markster Date: Thu, 23 Aug 2001 17:57:10 +0000 Subject: Version 0.1.9 from FTP git-svn-id: http://svn.digium.com/svn/asterisk/trunk@353 f38db490-d61c-443f-a65b-d21fe96a405b --- apps/app_url.c | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100755 apps/app_url.c (limited to 'apps/app_url.c') diff --git a/apps/app_url.c b/apps/app_url.c new file mode 100755 index 000000000..542c490a7 --- /dev/null +++ b/apps/app_url.c @@ -0,0 +1,137 @@ +/* + * Asterisk -- A telephony toolkit for Linux. + * + * App to transmit a URL + * + * Copyright (C) 1999, Mark Spencer + * + * Mark Spencer + * + * This program is free software, distributed under the terms of + * the GNU General Public License + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static char *tdesc = "Send URL Applications"; + +static char *app = "SendURL"; + +static char *synopsis = "Send a URL"; + +static char *descrip = +" SendURL(URL[|option]): Requests client go to URL. If the client\n" +"does not support html transport, and there exists a step with\n" +"priority n + 101, then execution will continue at that step.\n" +"Otherwise, execution will continue at the next priority level.\n" +"SendURL only returns 0 if the URL was sent correctly or if\n" +"the channel does not support HTML transport, and -1 otherwise.\n" +"If the option 'wait' is specified, execution will wait for an\n" +"acknowledgement that the URL has been loaded before continuing\n" +"and will return -1 if the peer is unable to load the URL\n"; + +STANDARD_LOCAL_USER; + +LOCAL_USER_DECL; + +static int sendurl_exec(struct ast_channel *chan, void *data) +{ + int res = 0; + struct localuser *u; + char tmp[256]; + char *options; + int option_wait=0; + struct ast_frame *f; + if (!data || !strlen((char *)data)) { + ast_log(LOG_WARNING, "SendURL requires an argument (URL)\n"); + return -1; + } + strncpy(tmp, (char *)data, sizeof(tmp)); + strtok(tmp, "|"); + options = strtok(NULL, "|"); + if (options && !strcasecmp(options, "wait")) + option_wait = 1; + LOCAL_USER_ADD(u); + if (!ast_channel_supports_html(chan)) { + /* Does not support transport */ + if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 101, chan->callerid)) + chan->priority += 100; + LOCAL_USER_REMOVE(u); + return 0; + } + res = ast_channel_sendurl(chan, tmp); + if (res > -1) { + if (option_wait) { + for(;;) { + /* Wait for an event */ + res = ast_waitfor(chan, -1); + if (res < 0) + break; + f = ast_read(chan); + if (!f) { + res = -1; + break; + } + if (f->frametype == AST_FRAME_HTML) { + switch(f->subclass) { + case AST_HTML_LDCOMPLETE: + res = 0; + ast_frfree(f); + goto out; + break; + case AST_HTML_NOSUPPORT: + /* Does not support transport */ + if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 101, chan->callerid)) + chan->priority += 100; + res = 0; + goto out; + break; + default: + ast_log(LOG_WARNING, "Don't know what to do with HTML subclass %d\n", f->subclass); + }; + } + ast_frfree(f); + } + } + } +out: + 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, sendurl_exec, synopsis, descrip); +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + int res; + STANDARD_USECOUNT(res); + return res; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} -- cgit v1.2.3