Add a "message_context" option for PJSIP endpoints.

........

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
This commit is contained in:
Mark Michelson
2014-03-25 17:40:51 +00:00
parent c1c8300e27
commit 2bf37a417d
5 changed files with 17 additions and 2 deletions

View File

@@ -26,6 +26,9 @@ PJSIP:
REGISTER requests for each contact that is registered. If using realtime for 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 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. 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: Realtime Configuration:
- PJSIP endpoint columns 'tos_audio' and 'tos_video' have been changed from yes/no - PJSIP endpoint columns 'tos_audio' and 'tos_video' have been changed from yes/no

View File

@@ -562,6 +562,8 @@ struct ast_sip_endpoint {
AST_STRING_FIELD(fromuser); AST_STRING_FIELD(fromuser);
/*! Domain to place in From header */ /*! Domain to place in From header */
AST_STRING_FIELD(fromdomain); AST_STRING_FIELD(fromdomain);
/*! Context to route incoming MESSAGE requests to */
AST_STRING_FIELD(message_context);
); );
/*! Configuration for extensions */ /*! Configuration for extensions */
struct ast_sip_endpoint_extensions extensions; struct ast_sip_endpoint_extensions extensions;

View File

@@ -685,6 +685,14 @@
multiple 'set_var'(s). multiple 'set_var'(s).
</para></description> </para></description>
</configOption> </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>
<configObject name="auth"> <configObject name="auth">
<synopsis>Authentication type</synopsis> <synopsis>Authentication type</synopsis>

View 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(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", "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_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()) { if (ast_sip_initialize_sorcery_transport()) {
ast_log(LOG_ERROR, "Failed to register SIP transport support with sorcery\n"); ast_log(LOG_ERROR, "Failed to register SIP transport support with sorcery\n");

View File

@@ -464,13 +464,14 @@ static enum pjsip_status_code rx_data_to_ast_msg(pjsip_rx_data *rdata, struct as
const char *field; const char *field;
pjsip_status_code code; pjsip_status_code code;
struct ast_sip_endpoint *endpt = ast_pjsip_rdata_get_endpoint(rdata); 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*/ /* 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; 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)); CHECK_RES(ast_msg_set_exten(msg, "%s", buf));
/* to header */ /* to header */