mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-23 05:40:52 +00:00
Revert - res_pjsip: Allow configuration of endpoint identifier query order
Due to a break in binary compatibility with some other modules these changes are being reverted until the issue can be resolved. ASTERISK-24840 Reported by: Mark Michelson ........ Merged revisions 432868 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432869 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
7
CHANGES
7
CHANGES
@@ -118,13 +118,6 @@ res_ari_channels
|
|||||||
technologies, this is either a 302 Redirect response to an on-going INVITE
|
technologies, this is either a 302 Redirect response to an on-going INVITE
|
||||||
dialog or a SIP REFER request.
|
dialog or a SIP REFER request.
|
||||||
|
|
||||||
res_pjsip
|
|
||||||
------------------
|
|
||||||
* A new 'endpoint_identifier_order' option has been added that allows one to
|
|
||||||
set the order by which endpoint identifiers are processed and checked. This
|
|
||||||
option is specified under the 'global' type configuration section.
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
--- Functionality changes from Asterisk 13.1.0 to Asterisk 13.2.0 ------------
|
--- Functionality changes from Asterisk 13.1.0 to Asterisk 13.2.0 ------------
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
@@ -863,10 +863,6 @@
|
|||||||
;keep_alive_interval=20 ; The interval (in seconds) at which to send keepalive
|
;keep_alive_interval=20 ; The interval (in seconds) at which to send keepalive
|
||||||
; messages on all active connection-oriented transports
|
; messages on all active connection-oriented transports
|
||||||
; (default: "0")
|
; (default: "0")
|
||||||
;endpoint_identifier_order=ip,username,anonymous
|
|
||||||
; The order by which endpoint identifiers are given priority.
|
|
||||||
; Identifier names are derived from res_pjsip_endpoint_identifier_*
|
|
||||||
; modules. (default: ip,username,anonymous)
|
|
||||||
|
|
||||||
|
|
||||||
; MODULE PROVIDING BELOW SECTION(S): res_pjsip_acl
|
; MODULE PROVIDING BELOW SECTION(S): res_pjsip_acl
|
||||||
|
@@ -1,21 +0,0 @@
|
|||||||
"""add pjsip endpoint_identifier_order
|
|
||||||
|
|
||||||
Revision ID: 45e3f47c6c44
|
|
||||||
Revises: 371a3bf4143e
|
|
||||||
Create Date: 2015-03-02 09:32:20.632015
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = '45e3f47c6c44'
|
|
||||||
down_revision = '371a3bf4143e'
|
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade():
|
|
||||||
op.add_column('ps_globals', sa.Column('endpoint_identifier_order', sa.String(40)))
|
|
||||||
|
|
||||||
def downgrade():
|
|
||||||
op.drop_column('ps_globals', 'endpoint_identifier_order')
|
|
||||||
|
@@ -699,8 +699,6 @@ struct ast_sip_outbound_authenticator {
|
|||||||
* \brief An entity responsible for identifying the source of a SIP message
|
* \brief An entity responsible for identifying the source of a SIP message
|
||||||
*/
|
*/
|
||||||
struct ast_sip_endpoint_identifier {
|
struct ast_sip_endpoint_identifier {
|
||||||
/*! Name of the endpoint identifier */
|
|
||||||
const char *name;
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Callback used to identify the source of a message.
|
* \brief Callback used to identify the source of a message.
|
||||||
* See ast_sip_identify_endpoint for more details
|
* See ast_sip_identify_endpoint for more details
|
||||||
@@ -1885,15 +1883,6 @@ void ast_sip_unregister_supplement(struct ast_sip_supplement *supplement);
|
|||||||
*/
|
*/
|
||||||
char *ast_sip_get_debug(void);
|
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 */
|
/*! \brief Determines whether the res_pjsip module is loaded */
|
||||||
#define CHECK_PJSIP_MODULE_LOADED() \
|
#define CHECK_PJSIP_MODULE_LOADED() \
|
||||||
do { \
|
do { \
|
||||||
|
108
res/res_pjsip.c
108
res/res_pjsip.c
@@ -36,7 +36,6 @@
|
|||||||
#include "asterisk/uuid.h"
|
#include "asterisk/uuid.h"
|
||||||
#include "asterisk/sorcery.h"
|
#include "asterisk/sorcery.h"
|
||||||
#include "asterisk/file.h"
|
#include "asterisk/file.h"
|
||||||
#include "asterisk/cli.h"
|
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>pjproject</depend>
|
<depend>pjproject</depend>
|
||||||
@@ -1197,11 +1196,6 @@
|
|||||||
<synopsis>Enable/Disable SIP debug logging. Valid options include yes|no or
|
<synopsis>Enable/Disable SIP debug logging. Valid options include yes|no or
|
||||||
a host address</synopsis>
|
a host address</synopsis>
|
||||||
</configOption>
|
</configOption>
|
||||||
<configOption name="endpoint_identifier_order" default="ip,username,anonymous">
|
|
||||||
<synopsis>The order by which endpoint identifiers are processed and checked.
|
|
||||||
Identifier names are usually derived from and can be found in the endpoint
|
|
||||||
identifier module itself (res_pjsip_endpoint_identifier_*)</synopsis>
|
|
||||||
</configOption>
|
|
||||||
</configObject>
|
</configObject>
|
||||||
</configFile>
|
</configFile>
|
||||||
</configInfo>
|
</configInfo>
|
||||||
@@ -1970,7 +1964,6 @@ int ast_sip_create_request_with_auth(const struct ast_sip_auth_vector *auths, pj
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct endpoint_identifier_list {
|
struct endpoint_identifier_list {
|
||||||
unsigned int priority;
|
|
||||||
struct ast_sip_endpoint_identifier *identifier;
|
struct ast_sip_endpoint_identifier *identifier;
|
||||||
AST_RWLIST_ENTRY(endpoint_identifier_list) list;
|
AST_RWLIST_ENTRY(endpoint_identifier_list) list;
|
||||||
};
|
};
|
||||||
@@ -1979,8 +1972,7 @@ static AST_RWLIST_HEAD_STATIC(endpoint_identifiers, endpoint_identifier_list);
|
|||||||
|
|
||||||
int ast_sip_register_endpoint_identifier(struct ast_sip_endpoint_identifier *identifier)
|
int ast_sip_register_endpoint_identifier(struct ast_sip_endpoint_identifier *identifier)
|
||||||
{
|
{
|
||||||
char *prev, *current, *identifier_order;
|
struct endpoint_identifier_list *id_list_item;
|
||||||
struct endpoint_identifier_list *iter, *id_list_item;
|
|
||||||
SCOPED_LOCK(lock, &endpoint_identifiers, AST_RWLIST_WRLOCK, AST_RWLIST_UNLOCK);
|
SCOPED_LOCK(lock, &endpoint_identifiers, AST_RWLIST_WRLOCK, AST_RWLIST_UNLOCK);
|
||||||
|
|
||||||
id_list_item = ast_calloc(1, sizeof(*id_list_item));
|
id_list_item = ast_calloc(1, sizeof(*id_list_item));
|
||||||
@@ -1990,67 +1982,10 @@ int ast_sip_register_endpoint_identifier(struct ast_sip_endpoint_identifier *ide
|
|||||||
}
|
}
|
||||||
id_list_item->identifier = identifier;
|
id_list_item->identifier = identifier;
|
||||||
|
|
||||||
ast_debug(1, "Register endpoint identifier %s (%p)\n", identifier->name, identifier);
|
AST_RWLIST_INSERT_TAIL(&endpoint_identifiers, id_list_item, list);
|
||||||
|
ast_debug(1, "Registered endpoint identifier %p\n", identifier);
|
||||||
if (ast_strlen_zero(identifier->name)) {
|
|
||||||
/* if an identifier has no name then place in front */
|
|
||||||
AST_RWLIST_INSERT_HEAD(&endpoint_identifiers, id_list_item, list);
|
|
||||||
ast_module_ref(ast_module_info->self);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* see if the name of the identifier is in the global endpoint_identifier_order list */
|
|
||||||
identifier_order = prev = current = ast_sip_get_endpoint_identifier_order();
|
|
||||||
|
|
||||||
if (ast_strlen_zero(identifier_order)) {
|
|
||||||
AST_RWLIST_INSERT_TAIL(&endpoint_identifiers, id_list_item, list);
|
|
||||||
ast_module_ref(ast_module_info->self);
|
|
||||||
ast_free(identifier_order);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
id_list_item->priority = 0;
|
|
||||||
while ((current = strchr(current, ','))) {
|
|
||||||
++id_list_item->priority;
|
|
||||||
if (!strncmp(prev, identifier->name, current - prev)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
prev = ++current;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!current) {
|
|
||||||
/* check to see if it the only or last item */
|
|
||||||
if (!strcmp(prev, identifier->name)) {
|
|
||||||
++id_list_item->priority;
|
|
||||||
} else {
|
|
||||||
id_list_item->priority = UINT_MAX;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (id_list_item->priority == UINT_MAX || AST_RWLIST_EMPTY(&endpoint_identifiers)) {
|
|
||||||
/* if not in the endpoint_identifier_order list then consider it less in
|
|
||||||
priority and add it to the end */
|
|
||||||
AST_RWLIST_INSERT_TAIL(&endpoint_identifiers, id_list_item, list);
|
|
||||||
ast_module_ref(ast_module_info->self);
|
|
||||||
ast_free(identifier_order);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
AST_RWLIST_TRAVERSE_SAFE_BEGIN(&endpoint_identifiers, iter, list) {
|
|
||||||
if (id_list_item->priority < iter->priority) {
|
|
||||||
AST_RWLIST_INSERT_BEFORE_CURRENT(id_list_item, list);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!AST_RWLIST_NEXT(iter, list)) {
|
|
||||||
AST_RWLIST_INSERT_AFTER(&endpoint_identifiers, iter, id_list_item, list);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
AST_RWLIST_TRAVERSE_SAFE_END;
|
|
||||||
|
|
||||||
ast_module_ref(ast_module_info->self);
|
ast_module_ref(ast_module_info->self);
|
||||||
ast_free(identifier_order);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2085,41 +2020,6 @@ struct ast_sip_endpoint *ast_sip_identify_endpoint(pjsip_rx_data *rdata)
|
|||||||
return endpoint;
|
return endpoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *cli_show_endpoint_identifiers(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
|
|
||||||
{
|
|
||||||
#define ENDPOINT_IDENTIFIER_FORMAT "%-20.20s\n"
|
|
||||||
struct endpoint_identifier_list *iter;
|
|
||||||
|
|
||||||
switch (cmd) {
|
|
||||||
case CLI_INIT:
|
|
||||||
e->command = "pjsip show identifiers";
|
|
||||||
e->usage = "Usage: pjsip show identifiers\n"
|
|
||||||
" List all registered endpoint identifiers\n";
|
|
||||||
return NULL;
|
|
||||||
case CLI_GENERATE:
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (a->argc != 3) {
|
|
||||||
return CLI_SHOWUSAGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
ast_cli(a->fd, ENDPOINT_IDENTIFIER_FORMAT, "Identifier Names:");
|
|
||||||
{
|
|
||||||
SCOPED_LOCK(lock, &endpoint_identifiers, AST_RWLIST_RDLOCK, AST_RWLIST_UNLOCK);
|
|
||||||
AST_RWLIST_TRAVERSE(&endpoint_identifiers, iter, list) {
|
|
||||||
ast_cli(a->fd, ENDPOINT_IDENTIFIER_FORMAT,
|
|
||||||
iter->identifier->name ? iter->identifier->name : "name not specified");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return CLI_SUCCESS;
|
|
||||||
#undef ENDPOINT_IDENTIFIER_FORMAT
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct ast_cli_entry cli_commands[] = {
|
|
||||||
AST_CLI_DEFINE(cli_show_endpoint_identifiers, "List registered endpoint identifiers")
|
|
||||||
};
|
|
||||||
|
|
||||||
AST_RWLIST_HEAD_STATIC(endpoint_formatters, ast_sip_endpoint_formatter);
|
AST_RWLIST_HEAD_STATIC(endpoint_formatters, ast_sip_endpoint_formatter);
|
||||||
|
|
||||||
void internal_sip_register_endpoint_formatter(struct ast_sip_endpoint_formatter *obj)
|
void internal_sip_register_endpoint_formatter(struct ast_sip_endpoint_formatter *obj)
|
||||||
@@ -3456,7 +3356,6 @@ static int load_module(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ast_res_pjsip_init_options_handling(0);
|
ast_res_pjsip_init_options_handling(0);
|
||||||
ast_cli_register_multiple(cli_commands, ARRAY_LEN(cli_commands));
|
|
||||||
|
|
||||||
return AST_MODULE_LOAD_SUCCESS;
|
return AST_MODULE_LOAD_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -3477,7 +3376,6 @@ static int reload_module(void)
|
|||||||
|
|
||||||
static int unload_pjsip(void *data)
|
static int unload_pjsip(void *data)
|
||||||
{
|
{
|
||||||
ast_cli_unregister_multiple(cli_commands, ARRAY_LEN(cli_commands));
|
|
||||||
if (memory_pool) {
|
if (memory_pool) {
|
||||||
pj_pool_release(memory_pool);
|
pj_pool_release(memory_pool);
|
||||||
memory_pool = NULL;
|
memory_pool = NULL;
|
||||||
|
@@ -31,7 +31,6 @@
|
|||||||
#define DEFAULT_USERAGENT_PREFIX "Asterisk PBX"
|
#define DEFAULT_USERAGENT_PREFIX "Asterisk PBX"
|
||||||
#define DEFAULT_OUTBOUND_ENDPOINT "default_outbound_endpoint"
|
#define DEFAULT_OUTBOUND_ENDPOINT "default_outbound_endpoint"
|
||||||
#define DEFAULT_DEBUG "no"
|
#define DEFAULT_DEBUG "no"
|
||||||
#define DEFAULT_ENDPOINT_IDENTIFIER_ORDER "ip,username,anonymous"
|
|
||||||
|
|
||||||
static char default_useragent[256];
|
static char default_useragent[256];
|
||||||
|
|
||||||
@@ -42,8 +41,6 @@ struct global_config {
|
|||||||
AST_STRING_FIELD(default_outbound_endpoint);
|
AST_STRING_FIELD(default_outbound_endpoint);
|
||||||
/*! Debug logging yes|no|host */
|
/*! Debug logging yes|no|host */
|
||||||
AST_STRING_FIELD(debug);
|
AST_STRING_FIELD(debug);
|
||||||
/*! Order by which endpoint identifiers are checked (comma separated list) */
|
|
||||||
AST_STRING_FIELD(endpoint_identifier_order);
|
|
||||||
);
|
);
|
||||||
/* Value to put in Max-Forwards header */
|
/* Value to put in Max-Forwards header */
|
||||||
unsigned int max_forwards;
|
unsigned int max_forwards;
|
||||||
@@ -130,21 +127,6 @@ char *ast_sip_get_debug(void)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *ast_sip_get_endpoint_identifier_order(void)
|
|
||||||
{
|
|
||||||
char *res;
|
|
||||||
struct global_config *cfg;
|
|
||||||
|
|
||||||
cfg = get_global_cfg();
|
|
||||||
if (!cfg) {
|
|
||||||
return ast_strdup(DEFAULT_ENDPOINT_IDENTIFIER_ORDER);
|
|
||||||
}
|
|
||||||
|
|
||||||
res = ast_strdup(cfg->endpoint_identifier_order);
|
|
||||||
ao2_ref(cfg, -1);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int ast_sip_get_keep_alive_interval(void)
|
unsigned int ast_sip_get_keep_alive_interval(void)
|
||||||
{
|
{
|
||||||
unsigned int interval;
|
unsigned int interval;
|
||||||
@@ -246,9 +228,6 @@ int ast_sip_initialize_sorcery_global(void)
|
|||||||
OPT_STRINGFIELD_T, 0, STRFLDSET(struct global_config, default_outbound_endpoint));
|
OPT_STRINGFIELD_T, 0, STRFLDSET(struct global_config, default_outbound_endpoint));
|
||||||
ast_sorcery_object_field_register(sorcery, "global", "debug", DEFAULT_DEBUG,
|
ast_sorcery_object_field_register(sorcery, "global", "debug", DEFAULT_DEBUG,
|
||||||
OPT_STRINGFIELD_T, 0, STRFLDSET(struct global_config, debug));
|
OPT_STRINGFIELD_T, 0, STRFLDSET(struct global_config, debug));
|
||||||
ast_sorcery_object_field_register(sorcery, "global", "endpoint_identifier_order",
|
|
||||||
DEFAULT_ENDPOINT_IDENTIFIER_ORDER,
|
|
||||||
OPT_STRINGFIELD_T, 0, STRFLDSET(struct global_config, endpoint_identifier_order));
|
|
||||||
ast_sorcery_object_field_register(sorcery, "global", "keep_alive_interval",
|
ast_sorcery_object_field_register(sorcery, "global", "keep_alive_interval",
|
||||||
__stringify(DEFAULT_KEEPALIVE_INTERVAL),
|
__stringify(DEFAULT_KEEPALIVE_INTERVAL),
|
||||||
OPT_UINT_T, 0, FLDSET(struct global_config, keep_alive_interval));
|
OPT_UINT_T, 0, FLDSET(struct global_config, keep_alive_interval));
|
||||||
|
@@ -103,7 +103,6 @@ done:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct ast_sip_endpoint_identifier anonymous_identifier = {
|
static struct ast_sip_endpoint_identifier anonymous_identifier = {
|
||||||
.name = "anonymous",
|
|
||||||
.identify_endpoint = anonymous_identify,
|
.identify_endpoint = anonymous_identify,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -150,7 +150,6 @@ static struct ast_sip_endpoint *ip_identify(pjsip_rx_data *rdata)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct ast_sip_endpoint_identifier ip_identifier = {
|
static struct ast_sip_endpoint_identifier ip_identifier = {
|
||||||
.name = "ip",
|
|
||||||
.identify_endpoint = ip_identify,
|
.identify_endpoint = ip_identify,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -109,7 +109,6 @@ done:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct ast_sip_endpoint_identifier username_identifier = {
|
static struct ast_sip_endpoint_identifier username_identifier = {
|
||||||
.name = "username",
|
|
||||||
.identify_endpoint = username_identify,
|
.identify_endpoint = username_identify,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user