Wed Oct 28 11:51:04 2009

Asterisk developer's documentation


func_uri.c

Go to the documentation of this file.
00001 /*
00002  * Asterisk -- An open source telephony toolkit.
00003  *
00004  * Copyright (C) 1999 - 2006, Digium, Inc.
00005  *
00006  * Created by Olle E. Johansson, Edvina.net 
00007  *
00008  * See http://www.asterisk.org for more information about
00009  * the Asterisk project. Please do not directly contact
00010  * any of the maintainers of this project for assistance;
00011  * the project provides a web site, mailing lists and IRC
00012  * channels for your use.
00013  *
00014  * This program is free software, distributed under the terms of
00015  * the GNU General Public License Version 2. See the LICENSE file
00016  * at the top of the source tree.
00017  */
00018 
00019 /*! \file
00020  *
00021  * \brief URI encoding / decoding
00022  *
00023  * \author Olle E. Johansson <oej@edvina.net>
00024  * 
00025  * \note For now this code only supports 8 bit characters, not unicode,
00026          which we ultimately will need to support.
00027  * 
00028  * \ingroup functions
00029  */
00030 
00031 #include "asterisk.h"
00032 
00033 ASTERISK_FILE_VERSION(__FILE__, "$Revision: 89425 $")
00034 
00035 #include "asterisk/module.h"
00036 #include "asterisk/channel.h"
00037 #include "asterisk/pbx.h"
00038 #include "asterisk/utils.h"
00039 #include "asterisk/app.h"
00040 
00041 /*! \brief uriencode: Encode URL according to RFC 2396 */
00042 static int uriencode(struct ast_channel *chan, const char *cmd, char *data,
00043            char *buf, size_t len)
00044 {
00045    if (ast_strlen_zero(data)) {
00046       ast_log(LOG_WARNING, "Syntax: URIENCODE(<data>) - missing argument!\n");
00047       return -1;
00048    }
00049 
00050    ast_uri_encode(data, buf, len, 1);
00051 
00052    return 0;
00053 }
00054 
00055 /*!\brief uridecode: Decode URI according to RFC 2396 */
00056 static int uridecode(struct ast_channel *chan, const char *cmd, char *data,
00057            char *buf, size_t len)
00058 {
00059    if (ast_strlen_zero(data)) {
00060       ast_log(LOG_WARNING, "Syntax: URIDECODE(<data>) - missing argument!\n");
00061       return -1;
00062    }
00063 
00064    ast_copy_string(buf, data, len);
00065    ast_uri_decode(buf);
00066 
00067    return 0;
00068 }
00069 
00070 static struct ast_custom_function urldecode_function = {
00071    .name = "URIDECODE",
00072    .synopsis = "Decodes a URI-encoded string according to RFC 2396.",
00073    .syntax = "URIDECODE(<data>)",
00074    .read = uridecode,
00075 };
00076 
00077 static struct ast_custom_function urlencode_function = {
00078    .name = "URIENCODE",
00079    .synopsis = "Encodes a string to URI-safe encoding according to RFC 2396.",
00080    .syntax = "URIENCODE(<data>)",
00081    .read = uriencode,
00082 };
00083 
00084 static int unload_module(void)
00085 {
00086    return ast_custom_function_unregister(&urldecode_function)
00087       || ast_custom_function_unregister(&urlencode_function);
00088 }
00089 
00090 static int load_module(void)
00091 {
00092    return ast_custom_function_register(&urldecode_function)
00093       || ast_custom_function_register(&urlencode_function);
00094 }
00095 
00096 AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "URI encode/decode dialplan functions");

Generated on Wed Oct 28 11:51:04 2009 for Asterisk - the Open Source PBX by  doxygen 1.5.6