res_pjsip: Allow configuration of endpoint identifier query order
[asterisk/asterisk.git] / include / asterisk / res_pjsip.h
index 302a15d..a34c4b3 100644 (file)
@@ -91,6 +91,8 @@ struct ast_sip_transport {
        AST_DECLARE_STRING_FIELDS(
                /*! Certificate of authority list file */
                AST_STRING_FIELD(ca_list_file);
+               /*! Certificate of authority list path */
+               AST_STRING_FIELD(ca_list_path);
                /*! Public certificate file */
                AST_STRING_FIELD(cert_file);
                /*! Optional private key of the certificate file */
@@ -483,6 +485,8 @@ struct ast_sip_media_rtp_configuration {
        unsigned int srtp_tag_32;
        /*! Do we use media encryption? what type? */
        enum ast_sip_session_media_encryption encryption;
+       /*! Do we want to optimistically support encryption if possible? */
+       unsigned int encryption_optimistic;
 };
 
 /*!
@@ -607,6 +611,10 @@ struct ast_sip_endpoint {
        enum ast_sip_session_redirect redirect_method;
        /*! Variables set on channel creation */
        struct ast_variable *channel_vars;
+       /*! Whether to place a 'user=phone' parameter into the request URI if user is a number */
+       unsigned int usereqphone;
+       /*! Whether to pass through hold and unhold using re-invites with recvonly and sendrecv */
+       unsigned int moh_passthrough;
 };
 
 /*!
@@ -772,6 +780,23 @@ int ast_sip_register_outbound_authenticator(struct ast_sip_outbound_authenticato
 void ast_sip_unregister_outbound_authenticator(struct ast_sip_outbound_authenticator *auth);
 
 /*!
+ * \brief Register a SIP endpoint identifier with a name.
+ *
+ * An endpoint identifier's purpose is to determine which endpoint a given SIP
+ * message has come from.
+ *
+ * Multiple endpoint identifiers may be registered so that if an endpoint
+ * cannot be identified by one identifier, it may be identified by another.
+ *
+ * \param identifier The SIP endpoint identifier to register
+ * \param name The name of the endpoint identifier
+ * \retval 0 Success
+ * \retval -1 Failure
+ */
+int ast_sip_register_endpoint_identifier_by_name(struct ast_sip_endpoint_identifier *identifier,
+                                                const char *name);
+
+/*!
  * \brief Register a SIP endpoint identifier
  *
  * An endpoint identifier's purpose is to determine which endpoint a given SIP
@@ -834,46 +859,6 @@ pjsip_endpoint *ast_sip_get_pjsip_endpoint(void);
 struct ast_sorcery *ast_sip_get_sorcery(void);
 
 /*!
- * \brief Initialize transport support on a sorcery instance
- *
- * \retval -1 failure
- * \retval 0 success
- */
-int ast_sip_initialize_sorcery_transport(void);
-
-/*!
- * \brief Destroy transport support on a sorcery instance
- *
- * \retval -1 failure
- * \retval 0 success
- */
-int ast_sip_destroy_sorcery_transport(void);
-
-/*!
- * \brief Initialize qualify support on a sorcery instance
- *
- * \retval -1 failure
- * \retval 0 success
- */
-int ast_sip_initialize_sorcery_qualify(void);
-
-/*!
- * \brief Initialize location support on a sorcery instance
- *
- * \retval -1 failure
- * \retval 0 success
- */
-int ast_sip_initialize_sorcery_location(void);
-
-/*!
- * \brief Destroy location support on a sorcery instance
- *
- * \retval -1 failure
- * \retval 0 success
- */
-int ast_sip_destroy_sorcery_location(void);
-
-/*!
  * \brief Retrieve a named AOR
  *
  * \param aor_name Name of the AOR
@@ -912,6 +897,16 @@ struct ao2_container *ast_sip_location_retrieve_aor_contacts(const struct ast_si
 struct ast_sip_contact *ast_sip_location_retrieve_contact_from_aor_list(const char *aor_list);
 
 /*!
+ * \brief Retrieve the first bound contact AND the AOR chosen from a list of AORs
+ *
+ * \param aor_list A comma-separated list of AOR names
+ * \param aor The chosen AOR
+ * \param contact The chosen contact
+ */
+ void ast_sip_location_retrieve_contact_and_aor_from_list(const char *aor_list, struct ast_sip_aor **aor,
+       struct ast_sip_contact **contact);
+
+/*!
  * \brief Retrieve a named contact
  *
  * \param contact_name Name of the contact
@@ -957,30 +952,6 @@ int ast_sip_location_update_contact(struct ast_sip_contact *contact);
 int ast_sip_location_delete_contact(struct ast_sip_contact *contact);
 
 /*!
- * \brief Initialize domain aliases support on a sorcery instance
- *
- * \retval -1 failure
- * \retval 0 success
- */
-int ast_sip_initialize_sorcery_domain_alias(void);
-
-/*!
- * \brief Initialize authentication support on a sorcery instance
- *
- * \retval -1 failure
- * \retval 0 success
- */
-int ast_sip_initialize_sorcery_auth(void);
-
-/*!
- * \brief Destroy authentication support on a sorcery instance
- *
- * \retval -1 failure
- * \retval 0 success
- */
-int ast_sip_destroy_sorcery_auth(void);
-
-/*!
  * \brief Callback called when an outbound request with authentication credentials is to be sent in dialog
  *
  * This callback will have the created request on it. The callback's purpose is to do any extra
@@ -1016,26 +987,6 @@ int ast_sip_dialog_setup_outbound_authentication(pjsip_dialog *dlg, const struct
                ast_sip_dialog_outbound_auth_cb cb, void *user_data);
 
 /*!
- * \brief Initialize the distributor module
- *
- * The distributor module is responsible for taking an incoming
- * SIP message and placing it into the threadpool. Once in the threadpool,
- * the distributor will perform endpoint lookups and authentication, and
- * then distribute the message up the stack to any further modules.
- *
- * \retval -1 Failure
- * \retval 0 Success
- */
-int ast_sip_initialize_distributor(void);
-
-/*!
- * \brief Destruct the distributor module.
- *
- * Unregisters pjsip modules and cleans up any allocated resources.
- */
-void ast_sip_destroy_distributor(void);
-
-/*!
  * \brief Retrieves a reference to the artificial auth.
  *
  * \retval The artificial auth
@@ -1223,8 +1174,9 @@ pjsip_dialog *ast_sip_create_dialog_uac(const struct ast_sip_endpoint *endpoint,
  *
  * \param endpoint A pointer to the endpoint
  * \param rdata The request that is starting the dialog
+ * \param[out] status On failure, the reason for failure in creating the dialog
  */
-pjsip_dialog *ast_sip_create_dialog_uas(const struct ast_sip_endpoint *endpoint, pjsip_rx_data *rdata);
+pjsip_dialog *ast_sip_create_dialog_uas(const struct ast_sip_endpoint *endpoint, pjsip_rx_data *rdata, pj_status_t *status);
 
 /*!
  * \brief General purpose method for creating an rdata structure using specific information
@@ -1484,6 +1436,15 @@ void ast_copy_pj_str(char *dest, const pj_str_t *src, size_t size);
 struct ast_sip_endpoint *ast_pjsip_rdata_get_endpoint(pjsip_rx_data *rdata);
 
 /*!
+ * \brief Add 'user=phone' parameter to URI if enabled and user is a phone number.
+ *
+ * \param endpoint The endpoint to use for configuration
+ * \param pool The memory pool to allocate the parameter from
+ * \param uri The URI to check for user and to add parameter to
+ */
+void ast_sip_add_usereqphone(const struct ast_sip_endpoint *endpoint, pj_pool_t *pool, pjsip_uri *uri);
+
+/*!
  * \brief Retrieve any endpoints available to sorcery.
  *
  * \retval Endpoints available to sorcery, NULL if no endpoints found.
@@ -1591,14 +1552,9 @@ void ast_sip_report_req_no_support(struct ast_sip_endpoint *endpoint, pjsip_rx_d
  */
 void ast_sip_report_mem_limit(struct ast_sip_endpoint *endpoint, pjsip_rx_data *rdata);
 
-void ast_sip_initialize_global_headers(void);
-void ast_sip_destroy_global_headers(void);
-
 int ast_sip_add_global_request_header(const char *name, const char *value, int replace);
 int ast_sip_add_global_response_header(const char *name, const char *value, int replace);
 
-int ast_sip_initialize_sorcery_global(void);
-
 /*!
  * \brief Retrieves the value associated with the given key.
  *
@@ -1944,6 +1900,15 @@ void ast_sip_unregister_supplement(struct ast_sip_supplement *supplement);
  */
 char *ast_sip_get_debug(void);
 
+/*!
+ * \brief Retrieve the global endpoint_identifier_order setting.
+ *
+ * Specifies the order by which endpoint identifiers should be regarded.
+ *
+ * \retval the global endpoint_identifier_order value
+ */
+char *ast_sip_get_endpoint_identifier_order(void);
+
 /*! \brief Determines whether the res_pjsip module is loaded */
 #define CHECK_PJSIP_MODULE_LOADED()                            \
        do {                                                    \
@@ -1953,4 +1918,11 @@ char *ast_sip_get_debug(void);
                }                                               \
        } while(0)
 
+/*!
+ * \brief Retrieve the system keep alive interval setting.
+ *
+ * \retval the keep alive interval.
+ */
+unsigned int ast_sip_get_keep_alive_interval(void);
+
 #endif /* _RES_PJSIP_H */