0cf162a2257fc434231d23306b1ea6a3aacddd02
[asterisk/asterisk.git] / res / res_pjsip.c
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 2013, Digium, Inc.
5  *
6  * Mark Michelson <mmichelson@digium.com>
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 #include "asterisk.h"
20
21 #include <pjsip.h>
22 /* Needed for SUBSCRIBE, NOTIFY, and PUBLISH method definitions */
23 #include <pjsip_simple.h>
24 #include <pjlib.h>
25
26 #include "asterisk/res_pjsip.h"
27 #include "res_pjsip/include/res_pjsip_private.h"
28 #include "asterisk/linkedlists.h"
29 #include "asterisk/logger.h"
30 #include "asterisk/lock.h"
31 #include "asterisk/utils.h"
32 #include "asterisk/astobj2.h"
33 #include "asterisk/module.h"
34 #include "asterisk/threadpool.h"
35 #include "asterisk/taskprocessor.h"
36 #include "asterisk/uuid.h"
37 #include "asterisk/sorcery.h"
38
39 /*** MODULEINFO
40         <depend>pjproject</depend>
41         <depend>res_sorcery_config</depend>
42         <support_level>core</support_level>
43  ***/
44
45 /*** DOCUMENTATION
46         <configInfo name="res_pjsip" language="en_US">
47                 <synopsis>SIP Resource using PJProject</synopsis>
48                 <configFile name="pjsip.conf">
49                         <configObject name="endpoint">
50                                 <synopsis>Endpoint</synopsis>
51                                 <description><para>
52                                         The <emphasis>Endpoint</emphasis> is the primary configuration object.
53                                         It contains the core SIP related options only, endpoints are <emphasis>NOT</emphasis>
54                                         dialable entries of their own. Communication with another SIP device is
55                                         accomplished via Addresses of Record (AoRs) which have one or more
56                                         contacts assicated with them. Endpoints <emphasis>NOT</emphasis> configured to
57                                         use a <literal>transport</literal> will default to first transport found
58                                         in <filename>pjsip.conf</filename> that matches its type.
59                                         </para>
60                                         <para>Example: An Endpoint has been configured with no transport.
61                                         When it comes time to call an AoR, PJSIP will find the
62                                         first transport that matches the type. A SIP URI of <literal>sip:5000@[11::33]</literal>
63                                         will use the first IPv6 transport and try to send the request.
64                                         </para>
65                                         <para>If the anonymous endpoint identifier is in use an endpoint with the name
66                                         "anonymous@domain" will be searched for as a last resort. If this is not found
67                                         it will fall back to searching for "anonymous". If neither endpoints are found
68                                         the anonymous endpoint identifier will not return an endpoint and anonymous
69                                         calling will not be possible.
70                                         </para>
71                                 </description>
72                                 <configOption name="100rel" default="yes">
73                                         <synopsis>Allow support for RFC3262 provisional ACK tags</synopsis>
74                                         <description>
75                                                 <enumlist>
76                                                         <enum name="no" />
77                                                         <enum name="required" />
78                                                         <enum name="yes" />
79                                                 </enumlist>
80                                         </description>
81                                 </configOption>
82                                 <configOption name="aggregate_mwi" default="yes">
83                                         <synopsis></synopsis>
84                                         <description><para>When enabled, <replaceable>aggregate_mwi</replaceable> condenses message
85                                         waiting notifications from multiple mailboxes into a single NOTIFY. If it is disabled,
86                                         individual NOTIFYs are sent for each mailbox.</para></description>
87                                 </configOption>
88                                 <configOption name="allow">
89                                         <synopsis>Media Codec(s) to allow</synopsis>
90                                 </configOption>
91                                 <configOption name="aors">
92                                         <synopsis>AoR(s) to be used with the endpoint</synopsis>
93                                         <description><para>
94                                                 List of comma separated AoRs that the endpoint should be associated with.
95                                         </para></description>
96                                 </configOption>
97                                 <configOption name="auth">
98                                         <synopsis>Authentication Object(s) associated with the endpoint</synopsis>
99                                         <description><para>
100                                                 This is a comma-delimited list of <replaceable>auth</replaceable> sections defined
101                                                 in <filename>pjsip.conf</filename> to be used to verify inbound connection attempts.
102                                                 </para><para>
103                                                 Endpoints without an <literal>authentication</literal> object
104                                                 configured will allow connections without vertification.
105                                         </para></description>
106                                 </configOption>
107                                 <configOption name="callerid">
108                                         <synopsis>CallerID information for the endpoint</synopsis>
109                                         <description><para>
110                                                 Must be in the format <literal>Name &lt;Number&gt;</literal>,
111                                                 or only <literal>&lt;Number&gt;</literal>.
112                                         </para></description>
113                                 </configOption>
114                                 <configOption name="callerid_privacy">
115                                         <synopsis>Default privacy level</synopsis>
116                                         <description>
117                                                 <enumlist>
118                                                         <enum name="allowed_not_screened" />
119                                                         <enum name="allowed_passed_screened" />
120                                                         <enum name="allowed_failed_screened" />
121                                                         <enum name="allowed" />
122                                                         <enum name="prohib_not_screened" />
123                                                         <enum name="prohib_passed_screened" />
124                                                         <enum name="prohib_failed_screened" />
125                                                         <enum name="prohib" />
126                                                         <enum name="unavailable" />
127                                                 </enumlist>
128                                         </description>
129                                 </configOption>
130                                 <configOption name="callerid_tag">
131                                         <synopsis>Internal id_tag for the endpoint</synopsis>
132                                 </configOption>
133                                 <configOption name="context">
134                                         <synopsis>Dialplan context for inbound sessions</synopsis>
135                                 </configOption>
136                                 <configOption name="direct_media_glare_mitigation" default="none">
137                                         <synopsis>Mitigation of direct media (re)INVITE glare</synopsis>
138                                         <description>
139                                                 <para>
140                                                 This setting attempts to avoid creating INVITE glare scenarios
141                                                 by disabling direct media reINVITEs in one direction thereby allowing
142                                                 designated servers (according to this option) to initiate direct
143                                                 media reINVITEs without contention and significantly reducing call
144                                                 setup time.
145                                                 </para>
146                                                 <para>
147                                                 A more detailed description of how this option functions can be found on
148                                                 the Asterisk wiki https://wiki.asterisk.org/wiki/display/AST/SIP+Direct+Media+Reinvite+Glare+Avoidance
149                                                 </para>
150                                                 <enumlist>
151                                                         <enum name="none" />
152                                                         <enum name="outgoing" />
153                                                         <enum name="incoming" />
154                                                 </enumlist>
155                                         </description>
156                                 </configOption>
157                                 <configOption name="direct_media_method" default="invite">
158                                         <synopsis>Direct Media method type</synopsis>
159                                         <description>
160                                                 <para>Method for setting up Direct Media between endpoints.</para>
161                                                 <enumlist>
162                                                         <enum name="invite" />
163                                                         <enum name="reinvite">
164                                                                 <para>Alias for the <literal>invite</literal> value.</para>
165                                                         </enum>
166                                                         <enum name="update" />
167                                                 </enumlist>
168                                         </description>
169                                 </configOption>
170                                 <configOption name="connected_line_method" default="invite">
171                                         <synopsis>Connected line method type</synopsis>
172                                         <description>
173                                                 <para>Method used when updating connected line information.</para>
174                                                 <enumlist>
175                                                         <enum name="invite" />
176                                                         <enum name="reinvite">
177                                                                 <para>Alias for the <literal>invite</literal> value.</para>
178                                                         </enum>
179                                                         <enum name="update" />
180                                                 </enumlist>
181                                         </description>
182                                 </configOption>
183                                 <configOption name="direct_media" default="yes">
184                                         <synopsis>Determines whether media may flow directly between endpoints.</synopsis>
185                                 </configOption>
186                                 <configOption name="disable_direct_media_on_nat" default="no">
187                                         <synopsis>Disable direct media session refreshes when NAT obstructs the media session</synopsis>
188                                 </configOption>
189                                 <configOption name="disallow">
190                                         <synopsis>Media Codec(s) to disallow</synopsis>
191                                 </configOption>
192                                 <configOption name="dtmf_mode" default="rfc4733">
193                                         <synopsis>DTMF mode</synopsis>
194                                         <description>
195                                                 <para>This setting allows to choose the DTMF mode for endpoint communication.</para>
196                                                 <enumlist>
197                                                         <enum name="rfc4733">
198                                                                 <para>DTMF is sent out of band of the main audio stream.This
199                                                                 supercedes the older <emphasis>RFC-2833</emphasis> used within
200                                                                 the older <literal>chan_sip</literal>.</para>
201                                                         </enum>
202                                                         <enum name="inband">
203                                                                 <para>DTMF is sent as part of audio stream.</para>
204                                                         </enum>
205                                                         <enum name="info">
206                                                                 <para>DTMF is sent as SIP INFO packets.</para>
207                                                         </enum>
208                                                 </enumlist>
209                                         </description>
210                                 </configOption>
211                                 <configOption name="media_address">
212                                         <synopsis>IP address used in SDP for media handling</synopsis>
213                                         <description><para>
214                                                 At the time of SDP creation, the IP address defined here will be used as
215                                                 the media address for individual streams in the SDP.
216                                         </para>
217                                         <note><para>
218                                                 Be aware that the <literal>external_media_address</literal> option, set in Transport
219                                                 configuration, can also affect the final media address used in the SDP.
220                                         </para></note>
221                                         </description>
222                                 </configOption>
223                                 <configOption name="force_rport" default="yes">
224                                         <synopsis>Force use of return port</synopsis>
225                                 </configOption>
226                                 <configOption name="ice_support" default="no">
227                                         <synopsis>Enable the ICE mechanism to help traverse NAT</synopsis>
228                                 </configOption>
229                                 <configOption name="identify_by" default="username,location">
230                                         <synopsis>Way(s) for Endpoint to be identified</synopsis>
231                                         <description><para>
232                                                 An endpoint can be identified in multiple ways. Currently, the only supported
233                                                 option is <literal>username</literal>, which matches the endpoint based on the
234                                                 username in the From header.
235                                                 </para>
236                                                 <note><para>Endpoints can also be identified by IP address; however, that method
237                                                 of identification is not handled by this configuration option. See the documentation
238                                                 for the <literal>identify</literal> configuration section for more details on that
239                                                 method of endpoint identification. If this option is set to <literal>username</literal>
240                                                 and an <literal>identify</literal> configuration section exists for the endpoint, then
241                                                 the endpoint can be identified in multiple ways.</para></note>
242                                                 <enumlist>
243                                                         <enum name="username" />
244                                                 </enumlist>
245                                         </description>
246                                 </configOption>
247                                 <configOption name="redirect_method">
248                                         <synopsis>How redirects received from an endpoint are handled</synopsis>
249                                         <description><para>
250                                                 When a redirect is received from an endpoint there are multiple ways it can be handled.
251                                                 If this option is set to <literal>user</literal> the user portion of the redirect target
252                                                 is treated as an extension within the dialplan and dialed using a Local channel. If this option
253                                                 is set to <literal>uri_core</literal> the target URI is returned to the dialing application
254                                                 which dials it using the PJSIP channel driver and endpoint originally used. If this option is
255                                                 set to <literal>uri_pjsip</literal> the redirect occurs within chan_pjsip itself and is not exposed
256                                                 to the core at all. The <literal>uri_pjsip</literal> option has the benefit of being more efficient
257                                                 and also supporting multiple potential redirect targets. The con is that since redirection occurs
258                                                 within chan_pjsip redirecting information is not forwarded and redirection can not be
259                                                 prevented.
260                                                 </para>
261                                                 <enumlist>
262                                                         <enum name="user" />
263                                                         <enum name="uri_core" />
264                                                         <enum name="uri_pjsip" />
265                                                 </enumlist>
266                                         </description>
267                                 </configOption>
268                                 <configOption name="mailboxes">
269                                         <synopsis>NOTIFY the endpoint when state changes for any of the specified mailboxes</synopsis>
270                                         <description><para>
271                                                 Asterisk will send unsolicited MWI NOTIFY messages to the endpoint when state
272                                                 changes happen for any of the specified mailboxes. More than one mailbox can be
273                                                 specified with a comma-delimited string. app_voicemail mailboxes must be specified
274                                                 as mailbox@context; for example: mailboxes=6001@default. For mailboxes provided by
275                                                 external sources, such as through the res_external_mwi module, you must specify
276                                                 strings supported by the external system.
277                                         </para><para>
278                                                 For endpoints that SUBSCRIBE for MWI, use the <literal>mailboxes</literal> option in your AOR
279                                                 configuration.
280                                         </para></description>
281                                 </configOption>
282                                 <configOption name="moh_suggest" default="default">
283                                         <synopsis>Default Music On Hold class</synopsis>
284                                 </configOption>
285                                 <configOption name="outbound_auth">
286                                         <synopsis>Authentication object used for outbound requests</synopsis>
287                                 </configOption>
288                                 <configOption name="outbound_proxy">
289                                         <synopsis>Proxy through which to send requests, a full SIP URI must be provided</synopsis>
290                                 </configOption>
291                                 <configOption name="rewrite_contact">
292                                         <synopsis>Allow Contact header to be rewritten with the source IP address-port</synopsis>
293                                         <description><para>
294                                                 On inbound SIP messages from this endpoint, the Contact header will be changed to have the
295                                                 source IP address and port. This option does not affect outbound messages send to this
296                                                 endpoint.
297                                         </para></description>
298                                 </configOption>
299                                 <configOption name="rtp_ipv6" default="no">
300                                         <synopsis>Allow use of IPv6 for RTP traffic</synopsis>
301                                 </configOption>
302                                 <configOption name="rtp_symmetric" default="no">
303                                         <synopsis>Enforce that RTP must be symmetric</synopsis>
304                                 </configOption>
305                                 <configOption name="send_diversion" default="yes">
306                                         <synopsis>Send the Diversion header, conveying the diversion
307                                         information to the called user agent</synopsis>
308                                 </configOption>
309                                 <configOption name="send_pai" default="no">
310                                         <synopsis>Send the P-Asserted-Identity header</synopsis>
311                                 </configOption>
312                                 <configOption name="send_rpid" default="no">
313                                         <synopsis>Send the Remote-Party-ID header</synopsis>
314                                 </configOption>
315                                 <configOption name="timers_min_se" default="90">
316                                         <synopsis>Minimum session timers expiration period</synopsis>
317                                         <description><para>
318                                                 Minimium session timer expiration period. Time in seconds.
319                                         </para></description>
320                                 </configOption>
321                                 <configOption name="timers" default="yes">
322                                         <synopsis>Session timers for SIP packets</synopsis>
323                                         <description>
324                                                 <enumlist>
325                                                         <enum name="forced" />
326                                                         <enum name="no" />
327                                                         <enum name="required" />
328                                                         <enum name="yes" />
329                                                 </enumlist>
330                                         </description>
331                                 </configOption>
332                                 <configOption name="timers_sess_expires" default="1800">
333                                         <synopsis>Maximum session timer expiration period</synopsis>
334                                         <description><para>
335                                                 Maximium session timer expiration period. Time in seconds.
336                                         </para></description>
337                                 </configOption>
338                                 <configOption name="transport">
339                                         <synopsis>Desired transport configuration</synopsis>
340                                         <description><para>
341                                                 This will set the desired transport configuration to send SIP data through.
342                                                 </para>
343                                                 <warning><para>Not specifying a transport will <emphasis>DEFAULT</emphasis>
344                                                 to the first configured transport in <filename>pjsip.conf</filename> which is
345                                                 valid for the URI we are trying to contact.
346                                                 </para></warning>
347                                                 <warning><para>Transport configuration is not affected by reloads. In order to
348                                                 change transports, a full Asterisk restart is required</para></warning>
349                                         </description>
350                                 </configOption>
351                                 <configOption name="trust_id_inbound" default="no">
352                                         <synopsis>Accept identification information received from this endpoint</synopsis>
353                                         <description><para>This option determines whether Asterisk will accept
354                                         identification from the endpoint from headers such as P-Asserted-Identity
355                                         or Remote-Party-ID header. This option applies both to calls originating from the
356                                         endpoint and calls originating from Asterisk. If <literal>no</literal>, the
357                                         configured Caller-ID from pjsip.conf will always be used as the identity for
358                                         the endpoint.</para></description>
359                                 </configOption>
360                                 <configOption name="trust_id_outbound" default="no">
361                                         <synopsis>Send private identification details to the endpoint.</synopsis>
362                                         <description><para>This option determines whether res_pjsip will send private
363                                         identification information to the endpoint. If <literal>no</literal>,
364                                         private Caller-ID information will not be forwarded to the endpoint.
365                                         "Private" in this case refers to any method of restricting identification.
366                                         Example: setting <replaceable>callerid_privacy</replaceable> to any
367                                         <literal>prohib</literal> variation.
368                                         Example: If <replaceable>trust_id_inbound</replaceable> is set to
369                                         <literal>yes</literal>, the presence of a <literal>Privacy: id</literal>
370                                         header in a SIP request or response would indicate the identification
371                                         provided in the request is private.</para></description>
372                                 </configOption>
373                                 <configOption name="type">
374                                         <synopsis>Must be of type 'endpoint'.</synopsis>
375                                 </configOption>
376                                 <configOption name="use_ptime" default="no">
377                                         <synopsis>Use Endpoint's requested packetisation interval</synopsis>
378                                 </configOption>
379                                 <configOption name="use_avpf" default="no">
380                                         <synopsis>Determines whether res_pjsip will use and enforce usage of AVPF for this
381                                         endpoint.</synopsis>
382                                         <description><para>
383                                                 If set to <literal>yes</literal>, res_pjsip will use the AVPF or SAVPF RTP
384                                                 profile for all media offers on outbound calls and media updates and will
385                                                 decline media offers not using the AVPF or SAVPF profile.
386                                         </para><para>
387                                                 If set to <literal>no</literal>, res_pjsip will use the AVP or SAVP RTP
388                                                 profile for all media offers on outbound calls and media updates, but will
389                                                 accept either the AVP/AVPF or SAVP/SAVPF RTP profile for all inbound
390                                                 media offers.
391                                         </para></description>
392                                 </configOption>
393                                 <configOption name="media_encryption" default="no">
394                                         <synopsis>Determines whether res_pjsip will use and enforce usage of media encryption
395                                         for this endpoint.</synopsis>
396                                         <description>
397                                                 <enumlist>
398                                                         <enum name="no"><para>
399                                                                 res_pjsip will offer no encryption and allow no encryption to be setup.
400                                                         </para></enum>
401                                                         <enum name="sdes"><para>
402                                                                 res_pjsip will offer standard SRTP setup via in-SDP keys. Encrypted SIP
403                                                                 transport should be used in conjunction with this option to prevent
404                                                                 exposure of media encryption keys.
405                                                         </para></enum>
406                                                         <enum name="dtls"><para>
407                                                                 res_pjsip will offer DTLS-SRTP setup.
408                                                         </para></enum>
409                                                 </enumlist>
410                                         </description>
411                                 </configOption>
412                                 <configOption name="inband_progress" default="no">
413                                         <synopsis>Determines whether chan_pjsip will indicate ringing using inband
414                                             progress.</synopsis>
415                                         <description><para>
416                                                 If set to <literal>yes</literal>, chan_pjsip will send a 183 Session Progress
417                                                 when told to indicate ringing and will immediately start sending ringing
418                                                 as audio.
419                                         </para><para>
420                                                 If set to <literal>no</literal>, chan_pjsip will send a 180 Ringing when told
421                                                 to indicate ringing and will NOT send it as audio.
422                                         </para></description>
423                                 </configOption>
424                                 <configOption name="call_group">
425                                         <synopsis>The numeric pickup groups for a channel.</synopsis>
426                                         <description><para>
427                                                 Can be set to a comma separated list of numbers or ranges between the values
428                                                 of 0-63 (maximum of 64 groups).
429                                         </para></description>
430                                 </configOption>
431                                 <configOption name="pickup_group">
432                                         <synopsis>The numeric pickup groups that a channel can pickup.</synopsis>
433                                         <description><para>
434                                                 Can be set to a comma separated list of numbers or ranges between the values
435                                                 of 0-63 (maximum of 64 groups).
436                                         </para></description>
437                                 </configOption>
438                                 <configOption name="named_call_group">
439                                         <synopsis>The named pickup groups for a channel.</synopsis>
440                                         <description><para>
441                                                 Can be set to a comma separated list of case sensitive strings limited by
442                                                 supported line length.
443                                         </para></description>
444                                 </configOption>
445                                 <configOption name="named_pickup_group">
446                                         <synopsis>The named pickup groups that a channel can pickup.</synopsis>
447                                         <description><para>
448                                                 Can be set to a comma separated list of case sensitive strings limited by
449                                                 supported line length.
450                                         </para></description>
451                                 </configOption>
452                                 <configOption name="device_state_busy_at" default="0">
453                                         <synopsis>The number of in-use channels which will cause busy to be returned as device state</synopsis>
454                                         <description><para>
455                                                 When the number of in-use channels for the endpoint matches the devicestate_busy_at setting the
456                                                 PJSIP channel driver will return busy as the device state instead of in use.
457                                         </para></description>
458                                 </configOption>
459                                 <configOption name="t38_udptl" default="no">
460                                         <synopsis>Whether T.38 UDPTL support is enabled or not</synopsis>
461                                         <description><para>
462                                                 If set to yes T.38 UDPTL support will be enabled, and T.38 negotiation requests will be accepted
463                                                 and relayed.
464                                         </para></description>
465                                 </configOption>
466                                 <configOption name="t38_udptl_ec" default="none">
467                                         <synopsis>T.38 UDPTL error correction method</synopsis>
468                                         <description>
469                                                 <enumlist>
470                                                         <enum name="none"><para>
471                                                                 No error correction should be used.
472                                                         </para></enum>
473                                                         <enum name="fec"><para>
474                                                                 Forward error correction should be used.
475                                                         </para></enum>
476                                                         <enum name="redundancy"><para>
477                                                                 Redundacy error correction should be used.
478                                                         </para></enum>
479                                                 </enumlist>
480                                         </description>
481                                 </configOption>
482                                 <configOption name="t38_udptl_maxdatagram" default="0">
483                                         <synopsis>T.38 UDPTL maximum datagram size</synopsis>
484                                         <description><para>
485                                                 This option can be set to override the maximum datagram of a remote endpoint for broken
486                                                 endpoints.
487                                         </para></description>
488                                 </configOption>
489                                 <configOption name="fax_detect" default="no">
490                                         <synopsis>Whether CNG tone detection is enabled</synopsis>
491                                         <description><para>
492                                                 This option can be set to send the session to the fax extension when a CNG tone is
493                                                 detected.
494                                         </para></description>
495                                 </configOption>
496                                 <configOption name="t38_udptl_nat" default="no">
497                                         <synopsis>Whether NAT support is enabled on UDPTL sessions</synopsis>
498                                         <description><para>
499                                                 When enabled the UDPTL stack will send UDPTL packets to the source address of
500                                                 received packets.
501                                         </para></description>
502                                 </configOption>
503                                 <configOption name="t38_udptl_ipv6" default="no">
504                                         <synopsis>Whether IPv6 is used for UDPTL Sessions</synopsis>
505                                         <description><para>
506                                                 When enabled the UDPTL stack will use IPv6.
507                                         </para></description>
508                                 </configOption>
509                                 <configOption name="tone_zone">
510                                         <synopsis>Set which country's indications to use for channels created for this endpoint.</synopsis>
511                                 </configOption>
512                                 <configOption name="language">
513                                         <synopsis>Set the default language to use for channels created for this endpoint.</synopsis>
514                                 </configOption>
515                                 <configOption name="one_touch_recording" default="no">
516                                         <synopsis>Determines whether one-touch recording is allowed for this endpoint.</synopsis>
517                                         <see-also>
518                                                 <ref type="configOption">record_on_feature</ref>
519                                                 <ref type="configOption">record_off_feature</ref>
520                                         </see-also>
521                                 </configOption>
522                                 <configOption name="record_on_feature" default="automixmon">
523                                         <synopsis>The feature to enact when one-touch recording is turned on.</synopsis>
524                                         <description>
525                                                 <para>When an INFO request for one-touch recording arrives with a Record header set to "on", this
526                                                 feature will be enabled for the channel. The feature designated here can be any built-in
527                                                 or dynamic feature defined in features.conf.</para>
528                                                 <note><para>This setting has no effect if the endpoint's one_touch_recording option is disabled</para></note>
529                                         </description>
530                                         <see-also>
531                                                 <ref type="configOption">one_touch_recording</ref>
532                                                 <ref type="configOption">record_off_feature</ref>
533                                         </see-also>
534                                 </configOption>
535                                 <configOption name="record_off_feature" default="automixmon">
536                                         <synopsis>The feature to enact when one-touch recording is turned off.</synopsis>
537                                         <description>
538                                                 <para>When an INFO request for one-touch recording arrives with a Record header set to "off", this
539                                                 feature will be enabled for the channel. The feature designated here can be any built-in
540                                                 or dynamic feature defined in features.conf.</para>
541                                                 <note><para>This setting has no effect if the endpoint's one_touch_recording option is disabled</para></note>
542                                         </description>
543                                         <see-also>
544                                                 <ref type="configOption">one_touch_recording</ref>
545                                                 <ref type="configOption">record_on_feature</ref>
546                                         </see-also>
547                                 </configOption>
548                                 <configOption name="rtp_engine" default="asterisk">
549                                         <synopsis>Name of the RTP engine to use for channels created for this endpoint</synopsis>
550                                 </configOption>
551                                 <configOption name="allow_transfer" default="yes">
552                                         <synopsis>Determines whether SIP REFER transfers are allowed for this endpoint</synopsis>
553                                 </configOption>
554                                 <configOption name="sdp_owner" default="-">
555                                         <synopsis>String placed as the username portion of an SDP origin (o=) line.</synopsis>
556                                 </configOption>
557                                 <configOption name="sdp_session" default="Asterisk">
558                                         <synopsis>String used for the SDP session (s=) line.</synopsis>
559                                 </configOption>
560                                 <configOption name="tos_audio">
561                                         <synopsis>DSCP TOS bits for audio streams</synopsis>
562                                         <description><para>
563                                                 See https://wiki.asterisk.org/wiki/display/AST/IP+Quality+of+Service for more information about QoS settings
564                                         </para></description>
565                                 </configOption>
566                                 <configOption name="tos_video">
567                                         <synopsis>DSCP TOS bits for video streams</synopsis>
568                                         <description><para>
569                                                 See https://wiki.asterisk.org/wiki/display/AST/IP+Quality+of+Service for more information about QoS settings
570                                         </para></description>
571                                 </configOption>
572                                 <configOption name="cos_audio">
573                                         <synopsis>Priority for audio streams</synopsis>
574                                         <description><para>
575                                                 See https://wiki.asterisk.org/wiki/display/AST/IP+Quality+of+Service for more information about QoS settings
576                                         </para></description>
577                                 </configOption>
578                                 <configOption name="cos_video">
579                                         <synopsis>Priority for video streams</synopsis>
580                                         <description><para>
581                                                 See https://wiki.asterisk.org/wiki/display/AST/IP+Quality+of+Service for more information about QoS settings
582                                         </para></description>
583                                 </configOption>
584                                 <configOption name="allow_subscribe" default="yes">
585                                         <synopsis>Determines if endpoint is allowed to initiate subscriptions with Asterisk.</synopsis>
586                                 </configOption>
587                                 <configOption name="sub_min_expiry" default="60">
588                                         <synopsis>The minimum allowed expiry time for subscriptions initiated by the endpoint.</synopsis>
589                                 </configOption>
590                                 <configOption name="from_user">
591                                         <synopsis>Username to use in From header for requests to this endpoint.</synopsis>
592                                 </configOption>
593                                 <configOption name="mwi_from_user">
594                                         <synopsis>Username to use in From header for unsolicited MWI NOTIFYs to this endpoint.</synopsis>
595                                 </configOption>
596                                 <configOption name="from_domain">
597                                         <synopsis>Domain to user in From header for requests to this endpoint.</synopsis>
598                                 </configOption>
599                                 <configOption name="dtls_verify">
600                                         <synopsis>Verify that the provided peer certificate is valid</synopsis>
601                                         <description><para>
602                                                 This option only applies if <replaceable>media_encryption</replaceable> is
603                                                 set to <literal>dtls</literal>.
604                                         </para></description>
605                                 </configOption>
606                                 <configOption name="dtls_rekey">
607                                         <synopsis>Interval at which to renegotiate the TLS session and rekey the SRTP session</synopsis>
608                                         <description><para>
609                                                 This option only applies if <replaceable>media_encryption</replaceable> is
610                                                 set to <literal>dtls</literal>.
611                                         </para><para>
612                                                 If this is not set or the value provided is 0 rekeying will be disabled.
613                                         </para></description>
614                                 </configOption>
615                                 <configOption name="dtls_cert_file">
616                                         <synopsis>Path to certificate file to present to peer</synopsis>
617                                         <description><para>
618                                                 This option only applies if <replaceable>media_encryption</replaceable> is
619                                                 set to <literal>dtls</literal>.
620                                         </para></description>
621                                 </configOption>
622                                 <configOption name="dtls_private_key">
623                                         <synopsis>Path to private key for certificate file</synopsis>
624                                         <description><para>
625                                                 This option only applies if <replaceable>media_encryption</replaceable> is
626                                                 set to <literal>dtls</literal>.
627                                         </para></description>
628                                 </configOption>
629                                 <configOption name="dtls_cipher">
630                                         <synopsis>Cipher to use for DTLS negotiation</synopsis>
631                                         <description><para>
632                                                 This option only applies if <replaceable>media_encryption</replaceable> is
633                                                 set to <literal>dtls</literal>.
634                                         </para><para>
635                                                 Many options for acceptable ciphers. See link for more:
636                                                 http://www.openssl.org/docs/apps/ciphers.html#CIPHER_STRINGS
637                                         </para></description>
638                                 </configOption>
639                                 <configOption name="dtls_ca_file">
640                                         <synopsis>Path to certificate authority certificate</synopsis>
641                                         <description><para>
642                                                 This option only applies if <replaceable>media_encryption</replaceable> is
643                                                 set to <literal>dtls</literal>.
644                                         </para></description>
645                                 </configOption>
646                                 <configOption name="dtls_ca_path">
647                                         <synopsis>Path to a directory containing certificate authority certificates</synopsis>
648                                         <description><para>
649                                                 This option only applies if <replaceable>media_encryption</replaceable> is
650                                                 set to <literal>dtls</literal>.
651                                         </para></description>
652                                 </configOption>
653                                 <configOption name="dtls_setup">
654                                         <synopsis>Whether we are willing to accept connections, connect to the other party, or both.</synopsis>
655                                         <description>
656                                                 <para>
657                                                         This option only applies if <replaceable>media_encryption</replaceable> is
658                                                         set to <literal>dtls</literal>.
659                                                 </para>
660                                                 <enumlist>
661                                                         <enum name="active"><para>
662                                                                 res_pjsip will make a connection to the peer.
663                                                         </para></enum>
664                                                         <enum name="passive"><para>
665                                                                 res_pjsip will accept connections from the peer.
666                                                         </para></enum>
667                                                         <enum name="actpass"><para>
668                                                                 res_pjsip will offer and accept connections from the peer.
669                                                         </para></enum>
670                                                 </enumlist>
671                                         </description>
672                                 </configOption>
673                                 <configOption name="srtp_tag_32">
674                                         <synopsis>Determines whether 32 byte tags should be used instead of 80 byte tags.</synopsis>
675                                         <description><para>
676                                                 This option only applies if <replaceable>media_encryption</replaceable> is
677                                                 set to <literal>sdes</literal> or <literal>dtls</literal>.
678                                         </para></description>
679                                 </configOption>
680                                 <configOption name="set_var">
681                                         <synopsis>Variable set on a channel involving the endpoint.</synopsis>
682                                         <description><para>
683                                                 When a new channel is created using the endpoint set the specified
684                                                 variable(s) on that channel. For multiple channel variables specify
685                                                 multiple 'set_var'(s).
686                                         </para></description>
687                                 </configOption>
688                                 <configOption name="message_context">
689                                         <synopsis>Context to route incoming MESSAGE requests to.</synopsis>
690                                         <description><para>
691                                                 If specified, incoming MESSAGE requests will be routed to the indicated
692                                                 dialplan context. If no <replaceable>message_context</replaceable> is
693                                                 specified, then the <replaceable>context</replaceable> setting is used.
694                                         </para></description>
695                                 </configOption>
696                         </configObject>
697                         <configObject name="auth">
698                                 <synopsis>Authentication type</synopsis>
699                                 <description><para>
700                                         Authentication objects hold the authentication information for use
701                                         by other objects such as <literal>endpoints</literal> or <literal>registrations</literal>.
702                                         This also allows for multiple objects to use a single auth object. See
703                                         the <literal>auth_type</literal> config option for password style choices.
704                                 </para></description>
705                                 <configOption name="auth_type" default="userpass">
706                                         <synopsis>Authentication type</synopsis>
707                                         <description><para>
708                                                 This option specifies which of the password style config options should be read
709                                                 when trying to authenticate an endpoint inbound request. If set to <literal>userpass</literal>
710                                                 then we'll read from the 'password' option. For <literal>md5</literal> we'll read
711                                                 from 'md5_cred'.
712                                                 </para>
713                                                 <enumlist>
714                                                         <enum name="md5"/>
715                                                         <enum name="userpass"/>
716                                                 </enumlist>
717                                         </description>
718                                 </configOption>
719                                 <configOption name="nonce_lifetime" default="32">
720                                         <synopsis>Lifetime of a nonce associated with this authentication config.</synopsis>
721                                 </configOption>
722                                 <configOption name="md5_cred">
723                                         <synopsis>MD5 Hash used for authentication.</synopsis>
724                                         <description><para>Only used when auth_type is <literal>md5</literal>.</para></description>
725                                 </configOption>
726                                 <configOption name="password">
727                                         <synopsis>PlainText password used for authentication.</synopsis>
728                                         <description><para>Only used when auth_type is <literal>userpass</literal>.</para></description>
729                                 </configOption>
730                                 <configOption name="realm" default="asterisk">
731                                         <synopsis>SIP realm for endpoint</synopsis>
732                                 </configOption>
733                                 <configOption name="type">
734                                         <synopsis>Must be 'auth'</synopsis>
735                                 </configOption>
736                                 <configOption name="username">
737                                         <synopsis>Username to use for account</synopsis>
738                                 </configOption>
739                         </configObject>
740                         <configObject name="domain_alias">
741                                 <synopsis>Domain Alias</synopsis>
742                                 <description><para>
743                                         Signifies that a domain is an alias. If the domain on a session is
744                                         not found to match an AoR then this object is used to see if we have
745                                         an alias for the AoR to which the endpoint is binding. This objects
746                                         name as defined in configuration should be the domain alias and a
747                                         config option is provided to specify the domain to be aliased.
748                                 </para></description>
749                                 <configOption name="type">
750                                         <synopsis>Must be of type 'domain_alias'.</synopsis>
751                                 </configOption>
752                                 <configOption name="domain">
753                                         <synopsis>Domain to be aliased</synopsis>
754                                 </configOption>
755                         </configObject>
756                         <configObject name="transport">
757                                 <synopsis>SIP Transport</synopsis>
758                                 <description><para>
759                                         <emphasis>Transports</emphasis>
760                                         </para>
761                                         <para>There are different transports and protocol derivatives
762                                                 supported by <literal>res_pjsip</literal>. They are in order of
763                                                 preference: UDP, TCP, and WebSocket (WS).</para>
764                                         <note><para>Changes to transport configuration in pjsip.conf will only be
765                                                 effected on a complete restart of Asterisk. A module reload
766                                                 will not suffice.</para></note>
767                                 </description>
768                                 <configOption name="async_operations" default="1">
769                                         <synopsis>Number of simultaneous Asynchronous Operations</synopsis>
770                                 </configOption>
771                                 <configOption name="bind">
772                                         <synopsis>IP Address and optional port to bind to for this transport</synopsis>
773                                 </configOption>
774                                 <configOption name="ca_list_file">
775                                         <synopsis>File containing a list of certificates to read (TLS ONLY)</synopsis>
776                                 </configOption>
777                                 <configOption name="cert_file">
778                                         <synopsis>Certificate file for endpoint (TLS ONLY)</synopsis>
779                                 </configOption>
780                                 <configOption name="cipher">
781                                         <synopsis>Preferred Cryptography Cipher (TLS ONLY)</synopsis>
782                                         <description><para>
783                                                 Many options for acceptable ciphers see link for more:
784                                                 http://www.openssl.org/docs/apps/ciphers.html#CIPHER_STRINGS
785                                         </para></description>
786                                 </configOption>
787                                 <configOption name="domain">
788                                         <synopsis>Domain the transport comes from</synopsis>
789                                 </configOption>
790                                 <configOption name="external_media_address">
791                                         <synopsis>External IP address to use in RTP handling</synopsis>
792                                         <description><para>
793                                                 When a request or response is sent out, if the destination of the
794                                                 message is outside the IP network defined in the option <literal>localnet</literal>,
795                                                 and the media address in the SDP is within the localnet network, then the
796                                                 media address in the SDP will be rewritten to the value defined for
797                                                 <literal>external_media_address</literal>.
798                                         </para></description>
799                                 </configOption>
800                                 <configOption name="external_signaling_address">
801                                         <synopsis>External address for SIP signalling</synopsis>
802                                 </configOption>
803                                 <configOption name="external_signaling_port" default="0">
804                                         <synopsis>External port for SIP signalling</synopsis>
805                                 </configOption>
806                                 <configOption name="method">
807                                         <synopsis>Method of SSL transport (TLS ONLY)</synopsis>
808                                         <description>
809                                                 <enumlist>
810                                                         <enum name="default" />
811                                                         <enum name="unspecified" />
812                                                         <enum name="tlsv1" />
813                                                         <enum name="sslv2" />
814                                                         <enum name="sslv3" />
815                                                         <enum name="sslv23" />
816                                                 </enumlist>
817                                         </description>
818                                 </configOption>
819                                 <configOption name="local_net">
820                                         <synopsis>Network to consider local (used for NAT purposes).</synopsis>
821                                         <description><para>This must be in CIDR or dotted decimal format with the IP
822                                         and mask separated with a slash ('/').</para></description>
823                                 </configOption>
824                                 <configOption name="password">
825                                         <synopsis>Password required for transport</synopsis>
826                                 </configOption>
827                                 <configOption name="priv_key_file">
828                                         <synopsis>Private key file (TLS ONLY)</synopsis>
829                                 </configOption>
830                                 <configOption name="protocol" default="udp">
831                                         <synopsis>Protocol to use for SIP traffic</synopsis>
832                                         <description>
833                                                 <enumlist>
834                                                         <enum name="udp" />
835                                                         <enum name="tcp" />
836                                                         <enum name="tls" />
837                                                         <enum name="ws" />
838                                                         <enum name="wss" />
839                                                 </enumlist>
840                                         </description>
841                                 </configOption>
842                                 <configOption name="require_client_cert" default="false">
843                                         <synopsis>Require client certificate (TLS ONLY)</synopsis>
844                                 </configOption>
845                                 <configOption name="type">
846                                         <synopsis>Must be of type 'transport'.</synopsis>
847                                 </configOption>
848                                 <configOption name="verify_client" default="false">
849                                         <synopsis>Require verification of client certificate (TLS ONLY)</synopsis>
850                                 </configOption>
851                                 <configOption name="verify_server" default="false">
852                                         <synopsis>Require verification of server certificate (TLS ONLY)</synopsis>
853                                 </configOption>
854                                 <configOption name="tos" default="false">
855                                         <synopsis>Enable TOS for the signalling sent over this transport</synopsis>
856                                         <description>
857                                         <para>See <literal>https://wiki.asterisk.org/wiki/display/AST/IP+Quality+of+Service</literal>
858                                         for more information on this parameter.</para>
859                                         <note><para>This option does not apply to the <replaceable>ws</replaceable>
860                                         or the <replaceable>wss</replaceable> protocols.</para></note>
861                                         </description>
862                                 </configOption>
863                                 <configOption name="cos" default="false">
864                                         <synopsis>Enable COS for the signalling sent over this transport</synopsis>
865                                         <description>
866                                         <para>See <literal>https://wiki.asterisk.org/wiki/display/AST/IP+Quality+of+Service</literal>
867                                         for more information on this parameter.</para>
868                                         <note><para>This option does not apply to the <replaceable>ws</replaceable>
869                                         or the <replaceable>wss</replaceable> protocols.</para></note>
870                                         </description>
871                                 </configOption>
872                         </configObject>
873                         <configObject name="contact">
874                                 <synopsis>A way of creating an aliased name to a SIP URI</synopsis>
875                                 <description><para>
876                                         Contacts are a way to hide SIP URIs from the dialplan directly.
877                                         They are also used to make a group of contactable parties when
878                                         in use with <literal>AoR</literal> lists.
879                                 </para></description>
880                                 <configOption name="type">
881                                         <synopsis>Must be of type 'contact'.</synopsis>
882                                 </configOption>
883                                 <configOption name="uri">
884                                         <synopsis>SIP URI to contact peer</synopsis>
885                                 </configOption>
886                                 <configOption name="expiration_time">
887                                         <synopsis>Time to keep alive a contact</synopsis>
888                                         <description><para>
889                                                 Time to keep alive a contact. String style specification.
890                                         </para></description>
891                                 </configOption>
892                                 <configOption name="qualify_frequency" default="0">
893                                         <synopsis>Interval at which to qualify a contact</synopsis>
894                                         <description><para>
895                                                 Interval between attempts to qualify the contact for reachability.
896                                                 If <literal>0</literal> never qualify. Time in seconds.
897                                         </para></description>
898                                 </configOption>
899                                 <configOption name="outbound_proxy">
900                                         <synopsis>Outbound proxy used when sending OPTIONS request</synopsis>
901                                         <description><para>
902                                                 If set the provided URI will be used as the outbound proxy when an
903                                                 OPTIONS request is sent to a contact for qualify purposes.
904                                         </para></description>
905                                 </configOption>
906                                 <configOption name="path">
907                                         <synopsis>Stored Path vector for use in Route headers on outgoing requests.</synopsis>
908                                 </configOption>
909                                 <configOption name="user_agent">
910                                         <synopsis>User-Agent header from registration.</synopsis>
911                                         <description><para>
912                                                 The User-Agent is automatically stored based on data present in incoming SIP
913                                                 REGISTER requests and is not intended to be configured manually.
914                                         </para></description>
915                                 </configOption>
916                         </configObject>
917                         <configObject name="aor">
918                                 <synopsis>The configuration for a location of an endpoint</synopsis>
919                                 <description><para>
920                                         An AoR is what allows Asterisk to contact an endpoint via res_pjsip. If no
921                                         AoRs are specified, an endpoint will not be reachable by Asterisk.
922                                         Beyond that, an AoR has other uses within Asterisk, such as inbound
923                                         registration.
924                                         </para><para>
925                                         An <literal>AoR</literal> is a way to allow dialing a group
926                                         of <literal>Contacts</literal> that all use the same
927                                         <literal>endpoint</literal> for calls.
928                                         </para><para>
929                                         This can be used as another way of grouping a list of contacts to dial
930                                         rather than specifing them each directly when dialing via the dialplan.
931                                         This must be used in conjuction with the <literal>PJSIP_DIAL_CONTACTS</literal>.
932                                         </para><para>
933                                         Registrations: For Asterisk to match an inbound registration to an endpoint,
934                                         the AoR object name must match the user portion of the SIP URI in the "To:"
935                                         header of the inbound SIP registration. That will usually be equivalent
936                                         to the "user name" set in your hard or soft phones configuration.
937                                 </para></description>
938                                 <configOption name="contact">
939                                         <synopsis>Permanent contacts assigned to AoR</synopsis>
940                                         <description><para>
941                                                 Contacts specified will be called whenever referenced
942                                                 by <literal>chan_pjsip</literal>.
943                                                 </para><para>
944                                                 Use a separate "contact=" entry for each contact required. Contacts
945                                                 are specified using a SIP URI.
946                                         </para></description>
947                                 </configOption>
948                                 <configOption name="default_expiration" default="3600">
949                                         <synopsis>Default expiration time in seconds for contacts that are dynamically bound to an AoR.</synopsis>
950                                 </configOption>
951                                 <configOption name="mailboxes">
952                                         <synopsis>Allow subscriptions for the specified mailbox(es)</synopsis>
953                                         <description><para>This option applies when an external entity subscribes to an AoR
954                                                 for Message Waiting Indications. The mailboxes specified will be subscribed to.
955                                                 More than one mailbox can be specified with a comma-delimited string.
956                                                 app_voicemail mailboxes must be specified as mailbox@context;
957                                                 for example: mailboxes=6001@default. For mailboxes provided by external sources,
958                                                 such as through the res_external_mwi module, you must specify strings supported by
959                                                 the external system.
960                                         </para><para>
961                                                 For endpoints that cannot SUBSCRIBE for MWI, you can set the <literal>mailboxes</literal> option in your
962                                                 endpoint configuration section to enable unsolicited MWI NOTIFYs to the endpoint.
963                                         </para></description>
964                                 </configOption>
965                                 <configOption name="maximum_expiration" default="7200">
966                                         <synopsis>Maximum time to keep an AoR</synopsis>
967                                         <description><para>
968                                                 Maximium time to keep a peer with explicit expiration. Time in seconds.
969                                         </para></description>
970                                 </configOption>
971                                 <configOption name="max_contacts" default="0">
972                                         <synopsis>Maximum number of contacts that can bind to an AoR</synopsis>
973                                         <description><para>
974                                                 Maximum number of contacts that can associate with this AoR. This value does
975                                                 not affect the number of contacts that can be added with the "contact" option.
976                                                 It only limits contacts added through external interaction, such as
977                                                 registration.
978                                                 </para>
979                                                 <note><para>This should be set to <literal>1</literal> and
980                                                 <replaceable>remove_existing</replaceable> set to <literal>yes</literal> if you
981                                                 wish to stick with the older <literal>chan_sip</literal> behaviour.
982                                                 </para></note>
983                                         </description>
984                                 </configOption>
985                                 <configOption name="minimum_expiration" default="60">
986                                         <synopsis>Minimum keep alive time for an AoR</synopsis>
987                                         <description><para>
988                                                 Minimum time to keep a peer with an explict expiration. Time in seconds.
989                                         </para></description>
990                                 </configOption>
991                                 <configOption name="remove_existing" default="no">
992                                         <synopsis>Determines whether new contacts replace existing ones.</synopsis>
993                                         <description><para>
994                                                 On receiving a new registration to the AoR should it remove
995                                                 the existing contact that was registered against it?
996                                                 </para>
997                                                 <note><para>This should be set to <literal>yes</literal> and
998                                                 <replaceable>max_contacts</replaceable> set to <literal>1</literal> if you
999                                                 wish to stick with the older <literal>chan_sip</literal> behaviour.
1000                                                 </para></note>
1001                                         </description>
1002                                 </configOption>
1003                                 <configOption name="type">
1004                                         <synopsis>Must be of type 'aor'.</synopsis>
1005                                 </configOption>
1006                                 <configOption name="qualify_frequency" default="0">
1007                                         <synopsis>Interval at which to qualify an AoR</synopsis>
1008                                         <description><para>
1009                                                 Interval between attempts to qualify the AoR for reachability.
1010                                                 If <literal>0</literal> never qualify. Time in seconds.
1011                                         </para></description>
1012                                 </configOption>
1013                                 <configOption name="authenticate_qualify" default="no">
1014                                         <synopsis>Authenticates a qualify request if needed</synopsis>
1015                                         <description><para>
1016                                                 If true and a qualify request receives a challenge or authenticate response
1017                                                 authentication is attempted before declaring the contact available.
1018                                         </para></description>
1019                                 </configOption>
1020                                 <configOption name="outbound_proxy">
1021                                         <synopsis>Outbound proxy used when sending OPTIONS request</synopsis>
1022                                         <description><para>
1023                                                 If set the provided URI will be used as the outbound proxy when an
1024                                                 OPTIONS request is sent to a contact for qualify purposes.
1025                                         </para></description>
1026                                 </configOption>
1027                                 <configOption name="support_path">
1028                                         <synopsis>Enables Path support for REGISTER requests and Route support for other requests.</synopsis>
1029                                         <description><para>
1030                                                 When this option is enabled, the Path headers in register requests will be saved
1031                                                 and its contents will be used in Route headers for outbound out-of-dialog requests
1032                                                 and in Path headers for outbound 200 responses. Path support will also be indicated
1033                                                 in the Supported header.
1034                                         </para></description>
1035                                 </configOption>
1036                         </configObject>
1037                         <configObject name="system">
1038                                 <synopsis>Options that apply to the SIP stack as well as other system-wide settings</synopsis>
1039                                 <description><para>
1040                                         The settings in this section are global. In addition to being global, the values will
1041                                         not be re-evaluated when a reload is performed. This is because the values must be set
1042                                         before the SIP stack is initialized. The only way to reset these values is to either
1043                                         restart Asterisk, or unload res_pjsip.so and then load it again.
1044                                 </para></description>
1045                                 <configOption name="timer_t1" default="500">
1046                                         <synopsis>Set transaction timer T1 value (milliseconds).</synopsis>
1047                                         <description><para>
1048                                                 Timer T1 is the base for determining how long to wait before retransmitting
1049                                                 requests that receive no response when using an unreliable transport (e.g. UDP).
1050                                                 For more information on this timer, see RFC 3261, Section 17.1.1.1.
1051                                         </para></description>
1052                                 </configOption>
1053                                 <configOption name="timer_b" default="32000">
1054                                         <synopsis>Set transaction timer B value (milliseconds).</synopsis>
1055                                         <description><para>
1056                                                 Timer B determines the maximum amount of time to wait after sending an INVITE
1057                                                 request before terminating the transaction. It is recommended that this be set
1058                                                 to 64 * Timer T1, but it may be set higher if desired. For more information on
1059                                                 this timer, see RFC 3261, Section 17.1.1.1.
1060                                         </para></description>
1061                                 </configOption>
1062                                 <configOption name="compact_headers" default="no">
1063                                         <synopsis>Use the short forms of common SIP header names.</synopsis>
1064                                 </configOption>
1065                                 <configOption name="threadpool_initial_size" default="0">
1066                                         <synopsis>Initial number of threads in the res_pjsip threadpool.</synopsis>
1067                                 </configOption>
1068                                 <configOption name="threadpool_auto_increment" default="5">
1069                                         <synopsis>The amount by which the number of threads is incremented when necessary.</synopsis>
1070                                 </configOption>
1071                                 <configOption name="threadpool_idle_timeout" default="60">
1072                                         <synopsis>Number of seconds before an idle thread should be disposed of.</synopsis>
1073                                 </configOption>
1074                                 <configOption name="threadpool_max_size" default="0">
1075                                         <synopsis>Maximum number of threads in the res_pjsip threadpool.
1076                                         A value of 0 indicates no maximum.</synopsis>
1077                                 </configOption>
1078                                 <configOption name="type">
1079                                         <synopsis>Must be of type 'system'.</synopsis>
1080                                 </configOption>
1081                         </configObject>
1082                         <configObject name="global">
1083                                 <synopsis>Options that apply globally to all SIP communications</synopsis>
1084                                 <description><para>
1085                                         The settings in this section are global. Unlike options in the <literal>system</literal>
1086                                         section, these options can be refreshed by performing a reload.
1087                                 </para></description>
1088                                 <configOption name="max_forwards" default="70">
1089                                         <synopsis>Value used in Max-Forwards header for SIP requests.</synopsis>
1090                                 </configOption>
1091                                 <configOption name="type">
1092                                         <synopsis>Must be of type 'global'.</synopsis>
1093                                 </configOption>
1094                                 <configOption name="user_agent" default="Asterisk &lt;Asterisk Version&gt;">
1095                                         <synopsis>Value used in User-Agent header for SIP requests and Server header for SIP responses.</synopsis>
1096                                 </configOption>
1097                                 <configOption name="default_outbound_endpoint" default="default_outbound_endpoint">
1098                                         <synopsis>Endpoint to use when sending an outbound request to a URI without a specified endpoint.</synopsis>
1099                                 </configOption>
1100                                 <configOption name="debug" default="no">
1101                                         <synopsis>Enable/Disable SIP debug logging.  Valid options include yes|no or
1102                                         a host address</synopsis>
1103                                 </configOption>
1104                         </configObject>
1105                 </configFile>
1106         </configInfo>
1107         <manager name="PJSIPQualify" language="en_US">
1108                 <synopsis>
1109                         Qualify a chan_pjsip endpoint.
1110                 </synopsis>
1111                 <syntax>
1112                         <xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
1113                         <parameter name="Endpoint" required="true">
1114                                 <para>The endpoint you want to qualify.</para>
1115                         </parameter>
1116                 </syntax>
1117                 <description>
1118                         <para>Qualify a chan_pjsip endpoint.</para>
1119                 </description>
1120         </manager>
1121         <manager name="PJSIPShowEndpoints" language="en_US">
1122                 <synopsis>
1123                         Lists PJSIP endpoints.
1124                 </synopsis>
1125                 <syntax />
1126                 <description>
1127                         <para>
1128                         Provides a listing of all endpoints.  For each endpoint an <literal>EndpointList</literal> event
1129                         is raised that contains relevant attributes and status information.  Once all
1130                         endpoints have been listed an <literal>EndpointListComplete</literal> event is issued.
1131                         </para>
1132                 </description>
1133         </manager>
1134         <manager name="PJSIPShowEndpoint" language="en_US">
1135                 <synopsis>
1136                         Detail listing of an endpoint and its objects.
1137                 </synopsis>
1138                 <syntax>
1139                         <xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
1140                         <parameter name="Endpoint" required="true">
1141                                 <para>The endpoint to list.</para>
1142                         </parameter>
1143                 </syntax>
1144                 <description>
1145                         <para>
1146                         Provides a detailed listing of options for a given endpoint.  Events are issued
1147                         showing the configuration and status of the endpoint and associated objects.  These
1148                         events include <literal>EndpointDetail</literal>, <literal>AorDetail</literal>,
1149                         <literal>AuthDetail</literal>, <literal>TransportDetail</literal>, and
1150                         <literal>IdentifyDetail</literal>.  Some events may be listed multiple times if multiple objects are
1151                         associated (for instance AoRs).  Once all detail events have been raised a final
1152                         <literal>EndpointDetailComplete</literal> event is issued.
1153                         </para>
1154                 </description>
1155         </manager>
1156  ***/
1157
1158 #define MOD_DATA_CONTACT "contact"
1159
1160 static pjsip_endpoint *ast_pjsip_endpoint;
1161
1162 static struct ast_threadpool *sip_threadpool;
1163
1164 static int register_service(void *data)
1165 {
1166         pjsip_module **module = data;
1167         if (!ast_pjsip_endpoint) {
1168                 ast_log(LOG_ERROR, "There is no PJSIP endpoint. Unable to register services\n");
1169                 return -1;
1170         }
1171         if (pjsip_endpt_register_module(ast_pjsip_endpoint, *module) != PJ_SUCCESS) {
1172                 ast_log(LOG_ERROR, "Unable to register module %.*s\n", (int) pj_strlen(&(*module)->name), pj_strbuf(&(*module)->name));
1173                 return -1;
1174         }
1175         ast_debug(1, "Registered SIP service %.*s (%p)\n", (int) pj_strlen(&(*module)->name), pj_strbuf(&(*module)->name), *module);
1176         ast_module_ref(ast_module_info->self);
1177         return 0;
1178 }
1179
1180 int ast_sip_register_service(pjsip_module *module)
1181 {
1182         return ast_sip_push_task_synchronous(NULL, register_service, &module);
1183 }
1184
1185 static int unregister_service(void *data)
1186 {
1187         pjsip_module **module = data;
1188         ast_module_unref(ast_module_info->self);
1189         if (!ast_pjsip_endpoint) {
1190                 return -1;
1191         }
1192         pjsip_endpt_unregister_module(ast_pjsip_endpoint, *module);
1193         ast_debug(1, "Unregistered SIP service %.*s\n", (int) pj_strlen(&(*module)->name), pj_strbuf(&(*module)->name));
1194         return 0;
1195 }
1196
1197 void ast_sip_unregister_service(pjsip_module *module)
1198 {
1199         ast_sip_push_task_synchronous(NULL, unregister_service, &module);
1200 }
1201
1202 static struct ast_sip_authenticator *registered_authenticator;
1203
1204 int ast_sip_register_authenticator(struct ast_sip_authenticator *auth)
1205 {
1206         if (registered_authenticator) {
1207                 ast_log(LOG_WARNING, "Authenticator %p is already registered. Cannot register a new one\n", registered_authenticator);
1208                 return -1;
1209         }
1210         registered_authenticator = auth;
1211         ast_debug(1, "Registered SIP authenticator module %p\n", auth);
1212         ast_module_ref(ast_module_info->self);
1213         return 0;
1214 }
1215
1216 void ast_sip_unregister_authenticator(struct ast_sip_authenticator *auth)
1217 {
1218         if (registered_authenticator != auth) {
1219                 ast_log(LOG_WARNING, "Trying to unregister authenticator %p but authenticator %p registered\n",
1220                                 auth, registered_authenticator);
1221                 return;
1222         }
1223         registered_authenticator = NULL;
1224         ast_debug(1, "Unregistered SIP authenticator %p\n", auth);
1225         ast_module_unref(ast_module_info->self);
1226 }
1227
1228 int ast_sip_requires_authentication(struct ast_sip_endpoint *endpoint, pjsip_rx_data *rdata)
1229 {
1230         if (!registered_authenticator) {
1231                 ast_log(LOG_WARNING, "No SIP authenticator registered. Assuming authentication is not required\n");
1232                 return 0;
1233         }
1234
1235         return registered_authenticator->requires_authentication(endpoint, rdata);
1236 }
1237
1238 enum ast_sip_check_auth_result ast_sip_check_authentication(struct ast_sip_endpoint *endpoint,
1239                 pjsip_rx_data *rdata, pjsip_tx_data *tdata)
1240 {
1241         if (!registered_authenticator) {
1242                 ast_log(LOG_WARNING, "No SIP authenticator registered. Assuming authentication is successful\n");
1243                 return 0;
1244         }
1245         return registered_authenticator->check_authentication(endpoint, rdata, tdata);
1246 }
1247
1248 static struct ast_sip_outbound_authenticator *registered_outbound_authenticator;
1249
1250 int ast_sip_register_outbound_authenticator(struct ast_sip_outbound_authenticator *auth)
1251 {
1252         if (registered_outbound_authenticator) {
1253                 ast_log(LOG_WARNING, "Outbound authenticator %p is already registered. Cannot register a new one\n", registered_outbound_authenticator);
1254                 return -1;
1255         }
1256         registered_outbound_authenticator = auth;
1257         ast_debug(1, "Registered SIP outbound authenticator module %p\n", auth);
1258         ast_module_ref(ast_module_info->self);
1259         return 0;
1260 }
1261
1262 void ast_sip_unregister_outbound_authenticator(struct ast_sip_outbound_authenticator *auth)
1263 {
1264         if (registered_outbound_authenticator != auth) {
1265                 ast_log(LOG_WARNING, "Trying to unregister outbound authenticator %p but outbound authenticator %p registered\n",
1266                                 auth, registered_outbound_authenticator);
1267                 return;
1268         }
1269         registered_outbound_authenticator = NULL;
1270         ast_debug(1, "Unregistered SIP outbound authenticator %p\n", auth);
1271         ast_module_unref(ast_module_info->self);
1272 }
1273
1274 int ast_sip_create_request_with_auth(const struct ast_sip_auth_vector *auths, pjsip_rx_data *challenge,
1275                 pjsip_transaction *tsx, pjsip_tx_data **new_request)
1276 {
1277         if (!registered_outbound_authenticator) {
1278                 ast_log(LOG_WARNING, "No SIP outbound authenticator registered. Cannot respond to authentication challenge\n");
1279                 return -1;
1280         }
1281         return registered_outbound_authenticator->create_request_with_auth(auths, challenge, tsx, new_request);
1282 }
1283
1284 struct endpoint_identifier_list {
1285         struct ast_sip_endpoint_identifier *identifier;
1286         AST_RWLIST_ENTRY(endpoint_identifier_list) list;
1287 };
1288
1289 static AST_RWLIST_HEAD_STATIC(endpoint_identifiers, endpoint_identifier_list);
1290
1291 int ast_sip_register_endpoint_identifier(struct ast_sip_endpoint_identifier *identifier)
1292 {
1293         struct endpoint_identifier_list *id_list_item;
1294         SCOPED_LOCK(lock, &endpoint_identifiers, AST_RWLIST_WRLOCK, AST_RWLIST_UNLOCK);
1295
1296         id_list_item = ast_calloc(1, sizeof(*id_list_item));
1297         if (!id_list_item) {
1298                 ast_log(LOG_ERROR, "Unabled to add endpoint identifier. Out of memory.\n");
1299                 return -1;
1300         }
1301         id_list_item->identifier = identifier;
1302
1303         AST_RWLIST_INSERT_TAIL(&endpoint_identifiers, id_list_item, list);
1304         ast_debug(1, "Registered endpoint identifier %p\n", identifier);
1305
1306         ast_module_ref(ast_module_info->self);
1307         return 0;
1308 }
1309
1310 void ast_sip_unregister_endpoint_identifier(struct ast_sip_endpoint_identifier *identifier)
1311 {
1312         struct endpoint_identifier_list *iter;
1313         SCOPED_LOCK(lock, &endpoint_identifiers, AST_RWLIST_WRLOCK, AST_RWLIST_UNLOCK);
1314         AST_RWLIST_TRAVERSE_SAFE_BEGIN(&endpoint_identifiers, iter, list) {
1315                 if (iter->identifier == identifier) {
1316                         AST_RWLIST_REMOVE_CURRENT(list);
1317                         ast_free(iter);
1318                         ast_debug(1, "Unregistered endpoint identifier %p\n", identifier);
1319                         ast_module_unref(ast_module_info->self);
1320                         break;
1321                 }
1322         }
1323         AST_RWLIST_TRAVERSE_SAFE_END;
1324 }
1325
1326 struct ast_sip_endpoint *ast_sip_identify_endpoint(pjsip_rx_data *rdata)
1327 {
1328         struct endpoint_identifier_list *iter;
1329         struct ast_sip_endpoint *endpoint = NULL;
1330         SCOPED_LOCK(lock, &endpoint_identifiers, AST_RWLIST_RDLOCK, AST_RWLIST_UNLOCK);
1331         AST_RWLIST_TRAVERSE(&endpoint_identifiers, iter, list) {
1332                 ast_assert(iter->identifier->identify_endpoint != NULL);
1333                 endpoint = iter->identifier->identify_endpoint(rdata);
1334                 if (endpoint) {
1335                         break;
1336                 }
1337         }
1338         return endpoint;
1339 }
1340
1341 AST_RWLIST_HEAD_STATIC(endpoint_formatters, ast_sip_endpoint_formatter);
1342
1343 int ast_sip_register_endpoint_formatter(struct ast_sip_endpoint_formatter *obj)
1344 {
1345         SCOPED_LOCK(lock, &endpoint_formatters, AST_RWLIST_WRLOCK, AST_RWLIST_UNLOCK);
1346         AST_RWLIST_INSERT_TAIL(&endpoint_formatters, obj, next);
1347         ast_module_ref(ast_module_info->self);
1348         return 0;
1349 }
1350
1351 void ast_sip_unregister_endpoint_formatter(struct ast_sip_endpoint_formatter *obj)
1352 {
1353         struct ast_sip_endpoint_formatter *i;
1354         SCOPED_LOCK(lock, &endpoint_formatters, AST_RWLIST_WRLOCK, AST_RWLIST_UNLOCK);
1355         AST_RWLIST_TRAVERSE_SAFE_BEGIN(&endpoint_formatters, i, next) {
1356                 if (i == obj) {
1357                         AST_RWLIST_REMOVE_CURRENT(next);
1358                         ast_module_unref(ast_module_info->self);
1359                         break;
1360                 }
1361         }
1362         AST_RWLIST_TRAVERSE_SAFE_END;
1363 }
1364
1365 int ast_sip_format_endpoint_ami(struct ast_sip_endpoint *endpoint,
1366                                 struct ast_sip_ami *ami, int *count)
1367 {
1368         int res = 0;
1369         struct ast_sip_endpoint_formatter *i;
1370         SCOPED_LOCK(lock, &endpoint_formatters, AST_RWLIST_RDLOCK, AST_RWLIST_UNLOCK);
1371         *count = 0;
1372         AST_RWLIST_TRAVERSE(&endpoint_formatters, i, next) {
1373                 if (i->format_ami && ((res = i->format_ami(endpoint, ami)) < 0)) {
1374                         return res;
1375                 }
1376
1377                 if (!res) {
1378                         (*count)++;
1379                 }
1380         }
1381         return 0;
1382 }
1383
1384 pjsip_endpoint *ast_sip_get_pjsip_endpoint(void)
1385 {
1386         return ast_pjsip_endpoint;
1387 }
1388
1389 static int sip_dialog_create_from(pj_pool_t *pool, pj_str_t *from, const char *user, const char *domain, const pj_str_t *target, pjsip_tpselector *selector)
1390 {
1391         pj_str_t tmp, local_addr;
1392         pjsip_uri *uri;
1393         pjsip_sip_uri *sip_uri;
1394         pjsip_transport_type_e type = PJSIP_TRANSPORT_UNSPECIFIED;
1395         int local_port;
1396         char uuid_str[AST_UUID_STR_LEN];
1397
1398         if (ast_strlen_zero(user)) {
1399                 RAII_VAR(struct ast_uuid *, uuid, ast_uuid_generate(), ast_free_ptr);
1400                 if (!uuid) {
1401                         return -1;
1402                 }
1403                 user = ast_uuid_to_str(uuid, uuid_str, sizeof(uuid_str));
1404         }
1405
1406         /* Parse the provided target URI so we can determine what transport it will end up using */
1407         pj_strdup_with_null(pool, &tmp, target);
1408
1409         if (!(uri = pjsip_parse_uri(pool, tmp.ptr, tmp.slen, 0)) ||
1410             (!PJSIP_URI_SCHEME_IS_SIP(uri) && !PJSIP_URI_SCHEME_IS_SIPS(uri))) {
1411                 return -1;
1412         }
1413
1414         sip_uri = pjsip_uri_get_uri(uri);
1415
1416         /* Determine the transport type to use */
1417         if (PJSIP_URI_SCHEME_IS_SIPS(sip_uri)) {
1418                 type = PJSIP_TRANSPORT_TLS;
1419         } else if (!sip_uri->transport_param.slen) {
1420                 type = PJSIP_TRANSPORT_UDP;
1421         } else {
1422                 type = pjsip_transport_get_type_from_name(&sip_uri->transport_param);
1423         }
1424
1425         if (type == PJSIP_TRANSPORT_UNSPECIFIED) {
1426                 return -1;
1427         }
1428
1429         /* If the host is IPv6 turn the transport into an IPv6 version */
1430         if (pj_strchr(&sip_uri->host, ':') && type < PJSIP_TRANSPORT_START_OTHER) {
1431                 type = (pjsip_transport_type_e)(((int)type) + PJSIP_TRANSPORT_IPV6);
1432         }
1433
1434         if (!ast_strlen_zero(domain)) {
1435                 from->ptr = pj_pool_alloc(pool, PJSIP_MAX_URL_SIZE);
1436                 from->slen = pj_ansi_snprintf(from->ptr, PJSIP_MAX_URL_SIZE,
1437                                 "<sip:%s@%s%s%s>",
1438                                 user,
1439                                 domain,
1440                                 (type != PJSIP_TRANSPORT_UDP && type != PJSIP_TRANSPORT_UDP6) ? ";transport=" : "",
1441                                 (type != PJSIP_TRANSPORT_UDP && type != PJSIP_TRANSPORT_UDP6) ? pjsip_transport_get_type_name(type) : "");
1442                 return 0;
1443         }
1444
1445         /* Get the local bound address for the transport that will be used when communicating with the provided URI */
1446         if (pjsip_tpmgr_find_local_addr(pjsip_endpt_get_tpmgr(ast_sip_get_pjsip_endpoint()), pool, type, selector,
1447                                                               &local_addr, &local_port) != PJ_SUCCESS) {
1448
1449                 /* If no local address can be retrieved using the transport manager use the host one */
1450                 pj_strdup(pool, &local_addr, pj_gethostname());
1451                 local_port = pjsip_transport_get_default_port_for_type(PJSIP_TRANSPORT_UDP);
1452         }
1453
1454         /* If IPv6 was specified in the transport, set the proper type */
1455         if (pj_strchr(&local_addr, ':') && type < PJSIP_TRANSPORT_START_OTHER) {
1456                 type = (pjsip_transport_type_e)(((int)type) + PJSIP_TRANSPORT_IPV6);
1457         }
1458
1459         from->ptr = pj_pool_alloc(pool, PJSIP_MAX_URL_SIZE);
1460         from->slen = pj_ansi_snprintf(from->ptr, PJSIP_MAX_URL_SIZE,
1461                                       "<sip:%s@%s%.*s%s:%d%s%s>",
1462                                       user,
1463                                       (type & PJSIP_TRANSPORT_IPV6) ? "[" : "",
1464                                       (int)local_addr.slen,
1465                                       local_addr.ptr,
1466                                       (type & PJSIP_TRANSPORT_IPV6) ? "]" : "",
1467                                       local_port,
1468                                       (type != PJSIP_TRANSPORT_UDP && type != PJSIP_TRANSPORT_UDP6) ? ";transport=" : "",
1469                                       (type != PJSIP_TRANSPORT_UDP && type != PJSIP_TRANSPORT_UDP6) ? pjsip_transport_get_type_name(type) : "");
1470
1471         return 0;
1472 }
1473
1474 static int sip_get_tpselector_from_endpoint(const struct ast_sip_endpoint *endpoint, pjsip_tpselector *selector)
1475 {
1476         RAII_VAR(struct ast_sip_transport *, transport, NULL, ao2_cleanup);
1477         const char *transport_name = endpoint->transport;
1478
1479         if (ast_strlen_zero(transport_name)) {
1480                 return 0;
1481         }
1482
1483         transport = ast_sorcery_retrieve_by_id(ast_sip_get_sorcery(), "transport", transport_name);
1484
1485         if (!transport || !transport->state) {
1486                 ast_log(LOG_ERROR, "Unable to retrieve PJSIP transport '%s' for endpoint '%s'\n",
1487                         transport_name, ast_sorcery_object_get_id(endpoint));
1488                 return -1;
1489         }
1490
1491         if (transport->state->transport) {
1492                 selector->type = PJSIP_TPSELECTOR_TRANSPORT;
1493                 selector->u.transport = transport->state->transport;
1494         } else if (transport->state->factory) {
1495                 selector->type = PJSIP_TPSELECTOR_LISTENER;
1496                 selector->u.listener = transport->state->factory;
1497         } else if (transport->type == AST_TRANSPORT_WS || transport->type == AST_TRANSPORT_WSS) {
1498                 /* The WebSocket transport has no factory as it can not create outgoing connections, so
1499                  * even if an endpoint is locked to a WebSocket transport we let the PJSIP logic
1500                  * find the existing connection if available and use it.
1501                  */
1502                 return 0;
1503         } else {
1504                 return -1;
1505         }
1506
1507         return 0;
1508 }
1509
1510 pjsip_dialog *ast_sip_create_dialog_uac(const struct ast_sip_endpoint *endpoint, const char *uri, const char *request_user)
1511 {
1512         char enclosed_uri[PJSIP_MAX_URL_SIZE];
1513         pj_str_t local_uri = { "sip:temp@temp", 13 }, remote_uri, target_uri;
1514         pjsip_dialog *dlg = NULL;
1515         const char *outbound_proxy = endpoint->outbound_proxy;
1516         pjsip_tpselector selector = { .type = PJSIP_TPSELECTOR_NONE, };
1517         static const pj_str_t HCONTACT = { "Contact", 7 };
1518
1519         snprintf(enclosed_uri, sizeof(enclosed_uri), "<%s>", uri);
1520         pj_cstr(&remote_uri, enclosed_uri);
1521
1522         pj_cstr(&target_uri, uri);
1523
1524         if (pjsip_dlg_create_uac(pjsip_ua_instance(), &local_uri, NULL, &remote_uri, &target_uri, &dlg) != PJ_SUCCESS) {
1525                 return NULL;
1526         }
1527
1528         if (sip_get_tpselector_from_endpoint(endpoint, &selector)) {
1529                 pjsip_dlg_terminate(dlg);
1530                 return NULL;
1531         }
1532
1533         if (sip_dialog_create_from(dlg->pool, &local_uri, endpoint->fromuser, endpoint->fromdomain, &remote_uri, &selector)) {
1534                 pjsip_dlg_terminate(dlg);
1535                 return NULL;
1536         }
1537
1538         /* Update the dialog with the new local URI, we do it afterwards so we can use the dialog pool for construction */
1539         pj_strdup_with_null(dlg->pool, &dlg->local.info_str, &local_uri);
1540         dlg->local.info->uri = pjsip_parse_uri(dlg->pool, dlg->local.info_str.ptr, dlg->local.info_str.slen, 0);
1541         dlg->local.contact = pjsip_parse_hdr(dlg->pool, &HCONTACT, local_uri.ptr, local_uri.slen, NULL);
1542
1543         /* If a request user has been specified and we are permitted to change it, do so */
1544         if (!ast_strlen_zero(request_user)) {
1545                 pjsip_sip_uri *sip_uri;
1546
1547                 if (PJSIP_URI_SCHEME_IS_SIP(dlg->target) || PJSIP_URI_SCHEME_IS_SIPS(dlg->target)) {
1548                         sip_uri = pjsip_uri_get_uri(dlg->target);
1549                         pj_strdup2(dlg->pool, &sip_uri->user, request_user);
1550                 }
1551                 if (PJSIP_URI_SCHEME_IS_SIP(dlg->remote.info->uri) || PJSIP_URI_SCHEME_IS_SIPS(dlg->remote.info->uri)) {
1552                         sip_uri = pjsip_uri_get_uri(dlg->remote.info->uri);
1553                         pj_strdup2(dlg->pool, &sip_uri->user, request_user);
1554                 }
1555         }
1556
1557         /* We have to temporarily bump up the sess_count here so the dialog is not prematurely destroyed */
1558         dlg->sess_count++;
1559
1560         pjsip_dlg_set_transport(dlg, &selector);
1561
1562         if (!ast_strlen_zero(outbound_proxy)) {
1563                 pjsip_route_hdr route_set, *route;
1564                 static const pj_str_t ROUTE_HNAME = { "Route", 5 };
1565                 pj_str_t tmp;
1566
1567                 pj_list_init(&route_set);
1568
1569                 pj_strdup2_with_null(dlg->pool, &tmp, outbound_proxy);
1570                 if (!(route = pjsip_parse_hdr(dlg->pool, &ROUTE_HNAME, tmp.ptr, tmp.slen, NULL))) {
1571                         dlg->sess_count--;
1572                         pjsip_dlg_terminate(dlg);
1573                         return NULL;
1574                 }
1575                 pj_list_insert_nodes_before(&route_set, route);
1576
1577                 pjsip_dlg_set_route_set(dlg, &route_set);
1578         }
1579
1580         dlg->sess_count--;
1581
1582         return dlg;
1583 }
1584
1585 pjsip_dialog *ast_sip_create_dialog_uas(const struct ast_sip_endpoint *endpoint, pjsip_rx_data *rdata)
1586 {
1587         pjsip_dialog *dlg;
1588         pj_str_t contact;
1589         pjsip_transport_type_e type = rdata->tp_info.transport->key.type;
1590         pj_status_t status;
1591
1592         contact.ptr = pj_pool_alloc(rdata->tp_info.pool, PJSIP_MAX_URL_SIZE);
1593         contact.slen = pj_ansi_snprintf(contact.ptr, PJSIP_MAX_URL_SIZE,
1594                         "<sip:%s%.*s%s:%d%s%s>",
1595                         (type & PJSIP_TRANSPORT_IPV6) ? "[" : "",
1596                         (int)rdata->tp_info.transport->local_name.host.slen,
1597                         rdata->tp_info.transport->local_name.host.ptr,
1598                         (type & PJSIP_TRANSPORT_IPV6) ? "]" : "",
1599                         rdata->tp_info.transport->local_name.port,
1600                         (type != PJSIP_TRANSPORT_UDP && type != PJSIP_TRANSPORT_UDP6) ? ";transport=" : "",
1601                         (type != PJSIP_TRANSPORT_UDP && type != PJSIP_TRANSPORT_UDP6) ? pjsip_transport_get_type_name(type) : "");
1602
1603         status = pjsip_dlg_create_uas(pjsip_ua_instance(), rdata, &contact, &dlg);
1604         if (status != PJ_SUCCESS) {
1605                 char err[PJ_ERR_MSG_SIZE];
1606
1607                 pj_strerror(status, err, sizeof(err));
1608                 ast_log(LOG_ERROR, "Could not create dialog with endpoint %s. %s\n",
1609                                 ast_sorcery_object_get_id(endpoint), err);
1610                 return NULL;
1611         }
1612
1613         return dlg;
1614 }
1615
1616 /* PJSIP doesn't know about the INFO method, so we have to define it ourselves */
1617 static const pjsip_method info_method = {PJSIP_OTHER_METHOD, {"INFO", 4} };
1618 static const pjsip_method message_method = {PJSIP_OTHER_METHOD, {"MESSAGE", 7} };
1619
1620 static struct {
1621         const char *method;
1622         const pjsip_method *pmethod;
1623 } methods [] = {
1624         { "INVITE", &pjsip_invite_method },
1625         { "CANCEL", &pjsip_cancel_method },
1626         { "ACK", &pjsip_ack_method },
1627         { "BYE", &pjsip_bye_method },
1628         { "REGISTER", &pjsip_register_method },
1629         { "OPTIONS", &pjsip_options_method },
1630         { "SUBSCRIBE", &pjsip_subscribe_method },
1631         { "NOTIFY", &pjsip_notify_method },
1632         { "PUBLISH", &pjsip_publish_method },
1633         { "INFO", &info_method },
1634         { "MESSAGE", &message_method },
1635 };
1636
1637 static const pjsip_method *get_pjsip_method(const char *method)
1638 {
1639         int i;
1640         for (i = 0; i < ARRAY_LEN(methods); ++i) {
1641                 if (!strcmp(method, methods[i].method)) {
1642                         return methods[i].pmethod;
1643                 }
1644         }
1645         return NULL;
1646 }
1647
1648 static int create_in_dialog_request(const pjsip_method *method, struct pjsip_dialog *dlg, pjsip_tx_data **tdata)
1649 {
1650         if (pjsip_dlg_create_request(dlg, method, -1, tdata) != PJ_SUCCESS) {
1651                 ast_log(LOG_WARNING, "Unable to create in-dialog request.\n");
1652                 return -1;
1653         }
1654
1655         return 0;
1656 }
1657
1658 static pj_bool_t supplement_on_rx_request(pjsip_rx_data *rdata);
1659 static pjsip_module supplement_module = {
1660         .name = { "Out of dialog supplement hook", 29 },
1661         .id = -1,
1662         .priority = PJSIP_MOD_PRIORITY_APPLICATION - 1,
1663         .on_rx_request = supplement_on_rx_request,
1664 };
1665
1666 static int create_out_of_dialog_request(const pjsip_method *method, struct ast_sip_endpoint *endpoint,
1667                 const char *uri, struct ast_sip_contact *provided_contact, pjsip_tx_data **tdata)
1668 {
1669         RAII_VAR(struct ast_sip_contact *, contact, ao2_bump(provided_contact), ao2_cleanup);
1670         pj_str_t remote_uri;
1671         pj_str_t from;
1672         pj_pool_t *pool;
1673         pjsip_tpselector selector = { .type = PJSIP_TPSELECTOR_NONE, };
1674
1675         if (ast_strlen_zero(uri)) {
1676                 if (!endpoint && !contact) {
1677                         ast_log(LOG_ERROR, "An endpoint and/or uri must be specified\n");
1678                         return -1;
1679                 }
1680
1681                 if (!contact) {
1682                         contact = ast_sip_location_retrieve_contact_from_aor_list(endpoint->aors);
1683                 }
1684                 if (!contact || ast_strlen_zero(contact->uri)) {
1685                         ast_log(LOG_ERROR, "Unable to retrieve contact for endpoint %s\n",
1686                                         ast_sorcery_object_get_id(endpoint));
1687                         return -1;
1688                 }
1689
1690                 pj_cstr(&remote_uri, contact->uri);
1691         } else {
1692                 pj_cstr(&remote_uri, uri);
1693         }
1694
1695         if (endpoint) {
1696                 if (sip_get_tpselector_from_endpoint(endpoint, &selector)) {
1697                         ast_log(LOG_ERROR, "Unable to retrieve PJSIP transport selector for endpoint %s\n",
1698                                 ast_sorcery_object_get_id(endpoint));
1699                         return -1;
1700                 }
1701         }
1702
1703         pool = pjsip_endpt_create_pool(ast_sip_get_pjsip_endpoint(), "Outbound request", 256, 256);
1704
1705         if (!pool) {
1706                 ast_log(LOG_ERROR, "Unable to create PJLIB memory pool\n");
1707                 return -1;
1708         }
1709
1710         if (sip_dialog_create_from(pool, &from, endpoint ? endpoint->fromuser : NULL,
1711                                 endpoint ? endpoint->fromdomain : NULL, &remote_uri, &selector)) {
1712                 ast_log(LOG_ERROR, "Unable to create From header for %.*s request to endpoint %s\n",
1713                                 (int) pj_strlen(&method->name), pj_strbuf(&method->name), ast_sorcery_object_get_id(endpoint));
1714                 pjsip_endpt_release_pool(ast_sip_get_pjsip_endpoint(), pool);
1715                 return -1;
1716         }
1717
1718         if (pjsip_endpt_create_request(ast_sip_get_pjsip_endpoint(), method, &remote_uri,
1719                         &from, &remote_uri, &from, NULL, -1, NULL, tdata) != PJ_SUCCESS) {
1720                 ast_log(LOG_ERROR, "Unable to create outbound %.*s request to endpoint %s\n",
1721                                 (int) pj_strlen(&method->name), pj_strbuf(&method->name), ast_sorcery_object_get_id(endpoint));
1722                 pjsip_endpt_release_pool(ast_sip_get_pjsip_endpoint(), pool);
1723                 return -1;
1724         }
1725
1726         /* If an outbound proxy is specified on the endpoint apply it to this request */
1727         if (endpoint && !ast_strlen_zero(endpoint->outbound_proxy) &&
1728                 ast_sip_set_outbound_proxy((*tdata), endpoint->outbound_proxy)) {
1729                 ast_log(LOG_ERROR, "Unable to apply outbound proxy on request %.*s to endpoint %s\n",
1730                         (int) pj_strlen(&method->name), pj_strbuf(&method->name), ast_sorcery_object_get_id(endpoint));
1731                 pjsip_endpt_release_pool(ast_sip_get_pjsip_endpoint(), pool);
1732                 return -1;
1733         }
1734
1735         ast_sip_mod_data_set((*tdata)->pool, (*tdata)->mod_data, supplement_module.id, MOD_DATA_CONTACT, ao2_bump(contact));
1736
1737         /* We can release this pool since request creation copied all the necessary
1738          * data into the outbound request's pool
1739          */
1740         pjsip_endpt_release_pool(ast_sip_get_pjsip_endpoint(), pool);
1741         return 0;
1742 }
1743
1744 int ast_sip_create_request(const char *method, struct pjsip_dialog *dlg,
1745                 struct ast_sip_endpoint *endpoint, const char *uri,
1746                 struct ast_sip_contact *contact, pjsip_tx_data **tdata)
1747 {
1748         const pjsip_method *pmethod = get_pjsip_method(method);
1749
1750         if (!pmethod) {
1751                 ast_log(LOG_WARNING, "Unknown method '%s'. Cannot send request\n", method);
1752                 return -1;
1753         }
1754
1755         if (dlg) {
1756                 return create_in_dialog_request(pmethod, dlg, tdata);
1757         } else {
1758                 return create_out_of_dialog_request(pmethod, endpoint, uri, contact, tdata);
1759         }
1760 }
1761
1762 AST_RWLIST_HEAD_STATIC(supplements, ast_sip_supplement);
1763
1764 int ast_sip_register_supplement(struct ast_sip_supplement *supplement)
1765 {
1766         struct ast_sip_supplement *iter;
1767         int inserted = 0;
1768         SCOPED_LOCK(lock, &supplements, AST_RWLIST_WRLOCK, AST_RWLIST_UNLOCK);
1769
1770         AST_RWLIST_TRAVERSE_SAFE_BEGIN(&supplements, iter, next) {
1771                 if (iter->priority > supplement->priority) {
1772                         AST_RWLIST_INSERT_BEFORE_CURRENT(supplement, next);
1773                         inserted = 1;
1774                         break;
1775                 }
1776         }
1777         AST_RWLIST_TRAVERSE_SAFE_END;
1778
1779         if (!inserted) {
1780                 AST_RWLIST_INSERT_TAIL(&supplements, supplement, next);
1781         }
1782         ast_module_ref(ast_module_info->self);
1783         return 0;
1784 }
1785
1786 void ast_sip_unregister_supplement(struct ast_sip_supplement *supplement)
1787 {
1788         struct ast_sip_supplement *iter;
1789         SCOPED_LOCK(lock, &supplements, AST_RWLIST_WRLOCK, AST_RWLIST_UNLOCK);
1790         AST_RWLIST_TRAVERSE_SAFE_BEGIN(&supplements, iter, next) {
1791                 if (supplement == iter) {
1792                         AST_RWLIST_REMOVE_CURRENT(next);
1793                         ast_module_unref(ast_module_info->self);
1794                         break;
1795                 }
1796         }
1797         AST_RWLIST_TRAVERSE_SAFE_END;
1798 }
1799
1800 static int send_in_dialog_request(pjsip_tx_data *tdata, struct pjsip_dialog *dlg)
1801 {
1802         if (pjsip_dlg_send_request(dlg, tdata, -1, NULL) != PJ_SUCCESS) {
1803                 ast_log(LOG_WARNING, "Unable to send in-dialog request.\n");
1804                 return -1;
1805         }
1806         return 0;
1807 }
1808
1809 static pj_bool_t does_method_match(const pj_str_t *message_method, const char *supplement_method)
1810 {
1811         pj_str_t method;
1812
1813         if (ast_strlen_zero(supplement_method)) {
1814                 return PJ_TRUE;
1815         }
1816
1817         pj_cstr(&method, supplement_method);
1818
1819         return pj_stristr(&method, message_method) ? PJ_TRUE : PJ_FALSE;
1820 }
1821
1822 /*! \brief Structure to hold information about an outbound request */
1823 struct send_request_data {
1824         struct ast_sip_endpoint *endpoint;              /*! The endpoint associated with this request */
1825         void *token;                                    /*! Information to be provided to the callback upon receipt of a response */
1826         void (*callback)(void *token, pjsip_event *e);  /*! The callback to be called upon receipt of a response */
1827 };
1828
1829 static void send_request_data_destroy(void *obj)
1830 {
1831         struct send_request_data *req_data = obj;
1832         ao2_cleanup(req_data->endpoint);
1833 }
1834
1835 static struct send_request_data *send_request_data_alloc(struct ast_sip_endpoint *endpoint,
1836         void *token, void (*callback)(void *token, pjsip_event *e))
1837 {
1838         struct send_request_data *req_data = ao2_alloc(sizeof(*req_data), send_request_data_destroy);
1839
1840         if (!req_data) {
1841                 return NULL;
1842         }
1843
1844         req_data->endpoint = ao2_bump(endpoint);
1845         req_data->token = token;
1846         req_data->callback = callback;
1847
1848         return req_data;
1849 }
1850
1851 static void send_request_cb(void *token, pjsip_event *e)
1852 {
1853         RAII_VAR(struct send_request_data *, req_data, token, ao2_cleanup);
1854         pjsip_transaction *tsx = e->body.tsx_state.tsx;
1855         pjsip_rx_data *challenge = e->body.tsx_state.src.rdata;
1856         pjsip_tx_data *tdata;
1857         struct ast_sip_supplement *supplement;
1858
1859         AST_RWLIST_RDLOCK(&supplements);
1860         AST_LIST_TRAVERSE(&supplements, supplement, next) {
1861                 if (supplement->incoming_response && does_method_match(&challenge->msg_info.cseq->method.name, supplement->method)) {
1862                         supplement->incoming_response(req_data->endpoint, challenge);
1863                 }
1864         }
1865         AST_RWLIST_UNLOCK(&supplements);
1866
1867         if ((tsx->status_code == 401 || tsx->status_code == 407)
1868                 && req_data->endpoint
1869                 && !ast_sip_create_request_with_auth(&req_data->endpoint->outbound_auths, challenge, tsx, &tdata)
1870                 && pjsip_endpt_send_request(ast_sip_get_pjsip_endpoint(), tdata, -1, req_data->token, req_data->callback)
1871                         == PJ_SUCCESS) {
1872                 return;
1873         }
1874
1875         if (req_data->callback) {
1876                 req_data->callback(req_data->token, e);
1877         }
1878 }
1879
1880 static int send_out_of_dialog_request(pjsip_tx_data *tdata, struct ast_sip_endpoint *endpoint,
1881         void *token, void (*callback)(void *token, pjsip_event *e))
1882 {
1883         struct ast_sip_supplement *supplement;
1884         struct send_request_data *req_data = send_request_data_alloc(endpoint, token, callback);
1885         struct ast_sip_contact *contact = ast_sip_mod_data_get(tdata->mod_data, supplement_module.id, MOD_DATA_CONTACT);
1886
1887         if (!req_data) {
1888                 pjsip_tx_data_dec_ref(tdata);
1889                 return -1;
1890         }
1891
1892         AST_RWLIST_RDLOCK(&supplements);
1893         AST_LIST_TRAVERSE(&supplements, supplement, next) {
1894                 if (supplement->outgoing_request && does_method_match(&tdata->msg->line.req.method.name, supplement->method)) {
1895                         supplement->outgoing_request(endpoint, contact, tdata);
1896                 }
1897         }
1898         AST_RWLIST_UNLOCK(&supplements);
1899
1900         ast_sip_mod_data_set(tdata->pool, tdata->mod_data, supplement_module.id, MOD_DATA_CONTACT, NULL);
1901         ao2_cleanup(contact);
1902
1903         if (pjsip_endpt_send_request(ast_sip_get_pjsip_endpoint(), tdata, -1, req_data, send_request_cb) != PJ_SUCCESS) {
1904                 ast_log(LOG_ERROR, "Error attempting to send outbound %.*s request to endpoint %s\n",
1905                                 (int) pj_strlen(&tdata->msg->line.req.method.name),
1906                                 pj_strbuf(&tdata->msg->line.req.method.name),
1907                                 endpoint ? ast_sorcery_object_get_id(endpoint) : "<unknown>");
1908                 ao2_cleanup(req_data);
1909                 return -1;
1910         }
1911
1912         return 0;
1913 }
1914
1915 int ast_sip_send_request(pjsip_tx_data *tdata, struct pjsip_dialog *dlg,
1916         struct ast_sip_endpoint *endpoint, void *token,
1917         void (*callback)(void *token, pjsip_event *e))
1918 {
1919         ast_assert(tdata->msg->type == PJSIP_REQUEST_MSG);
1920
1921         if (dlg) {
1922                 return send_in_dialog_request(tdata, dlg);
1923         } else {
1924                 return send_out_of_dialog_request(tdata, endpoint, token, callback);
1925         }
1926 }
1927
1928 int ast_sip_set_outbound_proxy(pjsip_tx_data *tdata, const char *proxy)
1929 {
1930         pjsip_route_hdr *route;
1931         static const pj_str_t ROUTE_HNAME = { "Route", 5 };
1932         pj_str_t tmp;
1933
1934         pj_strdup2_with_null(tdata->pool, &tmp, proxy);
1935         if (!(route = pjsip_parse_hdr(tdata->pool, &ROUTE_HNAME, tmp.ptr, tmp.slen, NULL))) {
1936                 return -1;
1937         }
1938
1939         pj_list_insert_nodes_before(&tdata->msg->hdr, (pjsip_hdr*)route);
1940
1941         return 0;
1942 }
1943
1944 int ast_sip_add_header(pjsip_tx_data *tdata, const char *name, const char *value)
1945 {
1946         pj_str_t hdr_name;
1947         pj_str_t hdr_value;
1948         pjsip_generic_string_hdr *hdr;
1949
1950         pj_cstr(&hdr_name, name);
1951         pj_cstr(&hdr_value, value);
1952
1953         hdr = pjsip_generic_string_hdr_create(tdata->pool, &hdr_name, &hdr_value);
1954
1955         pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr *) hdr);
1956         return 0;
1957 }
1958
1959 static pjsip_msg_body *ast_body_to_pjsip_body(pj_pool_t *pool, const struct ast_sip_body *body)
1960 {
1961         pj_str_t type;
1962         pj_str_t subtype;
1963         pj_str_t body_text;
1964
1965         pj_cstr(&type, body->type);
1966         pj_cstr(&subtype, body->subtype);
1967         pj_cstr(&body_text, body->body_text);
1968
1969         return pjsip_msg_body_create(pool, &type, &subtype, &body_text);
1970 }
1971
1972 int ast_sip_add_body(pjsip_tx_data *tdata, const struct ast_sip_body *body)
1973 {
1974         pjsip_msg_body *pjsip_body = ast_body_to_pjsip_body(tdata->pool, body);
1975         tdata->msg->body = pjsip_body;
1976         return 0;
1977 }
1978
1979 int ast_sip_add_body_multipart(pjsip_tx_data *tdata, const struct ast_sip_body *bodies[], int num_bodies)
1980 {
1981         int i;
1982         /* NULL for type and subtype automatically creates "multipart/mixed" */
1983         pjsip_msg_body *body = pjsip_multipart_create(tdata->pool, NULL, NULL);
1984
1985         for (i = 0; i < num_bodies; ++i) {
1986                 pjsip_multipart_part *part = pjsip_multipart_create_part(tdata->pool);
1987                 part->body = ast_body_to_pjsip_body(tdata->pool, bodies[i]);
1988                 pjsip_multipart_add_part(tdata->pool, body, part);
1989         }
1990
1991         tdata->msg->body = body;
1992         return 0;
1993 }
1994
1995 int ast_sip_append_body(pjsip_tx_data *tdata, const char *body_text)
1996 {
1997         size_t combined_size = strlen(body_text) + tdata->msg->body->len;
1998         struct ast_str *body_buffer = ast_str_alloca(combined_size);
1999
2000         ast_str_set(&body_buffer, 0, "%.*s%s", (int) tdata->msg->body->len, (char *) tdata->msg->body->data, body_text);
2001
2002         tdata->msg->body->data = pj_pool_alloc(tdata->pool, combined_size);
2003         pj_memcpy(tdata->msg->body->data, ast_str_buffer(body_buffer), combined_size);
2004         tdata->msg->body->len = combined_size;
2005
2006         return 0;
2007 }
2008
2009 struct ast_taskprocessor *ast_sip_create_serializer(void)
2010 {
2011         struct ast_taskprocessor *serializer;
2012         RAII_VAR(struct ast_uuid *, uuid, ast_uuid_generate(), ast_free_ptr);
2013         char name[AST_UUID_STR_LEN];
2014
2015         if (!uuid) {
2016                 return NULL;
2017         }
2018
2019         ast_uuid_to_str(uuid, name, sizeof(name));
2020
2021         serializer = ast_threadpool_serializer(name, sip_threadpool);
2022         if (!serializer) {
2023                 return NULL;
2024         }
2025         return serializer;
2026 }
2027
2028 int ast_sip_push_task(struct ast_taskprocessor *serializer, int (*sip_task)(void *), void *task_data)
2029 {
2030         if (serializer) {
2031                 return ast_taskprocessor_push(serializer, sip_task, task_data);
2032         } else {
2033                 return ast_threadpool_push(sip_threadpool, sip_task, task_data);
2034         }
2035 }
2036
2037 struct sync_task_data {
2038         ast_mutex_t lock;
2039         ast_cond_t cond;
2040         int complete;
2041         int fail;
2042         int (*task)(void *);
2043         void *task_data;
2044 };
2045
2046 static int sync_task(void *data)
2047 {
2048         struct sync_task_data *std = data;
2049         std->fail = std->task(std->task_data);
2050
2051         ast_mutex_lock(&std->lock);
2052         std->complete = 1;
2053         ast_cond_signal(&std->cond);
2054         ast_mutex_unlock(&std->lock);
2055         return std->fail;
2056 }
2057
2058 int ast_sip_push_task_synchronous(struct ast_taskprocessor *serializer, int (*sip_task)(void *), void *task_data)
2059 {
2060         /* This method is an onion */
2061         struct sync_task_data std;
2062
2063         if (ast_sip_thread_is_servant()) {
2064                 return sip_task(task_data);
2065         }
2066
2067         ast_mutex_init(&std.lock);
2068         ast_cond_init(&std.cond, NULL);
2069         std.fail = std.complete = 0;
2070         std.task = sip_task;
2071         std.task_data = task_data;
2072
2073         if (serializer) {
2074                 if (ast_taskprocessor_push(serializer, sync_task, &std)) {
2075                         return -1;
2076                 }
2077         } else {
2078                 if (ast_threadpool_push(sip_threadpool, sync_task, &std)) {
2079                         return -1;
2080                 }
2081         }
2082
2083         ast_mutex_lock(&std.lock);
2084         while (!std.complete) {
2085                 ast_cond_wait(&std.cond, &std.lock);
2086         }
2087         ast_mutex_unlock(&std.lock);
2088
2089         ast_mutex_destroy(&std.lock);
2090         ast_cond_destroy(&std.cond);
2091         return std.fail;
2092 }
2093
2094 void ast_copy_pj_str(char *dest, const pj_str_t *src, size_t size)
2095 {
2096         size_t chars_to_copy = MIN(size - 1, pj_strlen(src));
2097         memcpy(dest, pj_strbuf(src), chars_to_copy);
2098         dest[chars_to_copy] = '\0';
2099 }
2100
2101 int ast_sip_is_content_type(pjsip_media_type *content_type, char *type, char *subtype)
2102 {
2103         pjsip_media_type compare;
2104
2105         if (!content_type) {
2106                 return 0;
2107         }
2108
2109         pjsip_media_type_init2(&compare, type, subtype);
2110
2111         return pjsip_media_type_cmp(content_type, &compare, 0) ? 0 : -1;
2112 }
2113
2114 pj_caching_pool caching_pool;
2115 pj_pool_t *memory_pool;
2116 pj_thread_t *monitor_thread;
2117 static int monitor_continue;
2118
2119 static void *monitor_thread_exec(void *endpt)
2120 {
2121         while (monitor_continue) {
2122                 const pj_time_val delay = {0, 10};
2123                 pjsip_endpt_handle_events(ast_pjsip_endpoint, &delay);
2124         }
2125         return NULL;
2126 }
2127
2128 static void stop_monitor_thread(void)
2129 {
2130         monitor_continue = 0;
2131         pj_thread_join(monitor_thread);
2132 }
2133
2134 AST_THREADSTORAGE(pj_thread_storage);
2135 AST_THREADSTORAGE(servant_id_storage);
2136 #define SIP_SERVANT_ID 0x5E2F1D
2137
2138 static void sip_thread_start(void)
2139 {
2140         pj_thread_desc *desc;
2141         pj_thread_t *thread;
2142         uint32_t *servant_id;
2143
2144         servant_id = ast_threadstorage_get(&servant_id_storage, sizeof(*servant_id));
2145         if (!servant_id) {
2146                 ast_log(LOG_ERROR, "Could not set SIP servant ID in thread-local storage.\n");
2147                 return;
2148         }
2149         *servant_id = SIP_SERVANT_ID;
2150
2151         desc = ast_threadstorage_get(&pj_thread_storage, sizeof(pj_thread_desc));
2152         if (!desc) {
2153                 ast_log(LOG_ERROR, "Could not get thread desc from thread-local storage. Expect awful things to occur\n");
2154                 return;
2155         }
2156         pj_bzero(*desc, sizeof(*desc));
2157
2158         if (pj_thread_register("Asterisk Thread", *desc, &thread) != PJ_SUCCESS) {
2159                 ast_log(LOG_ERROR, "Couldn't register thread with PJLIB.\n");
2160         }
2161 }
2162
2163 int ast_sip_thread_is_servant(void)
2164 {
2165         uint32_t *servant_id;
2166
2167         servant_id = ast_threadstorage_get(&servant_id_storage, sizeof(*servant_id));
2168         if (!servant_id) {
2169                 return 0;
2170         }
2171
2172         return *servant_id == SIP_SERVANT_ID;
2173 }
2174
2175 void *ast_sip_dict_get(void *ht, const char *key)
2176 {
2177         unsigned int hval = 0;
2178
2179         if (!ht) {
2180                 return NULL;
2181         }
2182
2183         return pj_hash_get(ht, key, PJ_HASH_KEY_STRING, &hval);
2184 }
2185
2186 void *ast_sip_dict_set(pj_pool_t* pool, void *ht,
2187                        const char *key, void *val)
2188 {
2189         if (!ht) {
2190                 ht = pj_hash_create(pool, 11);
2191         }
2192
2193         pj_hash_set(pool, ht, key, PJ_HASH_KEY_STRING, 0, val);
2194
2195         return ht;
2196 }
2197
2198 static pj_bool_t supplement_on_rx_request(pjsip_rx_data *rdata)
2199 {
2200         struct ast_sip_supplement *supplement;
2201
2202         if (pjsip_rdata_get_dlg(rdata)) {
2203                 return PJ_FALSE;
2204         }
2205
2206         AST_RWLIST_RDLOCK(&supplements);
2207         AST_LIST_TRAVERSE(&supplements, supplement, next) {
2208                 if (supplement->incoming_request && does_method_match(&rdata->msg_info.msg->line.req.method.name, supplement->method)) {
2209                         supplement->incoming_request(ast_pjsip_rdata_get_endpoint(rdata), rdata);
2210                 }
2211         }
2212         AST_RWLIST_UNLOCK(&supplements);
2213
2214         return PJ_FALSE;
2215 }
2216
2217 int ast_sip_send_response(pjsip_response_addr *res_addr, pjsip_tx_data *tdata, struct ast_sip_endpoint *sip_endpoint)
2218 {
2219         struct ast_sip_supplement *supplement;
2220         pjsip_cseq_hdr *cseq = pjsip_msg_find_hdr(tdata->msg, PJSIP_H_CSEQ, NULL);
2221         struct ast_sip_contact *contact = ast_sip_mod_data_get(tdata->mod_data, supplement_module.id, MOD_DATA_CONTACT);
2222
2223         AST_RWLIST_RDLOCK(&supplements);
2224         AST_LIST_TRAVERSE(&supplements, supplement, next) {
2225                 if (supplement->outgoing_response && does_method_match(&cseq->method.name, supplement->method)) {
2226                         supplement->outgoing_response(sip_endpoint, contact, tdata);
2227                 }
2228         }
2229         AST_RWLIST_UNLOCK(&supplements);
2230
2231         ast_sip_mod_data_set(tdata->pool, tdata->mod_data, supplement_module.id, MOD_DATA_CONTACT, NULL);
2232         ao2_cleanup(contact);
2233
2234         return pjsip_endpt_send_response(ast_sip_get_pjsip_endpoint(), res_addr, tdata, NULL, NULL);
2235 }
2236
2237 int ast_sip_create_response(const pjsip_rx_data *rdata, int st_code,
2238         struct ast_sip_contact *contact, pjsip_tx_data **tdata)
2239 {
2240         int res = pjsip_endpt_create_response(ast_sip_get_pjsip_endpoint(), rdata, st_code, NULL, tdata);
2241
2242         if (!res) {
2243                 ast_sip_mod_data_set((*tdata)->pool, (*tdata)->mod_data, supplement_module.id, MOD_DATA_CONTACT, ao2_bump(contact));
2244         }
2245
2246         return res;
2247 }
2248
2249 static void remove_request_headers(pjsip_endpoint *endpt)
2250 {
2251         const pjsip_hdr *request_headers = pjsip_endpt_get_request_headers(endpt);
2252         pjsip_hdr *iter = request_headers->next;
2253
2254         while (iter != request_headers) {
2255                 pjsip_hdr *to_erase = iter;
2256                 iter = iter->next;
2257                 pj_list_erase(to_erase);
2258         }
2259 }
2260
2261 static int load_module(void)
2262 {
2263         /* The third parameter is just copied from
2264          * example code from PJLIB. This can be adjusted
2265          * if necessary.
2266          */
2267         pj_status_t status;
2268         struct ast_threadpool_options options;
2269
2270         if (pj_init() != PJ_SUCCESS) {
2271                 return AST_MODULE_LOAD_DECLINE;
2272         }
2273
2274         if (pjlib_util_init() != PJ_SUCCESS) {
2275                 pj_shutdown();
2276                 return AST_MODULE_LOAD_DECLINE;
2277         }
2278
2279         pj_caching_pool_init(&caching_pool, NULL, 1024 * 1024);
2280         if (pjsip_endpt_create(&caching_pool.factory, "SIP", &ast_pjsip_endpoint) != PJ_SUCCESS) {
2281                 ast_log(LOG_ERROR, "Failed to create PJSIP endpoint structure. Aborting load\n");
2282                 pj_caching_pool_destroy(&caching_pool);
2283                 return AST_MODULE_LOAD_DECLINE;
2284         }
2285
2286         /* PJSIP will automatically try to add a Max-Forwards header. Since we want to control that,
2287          * we need to stop PJSIP from doing it automatically
2288          */
2289         remove_request_headers(ast_pjsip_endpoint);
2290
2291         memory_pool = pj_pool_create(&caching_pool.factory, "SIP", 1024, 1024, NULL);
2292         if (!memory_pool) {
2293                 ast_log(LOG_ERROR, "Failed to create memory pool for SIP. Aborting load\n");
2294                 pjsip_endpt_destroy(ast_pjsip_endpoint);
2295                 ast_pjsip_endpoint = NULL;
2296                 pj_caching_pool_destroy(&caching_pool);
2297                 return AST_MODULE_LOAD_DECLINE;
2298         }
2299
2300         if (ast_sip_initialize_system()) {
2301                 ast_log(LOG_ERROR, "Failed to initialize SIP 'system' configuration section. Aborting load\n");
2302                 pj_pool_release(memory_pool);
2303                 memory_pool = NULL;
2304                 pjsip_endpt_destroy(ast_pjsip_endpoint);
2305                 ast_pjsip_endpoint = NULL;
2306                 pj_caching_pool_destroy(&caching_pool);
2307                 return AST_MODULE_LOAD_DECLINE;
2308         }
2309
2310         sip_get_threadpool_options(&options);
2311         options.thread_start = sip_thread_start;
2312         sip_threadpool = ast_threadpool_create("SIP", NULL, &options);
2313         if (!sip_threadpool) {
2314                 ast_log(LOG_ERROR, "Failed to create SIP threadpool. Aborting load\n");
2315                 ast_sip_destroy_system();
2316                 pj_pool_release(memory_pool);
2317                 memory_pool = NULL;
2318                 pjsip_endpt_destroy(ast_pjsip_endpoint);
2319                 ast_pjsip_endpoint = NULL;
2320                 pj_caching_pool_destroy(&caching_pool);
2321                 return AST_MODULE_LOAD_DECLINE;
2322         }
2323
2324         ast_sip_initialize_dns();
2325
2326         pjsip_tsx_layer_init_module(ast_pjsip_endpoint);
2327         pjsip_ua_init_module(ast_pjsip_endpoint, NULL);
2328
2329         monitor_continue = 1;
2330         status = pj_thread_create(memory_pool, "SIP", (pj_thread_proc *) &monitor_thread_exec,
2331                         NULL, PJ_THREAD_DEFAULT_STACK_SIZE * 2, 0, &monitor_thread);
2332         if (status != PJ_SUCCESS) {
2333                 ast_log(LOG_ERROR, "Failed to start SIP monitor thread. Aborting load\n");
2334                 ast_sip_destroy_system();
2335                 pj_pool_release(memory_pool);
2336                 memory_pool = NULL;
2337                 pjsip_endpt_destroy(ast_pjsip_endpoint);
2338                 ast_pjsip_endpoint = NULL;
2339                 pj_caching_pool_destroy(&caching_pool);
2340                 return AST_MODULE_LOAD_DECLINE;
2341         }
2342
2343         ast_sip_initialize_global_headers();
2344
2345         if (ast_res_pjsip_initialize_configuration(ast_module_info)) {
2346                 ast_log(LOG_ERROR, "Failed to initialize SIP configuration. Aborting load\n");
2347                 ast_sip_destroy_global_headers();
2348                 stop_monitor_thread();
2349                 ast_sip_destroy_system();
2350                 pj_pool_release(memory_pool);
2351                 memory_pool = NULL;
2352                 pjsip_endpt_destroy(ast_pjsip_endpoint);
2353                 ast_pjsip_endpoint = NULL;
2354                 pj_caching_pool_destroy(&caching_pool);
2355                 return AST_MODULE_LOAD_DECLINE;
2356         }
2357
2358         if (ast_sip_initialize_distributor()) {
2359                 ast_log(LOG_ERROR, "Failed to register distributor module. Aborting load\n");
2360                 ast_res_pjsip_destroy_configuration();
2361                 ast_sip_destroy_global_headers();
2362                 stop_monitor_thread();
2363                 ast_sip_destroy_system();
2364                 pj_pool_release(memory_pool);
2365                 memory_pool = NULL;
2366                 pjsip_endpt_destroy(ast_pjsip_endpoint);
2367                 ast_pjsip_endpoint = NULL;
2368                 pj_caching_pool_destroy(&caching_pool);
2369                 return AST_MODULE_LOAD_DECLINE;
2370         }
2371
2372         if (ast_sip_register_service(&supplement_module)) {
2373                 ast_log(LOG_ERROR, "Failed to initialize supplement hooks. Aborting load\n");
2374                 ast_sip_destroy_distributor();
2375                 ast_res_pjsip_destroy_configuration();
2376                 ast_sip_destroy_global_headers();
2377                 stop_monitor_thread();
2378                 ast_sip_destroy_system();
2379                 pj_pool_release(memory_pool);
2380                 memory_pool = NULL;
2381                 pjsip_endpt_destroy(ast_pjsip_endpoint);
2382                 ast_pjsip_endpoint = NULL;
2383                 pj_caching_pool_destroy(&caching_pool);
2384                 return AST_MODULE_LOAD_DECLINE;
2385         }
2386
2387         if (ast_sip_initialize_outbound_authentication()) {
2388                 ast_log(LOG_ERROR, "Failed to initialize outbound authentication. Aborting load\n");
2389                 ast_sip_unregister_service(&supplement_module);
2390                 ast_sip_destroy_distributor();
2391                 ast_res_pjsip_destroy_configuration();
2392                 ast_sip_destroy_global_headers();
2393                 stop_monitor_thread();
2394                 ast_sip_destroy_system();
2395                 pj_pool_release(memory_pool);
2396                 memory_pool = NULL;
2397                 pjsip_endpt_destroy(ast_pjsip_endpoint);
2398                 ast_pjsip_endpoint = NULL;
2399                 pj_caching_pool_destroy(&caching_pool);
2400                 return AST_MODULE_LOAD_DECLINE;
2401         }
2402
2403         ast_res_pjsip_init_options_handling(0);
2404
2405         ast_module_ref(ast_module_info->self);
2406
2407         return AST_MODULE_LOAD_SUCCESS;
2408 }
2409
2410 static int reload_module(void)
2411 {
2412         if (ast_res_pjsip_reload_configuration()) {
2413                 return AST_MODULE_LOAD_DECLINE;
2414         }
2415         ast_res_pjsip_init_options_handling(1);
2416         ast_sip_initialize_dns();
2417         return 0;
2418 }
2419
2420 static int unload_module(void)
2421 {
2422         /* This will never get called as this module can't be unloaded */
2423         return 0;
2424 }
2425
2426 AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Basic SIP resource",
2427                 .load = load_module,
2428                 .unload = unload_module,
2429                 .reload = reload_module,
2430                 .load_pri = AST_MODPRI_CHANNEL_DEPEND - 5,
2431 );