Add a "message_context" option for PJSIP endpoints.
[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 {
1498                 return -1;
1499         }
1500
1501         return 0;
1502 }
1503
1504 pjsip_dialog *ast_sip_create_dialog_uac(const struct ast_sip_endpoint *endpoint, const char *uri, const char *request_user)
1505 {
1506         char enclosed_uri[PJSIP_MAX_URL_SIZE];
1507         pj_str_t local_uri = { "sip:temp@temp", 13 }, remote_uri, target_uri;
1508         pjsip_dialog *dlg = NULL;
1509         const char *outbound_proxy = endpoint->outbound_proxy;
1510         pjsip_tpselector selector = { .type = PJSIP_TPSELECTOR_NONE, };
1511         static const pj_str_t HCONTACT = { "Contact", 7 };
1512
1513         snprintf(enclosed_uri, sizeof(enclosed_uri), "<%s>", uri);
1514         pj_cstr(&remote_uri, enclosed_uri);
1515
1516         pj_cstr(&target_uri, uri);
1517
1518         if (pjsip_dlg_create_uac(pjsip_ua_instance(), &local_uri, NULL, &remote_uri, &target_uri, &dlg) != PJ_SUCCESS) {
1519                 return NULL;
1520         }
1521
1522         if (sip_get_tpselector_from_endpoint(endpoint, &selector)) {
1523                 pjsip_dlg_terminate(dlg);
1524                 return NULL;
1525         }
1526
1527         if (sip_dialog_create_from(dlg->pool, &local_uri, endpoint->fromuser, endpoint->fromdomain, &remote_uri, &selector)) {
1528                 pjsip_dlg_terminate(dlg);
1529                 return NULL;
1530         }
1531
1532         /* Update the dialog with the new local URI, we do it afterwards so we can use the dialog pool for construction */
1533         pj_strdup_with_null(dlg->pool, &dlg->local.info_str, &local_uri);
1534         dlg->local.info->uri = pjsip_parse_uri(dlg->pool, dlg->local.info_str.ptr, dlg->local.info_str.slen, 0);
1535         dlg->local.contact = pjsip_parse_hdr(dlg->pool, &HCONTACT, local_uri.ptr, local_uri.slen, NULL);
1536
1537         /* If a request user has been specified and we are permitted to change it, do so */
1538         if (!ast_strlen_zero(request_user)) {
1539                 pjsip_sip_uri *sip_uri;
1540
1541                 if (PJSIP_URI_SCHEME_IS_SIP(dlg->target) || PJSIP_URI_SCHEME_IS_SIPS(dlg->target)) {
1542                         sip_uri = pjsip_uri_get_uri(dlg->target);
1543                         pj_strdup2(dlg->pool, &sip_uri->user, request_user);
1544                 }
1545                 if (PJSIP_URI_SCHEME_IS_SIP(dlg->remote.info->uri) || PJSIP_URI_SCHEME_IS_SIPS(dlg->remote.info->uri)) {
1546                         sip_uri = pjsip_uri_get_uri(dlg->remote.info->uri);
1547                         pj_strdup2(dlg->pool, &sip_uri->user, request_user);
1548                 }
1549         }
1550
1551         /* We have to temporarily bump up the sess_count here so the dialog is not prematurely destroyed */
1552         dlg->sess_count++;
1553
1554         pjsip_dlg_set_transport(dlg, &selector);
1555
1556         if (!ast_strlen_zero(outbound_proxy)) {
1557                 pjsip_route_hdr route_set, *route;
1558                 static const pj_str_t ROUTE_HNAME = { "Route", 5 };
1559                 pj_str_t tmp;
1560
1561                 pj_list_init(&route_set);
1562
1563                 pj_strdup2_with_null(dlg->pool, &tmp, outbound_proxy);
1564                 if (!(route = pjsip_parse_hdr(dlg->pool, &ROUTE_HNAME, tmp.ptr, tmp.slen, NULL))) {
1565                         dlg->sess_count--;
1566                         pjsip_dlg_terminate(dlg);
1567                         return NULL;
1568                 }
1569                 pj_list_insert_nodes_before(&route_set, route);
1570
1571                 pjsip_dlg_set_route_set(dlg, &route_set);
1572         }
1573
1574         dlg->sess_count--;
1575
1576         return dlg;
1577 }
1578
1579 pjsip_dialog *ast_sip_create_dialog_uas(const struct ast_sip_endpoint *endpoint, pjsip_rx_data *rdata)
1580 {
1581         pjsip_dialog *dlg;
1582         pj_str_t contact;
1583         pjsip_transport_type_e type = rdata->tp_info.transport->key.type;
1584         pj_status_t status;
1585
1586         contact.ptr = pj_pool_alloc(rdata->tp_info.pool, PJSIP_MAX_URL_SIZE);
1587         contact.slen = pj_ansi_snprintf(contact.ptr, PJSIP_MAX_URL_SIZE,
1588                         "<sip:%s%.*s%s:%d%s%s>",
1589                         (type & PJSIP_TRANSPORT_IPV6) ? "[" : "",
1590                         (int)rdata->tp_info.transport->local_name.host.slen,
1591                         rdata->tp_info.transport->local_name.host.ptr,
1592                         (type & PJSIP_TRANSPORT_IPV6) ? "]" : "",
1593                         rdata->tp_info.transport->local_name.port,
1594                         (type != PJSIP_TRANSPORT_UDP && type != PJSIP_TRANSPORT_UDP6) ? ";transport=" : "",
1595                         (type != PJSIP_TRANSPORT_UDP && type != PJSIP_TRANSPORT_UDP6) ? pjsip_transport_get_type_name(type) : "");
1596
1597         status = pjsip_dlg_create_uas(pjsip_ua_instance(), rdata, &contact, &dlg);
1598         if (status != PJ_SUCCESS) {
1599                 char err[PJ_ERR_MSG_SIZE];
1600
1601                 pj_strerror(status, err, sizeof(err));
1602                 ast_log(LOG_ERROR, "Could not create dialog with endpoint %s. %s\n",
1603                                 ast_sorcery_object_get_id(endpoint), err);
1604                 return NULL;
1605         }
1606
1607         return dlg;
1608 }
1609
1610 /* PJSIP doesn't know about the INFO method, so we have to define it ourselves */
1611 static const pjsip_method info_method = {PJSIP_OTHER_METHOD, {"INFO", 4} };
1612 static const pjsip_method message_method = {PJSIP_OTHER_METHOD, {"MESSAGE", 7} };
1613
1614 static struct {
1615         const char *method;
1616         const pjsip_method *pmethod;
1617 } methods [] = {
1618         { "INVITE", &pjsip_invite_method },
1619         { "CANCEL", &pjsip_cancel_method },
1620         { "ACK", &pjsip_ack_method },
1621         { "BYE", &pjsip_bye_method },
1622         { "REGISTER", &pjsip_register_method },
1623         { "OPTIONS", &pjsip_options_method },
1624         { "SUBSCRIBE", &pjsip_subscribe_method },
1625         { "NOTIFY", &pjsip_notify_method },
1626         { "PUBLISH", &pjsip_publish_method },
1627         { "INFO", &info_method },
1628         { "MESSAGE", &message_method },
1629 };
1630
1631 static const pjsip_method *get_pjsip_method(const char *method)
1632 {
1633         int i;
1634         for (i = 0; i < ARRAY_LEN(methods); ++i) {
1635                 if (!strcmp(method, methods[i].method)) {
1636                         return methods[i].pmethod;
1637                 }
1638         }
1639         return NULL;
1640 }
1641
1642 static int create_in_dialog_request(const pjsip_method *method, struct pjsip_dialog *dlg, pjsip_tx_data **tdata)
1643 {
1644         if (pjsip_dlg_create_request(dlg, method, -1, tdata) != PJ_SUCCESS) {
1645                 ast_log(LOG_WARNING, "Unable to create in-dialog request.\n");
1646                 return -1;
1647         }
1648
1649         return 0;
1650 }
1651
1652 static pj_bool_t supplement_on_rx_request(pjsip_rx_data *rdata);
1653 static pjsip_module supplement_module = {
1654         .name = { "Out of dialog supplement hook", 29 },
1655         .id = -1,
1656         .priority = PJSIP_MOD_PRIORITY_APPLICATION - 1,
1657         .on_rx_request = supplement_on_rx_request,
1658 };
1659
1660 static int create_out_of_dialog_request(const pjsip_method *method, struct ast_sip_endpoint *endpoint,
1661                 const char *uri, struct ast_sip_contact *provided_contact, pjsip_tx_data **tdata)
1662 {
1663         RAII_VAR(struct ast_sip_contact *, contact, ao2_bump(provided_contact), ao2_cleanup);
1664         pj_str_t remote_uri;
1665         pj_str_t from;
1666         pj_pool_t *pool;
1667         pjsip_tpselector selector = { .type = PJSIP_TPSELECTOR_NONE, };
1668
1669         if (ast_strlen_zero(uri)) {
1670                 if (!endpoint && !contact) {
1671                         ast_log(LOG_ERROR, "An endpoint and/or uri must be specified\n");
1672                         return -1;
1673                 }
1674
1675                 if (!contact) {
1676                         contact = ast_sip_location_retrieve_contact_from_aor_list(endpoint->aors);
1677                 }
1678                 if (!contact || ast_strlen_zero(contact->uri)) {
1679                         ast_log(LOG_ERROR, "Unable to retrieve contact for endpoint %s\n",
1680                                         ast_sorcery_object_get_id(endpoint));
1681                         return -1;
1682                 }
1683
1684                 pj_cstr(&remote_uri, contact->uri);
1685         } else {
1686                 pj_cstr(&remote_uri, uri);
1687         }
1688
1689         if (endpoint) {
1690                 if (sip_get_tpselector_from_endpoint(endpoint, &selector)) {
1691                         ast_log(LOG_ERROR, "Unable to retrieve PJSIP transport selector for endpoint %s\n",
1692                                 ast_sorcery_object_get_id(endpoint));
1693                         return -1;
1694                 }
1695         }
1696
1697         pool = pjsip_endpt_create_pool(ast_sip_get_pjsip_endpoint(), "Outbound request", 256, 256);
1698
1699         if (!pool) {
1700                 ast_log(LOG_ERROR, "Unable to create PJLIB memory pool\n");
1701                 return -1;
1702         }
1703
1704         if (sip_dialog_create_from(pool, &from, endpoint ? endpoint->fromuser : NULL,
1705                                 endpoint ? endpoint->fromdomain : NULL, &remote_uri, &selector)) {
1706                 ast_log(LOG_ERROR, "Unable to create From header for %.*s request to endpoint %s\n",
1707                                 (int) pj_strlen(&method->name), pj_strbuf(&method->name), ast_sorcery_object_get_id(endpoint));
1708                 pjsip_endpt_release_pool(ast_sip_get_pjsip_endpoint(), pool);
1709                 return -1;
1710         }
1711
1712         if (pjsip_endpt_create_request(ast_sip_get_pjsip_endpoint(), method, &remote_uri,
1713                         &from, &remote_uri, &from, NULL, -1, NULL, tdata) != PJ_SUCCESS) {
1714                 ast_log(LOG_ERROR, "Unable to create outbound %.*s request to endpoint %s\n",
1715                                 (int) pj_strlen(&method->name), pj_strbuf(&method->name), ast_sorcery_object_get_id(endpoint));
1716                 pjsip_endpt_release_pool(ast_sip_get_pjsip_endpoint(), pool);
1717                 return -1;
1718         }
1719
1720         /* If an outbound proxy is specified on the endpoint apply it to this request */
1721         if (endpoint && !ast_strlen_zero(endpoint->outbound_proxy) &&
1722                 ast_sip_set_outbound_proxy((*tdata), endpoint->outbound_proxy)) {
1723                 ast_log(LOG_ERROR, "Unable to apply outbound proxy on request %.*s to endpoint %s\n",
1724                         (int) pj_strlen(&method->name), pj_strbuf(&method->name), ast_sorcery_object_get_id(endpoint));
1725                 pjsip_endpt_release_pool(ast_sip_get_pjsip_endpoint(), pool);
1726                 return -1;
1727         }
1728
1729         ast_sip_mod_data_set((*tdata)->pool, (*tdata)->mod_data, supplement_module.id, MOD_DATA_CONTACT, ao2_bump(contact));
1730
1731         /* We can release this pool since request creation copied all the necessary
1732          * data into the outbound request's pool
1733          */
1734         pjsip_endpt_release_pool(ast_sip_get_pjsip_endpoint(), pool);
1735         return 0;
1736 }
1737
1738 int ast_sip_create_request(const char *method, struct pjsip_dialog *dlg,
1739                 struct ast_sip_endpoint *endpoint, const char *uri,
1740                 struct ast_sip_contact *contact, pjsip_tx_data **tdata)
1741 {
1742         const pjsip_method *pmethod = get_pjsip_method(method);
1743
1744         if (!pmethod) {
1745                 ast_log(LOG_WARNING, "Unknown method '%s'. Cannot send request\n", method);
1746                 return -1;
1747         }
1748
1749         if (dlg) {
1750                 return create_in_dialog_request(pmethod, dlg, tdata);
1751         } else {
1752                 return create_out_of_dialog_request(pmethod, endpoint, uri, contact, tdata);
1753         }
1754 }
1755
1756 AST_RWLIST_HEAD_STATIC(supplements, ast_sip_supplement);
1757
1758 int ast_sip_register_supplement(struct ast_sip_supplement *supplement)
1759 {
1760         struct ast_sip_supplement *iter;
1761         int inserted = 0;
1762         SCOPED_LOCK(lock, &supplements, AST_RWLIST_WRLOCK, AST_RWLIST_UNLOCK);
1763
1764         AST_RWLIST_TRAVERSE_SAFE_BEGIN(&supplements, iter, next) {
1765                 if (iter->priority > supplement->priority) {
1766                         AST_RWLIST_INSERT_BEFORE_CURRENT(supplement, next);
1767                         inserted = 1;
1768                         break;
1769                 }
1770         }
1771         AST_RWLIST_TRAVERSE_SAFE_END;
1772
1773         if (!inserted) {
1774                 AST_RWLIST_INSERT_TAIL(&supplements, supplement, next);
1775         }
1776         ast_module_ref(ast_module_info->self);
1777         return 0;
1778 }
1779
1780 void ast_sip_unregister_supplement(struct ast_sip_supplement *supplement)
1781 {
1782         struct ast_sip_supplement *iter;
1783         SCOPED_LOCK(lock, &supplements, AST_RWLIST_WRLOCK, AST_RWLIST_UNLOCK);
1784         AST_RWLIST_TRAVERSE_SAFE_BEGIN(&supplements, iter, next) {
1785                 if (supplement == iter) {
1786                         AST_RWLIST_REMOVE_CURRENT(next);
1787                         ast_module_unref(ast_module_info->self);
1788                         break;
1789                 }
1790         }
1791         AST_RWLIST_TRAVERSE_SAFE_END;
1792 }
1793
1794 static int send_in_dialog_request(pjsip_tx_data *tdata, struct pjsip_dialog *dlg)
1795 {
1796         if (pjsip_dlg_send_request(dlg, tdata, -1, NULL) != PJ_SUCCESS) {
1797                 ast_log(LOG_WARNING, "Unable to send in-dialog request.\n");
1798                 return -1;
1799         }
1800         return 0;
1801 }
1802
1803 static pj_bool_t does_method_match(const pj_str_t *message_method, const char *supplement_method)
1804 {
1805         pj_str_t method;
1806
1807         if (ast_strlen_zero(supplement_method)) {
1808                 return PJ_TRUE;
1809         }
1810
1811         pj_cstr(&method, supplement_method);
1812
1813         return pj_stristr(&method, message_method) ? PJ_TRUE : PJ_FALSE;
1814 }
1815
1816 /*! \brief Structure to hold information about an outbound request */
1817 struct send_request_data {
1818         struct ast_sip_endpoint *endpoint;              /*! The endpoint associated with this request */
1819         void *token;                                    /*! Information to be provided to the callback upon receipt of a response */
1820         void (*callback)(void *token, pjsip_event *e);  /*! The callback to be called upon receipt of a response */
1821 };
1822
1823 static void send_request_data_destroy(void *obj)
1824 {
1825         struct send_request_data *req_data = obj;
1826         ao2_cleanup(req_data->endpoint);
1827 }
1828
1829 static struct send_request_data *send_request_data_alloc(struct ast_sip_endpoint *endpoint,
1830         void *token, void (*callback)(void *token, pjsip_event *e))
1831 {
1832         struct send_request_data *req_data = ao2_alloc(sizeof(*req_data), send_request_data_destroy);
1833
1834         if (!req_data) {
1835                 return NULL;
1836         }
1837
1838         req_data->endpoint = ao2_bump(endpoint);
1839         req_data->token = token;
1840         req_data->callback = callback;
1841
1842         return req_data;
1843 }
1844
1845 static void send_request_cb(void *token, pjsip_event *e)
1846 {
1847         RAII_VAR(struct send_request_data *, req_data, token, ao2_cleanup);
1848         pjsip_transaction *tsx = e->body.tsx_state.tsx;
1849         pjsip_rx_data *challenge = e->body.tsx_state.src.rdata;
1850         pjsip_tx_data *tdata;
1851         struct ast_sip_supplement *supplement;
1852
1853         AST_RWLIST_RDLOCK(&supplements);
1854         AST_LIST_TRAVERSE(&supplements, supplement, next) {
1855                 if (supplement->incoming_response && does_method_match(&challenge->msg_info.cseq->method.name, supplement->method)) {
1856                         supplement->incoming_response(req_data->endpoint, challenge);
1857                 }
1858         }
1859         AST_RWLIST_UNLOCK(&supplements);
1860
1861         if ((tsx->status_code == 401 || tsx->status_code == 407)
1862                 && req_data->endpoint
1863                 && !ast_sip_create_request_with_auth(&req_data->endpoint->outbound_auths, challenge, tsx, &tdata)
1864                 && pjsip_endpt_send_request(ast_sip_get_pjsip_endpoint(), tdata, -1, req_data->token, req_data->callback)
1865                         == PJ_SUCCESS) {
1866                 return;
1867         }
1868
1869         if (req_data->callback) {
1870                 req_data->callback(req_data->token, e);
1871         }
1872 }
1873
1874 static int send_out_of_dialog_request(pjsip_tx_data *tdata, struct ast_sip_endpoint *endpoint,
1875         void *token, void (*callback)(void *token, pjsip_event *e))
1876 {
1877         struct ast_sip_supplement *supplement;
1878         struct send_request_data *req_data = send_request_data_alloc(endpoint, token, callback);
1879         struct ast_sip_contact *contact = ast_sip_mod_data_get(tdata->mod_data, supplement_module.id, MOD_DATA_CONTACT);
1880
1881         if (!req_data) {
1882                 pjsip_tx_data_dec_ref(tdata);
1883                 return -1;
1884         }
1885
1886         AST_RWLIST_RDLOCK(&supplements);
1887         AST_LIST_TRAVERSE(&supplements, supplement, next) {
1888                 if (supplement->outgoing_request && does_method_match(&tdata->msg->line.req.method.name, supplement->method)) {
1889                         supplement->outgoing_request(endpoint, contact, tdata);
1890                 }
1891         }
1892         AST_RWLIST_UNLOCK(&supplements);
1893
1894         ast_sip_mod_data_set(tdata->pool, tdata->mod_data, supplement_module.id, MOD_DATA_CONTACT, NULL);
1895         ao2_cleanup(contact);
1896
1897         if (pjsip_endpt_send_request(ast_sip_get_pjsip_endpoint(), tdata, -1, req_data, send_request_cb) != PJ_SUCCESS) {
1898                 ast_log(LOG_ERROR, "Error attempting to send outbound %.*s request to endpoint %s\n",
1899                                 (int) pj_strlen(&tdata->msg->line.req.method.name),
1900                                 pj_strbuf(&tdata->msg->line.req.method.name),
1901                                 endpoint ? ast_sorcery_object_get_id(endpoint) : "<unknown>");
1902                 ao2_cleanup(req_data);
1903                 return -1;
1904         }
1905
1906         return 0;
1907 }
1908
1909 int ast_sip_send_request(pjsip_tx_data *tdata, struct pjsip_dialog *dlg,
1910         struct ast_sip_endpoint *endpoint, void *token,
1911         void (*callback)(void *token, pjsip_event *e))
1912 {
1913         ast_assert(tdata->msg->type == PJSIP_REQUEST_MSG);
1914
1915         if (dlg) {
1916                 return send_in_dialog_request(tdata, dlg);
1917         } else {
1918                 return send_out_of_dialog_request(tdata, endpoint, token, callback);
1919         }
1920 }
1921
1922 int ast_sip_set_outbound_proxy(pjsip_tx_data *tdata, const char *proxy)
1923 {
1924         pjsip_route_hdr *route;
1925         static const pj_str_t ROUTE_HNAME = { "Route", 5 };
1926         pj_str_t tmp;
1927
1928         pj_strdup2_with_null(tdata->pool, &tmp, proxy);
1929         if (!(route = pjsip_parse_hdr(tdata->pool, &ROUTE_HNAME, tmp.ptr, tmp.slen, NULL))) {
1930                 return -1;
1931         }
1932
1933         pj_list_insert_nodes_before(&tdata->msg->hdr, (pjsip_hdr*)route);
1934
1935         return 0;
1936 }
1937
1938 int ast_sip_add_header(pjsip_tx_data *tdata, const char *name, const char *value)
1939 {
1940         pj_str_t hdr_name;
1941         pj_str_t hdr_value;
1942         pjsip_generic_string_hdr *hdr;
1943
1944         pj_cstr(&hdr_name, name);
1945         pj_cstr(&hdr_value, value);
1946
1947         hdr = pjsip_generic_string_hdr_create(tdata->pool, &hdr_name, &hdr_value);
1948
1949         pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr *) hdr);
1950         return 0;
1951 }
1952
1953 static pjsip_msg_body *ast_body_to_pjsip_body(pj_pool_t *pool, const struct ast_sip_body *body)
1954 {
1955         pj_str_t type;
1956         pj_str_t subtype;
1957         pj_str_t body_text;
1958
1959         pj_cstr(&type, body->type);
1960         pj_cstr(&subtype, body->subtype);
1961         pj_cstr(&body_text, body->body_text);
1962
1963         return pjsip_msg_body_create(pool, &type, &subtype, &body_text);
1964 }
1965
1966 int ast_sip_add_body(pjsip_tx_data *tdata, const struct ast_sip_body *body)
1967 {
1968         pjsip_msg_body *pjsip_body = ast_body_to_pjsip_body(tdata->pool, body);
1969         tdata->msg->body = pjsip_body;
1970         return 0;
1971 }
1972
1973 int ast_sip_add_body_multipart(pjsip_tx_data *tdata, const struct ast_sip_body *bodies[], int num_bodies)
1974 {
1975         int i;
1976         /* NULL for type and subtype automatically creates "multipart/mixed" */
1977         pjsip_msg_body *body = pjsip_multipart_create(tdata->pool, NULL, NULL);
1978
1979         for (i = 0; i < num_bodies; ++i) {
1980                 pjsip_multipart_part *part = pjsip_multipart_create_part(tdata->pool);
1981                 part->body = ast_body_to_pjsip_body(tdata->pool, bodies[i]);
1982                 pjsip_multipart_add_part(tdata->pool, body, part);
1983         }
1984
1985         tdata->msg->body = body;
1986         return 0;
1987 }
1988
1989 int ast_sip_append_body(pjsip_tx_data *tdata, const char *body_text)
1990 {
1991         size_t combined_size = strlen(body_text) + tdata->msg->body->len;
1992         struct ast_str *body_buffer = ast_str_alloca(combined_size);
1993
1994         ast_str_set(&body_buffer, 0, "%.*s%s", (int) tdata->msg->body->len, (char *) tdata->msg->body->data, body_text);
1995
1996         tdata->msg->body->data = pj_pool_alloc(tdata->pool, combined_size);
1997         pj_memcpy(tdata->msg->body->data, ast_str_buffer(body_buffer), combined_size);
1998         tdata->msg->body->len = combined_size;
1999
2000         return 0;
2001 }
2002
2003 struct ast_taskprocessor *ast_sip_create_serializer(void)
2004 {
2005         struct ast_taskprocessor *serializer;
2006         RAII_VAR(struct ast_uuid *, uuid, ast_uuid_generate(), ast_free_ptr);
2007         char name[AST_UUID_STR_LEN];
2008
2009         if (!uuid) {
2010                 return NULL;
2011         }
2012
2013         ast_uuid_to_str(uuid, name, sizeof(name));
2014
2015         serializer = ast_threadpool_serializer(name, sip_threadpool);
2016         if (!serializer) {
2017                 return NULL;
2018         }
2019         return serializer;
2020 }
2021
2022 int ast_sip_push_task(struct ast_taskprocessor *serializer, int (*sip_task)(void *), void *task_data)
2023 {
2024         if (serializer) {
2025                 return ast_taskprocessor_push(serializer, sip_task, task_data);
2026         } else {
2027                 return ast_threadpool_push(sip_threadpool, sip_task, task_data);
2028         }
2029 }
2030
2031 struct sync_task_data {
2032         ast_mutex_t lock;
2033         ast_cond_t cond;
2034         int complete;
2035         int fail;
2036         int (*task)(void *);
2037         void *task_data;
2038 };
2039
2040 static int sync_task(void *data)
2041 {
2042         struct sync_task_data *std = data;
2043         std->fail = std->task(std->task_data);
2044
2045         ast_mutex_lock(&std->lock);
2046         std->complete = 1;
2047         ast_cond_signal(&std->cond);
2048         ast_mutex_unlock(&std->lock);
2049         return std->fail;
2050 }
2051
2052 int ast_sip_push_task_synchronous(struct ast_taskprocessor *serializer, int (*sip_task)(void *), void *task_data)
2053 {
2054         /* This method is an onion */
2055         struct sync_task_data std;
2056
2057         if (ast_sip_thread_is_servant()) {
2058                 return sip_task(task_data);
2059         }
2060
2061         ast_mutex_init(&std.lock);
2062         ast_cond_init(&std.cond, NULL);
2063         std.fail = std.complete = 0;
2064         std.task = sip_task;
2065         std.task_data = task_data;
2066
2067         if (serializer) {
2068                 if (ast_taskprocessor_push(serializer, sync_task, &std)) {
2069                         return -1;
2070                 }
2071         } else {
2072                 if (ast_threadpool_push(sip_threadpool, sync_task, &std)) {
2073                         return -1;
2074                 }
2075         }
2076
2077         ast_mutex_lock(&std.lock);
2078         while (!std.complete) {
2079                 ast_cond_wait(&std.cond, &std.lock);
2080         }
2081         ast_mutex_unlock(&std.lock);
2082
2083         ast_mutex_destroy(&std.lock);
2084         ast_cond_destroy(&std.cond);
2085         return std.fail;
2086 }
2087
2088 void ast_copy_pj_str(char *dest, const pj_str_t *src, size_t size)
2089 {
2090         size_t chars_to_copy = MIN(size - 1, pj_strlen(src));
2091         memcpy(dest, pj_strbuf(src), chars_to_copy);
2092         dest[chars_to_copy] = '\0';
2093 }
2094
2095 int ast_sip_is_content_type(pjsip_media_type *content_type, char *type, char *subtype)
2096 {
2097         pjsip_media_type compare;
2098
2099         if (!content_type) {
2100                 return 0;
2101         }
2102
2103         pjsip_media_type_init2(&compare, type, subtype);
2104
2105         return pjsip_media_type_cmp(content_type, &compare, 0) ? 0 : -1;
2106 }
2107
2108 pj_caching_pool caching_pool;
2109 pj_pool_t *memory_pool;
2110 pj_thread_t *monitor_thread;
2111 static int monitor_continue;
2112
2113 static void *monitor_thread_exec(void *endpt)
2114 {
2115         while (monitor_continue) {
2116                 const pj_time_val delay = {0, 10};
2117                 pjsip_endpt_handle_events(ast_pjsip_endpoint, &delay);
2118         }
2119         return NULL;
2120 }
2121
2122 static void stop_monitor_thread(void)
2123 {
2124         monitor_continue = 0;
2125         pj_thread_join(monitor_thread);
2126 }
2127
2128 AST_THREADSTORAGE(pj_thread_storage);
2129 AST_THREADSTORAGE(servant_id_storage);
2130 #define SIP_SERVANT_ID 0x5E2F1D
2131
2132 static void sip_thread_start(void)
2133 {
2134         pj_thread_desc *desc;
2135         pj_thread_t *thread;
2136         uint32_t *servant_id;
2137
2138         servant_id = ast_threadstorage_get(&servant_id_storage, sizeof(*servant_id));
2139         if (!servant_id) {
2140                 ast_log(LOG_ERROR, "Could not set SIP servant ID in thread-local storage.\n");
2141                 return;
2142         }
2143         *servant_id = SIP_SERVANT_ID;
2144
2145         desc = ast_threadstorage_get(&pj_thread_storage, sizeof(pj_thread_desc));
2146         if (!desc) {
2147                 ast_log(LOG_ERROR, "Could not get thread desc from thread-local storage. Expect awful things to occur\n");
2148                 return;
2149         }
2150         pj_bzero(*desc, sizeof(*desc));
2151
2152         if (pj_thread_register("Asterisk Thread", *desc, &thread) != PJ_SUCCESS) {
2153                 ast_log(LOG_ERROR, "Couldn't register thread with PJLIB.\n");
2154         }
2155 }
2156
2157 int ast_sip_thread_is_servant(void)
2158 {
2159         uint32_t *servant_id;
2160
2161         servant_id = ast_threadstorage_get(&servant_id_storage, sizeof(*servant_id));
2162         if (!servant_id) {
2163                 return 0;
2164         }
2165
2166         return *servant_id == SIP_SERVANT_ID;
2167 }
2168
2169 void *ast_sip_dict_get(void *ht, const char *key)
2170 {
2171         unsigned int hval = 0;
2172
2173         if (!ht) {
2174                 return NULL;
2175         }
2176
2177         return pj_hash_get(ht, key, PJ_HASH_KEY_STRING, &hval);
2178 }
2179
2180 void *ast_sip_dict_set(pj_pool_t* pool, void *ht,
2181                        const char *key, void *val)
2182 {
2183         if (!ht) {
2184                 ht = pj_hash_create(pool, 11);
2185         }
2186
2187         pj_hash_set(pool, ht, key, PJ_HASH_KEY_STRING, 0, val);
2188
2189         return ht;
2190 }
2191
2192 static pj_bool_t supplement_on_rx_request(pjsip_rx_data *rdata)
2193 {
2194         struct ast_sip_supplement *supplement;
2195
2196         if (pjsip_rdata_get_dlg(rdata)) {
2197                 return PJ_FALSE;
2198         }
2199
2200         AST_RWLIST_RDLOCK(&supplements);
2201         AST_LIST_TRAVERSE(&supplements, supplement, next) {
2202                 if (supplement->incoming_request && does_method_match(&rdata->msg_info.msg->line.req.method.name, supplement->method)) {
2203                         supplement->incoming_request(ast_pjsip_rdata_get_endpoint(rdata), rdata);
2204                 }
2205         }
2206         AST_RWLIST_UNLOCK(&supplements);
2207
2208         return PJ_FALSE;
2209 }
2210
2211 int ast_sip_send_response(pjsip_response_addr *res_addr, pjsip_tx_data *tdata, struct ast_sip_endpoint *sip_endpoint)
2212 {
2213         struct ast_sip_supplement *supplement;
2214         pjsip_cseq_hdr *cseq = pjsip_msg_find_hdr(tdata->msg, PJSIP_H_CSEQ, NULL);
2215         struct ast_sip_contact *contact = ast_sip_mod_data_get(tdata->mod_data, supplement_module.id, MOD_DATA_CONTACT);
2216
2217         AST_RWLIST_RDLOCK(&supplements);
2218         AST_LIST_TRAVERSE(&supplements, supplement, next) {
2219                 if (supplement->outgoing_response && does_method_match(&cseq->method.name, supplement->method)) {
2220                         supplement->outgoing_response(sip_endpoint, contact, tdata);
2221                 }
2222         }
2223         AST_RWLIST_UNLOCK(&supplements);
2224
2225         ast_sip_mod_data_set(tdata->pool, tdata->mod_data, supplement_module.id, MOD_DATA_CONTACT, NULL);
2226         ao2_cleanup(contact);
2227
2228         return pjsip_endpt_send_response(ast_sip_get_pjsip_endpoint(), res_addr, tdata, NULL, NULL);
2229 }
2230
2231 int ast_sip_create_response(const pjsip_rx_data *rdata, int st_code,
2232         struct ast_sip_contact *contact, pjsip_tx_data **tdata)
2233 {
2234         int res = pjsip_endpt_create_response(ast_sip_get_pjsip_endpoint(), rdata, st_code, NULL, tdata);
2235
2236         if (!res) {
2237                 ast_sip_mod_data_set((*tdata)->pool, (*tdata)->mod_data, supplement_module.id, MOD_DATA_CONTACT, ao2_bump(contact));
2238         }
2239
2240         return res;
2241 }
2242
2243 static void remove_request_headers(pjsip_endpoint *endpt)
2244 {
2245         const pjsip_hdr *request_headers = pjsip_endpt_get_request_headers(endpt);
2246         pjsip_hdr *iter = request_headers->next;
2247
2248         while (iter != request_headers) {
2249                 pjsip_hdr *to_erase = iter;
2250                 iter = iter->next;
2251                 pj_list_erase(to_erase);
2252         }
2253 }
2254
2255 static int load_module(void)
2256 {
2257         /* The third parameter is just copied from
2258          * example code from PJLIB. This can be adjusted
2259          * if necessary.
2260          */
2261         pj_status_t status;
2262         struct ast_threadpool_options options;
2263
2264         if (pj_init() != PJ_SUCCESS) {
2265                 return AST_MODULE_LOAD_DECLINE;
2266         }
2267
2268         if (pjlib_util_init() != PJ_SUCCESS) {
2269                 pj_shutdown();
2270                 return AST_MODULE_LOAD_DECLINE;
2271         }
2272
2273         pj_caching_pool_init(&caching_pool, NULL, 1024 * 1024);
2274         if (pjsip_endpt_create(&caching_pool.factory, "SIP", &ast_pjsip_endpoint) != PJ_SUCCESS) {
2275                 ast_log(LOG_ERROR, "Failed to create PJSIP endpoint structure. Aborting load\n");
2276                 pj_caching_pool_destroy(&caching_pool);
2277                 return AST_MODULE_LOAD_DECLINE;
2278         }
2279
2280         /* PJSIP will automatically try to add a Max-Forwards header. Since we want to control that,
2281          * we need to stop PJSIP from doing it automatically
2282          */
2283         remove_request_headers(ast_pjsip_endpoint);
2284
2285         memory_pool = pj_pool_create(&caching_pool.factory, "SIP", 1024, 1024, NULL);
2286         if (!memory_pool) {
2287                 ast_log(LOG_ERROR, "Failed to create memory pool for SIP. Aborting load\n");
2288                 pjsip_endpt_destroy(ast_pjsip_endpoint);
2289                 ast_pjsip_endpoint = NULL;
2290                 pj_caching_pool_destroy(&caching_pool);
2291                 return AST_MODULE_LOAD_DECLINE;
2292         }
2293
2294         if (ast_sip_initialize_system()) {
2295                 ast_log(LOG_ERROR, "Failed to initialize SIP 'system' configuration section. Aborting load\n");
2296                 pj_pool_release(memory_pool);
2297                 memory_pool = NULL;
2298                 pjsip_endpt_destroy(ast_pjsip_endpoint);
2299                 ast_pjsip_endpoint = NULL;
2300                 pj_caching_pool_destroy(&caching_pool);
2301                 return AST_MODULE_LOAD_DECLINE;
2302         }
2303
2304         sip_get_threadpool_options(&options);
2305         options.thread_start = sip_thread_start;
2306         sip_threadpool = ast_threadpool_create("SIP", NULL, &options);
2307         if (!sip_threadpool) {
2308                 ast_log(LOG_ERROR, "Failed to create SIP threadpool. Aborting load\n");
2309                 ast_sip_destroy_system();
2310                 pj_pool_release(memory_pool);
2311                 memory_pool = NULL;
2312                 pjsip_endpt_destroy(ast_pjsip_endpoint);
2313                 ast_pjsip_endpoint = NULL;
2314                 pj_caching_pool_destroy(&caching_pool);
2315                 return AST_MODULE_LOAD_DECLINE;
2316         }
2317
2318         ast_sip_initialize_dns();
2319
2320         pjsip_tsx_layer_init_module(ast_pjsip_endpoint);
2321         pjsip_ua_init_module(ast_pjsip_endpoint, NULL);
2322
2323         monitor_continue = 1;
2324         status = pj_thread_create(memory_pool, "SIP", (pj_thread_proc *) &monitor_thread_exec,
2325                         NULL, PJ_THREAD_DEFAULT_STACK_SIZE * 2, 0, &monitor_thread);
2326         if (status != PJ_SUCCESS) {
2327                 ast_log(LOG_ERROR, "Failed to start SIP monitor thread. Aborting load\n");
2328                 ast_sip_destroy_system();
2329                 pj_pool_release(memory_pool);
2330                 memory_pool = NULL;
2331                 pjsip_endpt_destroy(ast_pjsip_endpoint);
2332                 ast_pjsip_endpoint = NULL;
2333                 pj_caching_pool_destroy(&caching_pool);
2334                 return AST_MODULE_LOAD_DECLINE;
2335         }
2336
2337         ast_sip_initialize_global_headers();
2338
2339         if (ast_res_pjsip_initialize_configuration(ast_module_info)) {
2340                 ast_log(LOG_ERROR, "Failed to initialize SIP configuration. Aborting load\n");
2341                 ast_sip_destroy_global_headers();
2342                 stop_monitor_thread();
2343                 ast_sip_destroy_system();
2344                 pj_pool_release(memory_pool);
2345                 memory_pool = NULL;
2346                 pjsip_endpt_destroy(ast_pjsip_endpoint);
2347                 ast_pjsip_endpoint = NULL;
2348                 pj_caching_pool_destroy(&caching_pool);
2349                 return AST_MODULE_LOAD_DECLINE;
2350         }
2351
2352         if (ast_sip_initialize_distributor()) {
2353                 ast_log(LOG_ERROR, "Failed to register distributor module. Aborting load\n");
2354                 ast_res_pjsip_destroy_configuration();
2355                 ast_sip_destroy_global_headers();
2356                 stop_monitor_thread();
2357                 ast_sip_destroy_system();
2358                 pj_pool_release(memory_pool);
2359                 memory_pool = NULL;
2360                 pjsip_endpt_destroy(ast_pjsip_endpoint);
2361                 ast_pjsip_endpoint = NULL;
2362                 pj_caching_pool_destroy(&caching_pool);
2363                 return AST_MODULE_LOAD_DECLINE;
2364         }
2365
2366         if (ast_sip_register_service(&supplement_module)) {
2367                 ast_log(LOG_ERROR, "Failed to initialize supplement hooks. Aborting load\n");
2368                 ast_sip_destroy_distributor();
2369                 ast_res_pjsip_destroy_configuration();
2370                 ast_sip_destroy_global_headers();
2371                 stop_monitor_thread();
2372                 ast_sip_destroy_system();
2373                 pj_pool_release(memory_pool);
2374                 memory_pool = NULL;
2375                 pjsip_endpt_destroy(ast_pjsip_endpoint);
2376                 ast_pjsip_endpoint = NULL;
2377                 pj_caching_pool_destroy(&caching_pool);
2378                 return AST_MODULE_LOAD_DECLINE;
2379         }
2380
2381         if (ast_sip_initialize_outbound_authentication()) {
2382                 ast_log(LOG_ERROR, "Failed to initialize outbound authentication. Aborting load\n");
2383                 ast_sip_unregister_service(&supplement_module);
2384                 ast_sip_destroy_distributor();
2385                 ast_res_pjsip_destroy_configuration();
2386                 ast_sip_destroy_global_headers();
2387                 stop_monitor_thread();
2388                 ast_sip_destroy_system();
2389                 pj_pool_release(memory_pool);
2390                 memory_pool = NULL;
2391                 pjsip_endpt_destroy(ast_pjsip_endpoint);
2392                 ast_pjsip_endpoint = NULL;
2393                 pj_caching_pool_destroy(&caching_pool);
2394                 return AST_MODULE_LOAD_DECLINE;
2395         }
2396
2397         ast_res_pjsip_init_options_handling(0);
2398
2399         ast_module_ref(ast_module_info->self);
2400
2401         return AST_MODULE_LOAD_SUCCESS;
2402 }
2403
2404 static int reload_module(void)
2405 {
2406         if (ast_res_pjsip_reload_configuration()) {
2407                 return AST_MODULE_LOAD_DECLINE;
2408         }
2409         ast_res_pjsip_init_options_handling(1);
2410         ast_sip_initialize_dns();
2411         return 0;
2412 }
2413
2414 static int unload_module(void)
2415 {
2416         /* This will never get called as this module can't be unloaded */
2417         return 0;
2418 }
2419
2420 AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Basic SIP resource",
2421                 .load = load_module,
2422                 .unload = unload_module,
2423                 .reload = reload_module,
2424                 .load_pri = AST_MODPRI_CHANNEL_DEPEND - 5,
2425 );