chan_sip parse code refactoring plus two new unit tests
[asterisk/asterisk.git] / channels / sip / include / reqresp_parser.h
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 2010, Digium, Inc.
5  *
6  * See http://www.asterisk.org for more information about
7  * the Asterisk project. Please do not directly contact
8  * any of the maintainers of this project for assistance;
9  * the project provides a web site, mailing lists and IRC
10  * channels for your use.
11  *
12  * This program is free software, distributed under the terms of
13  * the GNU General Public License Version 2. See the LICENSE file
14  * at the top of the source tree.
15  */
16
17 /*!
18  * \file
19  * \brief sip request response parser header file
20  */
21
22 #ifndef _SIP_REQRESP_H
23 #define _SIP_REQRESP_H
24
25 /*!
26  * \brief parses a URI in its components.
27  *
28  * \note
29  * - Multiple scheme's can be specified ',' delimited. ex: "sip:,sips:"
30  * - If a component is not requested, do not split around it. This means
31  *   that if we don't have domain, we cannot split name:pass and domain:port.
32  * - It is safe to call with ret_name, pass, domain, port pointing all to
33  *   the same place.
34  * - If no secret parameter is provided, ret_name will return with both parts, user:secret
35  * - If no port parameter is provided, domain will return with both parts, domain:port
36  * - This function overwrites the the uri string.
37  * 
38  * \retval 0 on success
39  * \retval -1 on error.
40  *
41  * \verbatim
42  * general form we are expecting is sip:user:password;user-parameters@host:port;uri-parameters?headers
43  * \endverbatim
44  */
45 int parse_uri(char *uri, const char *scheme, char **ret_name, char **pass, char **domain, char **port, char **transport);
46
47 /*!
48  * \brief  Get caller id name from SIP headers, copy into output buffer
49  *
50  * \retval input string pointer placed after display-name field if possible
51  */
52 const char *get_calleridname(const char *input, char *output, size_t outputsize);
53
54 /*!
55  * \brief  Get name and number from sip header
56  *
57  * \note name and number point to malloced memory on return and must be
58  * freed. If name or number is not found, they will be returned as NULL.
59  *
60  * \retval 0 success
61  * \retval -1 failure
62  */
63 int get_name_and_number(const char *hdr, char **name, char **number);
64
65 /*! \brief Pick out text in brackets from character string
66  * \return pointer to terminated stripped string
67  * \param tmp input string that will be modified
68  *
69  * Examples:
70  * \verbatim
71  * "foo" <bar>  valid input, returns bar
72  *  foo returns the whole string
73  * < "foo ... > returns the string between brackets
74  * < "foo...    bogus (missing closing bracket), returns the whole string
75  * \endverbatim
76  */
77 char *get_in_brackets(char *tmp);
78
79 /*!
80  * \brief register request parsing tests
81  */
82 void sip_request_parser_register_tests(void);
83
84 /*!
85  * \brief unregister request parsing tests
86  */
87 void sip_request_parser_unregister_tests(void);
88
89 #endif