asterisk/res
George Joseph 7684c9e907 pjsip_transport_events: Fix possible use after free on transport
It was possible for a module that registered for transport monitor
events to pass in a pjsip_transport that had already been freed.
This caused pjsip_transport_events to crash when looking up the
monitor for the transport.  The fix is a two pronged approach.

1. We now increment the reference count on pjsip_transports when we
create monitors for them, then decrement the count when the
transport is going to be destroyed.

2. There are now APIs to register and unregister monitor callbacks
by "transport key" which is a string concatenation of the remote ip
address and port.  This way the module needing to monitor the
transport doesn't have to hold on to the transport object itself to
unregister.  It just has to save the transport_key.

* Added the pjsip_transport reference increment and decrement.

* Changed the internal transport monitor container key from the
  transport->obj_name (which may not be unique anyway) to the
  transport_key.

* Added a helper macro AST_SIP_MAKE_REMOTE_IPADDR_PORT_STR() that
  fills a buffer with the transport_key using a passed-in
  pjsip_transport.

* Added the following functions:
  ast_sip_transport_monitor_register_key
  ast_sip_transport_monitor_register_replace_key
  ast_sip_transport_monitor_unregister_key
  and marked their non-key counterparts as deprecated.

* Updated res_pjsip_pubsub and res_pjsip_outbound_register to use
  the new "key" monitor functions.

NOTE: res_pjsip_registrar also uses the transport monitor
functionality but doesn't have a persistent object other than
contact to store a transport key.  At this time, it continues to
use the non-key monitor functions.

ASTERISK-30244

Change-Id: I1a20baf2a8643c272dcf819871d6c395f148f00b
2022-12-03 10:24:36 -06:00
..
ael res: Fix for Doxygen. 2021-12-03 10:38:39 -06:00
ari ari: expose channel driver's unique id to ARI channel resource 2022-05-22 15:40:33 -05:00
parking res_parking: Add music on hold override option. 2022-06-09 04:46:09 -05:00
prometheus res_prometheus: Do not crash on invisible bridges 2022-09-26 19:27:58 -05:00
res_aeap websocket / aeap: Handle poll() interruptions better. 2022-07-11 04:10:19 -05:00
res_geolocation res_geolocation: Update wiki documentation 2022-10-10 07:31:43 -05:00
res_pjsip pjsip_transport_events: Fix possible use after free on transport 2022-12-03 10:24:36 -06:00
res_pjsip_session res_pjsip: Adjust outgoing offer call pref. 2020-10-13 11:10:56 -03:00
res_stir_shaken AST-2022-002 - res_stir_shaken/curl: Add ACL checks for Identity header. 2022-04-14 16:58:17 -05:00
snmp res: Fix for Doxygen. 2021-12-03 10:38:39 -06:00
srtp res_srtp: Add support for libsrtp2 with AES-GCM. 2017-10-18 03:34:56 -05:00
stasis res: Fix for Doxygen. 2021-12-03 10:38:39 -06:00
stasis_recording stasis_recording: Perform a complete match on requested filename. 2022-03-23 18:08:17 -05:00
Makefile Geolocation: Core Capability Preview 2022-07-12 07:52:12 -05:00
ari.make Build System: Create Makefile macro MOD_ADD_SOURCE. 2015-04-14 12:53:03 -04:00
res.xml download_externals: Use HTTPS for downloads 2022-03-23 18:06:37 -05:00
res_adsi.c module: Remove deprecated modules and update support levels. 2018-07-18 18:15:53 +00:00
res_aeap.c res_aeap & res_speech_aeap: Add Asterisk External Application Protocol 2022-04-26 14:26:48 -05:00
res_aeap.exports.in res_aeap & res_speech_aeap: Add Asterisk External Application Protocol 2022-04-26 14:26:48 -05:00
res_ael_share.c Remove as much trailing whitespace as possible. 2017-12-22 09:23:22 -05:00
res_ael_share.exports.in
res_agi.c res_agi: Respect "transmit_silence" option for "RECORD FILE". 2022-11-16 06:43:41 -05:00
res_agi.exports.in
res_ari.c documentation: Adds missing default attributes. 2022-02-23 13:26:22 -06:00
res_ari.exports.in Rename everything Stasis-HTTP to ARI 2013-07-27 23:11:02 +00:00
res_ari_applications.c res_ari: Fix for Doxygen. 2021-11-18 16:25:51 -06:00
res_ari_asterisk.c res_ari: Fix for Doxygen. 2021-11-18 16:25:51 -06:00
res_ari_bridges.c res_ari: Fix for Doxygen. 2021-11-18 16:25:51 -06:00
res_ari_channels.c res_ari: Fix for Doxygen. 2021-11-18 16:25:51 -06:00
res_ari_device_states.c res_ari: Fix for Doxygen. 2021-11-18 16:25:51 -06:00
res_ari_endpoints.c res_ari: Fix for Doxygen. 2021-11-18 16:25:51 -06:00
res_ari_events.c res_ari: Fix for Doxygen. 2021-11-18 16:25:51 -06:00
res_ari_mailboxes.c res_ari: Fix for Doxygen. 2021-11-18 16:25:51 -06:00
res_ari_model.c modules: change module LOAD_FAILUREs to LOAD_DECLINES 2017-04-12 15:57:21 -06:00
res_ari_model.exports.in Rename everything Stasis-HTTP to ARI 2013-07-27 23:11:02 +00:00
res_ari_playbacks.c res_ari: Fix for Doxygen. 2021-11-18 16:25:51 -06:00
res_ari_recordings.c res_ari: Fix for Doxygen. 2021-11-18 16:25:51 -06:00
res_ari_sounds.c res_ari: Fix for Doxygen. 2021-11-18 16:25:51 -06:00
res_audiosocket.c audiosocket: Fix module menuselect descriptions 2020-09-22 09:02:20 -05:00
res_audiosocket.exports.in feat: AudioSocket channel, application, and ARI support. 2020-01-14 09:36:44 -06:00
res_calendar.c xmldocs: Improve examples. 2022-06-09 03:47:41 -05:00
res_calendar.exports.in
res_calendar_caldav.c time: add support for time64 libcs 2022-03-24 12:00:58 -05:00
res_calendar_ews.c res_calendar: Resolve memory leak on calendar destruction 2019-10-24 09:18:38 -05:00
res_calendar_exchange.c res_calendar: Resolve memory leak on calendar destruction 2019-10-24 09:18:38 -05:00
res_calendar_icalendar.c res_calendar_icalendar: Send user agent in request. 2022-06-30 18:32:10 -05:00
res_chan_stats.c res: Fix for Doxygen. 2021-12-03 10:38:39 -06:00
res_clialiases.c astobj2: Remove legacy ao2_container_alloc routine. 2018-11-21 09:56:16 -05:00
res_cliexec.c res_cliexec: Add dialplan exec CLI command. 2022-07-08 09:28:23 -05:00
res_clioriginate.c manager: Restore Originate failure behavior from Asterisk 11 2017-02-10 18:04:41 -05:00
res_config_curl.c res: Spelling fixes 2021-11-15 16:37:34 -06:00
res_config_ldap.c res: Fix for Doxygen. 2021-12-03 10:38:39 -06:00
res_config_odbc.c cel_odbc & res_config_odbc: Add support for SQL_DATETIME field type 2022-07-11 04:13:13 -05:00
res_config_pgsql.c GCC12: Fixes for 16+ 2022-05-09 08:21:45 -05:00
res_config_sqlite3.c general: Remove obsolete SVN references. 2022-08-01 09:58:58 -05:00
res_convert.c Remove as much trailing whitespace as possible. 2017-12-22 09:23:22 -05:00
res_corosync.c res: Spelling fixes 2021-11-15 16:37:34 -06:00
res_crypto.c res_crypto: handle unsafe private key files 2022-10-14 10:01:06 -05:00
res_crypto.exports.in
res_curl.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_endpoint_stats.c loader: Add dependency fields to module structures. 2018-01-15 13:25:51 -05:00
res_fax.c build: Remove obsolete leftover build references. 2022-03-30 17:10:51 -05:00
res_fax.exports.in res_fax: Provide AMI equivalents for fax CLI commands 2014-07-18 15:49:46 +00:00
res_fax_spandsp.c res_fax_spandsp: Add spandsp 3.0.0+ compatibility 2021-12-03 07:44:02 -06:00
res_format_attr_celt.c res_format_attr_*: Parameter Names are Case-Insensitive. 2021-03-10 04:22:36 -06:00
res_format_attr_g729.c Remove ASTERISK_REGISTER_FILE. 2016-10-27 09:53:55 -04:00
res_format_attr_h263.c res_format_attr_*: Parameter Names are Case-Insensitive. 2021-03-10 04:22:36 -06:00
res_format_attr_h264.c res_format_attr_h264.c: Make sure profile-level-id fmtp attribute is set 2018-12-13 17:03:59 -05:00
res_format_attr_ilbc.c menuselect: Fix description of several modules. 2021-06-10 16:30:28 -05:00
res_format_attr_opus.c res_format_attr_*: Parameter Names are Case-Insensitive. 2021-03-10 04:22:36 -06:00
res_format_attr_silk.c res_format_attr_*: Parameter Names are Case-Insensitive. 2021-03-10 04:22:36 -06:00
res_format_attr_siren7.c res_format_attr_*: Parameter Names are Case-Insensitive. 2021-03-10 04:22:36 -06:00
res_format_attr_siren14.c res_format_attr_*: Parameter Names are Case-Insensitive. 2021-03-10 04:22:36 -06:00
res_format_attr_vp8.c res_format_attr_*: Parameter Names are Case-Insensitive. 2021-03-10 04:22:36 -06:00
res_geolocation.c Geolocation: Core Capability Preview 2022-07-12 07:52:12 -05:00
res_geolocation.exports.in Geolocation: Core Capability Preview 2022-07-12 07:52:12 -05:00
res_hep.c res: Fix for Doxygen. 2021-12-03 10:38:39 -06:00
res_hep.exports.in res_hep_{pjsip|rtcp}: Decline module loads if res_hep had not loaded 2016-06-08 12:32:02 -05:00
res_hep_pjsip.c loader: Sync load- and build-time deps. 2020-11-20 13:51:02 -06:00
res_hep_rtcp.c stasis: Add internal filtering of messages. 2018-11-18 15:08:16 -05:00
res_http_media_cache.c time: add support for time64 libcs 2022-03-24 12:00:58 -05:00
res_http_post.c res: Spelling fixes 2021-11-15 16:37:34 -06:00
res_http_websocket.c websocket / aeap: Handle poll() interruptions better. 2022-07-11 04:10:19 -05:00
res_http_websocket.exports.in res_http_websocket: Export symbol for ast_websocket_set_timeout 2014-06-26 18:27:53 +00:00
res_limit.c Remove as much trailing whitespace as possible. 2017-12-22 09:23:22 -05:00
res_manager_devicestate.c AST_MODULE_INFO: Format corrections to the usages of AST_MODULE_INFO macro. 2015-05-13 16:34:23 -05:00
res_manager_presencestate.c AST_MODULE_INFO: Format corrections to the usages of AST_MODULE_INFO macro. 2015-05-13 16:34:23 -05:00
res_monitor.c res: Fix for Doxygen. 2021-12-03 10:38:39 -06:00
res_monitor.exports.in
res_musiconhold.c res_musiconhold: Add option to not play music on hold on unanswered channels 2022-09-13 05:46:48 -05:00
res_mutestream.c general: Fix various typos. 2022-07-12 07:46:03 -05:00
res_mwi_devstate.c mwi core: Move core MWI functionality into its own files 2019-04-23 17:40:15 -05:00
res_mwi_external.c res: Fix for Doxygen. 2021-12-03 10:38:39 -06:00
res_mwi_external.exports.in External MWI core support. 2014-01-06 17:45:25 +00:00
res_mwi_external_ami.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_odbc.c time: add support for time64 libcs 2022-03-24 12:00:58 -05:00
res_odbc.exports.in res_odbc: Fix exports.in for missing symbols 2016-02-16 16:42:26 -06:00
res_odbc_transaction.c res_odbc_transaction: correctly initialise forcecommit value from DSN. 2021-02-25 08:45:30 -06:00
res_odbc_transaction.exports.in res_odbc: Remove connection management 2016-01-22 11:59:06 -06:00
res_parking.c parking: Fix for Doxygen. 2021-11-18 16:59:26 -06:00
res_phoneprov.c res: Fix for Doxygen. 2021-12-03 10:38:39 -06:00
res_phoneprov.exports.in res_phoneprov: Refactor phoneprov to allow pluggable config providers 2014-10-09 17:46:23 +00:00
res_pjproject.c bundled_pjproject: Make it easier to hack 2022-01-07 08:45:02 -06:00
res_pjproject.exports.in res_pjproject: Add utility functions to convert between socket structures 2018-09-06 13:30:12 -05:00
res_pjsip.c res_pjsip: prevent crash on websocket disconnect 2022-10-31 10:09:39 -05:00
res_pjsip.exports.in res_pjsip: Add utils for checking media types 2022-01-17 08:25:58 -06:00
res_pjsip_acl.c pjsip: Update ACLs on named ACL changes. 2020-02-20 04:52:11 -06:00
res_pjsip_authenticator_digest.c res_pjsip: Fix for Doxygen. 2021-11-18 12:14:54 -06:00
res_pjsip_caller_id.c res_pjsip: Add TEL URI support for basic calls. 2022-09-13 04:51:00 -05:00
res_pjsip_config_wizard.c xmldocs: Improve examples. 2022-06-09 03:47:41 -05:00
res_pjsip_dialog_info_body_generator.c res_pjsip: Add TEL URI support for basic calls. 2022-09-13 04:51:00 -05:00
res_pjsip_diversion.c res_pjsip: Add TEL URI support for basic calls. 2022-09-13 04:51:00 -05:00
res_pjsip_dlg_options.c res_pjsip: set Accept-Encoding to identity in OPTIONS response 2020-11-19 16:14:33 -06:00
res_pjsip_dtmf_info.c res_pjsip_dtmf_info: Hook flash 2021-06-08 15:47:19 -05:00
res_pjsip_empty_info.c res_pjsip: Sync load- and build-time deps. 2020-04-20 11:03:26 -05:00
res_pjsip_endpoint_identifier_anonymous.c res_pjsip: Add TEL URI support for basic calls. 2022-09-13 04:51:00 -05:00
res_pjsip_endpoint_identifier_ip.c sorcery: Add support for more intelligent reloading. 2021-03-05 10:32:28 -06:00
res_pjsip_endpoint_identifier_user.c res_pjsip: Add TEL URI support for basic calls. 2022-09-13 04:51:00 -05:00
res_pjsip_exten_state.c res_pjsip_pubsub: Prevent removing subscriptions. 2022-10-26 09:08:17 -05:00
res_pjsip_exten_state.exports.in The large GULP->PJSIP renaming effort. 2013-07-30 18:14:50 +00:00
res_pjsip_geolocation.c res_pjsip_geolocation: Change some notices to debugs. 2022-09-26 15:03:32 -05:00
res_pjsip_header_funcs.c res_pjsip_header_funcs: Add functions PJSIP_RESPONSE_HEADER and PJSIP_RESPONSE_HEADERS 2022-07-06 15:08:24 -05:00
res_pjsip_history.c time: add support for time64 libcs 2022-03-24 12:00:58 -05:00
res_pjsip_logger.c res_pjsip_logger: Add method-based logging option. 2022-10-27 09:00:29 -05:00
res_pjsip_messaging.c res_pjsip: Add TEL URI support for basic calls. 2022-09-13 04:51:00 -05:00
res_pjsip_mwi.c res_pjsip_pubsub: Prevent removing subscriptions. 2022-10-26 09:08:17 -05:00
res_pjsip_mwi_body_generator.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_nat.c res_pjsip: Add TEL URI support for basic calls. 2022-09-13 04:51:00 -05:00
res_pjsip_notify.c res_pjsip_notify: Add option support for AMI. 2022-10-27 10:07:20 -05:00
res_pjsip_one_touch_record_info.c res_pjsip: Sync load- and build-time deps. 2020-04-20 11:03:26 -05:00
res_pjsip_outbound_authenticator_digest.c tests: Fix compilation errors on 32-bit. 2022-10-27 14:29:45 -05:00
res_pjsip_outbound_publish.c astobj2: Remove legacy ao2_container_alloc routine. 2018-11-21 09:56:16 -05:00
res_pjsip_outbound_publish.exports.in res_pjsip_outbound_publish: Add module which provides outbound PUBLISH support. 2014-08-07 14:35:09 +00:00
res_pjsip_outbound_registration.c pjsip_transport_events: Fix possible use after free on transport 2022-12-03 10:24:36 -06:00
res_pjsip_path.c res_pjsip: Add TEL URI support for basic calls. 2022-09-13 04:51:00 -05:00
res_pjsip_phoneprov_provider.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_pidf_body_generator.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_pidf_digium_body_supplement.c res_pjsip_pidf_digium_body_supplement: Support Sangoma user agent. 2020-12-16 08:01:11 -06:00
res_pjsip_pidf_eyebeam_body_supplement.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_publish_asterisk.c res_pjsip: Fix for Doxygen. 2021-11-18 12:14:54 -06:00
res_pjsip_pubsub.c pjsip_transport_events: Fix possible use after free on transport 2022-12-03 10:24:36 -06:00
res_pjsip_pubsub.exports.in res_pjsip_mwi: Add voicemail extension and mwi_subscribe_replaces_unsolicited 2016-03-30 13:23:54 -05:00
res_pjsip_refer.c res_pjsip_refer: Move the progress dlg release to a serializer 2021-03-05 08:19:20 -06:00
res_pjsip_registrar.c time: add support for time64 libcs 2022-03-24 12:00:58 -05:00
res_pjsip_rfc3326.c res: Spelling fixes 2021-11-15 16:37:34 -06:00
res_pjsip_rfc3329.c res_pjsip: Add mediasec capabilities. 2022-09-29 04:10:48 -05:00
res_pjsip_sdp_rtp.c res_pjsip: Add mediasec capabilities. 2022-09-29 04:10:48 -05:00
res_pjsip_send_to_voicemail.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_session.c core & res_pjsip: Improve topology change handling. 2022-11-29 08:23:49 -06:00
res_pjsip_session.exports.in test_res_pjsip_session_caps: Create unit test 2020-04-06 08:02:53 -05:00
res_pjsip_sips_contact.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pjsip_stir_shaken.c res_pjsip_stir_shaken.c: Fix enabled when not configured. 2022-04-26 11:11:59 -05:00
res_pjsip_t38.c res_pjsip_t38: bind UDPTL sessions like RTP 2021-10-01 08:57:07 -05:00
res_pjsip_transport_websocket.c res_pjsip_transport_websocket: Also set the remote name. 2022-05-17 07:20:40 -05:00
res_pjsip_xpidf_body_generator.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_pktccops.c res: Spelling fixes 2021-11-15 16:37:34 -06:00
res_pktccops.exports.in
res_prometheus.c res_prometheus: Optional load res_pjsip_outbound_registration.so 2022-07-05 06:34:12 -05:00
res_prometheus.exports.in Add core Prometheus support to Asterisk 2019-05-20 20:33:58 -05:00
res_realtime.c res_realtime: Fix 'realtime update2' argument handling 2020-01-14 10:07:20 -06:00
res_remb_modifier.c xml: Embed module information into core XML documentation. 2021-03-16 10:30:43 -05:00
res_resolver_unbound.c various files - fix some alerts raised by lgtm code analysis 2019-11-18 08:30:45 -06:00
res_rtp_asterisk.c openssl: Supress deprecation warnings from OpenSSL 3.0 2022-03-28 12:19:42 -05:00
res_rtp_multicast.c Remove as much trailing whitespace as possible. 2017-12-22 09:23:22 -05:00
res_rtp_multicast.exports.in multicast RTP: Add dialing options 2016-05-27 11:00:09 -05:00
res_security_log.c stasis: Add internal filtering of messages. 2018-11-18 15:08:16 -05:00
res_smdi.c res: Spelling fixes 2021-11-15 16:37:34 -06:00
res_smdi.exports.in
res_snmp.c Remove as much trailing whitespace as possible. 2017-12-22 09:23:22 -05:00
res_sorcery_astdb.c astdb: Improve prefix searches in astdb 2017-12-10 12:51:16 -06:00
res_sorcery_config.c res: Spelling fixes 2021-11-15 16:37:34 -06:00
res_sorcery_memory.c astobj2: Remove legacy ao2_container_alloc routine. 2018-11-21 09:56:16 -05:00
res_sorcery_memory_cache.c main: Fix for Doxygen. 2021-12-02 15:02:09 -06:00
res_sorcery_realtime.c res_sorcery_realtime.c: Fix unqualified fetch warning. 2018-08-17 16:33:24 -05:00
res_speech.c res_aeap & res_speech_aeap: Add Asterisk External Application Protocol 2022-04-26 14:26:48 -05:00
res_speech.exports.in app_speech_utils: Fix unresolved symbol ast_speech_get_setting(). 2013-09-16 18:00:32 +00:00
res_speech_aeap.c res_aeap & res_speech_aeap: Add Asterisk External Application Protocol 2022-04-26 14:26:48 -05:00
res_srtp.c progdocs: Avoid 'name' with Doxygen \file. 2021-11-18 08:17:56 -06:00
res_srtp.exports.in Reverting accidental ci of wrong change in r433061 2015-03-17 22:03:01 +00:00
res_stasis.c res: Fix for Doxygen. 2021-12-03 10:38:39 -06:00
res_stasis.exports.in
res_stasis_answer.c loader: Add dependency fields to module structures. 2018-01-15 13:25:51 -05:00
res_stasis_answer.exports.in
res_stasis_device_state.c astobj2: Remove legacy ao2_container_alloc routine. 2018-11-21 09:56:16 -05:00
res_stasis_device_state.exports.in ARI: Implement device state API 2013-11-23 17:48:28 +00:00
res_stasis_mailbox.c Remove redundant module checks and references. 2018-01-24 13:37:29 -05:00
res_stasis_mailbox.exports.in ARI: Add mailboxes resource for controlling and polling external MWI 2014-01-14 23:44:57 +00:00
res_stasis_playback.c res: Spelling fixes 2021-11-15 16:37:34 -06:00
res_stasis_playback.exports.in
res_stasis_recording.c res/res_ari: Added timestamp as a requirement for all ARI events 2019-03-11 23:57:01 +01:00
res_stasis_recording.exports.in ARI - channel recording support 2013-07-03 17:58:45 +00:00
res_stasis_snoop.c audiohook: add directional awareness 2022-10-11 08:13:18 -05:00
res_stasis_snoop.exports.in ari: Add Snoop operation for spying/whispering on channels. 2013-11-23 12:40:46 +00:00
res_stasis_test.c optional_api: Remove unused nonoptreq fields 2018-09-12 12:34:54 -05:00
res_stasis_test.exports.in
res_statsd.c res_statsd: handle non-standard meter type safely 2021-08-03 08:12:33 -05:00
res_statsd.exports.in res_statsd: Fix exports.in for missing symbols 2016-02-16 12:26:29 -06:00
res_stir_shaken.c AST-2022-002 - res_stir_shaken/curl: Add ACL checks for Identity header. 2022-04-14 16:58:17 -05:00
res_stir_shaken.exports.in res_stir_shaken: Add inbound INVITE support. 2020-06-08 10:50:16 -05:00
res_stun_monitor.c res: Fix for Doxygen. 2021-12-03 10:38:39 -06:00
res_timing_dahdi.c Remove as much trailing whitespace as possible. 2017-12-22 09:23:22 -05:00
res_timing_kqueue.c res_timing: Don't close FD 0 when out of open files. 2015-07-02 05:13:37 -05:00
res_timing_pthread.c Use non-blocking socket() and pipe() wrappers 2018-12-11 12:29:09 -05:00
res_timing_timerfd.c res_timing: Don't close FD 0 when out of open files. 2015-07-02 05:13:37 -05:00
res_tonedetect.c res_tonedetect: Add ringback support to TONE_DETECT. 2022-10-10 12:04:33 -05:00
res_xmpp.c res: Fix for Doxygen. 2021-12-03 10:38:39 -06:00
res_xmpp.exports.in