mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-11-03 20:38:59 +00:00 
			
		
		
		
	This patch adds the auto_force_rport and auto_comedia NAT options. It also converts the nat= setting to a list of comma-separated combinable options: no, force_rport, comedia, auto_force_rport, and auto_comedia. nat=yes remains as an undocumented option equal to "force_rport,comedia". The first instance of 'yes' or 'no' in the list stops parsing and overrides any previously set options. If an auto_* option is specified with its non-auto_ counterpart, the auto setting takes precedence. This patch builds upon the patch posted to ASTERISK-17860 by JIRA user pedro-garcia. (closes issue ASTERISK-17860) Review: https://reviewboard.asterisk.org/r/1698/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@354597 65c4cc65-6c06-0410-ace0-fbb531ad65f3
		
			
				
	
	
		
			90 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Asterisk -- An open source telephony toolkit.
 | 
						|
 *
 | 
						|
 * Copyright (C) 2010, Digium, Inc.
 | 
						|
 *
 | 
						|
 * See http://www.asterisk.org for more information about
 | 
						|
 * the Asterisk project. Please do not directly contact
 | 
						|
 * any of the maintainers of this project for assistance;
 | 
						|
 * the project provides a web site, mailing lists and IRC
 | 
						|
 * channels for your use.
 | 
						|
 *
 | 
						|
 * This program is free software, distributed under the terms of
 | 
						|
 * the GNU General Public License Version 2. See the LICENSE file
 | 
						|
 * at the top of the source tree.
 | 
						|
 */
 | 
						|
 | 
						|
/*!
 | 
						|
 * \file
 | 
						|
 * \brief sip utils header file
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef _SIP_UTILS_H
 | 
						|
#define _SIP_UTILS_H
 | 
						|
 | 
						|
/* wrapper macro to tell whether t points to one of the sip_tech descriptors */
 | 
						|
#define IS_SIP_TECH(t)  ((t) == &sip_tech || (t) == &sip_tech_info)
 | 
						|
 | 
						|
/*!
 | 
						|
 * \brief converts ascii port to int representation.
 | 
						|
 *
 | 
						|
 * \arg pt[in] string that contains a port.
 | 
						|
 * \arg standard[in] port to return in case the port string input is NULL
 | 
						|
 *      or if there is a parsing error.
 | 
						|
 *
 | 
						|
 * \return An integer port representation.
 | 
						|
 */
 | 
						|
unsigned int port_str2int(const char *pt, unsigned int standard);
 | 
						|
 | 
						|
/*! \brief Locate closing quote in a string, skipping escaped quotes.
 | 
						|
 * optionally with a limit on the search.
 | 
						|
 * start must be past the first quote.
 | 
						|
 */
 | 
						|
const char *find_closing_quote(const char *start, const char *lim);
 | 
						|
 | 
						|
 | 
						|
/*! \brief Convert SIP hangup causes to Asterisk hangup causes */
 | 
						|
int hangup_sip2cause(int cause);
 | 
						|
 | 
						|
/*! \brief Convert Asterisk hangup causes to SIP codes
 | 
						|
\verbatim
 | 
						|
 Possible values from causes.h
 | 
						|
        AST_CAUSE_NOTDEFINED    AST_CAUSE_NORMAL        AST_CAUSE_BUSY
 | 
						|
        AST_CAUSE_FAILURE       AST_CAUSE_CONGESTION    AST_CAUSE_UNALLOCATED
 | 
						|
 | 
						|
	In addition to these, a lot of PRI codes is defined in causes.h
 | 
						|
	...should we take care of them too ?
 | 
						|
 | 
						|
	Quote RFC 3398
 | 
						|
 | 
						|
   ISUP Cause value                        SIP response
 | 
						|
   ----------------                        ------------
 | 
						|
   1  unallocated number                   404 Not Found
 | 
						|
   2  no route to network                  404 Not found
 | 
						|
   3  no route to destination              404 Not found
 | 
						|
   16 normal call clearing                 --- (*)
 | 
						|
   17 user busy                            486 Busy here
 | 
						|
   18 no user responding                   408 Request Timeout
 | 
						|
   19 no answer from the user              480 Temporarily unavailable
 | 
						|
   20 subscriber absent                    480 Temporarily unavailable
 | 
						|
   21 call rejected                        403 Forbidden (+)
 | 
						|
   22 number changed (w/o diagnostic)      410 Gone
 | 
						|
   22 number changed (w/ diagnostic)       301 Moved Permanently
 | 
						|
   23 redirection to new destination       410 Gone
 | 
						|
   26 non-selected user clearing           404 Not Found (=)
 | 
						|
   27 destination out of order             502 Bad Gateway
 | 
						|
   28 address incomplete                   484 Address incomplete
 | 
						|
   29 facility rejected                    501 Not implemented
 | 
						|
   31 normal unspecified                   480 Temporarily unavailable
 | 
						|
\endverbatim
 | 
						|
*/
 | 
						|
const char *hangup_cause2sip(int cause);
 | 
						|
 | 
						|
/*! \brief Return a string describing the force_rport value for the given flags */
 | 
						|
const char *force_rport_string(struct ast_flags *flags);
 | 
						|
 | 
						|
/*! \brief Return a string describing the comedia value for the given flags */
 | 
						|
const char *comedia_string(struct ast_flags *flags);
 | 
						|
 | 
						|
#endif
 |