Asterisk - The Open Source Telephony Project  18.5.0
func_uri.c
Go to the documentation of this file.
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 1999 - 2006, Digium, Inc.
5  *
6  * Created by Olle E. Johansson, Edvina.net
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18 
19 /*! \file
20  *
21  * \brief URI encoding / decoding
22  *
23  * \author Olle E. Johansson <[email protected]>
24  *
25  * \note For now this code only supports 8 bit characters, not unicode,
26  which we ultimately will need to support.
27  *
28  * \ingroup functions
29  */
30 
31 /*** MODULEINFO
32  <support_level>core</support_level>
33  ***/
34 
35 #include "asterisk.h"
36 
37 #include "asterisk/module.h"
38 #include "asterisk/channel.h"
39 #include "asterisk/pbx.h"
40 #include "asterisk/utils.h"
41 #include "asterisk/app.h"
42 
43 /*** DOCUMENTATION
44  <function name="URIENCODE" language="en_US">
45  <synopsis>
46  Encodes a string to URI-safe encoding according to RFC 2396.
47  </synopsis>
48  <syntax>
49  <parameter name="data" required="true">
50  <para>Input string to be encoded.</para>
51  </parameter>
52  </syntax>
53  <description>
54  <para>Returns the encoded string defined in <replaceable>data</replaceable>.</para>
55  </description>
56  </function>
57  <function name="URIDECODE" language="en_US">
58  <synopsis>
59  Decodes a URI-encoded string according to RFC 2396.
60  </synopsis>
61  <syntax>
62  <parameter name="data" required="true">
63  <para>Input string to be decoded.</para>
64  </parameter>
65  </syntax>
66  <description>
67  <para>Returns the decoded URI-encoded <replaceable>data</replaceable> string.</para>
68  </description>
69  </function>
70  ***/
71 
72 /*! \brief uriencode: Encode URL according to RFC 2396 */
73 static int uriencode(struct ast_channel *chan, const char *cmd, char *data,
74  char *buf, size_t len)
75 {
76  if (ast_strlen_zero(data)) {
77  buf[0] = '\0';
78  return 0;
79  }
80 
81  ast_uri_encode(data, buf, len, ast_uri_http);
82 
83  return 0;
84 }
85 
86 /*!\brief uridecode: Decode URI according to RFC 2396 */
87 static int uridecode(struct ast_channel *chan, const char *cmd, char *data,
88  char *buf, size_t len)
89 {
90  if (ast_strlen_zero(data)) {
91  buf[0] = '\0';
92  return 0;
93  }
94 
95  ast_copy_string(buf, data, len);
97 
98  return 0;
99 }
100 
102  .name = "URIDECODE",
103  .read = uridecode,
104 };
105 
107  .name = "URIENCODE",
108  .read = uriencode,
109 };
110 
111 static int unload_module(void)
112 {
113  return ast_custom_function_unregister(&urldecode_function)
114  || ast_custom_function_unregister(&urlencode_function);
115 }
116 
117 static int load_module(void)
118 {
119  return ast_custom_function_register(&urldecode_function)
120  || ast_custom_function_register(&urlencode_function);
121 }
122 
123 AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "URI encode/decode dialplan functions");
void ast_uri_decode(char *s, struct ast_flags spec)
Decode URI, URN, URL (overwrite string)
Definition: main/utils.c:616
const char * name
Definition: pbx.h:119
Main Channel structure associated with a channel.
static int uriencode(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len)
uriencode: Encode URL according to RFC 2396
Definition: func_uri.c:73
#define AST_MODULE_INFO_STANDARD(keystr, desc)
Definition: module.h:567
Asterisk main include file. File version handling, generic pbx functions.
static int load_module(void)
Definition: func_uri.c:117
char buf[BUFSIZE]
Definition: eagi_proxy.c:66
char * ast_uri_encode(const char *string, char *outbuf, int buflen, struct ast_flags spec)
Turn text string to URI-encoded XX version.
Definition: main/utils.c:577
static int uridecode(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len)
uridecode: Decode URI according to RFC 2396
Definition: func_uri.c:87
static int unload_module(void)
Definition: func_uri.c:111
int ast_custom_function_unregister(struct ast_custom_function *acf)
Unregister a custom function.
Utility functions.
#define ast_strlen_zero(foo)
Definition: strings.h:52
static struct ast_custom_function urldecode_function
Definition: func_uri.c:101
General Asterisk PBX channel definitions.
Data structure associated with a custom dialplan function.
Definition: pbx.h:118
Core PBX routines and definitions.
static int len(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t buflen)
void ast_copy_string(char *dst, const char *src, size_t size)
Size-limited null-terminating string copy.
Definition: strings.h:401
static struct ast_custom_function urlencode_function
Definition: func_uri.c:106
const struct ast_flags ast_uri_http
Definition: main/utils.c:573
#define ASTERISK_GPL_KEY
The text the key() function should return.
Definition: module.h:46
Asterisk module definitions.
Application convenience functions, designed to give consistent look and feel to Asterisk apps...
#define ast_custom_function_register(acf)
Register a custom function.
Definition: pbx.h:1508