Update sample configs to put incoming calls into context public.
[asterisk/asterisk.git] / configs / sip.conf.sample
index 130f369..1f7b549 100644 (file)
@@ -1,6 +1,19 @@
 ;
 ; SIP Configuration example for Asterisk
 ;
+; Note: Please read the security documentation for Asterisk in order to
+;      understand the risks of installing Asterisk with the sample
+;      configuration. If your Asterisk is installed on a public
+;      IP address connected to the Internet, you will want to learn
+;      about the various security settings BEFORE you start
+;      Asterisk. 
+;
+;      Especially note the following settings:
+;              - allowguest (default enabled)
+;              - permit/deny - IP address filters
+;              - contactpermit/contactdeny - IP address filters for registrations
+;              - context - Which set of services you offer various users
+;
 ; SIP dial strings
 ;-----------------------------------------------------------
 ; In the dialplan (extensions.conf) you can use several
@@ -9,6 +22,8 @@
 ;        SIP/username@domain   (SIP uri)
 ;        SIP/username[:password[:md5secret[:authname[:transport]]]]@host[:port]
 ;        SIP/devicename/extension
+;        SIP/devicename/extension/IPorHost
+;        SIP/username@domain//IPorHost
 ;
 ;
 ; Devicename
 ;        SIP/sales:topsecret::account02@domain.com:5062
 ;        SIP/12345678::bc53f0ba8ceb1ded2b70e05c3f91de4f:myname@192.168.0.1
 ;
+; IPorHost
+;        The next server for this call regardless of domain/peer
+;
 ; All of these dial strings specify the SIP request URI.
 ; In addition, you can specify a specific To: header by adding an
 ; exclamation mark after the dial string, like
 ;
 ;         SIP/sales@mysipproxy!sales@edvina.net
 ;
+; A new feature for 1.8 allows one to specify a host or IP address to use
+; when routing the call. This is typically used in tandem with func_srv if
+; multiple methods of reaching the same domain exist. The host or IP address
+; is specified after the third slash in the dialstring. Examples:
+;
+; SIP/devicename/extension/IPorHost
+; SIP/username@domain//IPorHost
+;
 ; CLI Commands
 ; -------------------------------------------------------------
 ; Useful CLI commands to check peers/users:
@@ -47,7 +73,8 @@
 ;
 ;   sip set debug on             Show all SIP messages
 ;
-;   module reload chan_sip.so    Reload configuration file
+;   sip reload                   Reload configuration file
+;   sip show settings            Show the current channel configuration
 ;
 ;------- Naming devices ------------------------------------------------------
 ;
 ;       combination with the "defaultip" setting.
 ;-----------------------------------------------------------------------------
 
-; ** Deprecated configuration options **
-; The "call-limit" configuation option is deprecated. It still works in
-; this version of Asterisk, but will disappear in the next version.
+; ** Old configuration options **
+; The "call-limit" configuation option is considered old is replaced
+; by new functionality. To enable callcounters, you use the new 
+; "callcounter" setting (for extension states in queue and subscriptions)
 ; You are encouraged to use the dialplan groupcount functionality
 ; to enforce call limits instead of using this channel-specific method.
-;
 ; You can still set limits per device in sip.conf or in a database by using
 ; "setvar" to set variables that can be used in the dialplan for various limits.
 
 [general]
-context=default                 ; Default context for incoming calls
+context=public                  ; Default context for incoming calls. Defaults to 'default'
 ;allowguest=no                  ; Allow or reject guest calls (default is yes)
+                               ; If your Asterisk is connected to the Internet
+                               ; and you have allowguest=yes
+                               ; you want to check which services you offer everyone
+                               ; out there, by enabling them in the default context (see below).
 ;match_auth_username=yes        ; if available, match user entry using the
                                 ; 'username' field from the authentication line
                                 ; instead of the From: field.
 allowoverlap=no                 ; Disable overlap dialing support. (Default is yes)
+;allowoverlap=yes               ; Enable RFC3578 overlap dialing support.
+                                ; Can use the Incomplete application to collect the
+                                ; needed digits from an ambiguous dialplan match.
+;allowoverlap=dtmf              ; Enable overlap dialing support using DTMF delivery
+                                ; methods (inband, RFC2833, SIP INFO) in the early
+                                ; media phase.  Uses the Incomplete application to
+                                ; collect the needed digits.
 ;allowtransfer=no               ; Disable all transfers (unless enabled in peers or users)
-                                ; Default is enabled
+                                ; Default is enabled. The Dial() options 't' and 'T' are not
+                                ; related as to whether SIP transfers are allowed or not.
 ;realm=mydomain.tld             ; Realm for digest authentication
                                 ; defaults to "asterisk". If you set a system name in
                                 ; asterisk.conf, it defaults to that system name
                                 ; Realms MUST be globally unique according to RFC 3261
                                 ; Set this to your host name or domain name
-;domainsasrealm=no              ; Use domans list as realms
+;domainsasrealm=no              ; Use domains list as realms
                                 ; You can serve multiple Realms specifying several
                                 ; 'domain=...' directives (see below). 
                                 ; In this case Realm will be based on request 'From'/'To' header
                                 ; and should match one of domain names.
                                 ; Otherwise default 'realm=...' will be used.
+
+; With the current situation, you can do one of four things:
+;  a) Listen on a specific IPv4 address.      Example: bindaddr=192.0.2.1
+;  b) Listen on a specific IPv6 address.      Example: bindaddr=2001:db8::1
+;  c) Listen on the IPv4 wildcard.            Example: bindaddr=0.0.0.0
+;  d) Listen on the IPv4 and IPv6 wildcards.  Example: bindaddr=::
+; (You can choose independently for UDP, TCP, and TLS, by specifying different values for
+; "udpbindaddr", "tcpbindaddr", and "tlsbindaddr".)
+; (Note that using bindaddr=:: will show only a single IPv6 socket in netstat.
+;  IPv4 is supported at the same time using IPv4-mapped IPv6 addresses.)
+;
+; You may optionally add a port number. (The default is port 5060 for UDP and TCP, 5061
+; for TLS).
+;   IPv4 example: bindaddr=0.0.0.0:5062
+;   IPv6 example: bindaddr=[::]:5062
+;
+; The address family of the bound UDP address is used to determine how Asterisk performs
+; DNS lookups. In cases a) and c) above, only A records are considered. In case b), only
+; AAAA records are considered. In case d), both A and AAAA records are considered. Note,
+; however, that Asterisk ignores all records except the first one. In case d), when both A
+; and AAAA records are available, either an A or AAAA record will be first, and which one
+; depends on the operating system. On systems using glibc, AAAA records are given
+; priority.
+
 udpbindaddr=0.0.0.0             ; IP address to bind UDP listen socket to (0.0.0.0 binds to all)
                                 ; Optionally add a port number, 192.168.1.1:5062 (default is port 5060)
 
@@ -123,8 +186,8 @@ udpbindaddr=0.0.0.0             ; IP address to bind UDP listen socket to (0.0.0
 ;
 ; Note also that while Asterisk currently will parse an Allow header to learn
 ; what methods an endpoint supports, the only actual use for this currently
-; is for determining if Asterisk may send connected line UPDATE requests. Its
-; use may be expanded in the future.
+; is for determining if Asterisk may send connected line UPDATE requests and
+; MESSAGE requests. Its use may be expanded in the future.
 ;
 ; disallowed_methods = UPDATE
 
@@ -141,10 +204,20 @@ tcpbindaddr=0.0.0.0             ; IP address for TCP server to bind to (0.0.0.0
 ;tlsenable=no                   ; Enable server for incoming TLS (secure) connections (default is no)
 ;tlsbindaddr=0.0.0.0            ; IP address for TLS server to bind to (0.0.0.0) binds to all interfaces)
                                 ; Optionally add a port number, 192.168.1.1:5063 (default is port 5061)
-                                ; Remember that the DNS entry for the common name (server name) in the
-                               ; certificate must point to the IP address you bind to,
-                                ; so you don't want to bind a TLS socket to multiple IP addresses.
+                                ; Remember that the IP address must match the common name (hostname) in the
+                                ; certificate, so you don't want to bind a TLS socket to multiple IP addresses.
+                                ; For details how to construct a certificate for SIP see 
+                                ; http://tools.ietf.org/html/draft-ietf-sip-domain-certs
 
+;tcpauthtimeout = 30            ; tcpauthtimeout specifies the maximum number
+                               ; of seconds a client has to authenticate.  If
+                               ; the client does not authenticate beofre this
+                               ; timeout expires, the client will be
+                                ; disconnected. (default: 30 seconds)
+
+;tcpauthlimit = 100             ; tcpauthlimit specifies the maximum number of
+                               ; unauthenticated sessions that will be allowed
+                                ; to connect at any given time. (default: 100)
 
 srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
                                 ; Note: Asterisk only uses the first host
@@ -159,9 +232,9 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
 ;pedantic=yes                   ; Enable checking of tags in headers,
                                 ; international character conversions in URIs
                                 ; and multiline formatted headers for strict
-                                ; SIP compatibility (defaults to "no")
+                                ; SIP compatibility (defaults to "yes")
 
-; See qos.tex or Quality of Service section of asterisk.pdf for a description of these parameters.
+; See https://wiki.asterisk.org/wiki/display/AST/IP+Quality+of+Service for a description of these parameters.
 ;tos_sip=cs3                    ; Sets TOS for SIP packets.
 ;tos_audio=ef                   ; Sets TOS for RTP audio packets.
 ;tos_video=af41                 ; Sets TOS for RTP video packets.
@@ -177,7 +250,10 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
 ;minexpiry=60                   ; Minimum length of registrations/subscriptions (default 60)
 ;defaultexpiry=120              ; Default length of incoming/outgoing registration
 ;mwiexpiry=3600                 ; Expiry time for outgoing MWI subscriptions
+;maxforwards=70                        ; Setting for the SIP Max-Forwards: header (loop prevention)
+                               ; Default value is 70
 ;qualifyfreq=60                 ; Qualification: How often to check for the host to be up in seconds
+                               ; and reported in milliseconds with sip show settings.
                                 ; Set to low value if you use low timeout for NAT of UDP sessions
                                ; Default: 60
 ;qualifygap=100                        ; Number of milliseconds between each group of peers being qualified
@@ -197,13 +273,26 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
                                 ; Message-Account in the MWI notify message
                                 ; defaults to "asterisk"
 
+; Codec negotiation
+;
+; When Asterisk is receiving a call, the codec will initially be set to the
+; first codec in the allowed codecs defined for the user receiving the call
+; that the caller also indicates that it supports. But, after the caller
+; starts sending RTP, Asterisk will switch to using whatever codec the caller
+; is sending.
+;
+; When Asterisk is placing a call, the codec used will be the first codec in
+; the allowed codecs that the callee indicates that it supports. Asterisk will
+; *not* switch to whatever codec the callee is sending.
+;
 ;preferred_codec_only=yes       ; Respond to a SIP invite with the single most preferred codec
                                 ; rather than advertising all joint codec capabilities. This
                                 ; limits the other side's codec choice to exactly what we prefer.
 
 ;disallow=all                   ; First disallow all codecs
 ;allow=ulaw                     ; Allow codecs in order of preference
-;allow=ilbc                     ; see doc/rtp-packetization for framing options
+;allow=ilbc                     ; see https://wiki.asterisk.org/wiki/display/AST/RTP+Packetization
+                               ; for framing options
 ;
 ; This option specifies a preference for which music on hold class this channel
 ; should listen to when put on hold if the music class has not been set on the
@@ -225,6 +314,9 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
                                 ; Parkinglots are configured in features.conf
 ;language=en                    ; Default language setting for all users/peers
                                 ; This may also be set for individual users/peers
+;tonezone=se                   ; Default tonezone for all users/peers
+                                ; This may also be set for individual users/peers
+
 ;relaxdtmf=yes                  ; Relax dtmf handling
 ;trustrpid = no                 ; If Remote-Party-ID should be trusted
 ;sendrpid = yes                 ; If Remote-Party-ID should be sent (defaults to no)
@@ -239,15 +331,17 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
                                 ; transmit such UPDATE messages to it, then you must enable this option.
                                 ; Otherwise, we will have to wait until we can send a reinvite to
                                 ; transmit the information.
-;prematuremedia=no             ; Some ISDN links send empty media frames before 
-                               ; the call is in ringing or progress state. The SIP 
-                               ; channel will then send 183 indicating early media
-                               ; which will be empty - thus users get no ring signal.
-                               ; Setting this to "no" will stop any media before we have
-                               ; call progress. Default is "yes".
-                               ;
-                               ; In order for "noanswer" applications to work, you need to run
-                               ; the progress() application in the priority before the app.
+;prematuremedia=no              ; Some ISDN links send empty media frames before 
+                                ; the call is in ringing or progress state. The SIP 
+                                ; channel will then send 183 indicating early media
+                                ; which will be empty - thus users get no ring signal.
+                                ; Setting this to "yes" will stop any media before we have
+                                ; call progress (meaning the SIP channel will not send 183 Session
+                                ; Progress for early media). Default is "yes". Also make sure that
+                                ; the SIP peer is configured with progressinband=never. 
+                                ;
+                                ; In order for "noanswer" applications to work, you need to run
+                                ; the progress() application in the priority before the app.
 
 ;progressinband=never           ; If we should generate in-band ringing always
                                 ; use 'never' to never use in-band signalling, even in cases
@@ -296,6 +390,25 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
                                 ; instead of letting the requester know whether there was
                                 ; a matching user or peer for their request.  This reduces
                                 ; the ability of an attacker to scan for valid SIP usernames.
+                                ; This option is set to "yes" by default.
+
+;auth_options_requests = yes    ; Enabling this option will authenticate OPTIONS requests just like
+                                ; INVITE requests are.  By default this option is disabled.
+
+;accept_outofcall_message = no  ; Disable this option to reject all MESSAGE requests outside of a
+                                ; call.  By default, this option is enabled.  When enabled, MESSAGE
+                                ; requests are passed in to the dialplan.
+
+;outofcall_message_context = messages ; Context all out of dialog msgs are sent to. When this
+                                      ; option is not set, the context used during peer matching
+                                      ; is used. This option can be defined at both the peer and
+                                      ; global level.
+
+;auth_message_requests = yes    ; Enabling this option will authenticate MESSAGE requests.
+                                ; By default this option is enabled.  However, it can be disabled
+                                ; should an application desire to not load the Asterisk server with
+                                ; doing authentication and implement end to end security in the
+                                ; message body.
 
 ;g726nonstandard = yes          ; If the peer negotiates G726-32 audio, use AAL2 packing
                                 ; order instead of RFC3551 packing order (this is required
@@ -306,9 +419,13 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
 ;outboundproxy=proxy.provider.domain:8080       ; send outbound signaling to this proxy, not directly to the devices
 ;outboundproxy=proxy.provider.domain,force      ; Send ALL outbound signalling to proxy, ignoring route: headers
 ;outboundproxy=tls://proxy.provider.domain      ; same as '=proxy.provider.domain' except we try to connect with tls
+;outboundproxy=192.0.2.1                        ; IPv4 address literal (default port is 5060)
+;outboundproxy=2001:db8::1                      ; IPv6 address literal (default port is 5060)
+;outboundproxy=192.168.0.2.1:5062               ; IPv4 address literal with explicit port
+;outboundproxy=[2001:db8::1]:5062               ; IPv6 address literal with explicit port
 ;                                               ; (could also be tcp,udp) - defining transports on the proxy line only
 ;                                               ; applies for the global proxy, otherwise use the transport= option
-;matchexterniplocally = yes     ; Only substitute the externip or externhost setting if it matches
+;matchexternaddrlocally = yes     ; Only substitute the externaddr or externhost setting if it matches
                                 ; your localnet setting. Unless you have some sort of strange network
                                 ; setup you will not need to enable this.
 
@@ -340,6 +457,14 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
                                 ; If you have qualify on and the peer becomes unreachable
                                 ; this setting will enforce inactivation of the regexten
                                 ; extension for the peer
+;legacy_useroption_parsing=yes ; Default "no"      ; If you have this option enabled and there are semicolons
+                                                    ; in the user field of a sip URI, the field be truncated
+                                                    ; at the first semicolon seen. This effectively makes
+                                                    ; semicolon a non-usable character for peer names, extensions,
+                                                    ; and maybe other, less tested things.  This can be useful
+                                                    ; for improving compatability with devices that like to use
+                                                    ; user options for whatever reason.  The behavior is similar to
+                                                    ; how SIP URI's were typically handled in 1.6.2, hence the name.
 
 ; The shrinkcallerid function removes '(', ' ', ')', non-trailing '.', and '-' not
 ; in square brackets.  For example, the caller id value 555.5555 becomes 5555555
@@ -367,7 +492,7 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
 ;        you should have their certificate installed here so the code can
 ;        verify the authenticity of their certificate.
 
-;tlscadir=</path/to/ca/dir>
+;tlscapath=</path/to/ca/dir>
 ;        A directory full of CA certificates.  The files must be named with
 ;        the CA subject name hash value.
 ;        (see man SSL_CTX_load_verify_locations for more info)
@@ -437,25 +562,6 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
 ;session-minse=90
 ;session-refresher=uas
 ;
-;--------------------------- HASH TABLE SIZES ------------------------------------------------
-; Hash tables are used internally by the SIP driver to locate objects in memory.
-; For every incoming call, Asterisk will match properties of the call with in-memory
-; hash tables to locate a matching device, peer or user.
-;
-; For maximum efficiency, adjust the following
-; values to be slightly larger than the maximum number of in-memory objects (devices).
-; Too large, and space is wasted. Too small, and things will run slower.
-; 563 is probably way too big for small (home) applications, but it
-; should cover most small/medium sites.
-; It is recommended to make the sizes be a prime number!
-; This was internally set to 17 for small-memory applications...
-; All tables default to 563, except when compiled in LOW_MEMORY mode,
-; in which case, they default to 17. You can override this by uncommenting
-; the following, and changing the values.
-;hash_users=563
-;hash_peers=563
-;hash_dialogs=563
-
 ;--------------------------- SIP DEBUGGING ---------------------------------------------------
 ;sipdebug = yes                 ; Turn on SIP debugging by default, from
                                 ; the moment the channel loads this configuration
@@ -536,9 +642,12 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
 ;                                       ; send 400 byte T.38 FAX packets to it.
 ;
 ; FAX detection will cause the SIP channel to jump to the 'fax' extension (if it exists)
-; after T.38 is successfully negotiated.
+; based one or more events being detected. The events that can be detected are an incoming
+; CNG tone or an incoming T.38 re-INVITE request.
 ;
-; faxdetect = yes              ; Default false
+; faxdetect = yes              ; Default 'no', 'yes' enables both CNG and T.38 detection
+; faxdetect = cng              ; Enables only CNG detection
+; faxdetect = t38              ; Enables only T.38 detection
 ;
 ;----------------------------------------- OUTBOUND SIP REGISTRATIONS  ------------------------
 ; Asterisk can register as a SIP user agent to a SIP proxy (provider)
@@ -601,6 +710,12 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
 ;
 ;    Note that in this example, the optional authuser and secret portions have
 ;    been left blank because we have specified a port in the user section
+;
+;register => tls://username:xxxxxx@sip-tls-proxy.example.org
+;
+;    The 'transport' part defaults to 'udp' but may also be 'tcp' or 'tls'.
+;    Using 'udp://' explicitly is also useful in case the username part
+;    contains a '/' ('user/name').
 
 ;registertimeout=20             ; retry registration calls every 20 seconds (default)
 ;registerattempts=10            ; Number of registration attempts before we give up
@@ -610,12 +725,15 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
 
 ;----------------------------------------- OUTBOUND MWI SUBSCRIPTIONS -------------------------
 ; Asterisk can subscribe to receive the MWI from another SIP server and store it locally for retrieval
-; by other phones.
+; by other phones. At this time, you can only subscribe using UDP as the transport.
 ; Format for the mwi register statement is:
-;       mwi => user[:secret[:authuser]]@host[:port][/mailbox]
+;       mwi => user[:secret[:authuser]]@host[:port]/mailbox
 ;
 ; Examples:
 ;mwi => 1234:password@mysipprovider.com/1234
+;mwi => 1234:password@myportprovider.com:6969/1234
+;mwi => 1234:password:authuser@myauthprovider.com/1234
+;mwi => 1234:password:authuser@myauthportprovider.com:6969/1234
 ;
 ; MWI received will be stored in the 1234 mailbox of the SIP_Remote context. It can be used by other phones by following the below:
 ; mailbox=1234@SIP_Remote
@@ -645,24 +763,24 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
 ;   to a host outside the NAT. This information is derived by one of the
 ;   following (mutually exclusive) config file parameters:
 ;
-;   a. "externip = hostname[:port]" specifies a static address[:port] to
+;   a. "externaddr = hostname[:port]" specifies a static address[:port] to
 ;      be used in SIP and SDP messages.
 ;      The hostname is looked up only once, when [re]loading sip.conf .
-;      If a port number is not present, use the "bindport" value (which is
-;      not guaranteed to work correctly, because a NAT box might remap the
+;      If a port number is not present, use the port specified in the "udpbindaddr"
+;      (which is not guaranteed to work correctly, because a NAT box might remap the
 ;      port number as well as the address).
 ;      This approach can be useful if you have a NAT device where you can
 ;      configure the mapping statically. Examples:
 ;
-;        externip = 12.34.56.78          ; use this address.
-;        externip = 12.34.56.78:9900     ; use this address and port.
-;        externip = mynat.my.org:12600   ; Public address of my nat box.
+;        externaddr = 12.34.56.78          ; use this address.
+;        externaddr = 12.34.56.78:9900     ; use this address and port.
+;        externaddr = mynat.my.org:12600   ; Public address of my nat box.
 ;        externtcpport = 9900   ; The externally mapped tcp port, when Asterisk is behind a static NAT or PAT. 
-;                               ; externtcpport will default to the externip or externhost port if either one is set. 
+;                               ; externtcpport will default to the externaddr or externhost port if either one is set. 
 ;        externtlsport = 12600  ; The externally mapped tls port, when Asterisk is behind a static NAT or PAT.
 ;                               ; externtlsport port will default to the RFC designated port of 5061.  
 ;
-;   b. "externhost = hostname[:port]" is similar to "externip" except
+;   b. "externhost = hostname[:port]" is similar to "externaddr" except
 ;      that the hostname is looked up every "externrefresh" seconds
 ;      (default 10s). This can be useful when your NAT device lets you choose
 ;      the port mapping, but the IP address is dynamic.
@@ -672,30 +790,18 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
 ;        externhost=foo.dyndns.net       ; refreshed periodically
 ;        externrefresh=180               ; change the refresh interval
 ;
-;   c. "stunaddr = stun.server[:port]" queries the STUN server specified
-;      as an argument to obtain the external address/port.
-;      Queries are also sent periodically every "externrefresh" seconds
-;      (as a side effect, sending the query also acts as a keepalive for
-;      the state entry on the nat box):
-;
-;        stunaddr = foo.stun.com:3478
-;        externrefresh = 15
-;
 ;   Note that at the moment all these mechanism work only for the SIP socket.
-;   The IP address discovered with externip/externhost/STUN is reused for
+;   The IP address discovered with externaddr/externhost is reused for
 ;   media sessions as well, but the port numbers are not remapped so you
 ;   may still experience problems.
 ;
 ; NOTE 1: in some cases, NAT boxes will use different port numbers in
-; the internal<->external mapping. In these cases, the "externip" and
-; "externhost" might not help you configure addresses properly, and you
-; really need to use STUN.
+; the internal<->external mapping. In these cases, the "externaddr" and
+; "externhost" might not help you configure addresses properly.
 ;
-; NOTE 2: when using "externip" or "externhost", the address part is
-; also used as the external address for media sessions.
-; If you use "stunaddr", STUN queries will be sent to the same server
-; also from media sockets, and this should permit a correct mapping of
-; the port numbers as well.
+; NOTE 2: when using "externaddr" or "externhost", the address part is
+; also used as the external address for media sessions. Thus, the port
+; information in the SDP may be wrong!
 ;
 ; In addition to the above, Asterisk has an additional "nat" parameter to
 ; address NAT-related issues in incoming SIP or media sessions.
@@ -707,14 +813,44 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
 ;
 ;        nat = no                ; Default. Use rport if the remote side says to use it.
 ;        nat = force_rport       ; Force rport to always be on.
-;        nat = yes               ; Force rport to always be on and perform symmetric RTP.
-;        nat = comedia           ; Use rport if the remote side says to use it and perform symmetric RTP.
+;        nat = yes               ; Force rport to always be on and perform comedia RTP handling.
+;        nat = comedia           ; Use rport if the remote side says to use it and perform comedia RTP handling.
+;
+; 'comedia RTP handling' refers to the technique of sending RTP to the port that the
+; the other endpoint's RTP arrived from, and means 'connection-oriented media'. This is
+; only partially related to RFC 4145 which was referred to as COMEDIA while it was in
+; draft form. This method is used to accomodate endpoints that may be located behind
+; NAT devices, and as such the port number they tell Asterisk to send RTP packets to
+; for their media streams is not actual port number that will be used on the nearer
+; side of the NAT.
+;
+; IT IS IMPORTANT TO NOTE that if the nat setting in the general section differs from
+; the nat setting in a peer definition, then the peer username will be discoverable
+; by outside parties as Asterisk will respond to different ports for defined and
+; undefined peers. For this reason it is recommended to ONLY DEFINE NAT SETTINGS IN THE
+; GENERAL SECTION. Specifically, if nat=force_rport in one section and nat=no in the
+; other, then valid users with settings differing from those in the general section will
+; be discoverable.
+;
+; In addition to these settings, Asterisk *always* uses 'symmetric RTP' mode as defined by
+; RFC 4961; Asterisk will always send RTP packets from the same port number it expects
+; to receive them on.
 ;
 ; The IP address used for media (audio, video, and text) in the SDP can also be overridden by using
 ; the media_address configuration option. This is only applicable to the general section and
 ; can not be set per-user or per-peer.
 ;
 ; media_address = 172.16.42.1
+;
+; Through the use of the res_stun_monitor module, Asterisk has the ability to detect when the
+; perceived external network address has changed.  When the stun_monitor is installed and
+; configured, chan_sip will renew all outbound registrations when the monitor detects any sort
+; of network change has occurred. By default this option is enabled, but only takes effect once
+; res_stun_monitor is configured.  If res_stun_monitor is enabled and you wish to not
+; generate all outbound registrations on a network change, use the option below to disable
+; this feature.
+;
+; subscribe_network_change_event = yes ; on by default
 
 ;----------------------------------- MEDIA HANDLING --------------------------------
 ; By default, Asterisk tries to re-invite media streams to an optimal path. If there's
@@ -740,7 +876,7 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
                                 ; purpose of setting up a direct media path. If a reINVITE is
                                 ; needed to switch a media stream to inactive (when placed on
                                 ; hold) or to T.38, it will still be done, regardless of this 
-                                ; setting.
+                                ; setting. Note that direct T.38 is not supported.
 
 ;directmedia=nonat              ; An additional option is to allow media path redirection
                                 ; (reinvite) but only when the peer where the media is being
@@ -759,6 +895,13 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
                                 ; callers INVITE. This will also fail if directmedia is enabled when
                                 ; the device is actually behind NAT.
 
+;directmediadeny=0.0.0.0/0      ; Use directmediapermit and directmediadeny to restrict 
+;directmediapermit=172.16.0.0/16; which peers should be able to pass directmedia to each other
+                                ; (There is no default setting, this is just an example)
+                                ; Use this if some of your phones are on IP addresses that
+                                ; can not reach each other directly. This way you can force 
+                                ; RTP to always flow through asterisk in such cases.
+
 ;ignoresdpversion=yes           ; By default, Asterisk will honor the session version
                                 ; number in SDP packets and will only modify the SDP
                                 ; session if the version number changes. This option will
@@ -773,13 +916,14 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
                                 ; also contains the Asterisk version.
 ;sdpowner=root                  ; Allows you to change the username field in the SDP owner string, (o=)
                                 ; This field MUST NOT contain spaces
-
-;constantssrc=yes               ; Don't change the RTP SSRC when our media stream changes
+;encryption=no                  ; Whether to offer SRTP encrypted media (and only SRTP encrypted media)
+                                ; on outgoing calls to a peer. Calls will fail with HANGUPCAUSE=58 if
+                                ; the peer does not support SRTP. Defaults to no.
+;encryption_taglen=80           ; Set the auth tag length offered in the INVITE either 32/80 default 80
 
 ;----------------------------------------- REALTIME SUPPORT ------------------------
 ; For additional information on ARA, the Asterisk Realtime Architecture,
-; please read realtime.txt and extconfig.txt in the /doc directory of the
-; source code.
+; please read https://wiki.asterisk.org/wiki/display/AST/Realtime+Database+Configuration
 ;
 ;rtcachefriends=yes             ; Cache realtime friends by adding them to the internal list
                                 ; just like friends added from the config file only on a
@@ -854,6 +998,12 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
                                 ; destinations which do not have a prior
                                 ; account relationship with your server.
 
+;------------------------------ Advice of Charge CONFIGURATION --------------------------
+; snom_aoc_enabled = yes;     ; This options turns on and off support for sending AOC-D and
+                              ; AOC-E to snom endpoints.  This option can be used both in the
+                              ; peer and global scope.  The default for this option is off.
+
+
 ;------------------------------ JITTER BUFFER CONFIGURATION --------------------------
 ; jbenable = yes              ; Enables the use of a jitterbuffer on the receiving side of a
                               ; SIP channel. Defaults to "no". An enabled jitterbuffer will
@@ -877,7 +1027,24 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
                               ; (with size always equals to jbmaxsize) and "adaptive" (with
                               ; variable size, actually the new jb of IAX2). Defaults to fixed.
 
+; jbtargetextra = 40          ; This option only affects the jb when 'jbimpl = adaptive' is set.
+                              ; The option represents the number of milliseconds by which the new jitter buffer
+                              ; will pad its size. the default is 40, so without modification, the new
+                              ; jitter buffer will set its size to the jitter value plus 40 milliseconds.
+                              ; increasing this value may help if your network normally has low jitter,
+                              ; but occasionally has spikes.
+
 ; jblog = no                  ; Enables jitterbuffer frame logging. Defaults to "no".
+
+;----------------------------- SIP_CAUSE reporting ---------------------------------
+; storesipcause = no          ; This option causes chan_sip to set the
+                             ; HASH(SIP_CAUSE,<channel name>) channel variable
+                             ; to the value of the last sip response.
+                             ; WARNING: enabling this option carries a
+                             ; significant performance burden. It should only
+                             ; be used in low call volume situations. This
+                              ; option defaults to "no".
+
 ;-----------------------------------------------------------------------------------
 
 [authentication]
@@ -909,6 +1076,10 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
 ;   Asterisk only matches on IP/port, not on names. This is mostly used for SIP
 ;   trunks.
 ;
+; Use remotesecret for outbound authentication, and secret for authenticating
+; inbound requests. For historical reasons, if no remotesecret is supplied for an
+; outbound registration or call, the secret will be used. 
+;
 ; For device names, we recommend using only a-z, numerics (0-9) and underscore
 ;
 ; For local phones, type=friend works most of the time
@@ -981,13 +1152,17 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
 ; timerb
 ; qualifyfreq
 ; t38pt_usertpsource
-; constantssrc
 ; contactpermit         ; Limit what a host may register as (a neat trick
 ; contactdeny           ; is to register at the same IP as a SIP provider,
 ;                       ; then call oneself, and get redirected to that
 ;                       ; same location).
+; directmediapermit
+; directmediadeny
 ; unsolicited_mailbox
 ; use_q850_reason
+; maxforwards
+; encryption
+; description          ; Used to provide a description of the peer in console output
 
 ;[sip_proxy]
 ; For incoming calls only. Example: FWD (Free World Dialup)
@@ -1045,12 +1220,10 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
         type=friend
 
 [natted-phone](!,basic-options)   ; another template inheriting basic-options
-        nat=yes
         directmedia=no
         host=dynamic
 
 [public-phone](!,basic-options)   ; another template inheriting basic-options
-        nat=no
         directmedia=yes
 
 [my-codecs](!)                    ; a template for my preferred codecs
@@ -1060,10 +1233,14 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
         allow=gsm
         allow=g723
         allow=ulaw
+        ; Or, more simply:
+        ;allow=!all,ilbc,g729,gsm,g723,ulaw
 
 [ulaw-phone](!)                   ; and another one for ulaw-only
         disallow=all
         allow=ulaw
+        ; Again, more simply:
+        ;allow=!all,ulaw
 
 ; and finally instantiate a few phones
 ;
@@ -1083,9 +1260,9 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
 ;context=from-sip                ; Where to start in the dialplan when this phone calls
 ;callerid=John Doe <1234>        ; Full caller ID, to override the phones config
                                  ; on incoming calls to Asterisk
+;description=Courtesy Phone      ; Description of the peer. Shown when doing 'sip show peers'.
 ;host=192.168.0.23               ; we have a static but private IP address
                                  ; No registration allowed
-;nat=no                          ; there is not NAT between phone and Asterisk
 ;directmedia=yes                 ; allow RTP voice traffic to bypass Asterisk
 ;dtmfmode=info                   ; either RFC2833 or INFO for the BudgeTone
 ;call-limit=1                    ; permit only 1 outgoing call and 1 incoming call at a time
@@ -1115,7 +1292,6 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
 ;regexten=1234                   ; When they register, create extension 1234
 ;callerid="Jane Smith" <5678>
 ;host=dynamic                    ; This device needs to register
-;nat=yes                         ; X-Lite is behind a NAT router
 ;directmedia=no                  ; Typically set to NO if behind NAT
 ;disallow=all
 ;allow=gsm                       ; GSM consumes far less bandwidth than ulaw
@@ -1180,14 +1356,15 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
 ;defaultip=192.168.0.60          ; IP address to use if peer has not registered
 ;deny=0.0.0.0/0.0.0.0            ; ACL: Control access to this account based on IP address
 ;permit=192.168.0.60/255.255.255.0
+;permit=192.168.0.60/24          ; we can also use CIDR notation for subnet masks
+;permit=2001:db8::/32            ; IPv6 ACLs can be specified if desired. IPv6 ACLs
+                                 ; apply only to IPv6 addresses, and IPv4 ACLs apply
+                                 ; only to IPv4 addresses.
 
 ;[cisco1]
 ;type=friend
 ;secret=blah
 ;qualify=200                     ; Qualify peer is no more than 200ms away
-;nat=yes                         ; This phone may be natted
-                                 ; Send SIP and RTP to the IP address that packet is
-                                 ; received from instead of trusting SIP headers
 ;host=dynamic                    ; This device registers with us
 ;directmedia=no                  ; Asterisk by default tries to redirect the
                                  ; RTP media stream (audio) to go directly from