From 20d98bd2c763ac70234ee0ca7644d68dca455550 Mon Sep 17 00:00:00 2001 From: kpfleming Date: Mon, 29 Aug 2005 22:54:54 +0000 Subject: add dialplan functions for URI encoding/decoding (issue #4857) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6442 f38db490-d61c-443f-a65b-d21fe96a405b --- funcs/func_uri.c | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100755 funcs/func_uri.c (limited to 'funcs') diff --git a/funcs/func_uri.c b/funcs/func_uri.c new file mode 100755 index 000000000..8617e3dde --- /dev/null +++ b/funcs/func_uri.c @@ -0,0 +1,108 @@ +/* + * Asterisk -- A telephony toolkit for Linux. + * + * URI encoding / decoding + * + * For now this code only supports 8 bit characters, not unicode, + * which we ultimately will need to support. + * + * Copyright (C) 2005, Digium, Inc. + * Created by Olle E. Johansson, Edvina.net + * + * This program is free software, distributed under the terms of + * the GNU General Public License + */ + +#include +#include +#include + +#include "asterisk.h" + +/* ASTERISK_FILE_VERSION(__FILE__, "$Revision$") */ + +#include "asterisk/channel.h" +#include "asterisk/pbx.h" +#include "asterisk/logger.h" +#include "asterisk/utils.h" +#include "asterisk/app.h" +#include "asterisk/module.h" + +/*--- builtin_function_uriencode: Encode URL according to RFC 2396 */ +static char *builtin_function_uriencode(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +{ + char uri[BUFSIZ]; + + if (!data || ast_strlen_zero(data)) { + ast_log(LOG_WARNING, "Syntax: URIENCODE() - missing argument!\n"); + return NULL; + } + + ast_uri_encode(data, uri, sizeof(uri), 1); + ast_copy_string(buf, uri, len); + + return buf; +} + +/*--- builtin_function_uridecode: Decode URI according to RFC 2396 */ +static char *builtin_function_uridecode(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +{ + if (!data || ast_strlen_zero(data)) { + ast_log(LOG_WARNING, "Syntax: URIDECODE() - missing argument!\n"); + return NULL; + } + + + ast_copy_string(buf, data, len); + ast_uri_decode(buf); + return buf; +} + +#ifndef BUILTIN_FUNC +static +#endif +struct ast_custom_function urldecode_function = { + .name = "URIDECODE", + .synopsis = "Decodes an URI-encoded string.", + .syntax = "URIDECODE()", + .read = builtin_function_uridecode, +}; + +#ifndef BUILTIN_FUNC +static +#endif +struct ast_custom_function urlencode_function = { + .name = "URIENCODE", + .synopsis = "Encodes a string to URI-safe encoding.", + .syntax = "URIENCODE()", + .read = builtin_function_uriencode, +}; + +#ifndef BUILTIN_FUNC +static char *tdesc = "URI encode/decode functions"; + +int unload_module(void) +{ + return ast_custom_function_unregister(&urldecode_function) || ast_custom_function_unregister(&urlencode_function); +} + +int load_module(void) +{ + return ast_custom_function_register(&urldecode_function) || ast_custom_function_register(&urlencode_function); +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + return 0; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} +#endif /* BUILTIN_FUNC */ -- cgit v1.2.3