[asterisk-commits] kmoore: branch kmoore/pjsip_dtls r394807 - in /team/kmoore/pjsip_dtls: ./ cha...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Jul 19 13:34:52 CDT 2013
Author: kmoore
Date: Fri Jul 19 13:34:50 2013
New Revision: 394807
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=394807
Log:
fix merge conflict
Added:
team/kmoore/pjsip_dtls/res/res_sip/config_global.c
- copied unchanged from r394795, trunk/res/res_sip/config_global.c
team/kmoore/pjsip_dtls/res/res_sip/config_system.c
- copied unchanged from r394795, trunk/res/res_sip/config_system.c
team/kmoore/pjsip_dtls/res/res_sip/sip_global_headers.c
- copied unchanged from r394795, trunk/res/res_sip/sip_global_headers.c
Modified:
team/kmoore/pjsip_dtls/ (props changed)
team/kmoore/pjsip_dtls/channels/chan_gulp.c
team/kmoore/pjsip_dtls/channels/chan_sip.c
team/kmoore/pjsip_dtls/include/asterisk/channel.h
team/kmoore/pjsip_dtls/include/asterisk/res_sip.h
team/kmoore/pjsip_dtls/include/asterisk/stasis_system.h
team/kmoore/pjsip_dtls/main/bridging.c
team/kmoore/pjsip_dtls/main/ccss.c
team/kmoore/pjsip_dtls/main/stasis_system.c
team/kmoore/pjsip_dtls/res/res_sip.c
team/kmoore/pjsip_dtls/res/res_sip.exports.in
team/kmoore/pjsip_dtls/res/res_sip/config_transport.c
team/kmoore/pjsip_dtls/res/res_sip/include/res_sip_private.h
team/kmoore/pjsip_dtls/res/res_sip/sip_configuration.c
team/kmoore/pjsip_dtls/res/res_sip_caller_id.c
team/kmoore/pjsip_dtls/res/res_sip_mwi.c
team/kmoore/pjsip_dtls/res/res_sip_one_touch_record_info.c
team/kmoore/pjsip_dtls/res/res_sip_pubsub.c
team/kmoore/pjsip_dtls/res/res_sip_refer.c
team/kmoore/pjsip_dtls/res/res_sip_sdp_rtp.c
team/kmoore/pjsip_dtls/res/res_sip_session.c
Propchange: team/kmoore/pjsip_dtls/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Fri Jul 19 13:34:50 2013
@@ -1,1 +1,1 @@
-/trunk:1-394745
+/trunk:1-394806
Modified: team/kmoore/pjsip_dtls/channels/chan_gulp.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/pjsip_dtls/channels/chan_gulp.c?view=diff&rev=394807&r1=394806&r2=394807
==============================================================================
--- team/kmoore/pjsip_dtls/channels/chan_gulp.c (original)
+++ team/kmoore/pjsip_dtls/channels/chan_gulp.c Fri Jul 19 13:34:50 2013
@@ -56,6 +56,7 @@
#include "asterisk/dsp.h"
#include "asterisk/stasis_endpoints.h"
#include "asterisk/stasis_channels.h"
+#include "asterisk/indications.h"
#include "asterisk/res_sip.h"
#include "asterisk/res_sip_session.h"
@@ -612,6 +613,18 @@
ast_channel_named_callgroups_set(chan, session->endpoint->named_callgroups);
ast_channel_named_pickupgroups_set(chan, session->endpoint->named_pickupgroups);
+
+ if (!ast_strlen_zero(session->endpoint->language)) {
+ ast_channel_language_set(chan, session->endpoint->language);
+ }
+
+ if (!ast_strlen_zero(session->endpoint->zone)) {
+ struct ast_tone_zone *zone = ast_get_indication_zone(session->endpoint->zone);
+ if (!zone) {
+ ast_log(LOG_ERROR, "Unknown country code '%s' for tonezone. Check indications.conf for available country codes.\n", session->endpoint->zone);
+ }
+ ast_channel_zone_set(chan, zone);
+ }
ast_endpoint_add_channel(session->endpoint->persistent, chan);
Modified: team/kmoore/pjsip_dtls/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/pjsip_dtls/channels/chan_sip.c?view=diff&rev=394807&r1=394806&r2=394807
==============================================================================
--- team/kmoore/pjsip_dtls/channels/chan_sip.c (original)
+++ team/kmoore/pjsip_dtls/channels/chan_sip.c Fri Jul 19 13:34:50 2013
@@ -8044,7 +8044,7 @@
return NULL;
}
- if (i->relatedpeer) {
+ if (i->relatedpeer && i->relatedpeer->endpoint) {
if (ast_endpoint_add_channel(i->relatedpeer->endpoint, tmp)) {
ast_channel_unref(tmp);
sip_pvt_lock(i);
@@ -15750,7 +15750,6 @@
static int expire_register(const void *data)
{
struct sip_peer *peer = (struct sip_peer *)data;
- RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
if (!peer) { /* Hmmm. We have no peer. Weird. */
return 0;
@@ -15770,11 +15769,14 @@
peer->socket.ws_session = NULL;
}
- ast_endpoint_set_state(peer->endpoint, AST_ENDPOINT_OFFLINE);
- blob = ast_json_pack("{s: s, s: s}",
- "peer_status", "Unregistered",
- "cause", "Expired");
- ast_endpoint_blob_publish(peer->endpoint, ast_endpoint_state_type(), blob);
+ if (peer->endpoint) {
+ RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
+ ast_endpoint_set_state(peer->endpoint, AST_ENDPOINT_OFFLINE);
+ blob = ast_json_pack("{s: s, s: s}",
+ "peer_status", "Unregistered",
+ "cause", "Expired");
+ ast_endpoint_blob_publish(peer->endpoint, ast_endpoint_state_type(), blob);
+ }
register_peer_exten(peer, FALSE); /* Remove regexten */
ast_devstate_changed(AST_DEVICE_UNKNOWN, AST_DEVSTATE_CACHABLE, "SIP/%s", peer->name);
@@ -16019,7 +16021,6 @@
int start = 0;
int wildcard_found = 0;
int single_binding_found = 0;
- RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
ast_copy_string(contact, __get_header(req, "Contact", &start), sizeof(contact));
@@ -16207,11 +16208,14 @@
ast_db_put("SIP/Registry", peer->name, data);
}
- ast_endpoint_set_state(peer->endpoint, AST_ENDPOINT_ONLINE);
- blob = ast_json_pack("{s: s, s: s}",
- "peer_status", "Registered",
- "address", ast_sockaddr_stringify(&peer->addr));
- ast_endpoint_blob_publish(peer->endpoint, ast_endpoint_state_type(), blob);
+ if (peer->endpoint) {
+ RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
+ ast_endpoint_set_state(peer->endpoint, AST_ENDPOINT_ONLINE);
+ blob = ast_json_pack("{s: s, s: s}",
+ "peer_status", "Registered",
+ "address", ast_sockaddr_stringify(&peer->addr));
+ ast_endpoint_blob_publish(peer->endpoint, ast_endpoint_state_type(), blob);
+ }
/* Is this a new IP address for us? */
if (ast_sockaddr_cmp(&peer->addr, &oldsin)) {
@@ -17215,7 +17219,6 @@
/* Create peer if we have autocreate mode enabled */
peer = temp_peer(name);
if (peer) {
- RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
ao2_t_link(peers, peer, "link peer into peer table");
if (!ast_sockaddr_isnull(&peer->addr)) {
ao2_t_link(peers_by_ip, peer, "link peer into peers-by-ip table");
@@ -17244,11 +17247,14 @@
ast_string_field_set(p, fullcontact, peer->fullcontact);
/* Say OK and ask subsystem to retransmit msg counter */
transmit_response_with_date(p, "200 OK", req);
- ast_endpoint_set_state(peer->endpoint, AST_ENDPOINT_ONLINE);
- blob = ast_json_pack("{s: s, s: s}",
- "peer_status", "Registered",
- "address", ast_sockaddr_stringify(addr));
- ast_endpoint_blob_publish(peer->endpoint, ast_endpoint_state_type(), blob);
+ if (peer->endpoint) {
+ RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
+ ast_endpoint_set_state(peer->endpoint, AST_ENDPOINT_ONLINE);
+ blob = ast_json_pack("{s: s, s: s}",
+ "peer_status", "Registered",
+ "address", ast_sockaddr_stringify(addr));
+ ast_endpoint_blob_publish(peer->endpoint, ast_endpoint_state_type(), blob);
+ }
send_mwi = 1;
res = 0;
break;
@@ -17338,7 +17344,9 @@
break;
}
- ast_endpoint_blob_publish(peer->endpoint, ast_endpoint_state_type(), blob);
+ if (peer->endpoint) {
+ ast_endpoint_blob_publish(peer->endpoint, ast_endpoint_state_type(), blob);
+ }
}
if (peer) {
sip_unref_peer(peer, "register_verify: sip_unref_peer: tossing stack peer pointer at end of func");
@@ -23821,7 +23829,6 @@
if (statechanged) {
const char *s = is_reachable ? "Reachable" : "Lagged";
char str_lastms[20];
- RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
snprintf(str_lastms, sizeof(str_lastms), "%d", pingtime);
@@ -23831,13 +23838,18 @@
if (sip_cfg.peer_rtupdate) {
ast_update_realtime(ast_check_realtime("sipregs") ? "sipregs" : "sippeers", "name", peer->name, "lastms", str_lastms, SENTINEL);
}
- ast_endpoint_set_state(peer->endpoint, AST_ENDPOINT_ONLINE);
- blob = ast_json_pack("{s: s, s: i}",
- "peer_status", s,
- "time", pingtime);
- ast_endpoint_blob_publish(peer->endpoint, ast_endpoint_state_type(), blob);
- if (is_reachable && sip_cfg.regextenonqualify)
+ if (peer->endpoint) {
+ RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
+ ast_endpoint_set_state(peer->endpoint, AST_ENDPOINT_ONLINE);
+ blob = ast_json_pack("{s: s, s: i}",
+ "peer_status", s,
+ "time", pingtime);
+ ast_endpoint_blob_publish(peer->endpoint, ast_endpoint_state_type(), blob);
+ }
+
+ if (is_reachable && sip_cfg.regextenonqualify) {
register_peer_exten(peer, TRUE);
+ }
}
pvt_set_needdestroy(p, "got OPTIONS response");
@@ -29149,17 +29161,21 @@
peer->pokeexpire = -1;
if (peer->lastms > -1) {
- RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
ast_log(LOG_NOTICE, "Peer '%s' is now UNREACHABLE! Last qualify: %d\n", peer->name, peer->lastms);
if (sip_cfg.peer_rtupdate) {
ast_update_realtime(ast_check_realtime("sipregs") ? "sipregs" : "sippeers", "name", peer->name, "lastms", "-1", SENTINEL);
}
- ast_endpoint_set_state(peer->endpoint, AST_ENDPOINT_OFFLINE);
- blob = ast_json_pack("{s: s, s: s}",
- "peer_status", "Unreachable",
- "time", "-1");
- ast_endpoint_blob_publish(peer->endpoint, ast_endpoint_state_type(), blob);
+
+ if (peer->endpoint) {
+ RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
+ ast_endpoint_set_state(peer->endpoint, AST_ENDPOINT_OFFLINE);
+ blob = ast_json_pack("{s: s, s: s}",
+ "peer_status", "Unreachable",
+ "time", "-1");
+ ast_endpoint_blob_publish(peer->endpoint, ast_endpoint_state_type(), blob);
+ }
+
if (sip_cfg.regextenonqualify) {
register_peer_exten(peer, FALSE);
}
Modified: team/kmoore/pjsip_dtls/include/asterisk/channel.h
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/pjsip_dtls/include/asterisk/channel.h?view=diff&rev=394807&r1=394806&r2=394807
==============================================================================
--- team/kmoore/pjsip_dtls/include/asterisk/channel.h (original)
+++ team/kmoore/pjsip_dtls/include/asterisk/channel.h Fri Jul 19 13:34:50 2013
@@ -1426,7 +1426,7 @@
* \note This function performs a hard hangup on a channel. Unlike the soft-hangup, this function
* performs all stream stopping, etc, on the channel that needs to end.
* chan is no longer valid after this call.
- * \param chan channel to hang up
+ * \param chan channel to hang up (NULL tolerant)
* \return Nothing
*/
void ast_hangup(struct ast_channel *chan);
Modified: team/kmoore/pjsip_dtls/include/asterisk/res_sip.h
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/pjsip_dtls/include/asterisk/res_sip.h?view=diff&rev=394807&r1=394806&r2=394807
==============================================================================
--- team/kmoore/pjsip_dtls/include/asterisk/res_sip.h (original)
+++ team/kmoore/pjsip_dtls/include/asterisk/res_sip.h Fri Jul 19 13:34:50 2013
@@ -117,6 +117,10 @@
struct ast_sockaddr external_address;
/*! Transport state information */
struct ast_sip_transport_state *state;
+ /*! QOS DSCP TOS bits */
+ unsigned int tos;
+ /*! QOS COS value */
+ unsigned int cos;
};
/*!
@@ -325,6 +329,26 @@
AST_STRING_FIELD(external_media_address);
/*! Configured voicemail boxes for this endpoint. Used for MWI */
AST_STRING_FIELD(mailboxes);
+ /*! Configured RTP engine for this endpoint. */
+ AST_STRING_FIELD(rtp_engine);
+ /*! Configured tone zone for this endpoint. */
+ AST_STRING_FIELD(zone);
+ /*! Configured language for this endpoint. */
+ AST_STRING_FIELD(language);
+ /*! Feature to enact when one-touch recording INFO with Record: On is received */
+ AST_STRING_FIELD(recordonfeature);
+ /*! Feature to enact when one-touch recording INFO with Record: Off is received */
+ AST_STRING_FIELD(recordofffeature);
+ /*! SDP origin username */
+ AST_STRING_FIELD(sdpowner);
+ /*! SDP session name */
+ AST_STRING_FIELD(sdpsession);
+ /*! Default username to place in From header */
+ AST_STRING_FIELD(fromuser);
+ /*! Domain to place in From header */
+ AST_STRING_FIELD(fromdomain);
+ /*! Username to use when sending MWI NOTIFYs to this endpoint */
+ AST_STRING_FIELD(mwi_from);
);
/*! Identification information for this endpoint */
struct ast_party_id id;
@@ -410,6 +434,20 @@
struct ast_endpoint *persistent;
/*! The number of channels at which busy device state is returned */
unsigned int devicestate_busy_at;
+ /*! Determines if transfers (using REFER) are allowed by this endpoint */
+ unsigned int allowtransfer;
+ /*! DSCP TOS bits for audio streams */
+ unsigned int tos_audio;
+ /*! Priority for audio streams */
+ unsigned int cos_audio;
+ /*! DSCP TOS bits for video streams */
+ unsigned int tos_video;
+ /*! Priority for video streams */
+ unsigned int cos_video;
+ /*! Indicates if endpoint is allowed to initiate subscriptions */
+ unsigned int allowsubscribe;
+ /*! The minimum allowed expiration for subscriptions from endpoint */
+ unsigned int subminexpiry;
/*! \brief DTLS-SRTP configuration information */
struct ast_rtp_dtls_cfg dtls_cfg;
/*! Should SRTP use a 32 byte tag instead of an 80 byte tag? */
@@ -1063,13 +1101,15 @@
* \param endpoint Optional. If specified, the request will be created out-of-dialog
* to the endpoint.
* \param uri Optional. If specified, the request will be sent to this URI rather
+ * this value.
* than one configured for the endpoint.
* \param[out] tdata The newly-created request
* \retval 0 Success
* \retval -1 Failure
*/
int ast_sip_create_request(const char *method, struct pjsip_dialog *dlg,
- struct ast_sip_endpoint *endpoint, const char *uri, pjsip_tx_data **tdata);
+ struct ast_sip_endpoint *endpoint, const char *uri,
+ pjsip_tx_data **tdata);
/*!
* \brief General purpose method for sending a SIP request
@@ -1314,4 +1354,12 @@
*/
void ast_sip_report_auth_challenge_sent(struct ast_sip_endpoint *endpoint, pjsip_rx_data *rdata, pjsip_tx_data *tdata);
+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(struct ast_sorcery *sorcery);
+
#endif /* _RES_SIP_H */
Modified: team/kmoore/pjsip_dtls/include/asterisk/stasis_system.h
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/pjsip_dtls/include/asterisk/stasis_system.h?view=diff&rev=394807&r1=394806&r2=394807
==============================================================================
--- team/kmoore/pjsip_dtls/include/asterisk/stasis_system.h (original)
+++ team/kmoore/pjsip_dtls/include/asterisk/stasis_system.h Fri Jul 19 13:34:50 2013
@@ -62,6 +62,66 @@
struct stasis_message_type *ast_system_registry_type(void);
/*!
+ * \brief A \ref stasis_message_type for CCSS Available messages.
+ * \since 12
+ */
+struct stasis_message_type *ast_cc_available_type(void);
+
+/*!
+ * \brief A \ref stasis_message_type for CCSS Offer Timer Start messages.
+ * \since 12
+ */
+struct stasis_message_type *ast_cc_offertimerstart_type(void);
+
+/*!
+ * \brief A \ref stasis_message_type for CCSS Requested messages.
+ * \since 12
+ */
+struct stasis_message_type *ast_cc_requested_type(void);
+
+/*!
+ * \brief A \ref stasis_message_type for CCSS Request Acknowledged messages.
+ * \since 12
+ */
+struct stasis_message_type *ast_cc_requestacknowledged_type(void);
+
+/*!
+ * \brief A \ref stasis_message_type for CCSS Caller Stop Monitoring messages.
+ * \since 12
+ */
+struct stasis_message_type *ast_cc_callerstopmonitoring_type(void);
+
+/*!
+ * \brief A \ref stasis_message_type for CCSS Caller Start Monitoring messages.
+ * \since 12
+ */
+struct stasis_message_type *ast_cc_callerstartmonitoring_type(void);
+
+/*!
+ * \brief A \ref stasis_message_type for CCSS Caller Recalling messages.
+ * \since 12
+ */
+struct stasis_message_type *ast_cc_callerrecalling_type(void);
+
+/*!
+ * \brief A \ref stasis_message_type for CCSS Recall Complete messages.
+ * \since 12
+ */
+struct stasis_message_type *ast_cc_recallcomplete_type(void);
+
+/*!
+ * \brief A \ref stasis_message_type for CCSS Failure messages.
+ * \since 12
+ */
+struct stasis_message_type *ast_cc_failure_type(void);
+
+/*!
+ * \brief A \ref stasis_message_type for CCSS Monitor Failed messages.
+ * \since 12
+ */
+struct stasis_message_type *ast_cc_monitorfailed_type(void);
+
+/*!
* \brief Initialize the stasis system topic and message types
* \retval 0 on success
* \retval -1 on failure
Modified: team/kmoore/pjsip_dtls/main/bridging.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/pjsip_dtls/main/bridging.c?view=diff&rev=394807&r1=394806&r2=394807
==============================================================================
--- team/kmoore/pjsip_dtls/main/bridging.c (original)
+++ team/kmoore/pjsip_dtls/main/bridging.c Fri Jul 19 13:34:50 2013
@@ -63,6 +63,7 @@
#include "asterisk/core_local.h"
#include "asterisk/core_unreal.h"
#include "asterisk/features_config.h"
+#include "asterisk/audiohook.h"
/*! All bridges container. */
static struct ao2_container *bridges;
@@ -4721,6 +4722,13 @@
if (!AST_LIST_EMPTY(ast_channel_readq(chan))) {
return NULL;
}
+ if (ast_channel_monitor(chan)
+ || (ast_channel_audiohooks(chan)
+ && !ast_audiohook_write_list_empty(ast_channel_audiohooks(chan)))
+ || !ast_framehook_list_contains_no_active(ast_channel_framehooks(chan))) {
+ /* Channel has an active monitor, audiohook, or framehook. */
+ return NULL;
+ }
bridge_channel = ast_channel_internal_bridge_channel(chan);
if (!bridge_channel || ast_bridge_channel_trylock(bridge_channel)) {
return NULL;
@@ -4760,6 +4768,14 @@
return NULL;
}
if (!AST_LIST_EMPTY(ast_channel_readq(peer))) {
+ ast_channel_unlock(peer);
+ return NULL;
+ }
+ if (ast_channel_monitor(peer)
+ || (ast_channel_audiohooks(peer)
+ && !ast_audiohook_write_list_empty(ast_channel_audiohooks(peer)))
+ || !ast_framehook_list_contains_no_active(ast_channel_framehooks(peer))) {
+ /* Peer has an active monitor, audiohook, or framehook. */
ast_channel_unlock(peer);
return NULL;
}
Modified: team/kmoore/pjsip_dtls/main/ccss.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/pjsip_dtls/main/ccss.c?view=diff&rev=394807&r1=394806&r2=394807
==============================================================================
--- team/kmoore/pjsip_dtls/main/ccss.c (original)
+++ team/kmoore/pjsip_dtls/main/ccss.c Fri Jul 19 13:34:50 2013
@@ -52,6 +52,7 @@
#include "asterisk/cli.h"
#include "asterisk/manager.h"
#include "asterisk/causes.h"
+#include "asterisk/stasis_system.h"
/*** DOCUMENTATION
<application name="CallCompletionRequest" language="en_US">
@@ -1025,6 +1026,136 @@
}
}
+static int cc_publish(struct stasis_message_type *message_type, int core_id, struct ast_json *extras)
+{
+ RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
+ RAII_VAR(struct ast_json_payload *, payload, NULL, ao2_cleanup);
+ RAII_VAR(struct stasis_message *, message, NULL, ao2_cleanup);
+
+ blob = ast_json_pack("{s: i}",
+ "core_id", core_id);
+
+ if (extras) {
+ ast_json_object_update(blob, extras);
+ }
+
+ if (!(payload = ast_json_payload_create(blob))) {
+ return -1;
+ }
+
+ if (!(message = stasis_message_create(message_type, payload))) {
+ return -1;
+ }
+
+ stasis_publish(ast_system_topic(), message);
+
+ return 0;
+}
+
+static void cc_publish_available(int core_id, const char *callee, const char *service)
+{
+ RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+
+ extras = ast_json_pack("{s: s, s: s}",
+ "callee", callee,
+ "service", service);
+
+ cc_publish(ast_cc_available_type(), core_id, extras);
+}
+
+static void cc_publish_offertimerstart(int core_id, const char *caller, unsigned int expires)
+{
+ RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+
+ extras = ast_json_pack("{s: s, s: i}",
+ "caller", caller,
+ "expires", expires);
+
+ cc_publish(ast_cc_offertimerstart_type(), core_id, extras);
+}
+
+static void cc_publish_requested(int core_id, const char *caller, const char *callee)
+{
+ RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+
+ extras = ast_json_pack("{s: s, s: s}",
+ "caller", caller,
+ "callee", callee);
+
+ cc_publish(ast_cc_requested_type(), core_id, extras);
+}
+
+static void cc_publish_requestacknowledged(int core_id, const char *caller)
+{
+ RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+
+ extras = ast_json_pack("{s: s}",
+ "caller", caller);
+
+ cc_publish(ast_cc_requestacknowledged_type(), core_id, extras);
+}
+
+static void cc_publish_callerstopmonitoring(int core_id, const char *caller)
+{
+ RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+
+ extras = ast_json_pack("{s: s}",
+ "caller", caller);
+
+ cc_publish(ast_cc_callerstopmonitoring_type(), core_id, extras);
+}
+
+static void cc_publish_callerstartmonitoring(int core_id, const char *caller)
+{
+ RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+
+ extras = ast_json_pack("{s: s}",
+ "caller", caller);
+
+ cc_publish(ast_cc_callerstartmonitoring_type(), core_id, extras);
+}
+
+static void cc_publish_callerrecalling(int core_id, const char *caller)
+{
+ RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+
+ extras = ast_json_pack("{s: s}",
+ "caller", caller);
+
+ cc_publish(ast_cc_callerrecalling_type(), core_id, extras);
+}
+
+static void cc_publish_recallcomplete(int core_id, const char *caller)
+{
+ RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+
+ extras = ast_json_pack("{s: s}",
+ "caller", caller);
+
+ cc_publish(ast_cc_recallcomplete_type(), core_id, extras);
+}
+
+static void cc_publish_failure(int core_id, const char *caller, const char *reason)
+{
+ RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+
+ extras = ast_json_pack("{s: s, s: s}",
+ "caller", caller,
+ "reason", reason);
+
+ cc_publish(ast_cc_failure_type(), core_id, extras);
+}
+
+static void cc_publish_monitorfailed(int core_id, const char *callee)
+{
+ RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+
+ extras = ast_json_pack("{s: s}",
+ "callee", callee);
+
+ cc_publish(ast_cc_monitorfailed_type(), core_id, extras);
+}
+
struct cc_monitor_backend {
AST_LIST_ENTRY(cc_monitor_backend) next;
const struct ast_cc_monitor_callbacks *callbacks;
@@ -2262,12 +2393,7 @@
cc_extension_monitor_change_is_valid(core_instance, monitor->parent_id, monitor->interface->device_name, 0);
- manager_event(EVENT_FLAG_CC, "CCAvailable",
- "CoreID: %d\r\n"
- "Callee: %s\r\n"
- "Service: %s\r\n",
- cc_interfaces->core_id, device_name, cc_service_to_string(cc_data->service)
- );
+ cc_publish_available(cc_interfaces->core_id, device_name, cc_service_to_string(cc_data->service));
cc_unref(core_instance, "Done with core_instance after handling CC control frame");
cc_unref(monitor, "Unref reference from allocating monitor");
@@ -2933,11 +3059,7 @@
core_instance->agent->device_name);
return -1;
}
- manager_event(EVENT_FLAG_CC, "CCOfferTimerStart",
- "CoreID: %d\r\n"
- "Caller: %s\r\n"
- "Expires: %u\r\n",
- core_instance->core_id, core_instance->agent->device_name, core_instance->agent->cc_params->cc_offer_timer);
+ cc_publish_offertimerstart(core_instance->core_id, core_instance->agent->device_name, core_instance->agent->cc_params->cc_offer_timer);
ast_log_dynamic_level(cc_logger_level, "Core %d: Started the offer timer for the agent %s!\n",
core_instance->core_id, core_instance->agent->device_name);
return 0;
@@ -2986,11 +3108,7 @@
monitor_iter->interface->device_name, 1);
cc_unref(monitor_iter, "request_cc failed. Unref list's reference to monitor");
} else {
- manager_event(EVENT_FLAG_CC, "CCRequested",
- "CoreID: %d\r\n"
- "Caller: %s\r\n"
- "Callee: %s\r\n",
- core_instance->core_id, core_instance->agent->device_name, monitor_iter->interface->device_name);
+ cc_publish_requested(core_instance->core_id, core_instance->agent->device_name, monitor_iter->interface->device_name);
}
}
}
@@ -3048,15 +3166,9 @@
if (previous_state == CC_CALLER_REQUESTED) {
core_instance->agent->callbacks->respond(core_instance->agent,
AST_CC_AGENT_RESPONSE_SUCCESS);
- manager_event(EVENT_FLAG_CC, "CCRequestAcknowledged",
- "CoreID: %d\r\n"
- "Caller: %s\r\n",
- core_instance->core_id, core_instance->agent->device_name);
+ cc_publish_requestacknowledged(core_instance->core_id, core_instance->agent->device_name);
} else if (previous_state == CC_CALLER_BUSY) {
- manager_event(EVENT_FLAG_CC, "CCCallerStopMonitoring",
- "CoreID: %d\r\n"
- "Caller: %s\r\n",
- core_instance->core_id, core_instance->agent->device_name);
+ cc_publish_callerstopmonitoring(core_instance->core_id, core_instance->agent->device_name);
unsuspend(core_instance);
}
/* Not possible for previous_state to be anything else due to the is_state_change_valid check at the beginning */
@@ -3098,10 +3210,7 @@
*/
suspend(core_instance);
core_instance->agent->callbacks->start_monitoring(core_instance->agent);
- manager_event(EVENT_FLAG_CC, "CCCallerStartMonitoring",
- "CoreID: %d\r\n"
- "Caller: %s\r\n",
- core_instance->core_id, core_instance->agent->device_name);
+ cc_publish_callerstartmonitoring(core_instance->core_id, core_instance->agent->device_name);
return 0;
}
@@ -3132,10 +3241,7 @@
/* Both caller and callee are available, call agent's recall callback
*/
cancel_available_timer(core_instance);
- manager_event(EVENT_FLAG_CC, "CCCallerRecalling",
- "CoreID: %d\r\n"
- "Caller: %s\r\n",
- core_instance->core_id, core_instance->agent->device_name);
+ cc_publish_callerrecalling(core_instance->core_id, core_instance->agent->device_name);
return 0;
}
@@ -3143,21 +3249,14 @@
{
/* Recall has made progress, call agent and monitor destructor functions
*/
- manager_event(EVENT_FLAG_CC, "CCRecallComplete",
- "CoreID: %d\r\n"
- "Caller: %s\r\n",
- core_instance->core_id, core_instance->agent->device_name);
+ cc_publish_recallcomplete(core_instance->core_id, core_instance->agent->device_name);
ao2_t_unlink(cc_core_instances, core_instance, "Unlink core instance since CC recall has completed");
return 0;
}
static int cc_failed(struct cc_core_instance *core_instance, struct cc_state_change_args *args, enum cc_state previous_state)
{
- manager_event(EVENT_FLAG_CC, "CCFailure",
- "CoreID: %d\r\n"
- "Caller: %s\r\n"
- "Reason: %s\r\n",
- core_instance->core_id, core_instance->agent->device_name, args->debug);
+ cc_publish_failure(core_instance->core_id, core_instance->agent->device_name, args->debug);
ao2_t_unlink(cc_core_instances, core_instance, "Unlink core instance since CC failed");
return 0;
}
@@ -3811,10 +3910,7 @@
cc_extension_monitor_change_is_valid(core_instance, monitor_iter->parent_id,
monitor_iter->interface->device_name, 1);
monitor_iter->callbacks->cancel_available_timer(monitor_iter, &monitor_iter->available_timer_id);
- manager_event(EVENT_FLAG_CC, "CCMonitorFailed",
- "CoreID: %d\r\n"
- "Callee: %s\r\n",
- monitor_iter->core_id, monitor_iter->interface->device_name);
+ cc_publish_monitorfailed(monitor_iter->core_id, monitor_iter->interface->device_name);
cc_unref(monitor_iter, "Monitor reported failure. Unref list's reference.");
}
}
Modified: team/kmoore/pjsip_dtls/main/stasis_system.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/pjsip_dtls/main/stasis_system.c?view=diff&rev=394807&r1=394806&r2=394807
==============================================================================
--- team/kmoore/pjsip_dtls/main/stasis_system.c (original)
+++ team/kmoore/pjsip_dtls/main/stasis_system.c Fri Jul 19 13:34:50 2013
@@ -70,10 +70,50 @@
static struct stasis_topic *system_topic;
static struct ast_manager_event_blob *system_registry_to_ami(struct stasis_message *message);
+static struct ast_manager_event_blob *cc_available_to_ami(struct stasis_message *message);
+static struct ast_manager_event_blob *cc_offertimerstart_to_ami(struct stasis_message *message);
+static struct ast_manager_event_blob *cc_requested_to_ami(struct stasis_message *message);
+static struct ast_manager_event_blob *cc_requestacknowledged_to_ami(struct stasis_message *message);
+static struct ast_manager_event_blob *cc_callerstopmonitoring_to_ami(struct stasis_message *message);
+static struct ast_manager_event_blob *cc_callerstartmonitoring_to_ami(struct stasis_message *message);
+static struct ast_manager_event_blob *cc_callerrecalling_to_ami(struct stasis_message *message);
+static struct ast_manager_event_blob *cc_recallcomplete_to_ami(struct stasis_message *message);
+static struct ast_manager_event_blob *cc_failure_to_ami(struct stasis_message *message);
+static struct ast_manager_event_blob *cc_monitorfailed_to_ami(struct stasis_message *message);
STASIS_MESSAGE_TYPE_DEFN(ast_network_change_type);
STASIS_MESSAGE_TYPE_DEFN(ast_system_registry_type,
.to_ami = system_registry_to_ami,
+ );
+STASIS_MESSAGE_TYPE_DEFN(ast_cc_available_type,
+ .to_ami = cc_available_to_ami,
+ );
+STASIS_MESSAGE_TYPE_DEFN(ast_cc_offertimerstart_type,
+ .to_ami = cc_offertimerstart_to_ami,
+ );
+STASIS_MESSAGE_TYPE_DEFN(ast_cc_requested_type,
+ .to_ami = cc_requested_to_ami,
+ );
+STASIS_MESSAGE_TYPE_DEFN(ast_cc_requestacknowledged_type,
+ .to_ami = cc_requestacknowledged_to_ami,
+ );
+STASIS_MESSAGE_TYPE_DEFN(ast_cc_callerstopmonitoring_type,
+ .to_ami = cc_callerstopmonitoring_to_ami,
+ );
+STASIS_MESSAGE_TYPE_DEFN(ast_cc_callerstartmonitoring_type,
+ .to_ami = cc_callerstartmonitoring_to_ami,
+ );
+STASIS_MESSAGE_TYPE_DEFN(ast_cc_callerrecalling_type,
+ .to_ami = cc_callerrecalling_to_ami,
+ );
+STASIS_MESSAGE_TYPE_DEFN(ast_cc_recallcomplete_type,
+ .to_ami = cc_recallcomplete_to_ami,
+ );
+STASIS_MESSAGE_TYPE_DEFN(ast_cc_failure_type,
+ .to_ami = cc_failure_to_ami,
+ );
+STASIS_MESSAGE_TYPE_DEFN(ast_cc_monitorfailed_type,
+ .to_ami = cc_monitorfailed_to_ami,
);
void ast_system_publish_registry(const char *channeltype, const char *username, const char *domain, const char *status, const char *cause)
@@ -134,6 +174,168 @@
channeltype, username, domain, status, ast_str_buffer(cause_string));
}
+static struct ast_manager_event_blob *cc_available_to_ami(struct stasis_message *message)
+{
+ struct ast_json_payload *payload = stasis_message_data(message);
+ int core_id;
+ const char *callee;
+ const char *service;
+
+ core_id = ast_json_integer_get(ast_json_object_get(payload->json, "core_id"));
+ callee = ast_json_string_get(ast_json_object_get(payload->json, "callee"));
+ service = ast_json_string_get(ast_json_object_get(payload->json, "service"));
+
+ return ast_manager_event_blob_create(EVENT_FLAG_CC, "CCAvailable",
+ "CoreID: %d\r\n"
+ "Callee: %s\r\n"
+ "Service: %s\r\n",
+ core_id, callee, service);
+}
+
+static struct ast_manager_event_blob *cc_offertimerstart_to_ami(struct stasis_message *message)
+{
+ struct ast_json_payload *payload = stasis_message_data(message);
+ int core_id;
+ const char *caller;
+ unsigned int expires;
+
+ core_id = ast_json_integer_get(ast_json_object_get(payload->json, "core_id"));
+ caller = ast_json_string_get(ast_json_object_get(payload->json, "caller"));
+ expires = ast_json_integer_get(ast_json_object_get(payload->json, "expires"));
+
+ return ast_manager_event_blob_create(EVENT_FLAG_CC, "CCOfferTimerStart",
+ "CoreID: %d\r\n"
+ "Caller: %s\r\n"
+ "Expires: %u\r\n",
+ core_id, caller, expires);
+}
+
+static struct ast_manager_event_blob *cc_requested_to_ami(struct stasis_message *message)
+{
+ struct ast_json_payload *payload = stasis_message_data(message);
+ int core_id;
+ const char *caller;
+ const char *callee;
+
+ core_id = ast_json_integer_get(ast_json_object_get(payload->json, "core_id"));
+ caller = ast_json_string_get(ast_json_object_get(payload->json, "caller"));
+ callee = ast_json_string_get(ast_json_object_get(payload->json, "callee"));
+
+ return ast_manager_event_blob_create(EVENT_FLAG_CC, "CCRequested",
+ "CoreID: %d\r\n"
+ "Caller: %s\r\n"
+ "Callee: %s\r\n",
+ core_id, caller, callee);
+}
+
+static struct ast_manager_event_blob *cc_requestacknowledged_to_ami(struct stasis_message *message)
+{
+ struct ast_json_payload *payload = stasis_message_data(message);
+ int core_id;
+ const char *caller;
+
+ core_id = ast_json_integer_get(ast_json_object_get(payload->json, "core_id"));
+ caller = ast_json_string_get(ast_json_object_get(payload->json, "caller"));
+
+ return ast_manager_event_blob_create(EVENT_FLAG_CC, "CCRequestAcknowledged",
+ "CoreID: %d\r\n"
+ "Caller: %s\r\n",
+ core_id, caller);
+}
+
+static struct ast_manager_event_blob *cc_callerstopmonitoring_to_ami(struct stasis_message *message)
+{
+ struct ast_json_payload *payload = stasis_message_data(message);
+ int core_id;
+ const char *caller;
+
+ core_id = ast_json_integer_get(ast_json_object_get(payload->json, "core_id"));
+ caller = ast_json_string_get(ast_json_object_get(payload->json, "caller"));
+
+ return ast_manager_event_blob_create(EVENT_FLAG_CC, "CCCallerStopMonitoring",
+ "CoreID: %d\r\n"
+ "Caller: %s\r\n",
+ core_id, caller);
+}
+
+static struct ast_manager_event_blob *cc_callerstartmonitoring_to_ami(struct stasis_message *message)
+{
+ struct ast_json_payload *payload = stasis_message_data(message);
+ int core_id;
+ const char *caller;
+
+ core_id = ast_json_integer_get(ast_json_object_get(payload->json, "core_id"));
+ caller = ast_json_string_get(ast_json_object_get(payload->json, "caller"));
+
+ return ast_manager_event_blob_create(EVENT_FLAG_CC, "CCCallerStartMonitoring",
+ "CoreID: %d\r\n"
+ "Caller: %s\r\n",
+ core_id, caller);
+}
+
+static struct ast_manager_event_blob *cc_callerrecalling_to_ami(struct stasis_message *message)
+{
+ struct ast_json_payload *payload = stasis_message_data(message);
+ int core_id;
+ const char *caller;
+
+ core_id = ast_json_integer_get(ast_json_object_get(payload->json, "core_id"));
+ caller = ast_json_string_get(ast_json_object_get(payload->json, "caller"));
+
+ return ast_manager_event_blob_create(EVENT_FLAG_CC, "CCCallerRecalling",
+ "CoreID: %d\r\n"
+ "Caller: %s\r\n",
+ core_id, caller);
+}
+
+static struct ast_manager_event_blob *cc_recallcomplete_to_ami(struct stasis_message *message)
+{
+ struct ast_json_payload *payload = stasis_message_data(message);
+ int core_id;
+ const char *caller;
+
+ core_id = ast_json_integer_get(ast_json_object_get(payload->json, "core_id"));
+ caller = ast_json_string_get(ast_json_object_get(payload->json, "caller"));
+
+ return ast_manager_event_blob_create(EVENT_FLAG_CC, "CCRecallComplete",
+ "CoreID: %d\r\n"
+ "Caller: %s\r\n",
+ core_id, caller);
+}
+
+static struct ast_manager_event_blob *cc_failure_to_ami(struct stasis_message *message)
+{
+ struct ast_json_payload *payload = stasis_message_data(message);
+ int core_id;
+ const char *caller;
+ const char *reason;
+
+ core_id = ast_json_integer_get(ast_json_object_get(payload->json, "core_id"));
+ caller = ast_json_string_get(ast_json_object_get(payload->json, "caller"));
+ reason = ast_json_string_get(ast_json_object_get(payload->json, "reason"));
+
+ return ast_manager_event_blob_create(EVENT_FLAG_CC, "CCFailure",
+ "CoreID: %d\r\n"
+ "Caller: %s\r\n"
+ "Reason: %s\r\n",
+ core_id, caller, reason);
+}
+
+static struct ast_manager_event_blob *cc_monitorfailed_to_ami(struct stasis_message *message)
+{
+ struct ast_json_payload *payload = stasis_message_data(message);
+ int core_id;
+ const char *callee;
+
+ core_id = ast_json_integer_get(ast_json_object_get(payload->json, "core_id"));
+ callee = ast_json_string_get(ast_json_object_get(payload->json, "callee"));
+
+ return ast_manager_event_blob_create(EVENT_FLAG_CC, "CCMonitorFailed",
+ "CoreID: %d\r\n"
+ "Callee: %s\r\n",
+ core_id, callee);
+}
+
struct stasis_topic *ast_system_topic(void)
{
return system_topic;
@@ -146,6 +348,16 @@
system_topic = NULL;
STASIS_MESSAGE_TYPE_CLEANUP(ast_network_change_type);
STASIS_MESSAGE_TYPE_CLEANUP(ast_system_registry_type);
+ STASIS_MESSAGE_TYPE_CLEANUP(ast_cc_available_type);
+ STASIS_MESSAGE_TYPE_CLEANUP(ast_cc_offertimerstart_type);
+ STASIS_MESSAGE_TYPE_CLEANUP(ast_cc_requested_type);
+ STASIS_MESSAGE_TYPE_CLEANUP(ast_cc_requestacknowledged_type);
+ STASIS_MESSAGE_TYPE_CLEANUP(ast_cc_callerstopmonitoring_type);
+ STASIS_MESSAGE_TYPE_CLEANUP(ast_cc_callerstartmonitoring_type);
+ STASIS_MESSAGE_TYPE_CLEANUP(ast_cc_callerrecalling_type);
+ STASIS_MESSAGE_TYPE_CLEANUP(ast_cc_recallcomplete_type);
+ STASIS_MESSAGE_TYPE_CLEANUP(ast_cc_failure_type);
+ STASIS_MESSAGE_TYPE_CLEANUP(ast_cc_monitorfailed_type);
}
/*! \brief Initialize the system level items for \ref stasis */
@@ -166,5 +378,45 @@
return -1;
}
+ if (STASIS_MESSAGE_TYPE_INIT(ast_cc_available_type) != 0) {
+ return -1;
+ }
+
+ if (STASIS_MESSAGE_TYPE_INIT(ast_cc_offertimerstart_type) != 0) {
+ return -1;
+ }
+
+ if (STASIS_MESSAGE_TYPE_INIT(ast_cc_requested_type) != 0) {
+ return -1;
+ }
+
+ if (STASIS_MESSAGE_TYPE_INIT(ast_cc_requestacknowledged_type) != 0) {
+ return -1;
+ }
+
+ if (STASIS_MESSAGE_TYPE_INIT(ast_cc_callerstopmonitoring_type) != 0) {
+ return -1;
+ }
+
+ if (STASIS_MESSAGE_TYPE_INIT(ast_cc_callerstartmonitoring_type) != 0) {
+ return -1;
+ }
+
+ if (STASIS_MESSAGE_TYPE_INIT(ast_cc_callerrecalling_type) != 0) {
+ return -1;
+ }
+
+ if (STASIS_MESSAGE_TYPE_INIT(ast_cc_recallcomplete_type) != 0) {
+ return -1;
+ }
+
+ if (STASIS_MESSAGE_TYPE_INIT(ast_cc_failure_type) != 0) {
+ return -1;
+ }
+
+ if (STASIS_MESSAGE_TYPE_INIT(ast_cc_monitorfailed_type) != 0) {
+ return -1;
+ }
+
return 0;
}
Modified: team/kmoore/pjsip_dtls/res/res_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/pjsip_dtls/res/res_sip.c?view=diff&rev=394807&r1=394806&r2=394807
==============================================================================
--- team/kmoore/pjsip_dtls/res/res_sip.c (original)
+++ team/kmoore/pjsip_dtls/res/res_sip.c Fri Jul 19 13:34:50 2013
@@ -389,6 +389,96 @@
Gulp channel driver will return busy as the device state instead of in use.
</para></description>
</configOption>
+ <configOption name="tonezone">
+ <synopsis>Set which country's indications to use for channels created for this endpoint.</synopsis>
+ </configOption>
+ <configOption name="language">
+ <synopsis>Set the default language to use for channels created for this endpoint.</synopsis>
+ </configOption>
+ <configOption name="one_touch_recording" default="no">
+ <synopsis>Determines whether one-touch recording is allowed for this endpoint.</synopsis>
+ <see-also>
+ <ref type="configOption">recordonfeature</ref>
+ <ref type="configOption">recordofffeature</ref>
+ </see-also>
+ </configOption>
+ <configOption name="recordonfeature" default="automixmon">
+ <synopsis>The feature to enact when one-touch recording is turned on.</synopsis>
+ <description>
+ <para>When an INFO request for one-touch recording arrives with a Record header set to "on", this
+ feature will be enabled for the channel. The feature designated here can be any built-in
+ or dynamic feature defined in features.conf.</para>
+ <note><para>This setting has no effect if the endpoint's one_touch_recording option is disabled</para></note>
+ </description>
+ <see-also>
+ <ref type="configOption">one_touch_recording</ref>
+ <ref type="configOption">recordofffeature</ref>
+ </see-also>
+ </configOption>
+ <configOption name="recordofffeature" default="automixmon">
+ <synopsis>The feature to enact when one-touch recording is turned off.</synopsis>
+ <description>
[... 611 lines stripped ...]
More information about the asterisk-commits
mailing list