Add a "message_context" option for PJSIP endpoints.
authorMark Michelson <mmichelson@digium.com>
Tue, 25 Mar 2014 17:40:51 +0000 (17:40 +0000)
committerMark Michelson <mmichelson@digium.com>
Tue, 25 Mar 2014 17:40:51 +0000 (17:40 +0000)
........

Merged revisions 411157 from http://svn.asterisk.org/svn/asterisk/branches/12

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@411158 65c4cc65-6c06-0410-ace0-fbb531ad65f3

UPGRADE.txt
include/asterisk/res_pjsip.h
res/res_pjsip.c
res/res_pjsip/pjsip_configuration.c
res/res_pjsip_messaging.c

index a3e808c..f34b5df 100644 (file)
@@ -26,6 +26,9 @@ PJSIP:
    REGISTER requests for each contact that is registered. If using realtime for
    PJSIP contacts, this means that the schema has been updated to add a user_agent
    column. An alembic revision has been added to facilitate this update.
+ - PJSIP endpoints now have a "message_context" option that can be used to determine
+   where to route incoming MESSAGE requests from the endpoint.
 
 Realtime Configuration:
  - PJSIP endpoint columns 'tos_audio' and 'tos_video' have been changed from yes/no
index 3b09c33..36d25fb 100644 (file)
@@ -562,6 +562,8 @@ struct ast_sip_endpoint {
                AST_STRING_FIELD(fromuser);
                /*! Domain to place in From header */
                AST_STRING_FIELD(fromdomain);
+               /*! Context to route incoming MESSAGE requests to */
+               AST_STRING_FIELD(message_context);
        );
        /*! Configuration for extensions */
        struct ast_sip_endpoint_extensions extensions;
index 3ef203f..3ff60ee 100644 (file)
                                                multiple 'set_var'(s).
                                        </para></description>
                                </configOption>
+                               <configOption name="message_context">
+                                       <synopsis>Context to route incoming MESSAGE requests to.</synopsis>
+                                       <description><para>
+                                               If specified, incoming MESSAGE requests will be routed to the indicated
+                                               dialplan context. If no <replaceable>message_context</replaceable> is
+                                               specified, then the <replaceable>context</replaceable> setting is used.
+                                       </para></description>
+                               </configOption>
                        </configObject>
                        <configObject name="auth">
                                <synopsis>Authentication type</synopsis>
index 1f289ad..164ca4a 100644 (file)
@@ -1723,6 +1723,7 @@ int ast_res_pjsip_initialize_configuration(const struct ast_module_info *ast_mod
        ast_sorcery_object_field_register(sip_sorcery, "endpoint", "srtp_tag_32", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, media.rtp.srtp_tag_32));
        ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "redirect_method", "user", redirect_handler, NULL, NULL, 0, 0);
        ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "set_var", "", set_var_handler, set_var_to_str, set_var_to_vl, 0, 0);
+       ast_sorcery_object_field_register(sip_sorcery, "endpoint", "message_context", "", OPT_STRINGFIELD_T, 1, STRFLDSET(struct ast_sip_endpoint, message_context));
 
        if (ast_sip_initialize_sorcery_transport()) {
                ast_log(LOG_ERROR, "Failed to register SIP transport support with sorcery\n");
index 0f884ae..07d207b 100644 (file)
@@ -464,13 +464,14 @@ static enum pjsip_status_code rx_data_to_ast_msg(pjsip_rx_data *rdata, struct as
        const char *field;
        pjsip_status_code code;
        struct ast_sip_endpoint *endpt = ast_pjsip_rdata_get_endpoint(rdata);
+       const char *context = S_OR(endpt->message_context, endpt->context);
 
        /* make sure there is an appropriate context and extension*/
-       if ((code = get_destination(rdata, endpt->context, buf)) != PJSIP_SC_OK) {
+       if ((code = get_destination(rdata, context, buf)) != PJSIP_SC_OK) {
                return code;
        }
 
-       CHECK_RES(ast_msg_set_context(msg, "%s", endpt->context));
+       CHECK_RES(ast_msg_set_context(msg, "%s", context));
        CHECK_RES(ast_msg_set_exten(msg, "%s", buf));
 
        /* to header */