Compare commits

...

7 Commits

Author SHA1 Message Date
Asterisk Autobuilder
2fd9440b58 Importing release summary for 11.0.0-rc2 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/11.0.0-rc2@375174 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-10-17 19:33:15 +00:00
Asterisk Autobuilder
6257356ecc Updates for Asterisk 11.0.0-rc2
* Updated ChangeLog
* Updated version number
* Removed old summaries
* Merged r375051 (ASTERISK-20531)
* Merged r374792 (ASTERISK-20544)
* Merged r374842 (ASTERISK-20545)
* Merged r374850, r374851, r374877 (ASTERISK-20554)
* Merged r375148 (ASTERISK-20559)



git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/11.0.0-rc2@375164 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-10-17 19:22:46 +00:00
Asterisk Autobuilder
2f9be4af66 Create 11.0.0-rc2
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/11.0.0-rc2@375145 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-10-17 18:26:39 +00:00
Asterisk Autobuilder
c41eb44de9 Use autotagged externals
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/11.0.0-rc1@374694 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-10-08 21:02:38 +00:00
Asterisk Autobuilder
fb2735c6aa Importing release summary for 11.0.0-rc1 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/11.0.0-rc1@374693 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-10-08 21:02:27 +00:00
Asterisk Autobuilder
efc57f4d64 Importing files for 11.0.0-rc1 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/11.0.0-rc1@374692 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-10-08 21:02:21 +00:00
Asterisk Autobuilder
42608e5587 Creating tag for the release of asterisk-11.0.0-rc1
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/11.0.0-rc1@374691 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2012-10-08 20:53:55 +00:00
13 changed files with 37793 additions and 24 deletions

1
.lastclean Normal file
View File

@@ -0,0 +1 @@
40

1
.version Normal file
View File

@@ -0,0 +1 @@
11.0.0-rc2

20752
ChangeLog Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1092,7 +1092,6 @@ static void iax_pvt_callid_new(int callno)
struct ast_callid *callid = ast_create_callid();
char buffer[AST_CALLID_BUFFER_LENGTH];
ast_callid_strnprint(buffer, sizeof(buffer), callid);
ast_log(LOG_NOTICE, "iax_pvt_callid_new created and set %s\n", buffer);
iax_pvt_callid_set(callno, callid);
ast_callid_unref(callid);
}

View File

@@ -1729,6 +1729,7 @@ static struct ast_channel *jingle_request(const char *type, struct ast_format_ca
struct jingle_session *session;
struct ast_channel *chan;
enum jingle_transport transport = JINGLE_TRANSPORT_NONE;
struct ast_rtp_engine_ice *ice;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(name);
AST_APP_ARG(target);
@@ -1832,6 +1833,15 @@ static struct ast_channel *jingle_request(const char *type, struct ast_format_ca
jingle_enable_video(session);
}
/* As this is outgoing set ourselves as controlling */
if (session->rtp && (ice = ast_rtp_instance_get_ice(session->rtp))) {
ice->ice_lite(session->rtp);
}
if (session->vrtp && (ice = ast_rtp_instance_get_ice(session->vrtp))) {
ice->ice_lite(session->vrtp);
}
/* We purposely don't decrement the session here as there is a reference on the channel */
ao2_link(endpoint->state->sessions, session);
@@ -1939,14 +1949,10 @@ static int jingle_interpret_ice_udp_transport(struct jingle_session *session, ik
return -1;
}
if (ast_strlen_zero(ufrag) || ast_strlen_zero(pwd)) {
jingle_queue_hangup_with_cause(session, AST_CAUSE_PROTOCOL_ERROR);
ast_log(LOG_ERROR, "Invalid ICE-UDP transport information received on session '%s', ufrag or pwd not present\n", session->sid);
return -1;
if (!ast_strlen_zero(ufrag) && !ast_strlen_zero(pwd)) {
ice->set_authentication(rtp, ufrag, pwd);
}
ice->set_authentication(rtp, ufrag, pwd);
for (candidate = iks_child(transport); candidate; candidate = iks_next(candidate)) {
char *component = iks_find_attrib(candidate, "component"), *foundation = iks_find_attrib(candidate, "foundation");
char *generation = iks_find_attrib(candidate, "generation"), *id = iks_find_attrib(candidate, "id");
@@ -2102,7 +2108,8 @@ static int jingle_interpret_content(struct jingle_session *session, ikspak *pak)
struct ast_rtp_instance *rtp = NULL;
iks *description, *transport;
if (strcmp(iks_name(content), "content")) {
/* Ignore specific parts if they are known not to be useful */
if (!strcmp(iks_name(content), "conference-info")) {
continue;
}

View File

@@ -7287,7 +7287,8 @@ static int initialize_udptl(struct sip_pvt *p)
return 0;
}
int ast_sipinfo_send(
static int sipinfo_send(
struct ast_channel *chan,
struct ast_variable *headers,
const char *content_type,
@@ -33162,6 +33163,12 @@ static const struct ast_data_entry sip_data_providers[] = {
AST_DATA_ENTRY("asterisk/channel/sip/peers", &peers_data_provider),
};
static const struct ast_sip_api_tech chan_sip_api_provider = {
.version = AST_SIP_API_VERSION,
.name = "chan_sip",
.sipinfo_send = sipinfo_send,
};
/*! \brief PBX load module - initialization */
static int load_module(void)
{
@@ -33171,6 +33178,10 @@ static int load_module(void)
return AST_MODULE_LOAD_FAILURE;
}
if (ast_sip_api_provider_register(&chan_sip_api_provider)) {
return AST_MODULE_LOAD_FAILURE;
}
/* the fact that ao2_containers can't resize automatically is a major worry! */
/* if the number of objects gets above MAX_XXX_BUCKETS, things will slow down */
peers = ao2_t_container_alloc(HASH_PEER_SIZE, peer_hash_cb, peer_cmp_cb, "allocate peers");
@@ -33332,6 +33343,8 @@ static int unload_module(void)
struct ao2_iterator i;
int wait_count;
ast_sip_api_provider_unregister();
ast_websocket_remove_protocol("sip", sip_websocket_callback);
network_change_event_unsubscribe();
@@ -33507,7 +33520,7 @@ static int unload_module(void)
return 0;
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Session Initiation Protocol (SIP)",
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Session Initiation Protocol (SIP)",
.load = load_module,
.unload = unload_module,
.reload = reload,

View File

@@ -1,6 +0,0 @@
{
global:
LINKER_SYMBOL_PREFIX*ast_sipinfo_send;
local:
*;
};

View File

@@ -26,6 +26,16 @@ extern "C" {
#include "asterisk/optional_api.h"
#include "asterisk/config.h"
#define AST_SIP_API_VERSION 1
struct ast_sip_api_tech {
const int version;
const char *name;
int (*sipinfo_send)(struct ast_channel *chan,
struct ast_variable *headers, const char *content_type,
const char *content, const char *useragent_filter);
};
/*!
* \brief Send a customized SIP INFO request
*
@@ -44,6 +54,23 @@ int ast_sipinfo_send(struct ast_channel *chan,
const char *content,
const char *useragent_filter);
/*!
* \brief Register a SIP API provider
*
* This will fail if a provider has already registered or if the
* provider is using an incorrect version.
*
* \param provider The provider to register
* \retval 0 Success
* \retval -1 Failure
*/
int ast_sip_api_provider_register(const struct ast_sip_api_tech *provider);
/*!
* \brief Unregister a SIP API provider
*/
void ast_sip_api_provider_unregister(void);
#if defined(__cplusplus) || defined(c_plusplus)
}
#endif

View File

@@ -4369,7 +4369,7 @@ static int action_originate(struct mansession *s, const struct message *m)
/* Allocate requested channel variables */
vars = astman_get_variables(m);
if (s->session->chanvars) {
if (s->session && s->session->chanvars) {
struct ast_variable *v, *old;
old = vars;
vars = NULL;

60
main/sip_api.c Normal file
View File

@@ -0,0 +1,60 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 2012, Digium, Inc.
*
* Mark Michelson <mmichelson@digium.com>
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree.
*/
#include "asterisk.h"
#include "asterisk/sip_api.h"
#include "asterisk/logger.h"
static const struct ast_sip_api_tech *api_provider;
int ast_sipinfo_send(struct ast_channel *chan,
struct ast_variable *headers,
const char *content_type,
const char *content,
const char *useragent_filter)
{
if (!api_provider) {
ast_log(LOG_WARNING, "Unable to send custom SIP INFO. No API provider registered\n");
return -1;
}
return api_provider->sipinfo_send(chan, headers, content_type, content, useragent_filter);
}
int ast_sip_api_provider_register(const struct ast_sip_api_tech *provider)
{
if (api_provider) {
ast_log(LOG_WARNING, "SIP provider %s has already registered. Not registering provider %s\n",
api_provider->name, provider->name);
return -1;
}
if (provider->version != AST_SIP_API_VERSION) {
ast_log(LOG_WARNING, "SIP API provider version mismatch: Current version is %d but provider "
"uses version %d\n", AST_SIP_API_VERSION, provider->version);
return -1;
}
api_provider = provider;
return 0;
}
void ast_sip_api_provider_unregister(void)
{
api_provider = NULL;
}

View File

@@ -192,11 +192,19 @@ static void *handle_tcptls_connection(void *data)
long res;
peer = SSL_get_peer_certificate(tcptls_session->ssl);
if (!peer) {
ast_log(LOG_WARNING, "No peer SSL certificate\n");
ast_log(LOG_ERROR, "No peer SSL certificate to verify\n");
ast_tcptls_close_session_file(tcptls_session);
ao2_ref(tcptls_session, -1);
return NULL;
}
res = SSL_get_verify_result(tcptls_session->ssl);
if (res != X509_V_OK) {
ast_log(LOG_ERROR, "Certificate did not verify: %s\n", X509_verify_cert_error_string(res));
X509_free(peer);
ast_tcptls_close_session_file(tcptls_session);
ao2_ref(tcptls_session, -1);
return NULL;
}
if (!ast_test_flag(&tcptls_session->parent->tls_cfg->flags, AST_SSL_IGNORE_COMMON_NAME)) {
ASN1_STRING *str;
@@ -227,17 +235,13 @@ static void *handle_tcptls_connection(void *data)
}
if (!found) {
ast_log(LOG_ERROR, "Certificate common name did not match (%s)\n", tcptls_session->parent->hostname);
if (peer) {
X509_free(peer);
}
X509_free(peer);
ast_tcptls_close_session_file(tcptls_session);
ao2_ref(tcptls_session, -1);
return NULL;
}
}
if (peer) {
X509_free(peer);
}
X509_free(peer);
}
}
if (!tcptls_session->f) { /* no success opening descriptor stacking */