func_uri.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "asterisk.h"
00031
00032 ASTERISK_FILE_VERSION(__FILE__, "$Revision: 47625 $")
00033
00034 #include <stdlib.h>
00035 #include <stdio.h>
00036 #include <string.h>
00037 #include <sys/types.h>
00038
00039 #include "asterisk/module.h"
00040 #include "asterisk/channel.h"
00041 #include "asterisk/pbx.h"
00042 #include "asterisk/logger.h"
00043 #include "asterisk/utils.h"
00044 #include "asterisk/app.h"
00045
00046
00047 static int uriencode(struct ast_channel *chan, char *cmd, char *data,
00048 char *buf, size_t len)
00049 {
00050 if (ast_strlen_zero(data)) {
00051 ast_log(LOG_WARNING, "Syntax: URIENCODE(<data>) - missing argument!\n");
00052 return -1;
00053 }
00054
00055 ast_uri_encode(data, buf, len, 1);
00056
00057 return 0;
00058 }
00059
00060
00061 static int uridecode(struct ast_channel *chan, char *cmd, char *data,
00062 char *buf, size_t len)
00063 {
00064 if (ast_strlen_zero(data)) {
00065 ast_log(LOG_WARNING, "Syntax: URIDECODE(<data>) - missing argument!\n");
00066 return -1;
00067 }
00068
00069 ast_copy_string(buf, data, len);
00070 ast_uri_decode(buf);
00071
00072 return 0;
00073 }
00074
00075 static struct ast_custom_function urldecode_function = {
00076 .name = "URIDECODE",
00077 .synopsis = "Decodes a URI-encoded string according to RFC 2396.",
00078 .syntax = "URIDECODE(<data>)",
00079 .read = uridecode,
00080 };
00081
00082 static struct ast_custom_function urlencode_function = {
00083 .name = "URIENCODE",
00084 .synopsis = "Encodes a string to URI-safe encoding according to RFC 2396.",
00085 .syntax = "URIENCODE(<data>)",
00086 .read = uriencode,
00087 };
00088
00089 static int unload_module(void)
00090 {
00091 return ast_custom_function_unregister(&urldecode_function)
00092 || ast_custom_function_unregister(&urlencode_function);
00093 }
00094
00095 static int load_module(void)
00096 {
00097 return ast_custom_function_register(&urldecode_function)
00098 || ast_custom_function_register(&urlencode_function);
00099 }
00100
00101 AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "URI encode/decode dialplan functions");