[svn-commits] dlee: branch dlee/stasis-cache-split r393860 - in /team/dlee/stasis-cache-spl...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Mon Jul 8 17:07:53 CDT 2013


Author: dlee
Date: Mon Jul  8 17:07:50 2013
New Revision: 393860

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=393860
Log:
Merged revisions 393740-393858 from http://svn.asterisk.org/svn/asterisk/trunk

Added:
    team/dlee/stasis-cache-split/include/asterisk/stasis_system.h
      - copied unchanged from r393858, trunk/include/asterisk/stasis_system.h
    team/dlee/stasis-cache-split/main/manager_system.c
      - copied unchanged from r393858, trunk/main/manager_system.c
    team/dlee/stasis-cache-split/main/stasis_system.c
      - copied unchanged from r393858, trunk/main/stasis_system.c
Modified:
    team/dlee/stasis-cache-split/   (props changed)
    team/dlee/stasis-cache-split/CHANGES
    team/dlee/stasis-cache-split/build_tools/cflags-devmode.xml
    team/dlee/stasis-cache-split/channels/chan_gtalk.c
    team/dlee/stasis-cache-split/channels/chan_gulp.c
    team/dlee/stasis-cache-split/channels/chan_h323.c
    team/dlee/stasis-cache-split/channels/chan_iax2.c
    team/dlee/stasis-cache-split/channels/chan_jingle.c
    team/dlee/stasis-cache-split/channels/chan_mgcp.c
    team/dlee/stasis-cache-split/channels/chan_motif.c
    team/dlee/stasis-cache-split/channels/chan_multicast_rtp.c
    team/dlee/stasis-cache-split/channels/chan_sip.c
    team/dlee/stasis-cache-split/channels/chan_skinny.c
    team/dlee/stasis-cache-split/channels/chan_unistim.c
    team/dlee/stasis-cache-split/include/asterisk.h
    team/dlee/stasis-cache-split/include/asterisk/bridging.h
    team/dlee/stasis-cache-split/include/asterisk/cdr.h
    team/dlee/stasis-cache-split/include/asterisk/channel.h
    team/dlee/stasis-cache-split/include/asterisk/core_local.h
    team/dlee/stasis-cache-split/include/asterisk/core_unreal.h
    team/dlee/stasis-cache-split/include/asterisk/json.h
    team/dlee/stasis-cache-split/include/asterisk/manager.h
    team/dlee/stasis-cache-split/include/asterisk/rtp_engine.h
    team/dlee/stasis-cache-split/include/asterisk/stasis_app.h
    team/dlee/stasis-cache-split/include/asterisk/stasis_channels.h
    team/dlee/stasis-cache-split/main/asterisk.c
    team/dlee/stasis-cache-split/main/bridging.c
    team/dlee/stasis-cache-split/main/cdr.c
    team/dlee/stasis-cache-split/main/cel.c
    team/dlee/stasis-cache-split/main/channel.c
    team/dlee/stasis-cache-split/main/channel_internal_api.c
    team/dlee/stasis-cache-split/main/cli.c
    team/dlee/stasis-cache-split/main/core_local.c
    team/dlee/stasis-cache-split/main/core_unreal.c
    team/dlee/stasis-cache-split/main/file.c
    team/dlee/stasis-cache-split/main/json.c
    team/dlee/stasis-cache-split/main/manager.c
    team/dlee/stasis-cache-split/main/manager_bridging.c
    team/dlee/stasis-cache-split/main/manager_channels.c
    team/dlee/stasis-cache-split/main/pbx.c
    team/dlee/stasis-cache-split/main/rtp_engine.c
    team/dlee/stasis-cache-split/main/sounds_index.c
    team/dlee/stasis-cache-split/main/stasis_channels.c
    team/dlee/stasis-cache-split/res/parking/parking_bridge.c
    team/dlee/stasis-cache-split/res/parking/parking_controller.c
    team/dlee/stasis-cache-split/res/parking/res_parking.h
    team/dlee/stasis-cache-split/res/res_agi.c
    team/dlee/stasis-cache-split/res/res_rtp_asterisk.c
    team/dlee/stasis-cache-split/res/res_sip/config_auth.c
    team/dlee/stasis-cache-split/res/res_sip/config_transport.c
    team/dlee/stasis-cache-split/res/res_sip_caller_id.c
    team/dlee/stasis-cache-split/res/res_stasis_http.c
    team/dlee/stasis-cache-split/res/res_stasis_http_asterisk.c
    team/dlee/stasis-cache-split/res/res_stasis_http_channels.c
    team/dlee/stasis-cache-split/res/res_stasis_http_events.c
    team/dlee/stasis-cache-split/res/res_stasis_recording.c
    team/dlee/stasis-cache-split/res/res_stun_monitor.c
    team/dlee/stasis-cache-split/res/stasis/control.c
    team/dlee/stasis-cache-split/res/stasis_http/ari_model_validators.c
    team/dlee/stasis-cache-split/res/stasis_http/ari_model_validators.h
    team/dlee/stasis-cache-split/res/stasis_http/ari_websockets.c
    team/dlee/stasis-cache-split/res/stasis_http/resource_asterisk.c
    team/dlee/stasis-cache-split/res/stasis_http/resource_asterisk.h
    team/dlee/stasis-cache-split/res/stasis_http/resource_channels.c
    team/dlee/stasis-cache-split/res/stasis_http/resource_channels.h
    team/dlee/stasis-cache-split/res/stasis_http/resource_events.c
    team/dlee/stasis-cache-split/rest-api/api-docs/asterisk.json
    team/dlee/stasis-cache-split/rest-api/api-docs/channels.json
    team/dlee/stasis-cache-split/rest-api/api-docs/events.json

Propchange: team/dlee/stasis-cache-split/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Mon Jul  8 17:07:50 2013
@@ -1,1 +1,1 @@
-/trunk:1-393738
+/trunk:1-393859

Modified: team/dlee/stasis-cache-split/CHANGES
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/CHANGES?view=diff&rev=393860&r1=393859&r2=393860
==============================================================================
--- team/dlee/stasis-cache-split/CHANGES (original)
+++ team/dlee/stasis-cache-split/CHANGES Mon Jul  8 17:07:50 2013
@@ -270,6 +270,17 @@
 
  * AMI events now contain a SystemName field, if available.
 
+ * Local channel optimization is now conveyed in two events:
+   LocalOptimizationBegin and LocalOptimizationEnd. The Begin event is sent
+   when the Local channel driver begins attempting to optimize itself out of
+   the media path; the End event is sent after the channel halves have
+   successfully optimized themselves out of the media path.
+
+ * Local channel information in events is now prefixed with "LocalOne" and
+   "LocalTwo". This replaces the suffix of "1" and "2" for the two halves of
+   the Local channel. This affects the LocalBridge, LocalOptimizationBegin,
+   and LocalOptimizationEnd events.
+
 AGI (Asterisk Gateway Interface)
 ------------------
  * The manager event AGIExec has been split into AGIExecStart and AGIExecEnd.
@@ -286,8 +297,11 @@
  * CDRs will now be created between all participants in a bridge. For each
    pair of channels in a bridge, a CDR is created to represent the path of
    communication between those two endpoints. This lets an end user choose who
-   to bill for what during multi-party bridges or bridge operations during
-   transfer scenarios.
+   to bill for what during bridge operations with multiple parties.
+
+ * The duration, billsec, start, answer, and end times now reflect the times
+   associated with the current CDR for the channel, as opposed to a cumulative
+   measurement of all CDRs for that channel.
 
  * When a CDR is dispatched, user defined CDR variables from both parties are
    included in the resulting CDR. If both parties have the same variable, only

Modified: team/dlee/stasis-cache-split/build_tools/cflags-devmode.xml
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/build_tools/cflags-devmode.xml?view=diff&rev=393860&r1=393859&r2=393860
==============================================================================
--- team/dlee/stasis-cache-split/build_tools/cflags-devmode.xml (original)
+++ team/dlee/stasis-cache-split/build_tools/cflags-devmode.xml Mon Jul  8 17:07:50 2013
@@ -24,9 +24,6 @@
 		<member name="THREAD_CRASH" displayname="Crash on mutex errors">
 			<support_level>extended</support_level>
 		</member>
-		<member name="CHANNEL_TRACE" displayname="Enable CHANNEL(trace) function">
-			<support_level>extended</support_level>
-		</member>
 		<member name="TEST_FRAMEWORK" displayname="Enable Test Framework API">
 			<support_level>extended</support_level>
 		</member>

Modified: team/dlee/stasis-cache-split/channels/chan_gtalk.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/channels/chan_gtalk.c?view=diff&rev=393860&r1=393859&r2=393860
==============================================================================
--- team/dlee/stasis-cache-split/channels/chan_gtalk.c (original)
+++ team/dlee/stasis-cache-split/channels/chan_gtalk.c Mon Jul  8 17:07:50 2013
@@ -210,6 +210,7 @@
 static int gtalk_update_externip(void);
 static int gtalk_parser(void *data, ikspak *pak);
 static int gtalk_create_candidates(struct gtalk *client, struct gtalk_pvt *p, char *sid, char *from, char *to);
+static void gtalk_set_owner(struct gtalk_pvt *p, struct ast_channel *chan);
 
 /*! \brief PBX interface structure for channel registration */
 static struct ast_channel_tech gtalk_tech = {
@@ -1007,6 +1008,17 @@
 	return 1;
 }
 
+static void gtalk_set_owner(struct gtalk_pvt *p, struct ast_channel *chan)
+{
+	p->owner = chan;
+	if (p->rtp) {
+		ast_rtp_instance_set_channel_id(p->rtp, chan ? ast_channel_uniqueid(chan) : "");
+	}
+	if (p->vrtp) {
+		ast_rtp_instance_set_channel_id(p->vrtp, chan ? ast_channel_uniqueid(chan) : "");
+	}
+}
+
 static struct gtalk_pvt *gtalk_alloc(struct gtalk *client, const char *us, const char *them, const char *sid)
 {
 	struct gtalk_pvt *tmp = NULL;
@@ -1198,7 +1210,7 @@
 		ast_channel_musicclass_set(tmp, client->musicclass);
 	if (!ast_strlen_zero(client->parkinglot))
 		ast_channel_parkinglot_set(tmp, client->parkinglot);
-	i->owner = tmp;
+	gtalk_set_owner(i, tmp);
 	ast_module_ref(ast_module_info->self);
 	ast_channel_context_set(tmp, client->context);
 	ast_channel_exten_set(tmp, i->exten);
@@ -1712,8 +1724,9 @@
 		ast_mutex_unlock(&p->lock);
 		return -1;
 	}
-	if (p->owner == oldchan)
-		p->owner = newchan;
+	if (p->owner == oldchan) {
+		gtalk_set_owner(p, newchan);
+	}
 	ast_mutex_unlock(&p->lock);
 	return 0;
 }
@@ -1889,7 +1902,7 @@
 
 	ast_mutex_lock(&p->lock);
 	client = p->parent;
-	p->owner = NULL;
+	gtalk_set_owner(p, NULL);
 	ast_channel_tech_pvt_set(ast, NULL);
 	if (!p->alreadygone) {
 		gtalk_action(client, p, "terminate");

Modified: team/dlee/stasis-cache-split/channels/chan_gulp.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/channels/chan_gulp.c?view=diff&rev=393860&r1=393859&r2=393860
==============================================================================
--- team/dlee/stasis-cache-split/channels/chan_gulp.c (original)
+++ team/dlee/stasis-cache-split/channels/chan_gulp.c Mon Jul  8 17:07:50 2013
@@ -429,7 +429,7 @@
 {
 	RAII_VAR(struct ast_datastore *, datastore, NULL, ao2_cleanup);
 
-	if (session->endpoint->direct_media_glare_mitigation == 
+	if (session->endpoint->direct_media_glare_mitigation ==
 			AST_SIP_DIRECT_MEDIA_GLARE_MITIGATION_NONE) {
 		return 0;
 	}
@@ -563,6 +563,13 @@
 	pvt->media[SIP_MEDIA_AUDIO] = ao2_find(session->media, "audio", OBJ_KEY);
 	pvt->media[SIP_MEDIA_VIDEO] = ao2_find(session->media, "video", OBJ_KEY);
 	ast_channel_tech_pvt_set(chan, pvt);
+	if (pvt->media[SIP_MEDIA_AUDIO] && pvt->media[SIP_MEDIA_AUDIO]->rtp) {
+		ast_rtp_instance_set_channel_id(pvt->media[SIP_MEDIA_AUDIO]->rtp, ast_channel_uniqueid(chan));
+	}
+	if (pvt->media[SIP_MEDIA_VIDEO] && pvt->media[SIP_MEDIA_VIDEO]->rtp) {
+		ast_rtp_instance_set_channel_id(pvt->media[SIP_MEDIA_VIDEO]->rtp, ast_channel_uniqueid(chan));
+	}
+
 
 	if (ast_format_cap_is_empty(session->req_caps) || !ast_format_cap_has_joint(session->req_caps, session->endpoint->codecs)) {
 		ast_format_cap_copy(ast_channel_nativeformats(chan), session->endpoint->codecs);
@@ -742,8 +749,15 @@
 static int fixup(void *data)
 {
 	struct fixup_data *fix_data = data;
+	struct gulp_pvt *pvt = ast_channel_tech_pvt(fix_data->chan);
 
 	fix_data->session->channel = fix_data->chan;
+	if (pvt->media[SIP_MEDIA_AUDIO] && pvt->media[SIP_MEDIA_AUDIO]->rtp) {
+		ast_rtp_instance_set_channel_id(pvt->media[SIP_MEDIA_AUDIO]->rtp, ast_channel_uniqueid(fix_data->chan));
+	}
+	if (pvt->media[SIP_MEDIA_VIDEO] && pvt->media[SIP_MEDIA_VIDEO]->rtp) {
+		ast_rtp_instance_set_channel_id(pvt->media[SIP_MEDIA_VIDEO]->rtp, ast_channel_uniqueid(fix_data->chan));
+	}
 
 	return 0;
 }
@@ -1434,6 +1448,19 @@
 	return h_data;
 }
 
+/*! \brief Clear a channel from a session along with its PVT */
+static void clear_session_and_channel(struct ast_sip_session *session, struct ast_channel *ast, struct gulp_pvt *pvt)
+{
+	session->channel = NULL;
+	if (pvt->media[SIP_MEDIA_AUDIO] && pvt->media[SIP_MEDIA_AUDIO]->rtp) {
+		ast_rtp_instance_set_channel_id(pvt->media[SIP_MEDIA_AUDIO]->rtp, "");
+	}
+	if (pvt->media[SIP_MEDIA_VIDEO] && pvt->media[SIP_MEDIA_VIDEO]->rtp) {
+		ast_rtp_instance_set_channel_id(pvt->media[SIP_MEDIA_VIDEO]->rtp, "");
+	}
+	ast_channel_tech_pvt_set(ast, NULL);
+}
+
 static int hangup(void *data)
 {
 	pj_status_t status;
@@ -1453,9 +1480,7 @@
 		}
 	}
 
-	session->channel = NULL;
-	ast_channel_tech_pvt_set(ast, NULL);
-
+	clear_session_and_channel(session, ast, pvt);
 	ao2_cleanup(pvt);
 	ao2_cleanup(h_data);
 
@@ -1485,11 +1510,9 @@
 	/* Go ahead and do our cleanup of the session and channel even if we're not going
 	 * to be able to send our SIP request/response
 	 */
+	clear_session_and_channel(session, ast, pvt);
+	ao2_cleanup(pvt);
 	ao2_cleanup(h_data);
-	session->channel = NULL;
-	ast_channel_tech_pvt_set(ast, NULL);
-
-	ao2_cleanup(pvt);
 
 	return -1;
 }
@@ -1859,8 +1882,8 @@
  * Module loading including tests for configuration or dependencies.
  * This function can return AST_MODULE_LOAD_FAILURE, AST_MODULE_LOAD_DECLINE,
  * or AST_MODULE_LOAD_SUCCESS. If a dependency or environment variable fails
- * tests return AST_MODULE_LOAD_FAILURE. If the module can not load the 
- * configuration file or other non-critical problem return 
+ * tests return AST_MODULE_LOAD_FAILURE. If the module can not load the
+ * configuration file or other non-critical problem return
  * AST_MODULE_LOAD_DECLINE. On success return AST_MODULE_LOAD_SUCCESS.
  */
 static int load_module(void)

Modified: team/dlee/stasis-cache-split/channels/chan_h323.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/channels/chan_h323.c?view=diff&rev=393860&r1=393859&r2=393860
==============================================================================
--- team/dlee/stasis-cache-split/channels/chan_h323.c (original)
+++ team/dlee/stasis-cache-split/channels/chan_h323.c Mon Jul  8 17:07:50 2013
@@ -250,6 +250,8 @@
 static void delete_aliases(void);
 static void prune_peers(void);
 
+static void oh323_set_owner(struct oh323_pvt *pvt, struct ast_channel *c);
+
 static struct ast_channel *oh323_request(const char *type, struct ast_format_cap *cap, const struct ast_channel *requestor, const char *dest, int *cause);
 static int oh323_digit_begin(struct ast_channel *c, char digit);
 static int oh323_digit_end(struct ast_channel *c, char digit, unsigned int duration);
@@ -719,7 +721,7 @@
 		return 0;
 	}
 
-	pvt->owner = NULL;
+	oh323_set_owner(pvt, NULL);
 	ast_channel_tech_pvt_set(c, NULL);
 
 	if (ast_channel_hangupcause(c)) {
@@ -974,7 +976,7 @@
 		ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, pvt->owner);
 		return -1;
 	}
-	pvt->owner = newchan;
+	oh323_set_owner(p, newchan);
 	ast_mutex_unlock(&pvt->lock);
 	return 0;
 }
@@ -1007,6 +1009,7 @@
 		ast_debug(1, "Created RTP channel\n");
 
 	ast_rtp_instance_set_qos(pvt->rtp, tos, cos, "H323 RTP");
+	ast_rtp_instance_set_channel_id(pvt->rtp, pvt->owner ? ast_channel_uniqueid(pvt->owner), "");
 
 	if (h323debug)
 		ast_debug(1, "Setting NAT on RTP to %d\n", pvt->options.nat);
@@ -1100,7 +1103,7 @@
 		/* Register channel functions. */
 		ast_channel_tech_pvt_set(ch, pvt);
 		/* Set the owner of this channel */
-		pvt->owner = ch;
+		oh323_set_owner(pvt, ch);
 
 		ast_channel_context_set(ch, pvt->context);
 		ast_channel_exten_set(ch, pvt->exten);
@@ -1187,6 +1190,14 @@
 	iflist = pvt;
 	ast_mutex_unlock(&iflock);
 	return pvt;
+}
+
+static void oh323_set_owner(struct oh323_pvt *pvt, struct ast_channel *chan)
+{
+	pvt->owner = chan;
+	if (pvt->rtp) {
+		ast_rtp_instance_set_channel_id(pvt, chan ? ast_channel_uniqueid(chan) : "");
+	}
 }
 
 static struct oh323_pvt *find_call_locked(int call_reference, const char *token)

Modified: team/dlee/stasis-cache-split/channels/chan_iax2.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/channels/chan_iax2.c?view=diff&rev=393860&r1=393859&r2=393860
==============================================================================
--- team/dlee/stasis-cache-split/channels/chan_iax2.c (original)
+++ team/dlee/stasis-cache-split/channels/chan_iax2.c Mon Jul  8 17:07:50 2013
@@ -103,6 +103,8 @@
 #include "asterisk/security_events.h"
 #include "asterisk/stasis_endpoints.h"
 #include "asterisk/bridging.h"
+#include "asterisk/stasis.h"
+#include "asterisk/stasis_system.h"
 
 #include "iax2/include/iax2.h"
 #include "iax2/include/firmware.h"
@@ -8376,6 +8378,11 @@
 	return 0;
 }
 
+static void iax2_publish_registry(const char *username, const char *domain, const char *status, const char *cause)
+{
+	ast_system_publish_registry("IAX2", username, domain, status, cause);
+}
+
 /*! \brief Acknowledgment received for OUR registration */
 static int iax2_ack_registry(struct iax_ies *ies, struct sockaddr_in *sin, int callno)
 {
@@ -8437,7 +8444,7 @@
 		}
 		snprintf(ourip, sizeof(ourip), "%s:%d", ast_inet_ntoa(reg->us.sin_addr), ntohs(reg->us.sin_port));
 		ast_verb(3, "Registered IAX2 to '%s', who sees us as %s%s\n", ast_inet_ntoa(sin->sin_addr), ourip, msgstatus);
-		manager_event(EVENT_FLAG_SYSTEM, "Registry", "ChannelType: IAX2\r\nDomain: %s\r\nStatus: Registered\r\n", ast_inet_ntoa(sin->sin_addr));
+		iax2_publish_registry(reg->username, ast_inet_ntoa(sin->sin_addr), "Registered", NULL);
 	}
 	reg->regstate = REG_STATE_REGISTERED;
 	return 0;
@@ -11179,8 +11186,8 @@
 				if (iaxs[fr->callno]->reg) {
 					if (authdebug) {
 						ast_log(LOG_NOTICE, "Registration of '%s' rejected: '%s' from: '%s'\n", iaxs[fr->callno]->reg->username, ies.cause ? ies.cause : "<unknown>", ast_inet_ntoa(sin.sin_addr));
-						manager_event(EVENT_FLAG_SYSTEM, "Registry", "ChannelType: IAX2\r\nUsername: %s\r\nStatus: Rejected\r\nCause: %s\r\n", iaxs[fr->callno]->reg->username, ies.cause ? ies.cause : "<unknown>");
 					}
+					iax2_publish_registry(iaxs[fr->callno]->reg->username, ast_inet_ntoa(sin.sin_addr), "Rejected", S_OR(ies.cause, "<unknown>"));
 					iaxs[fr->callno]->reg->regstate = REG_STATE_REJECTED;
 				}
 				/* Send ack immediately, before we destroy */

Modified: team/dlee/stasis-cache-split/channels/chan_jingle.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/channels/chan_jingle.c?view=diff&rev=393860&r1=393859&r2=393860
==============================================================================
--- team/dlee/stasis-cache-split/channels/chan_jingle.c (original)
+++ team/dlee/stasis-cache-split/channels/chan_jingle.c Mon Jul  8 17:07:50 2013
@@ -196,6 +196,7 @@
 static struct jingle_pvt *jingle_alloc(struct jingle *client, const char *from, const char *sid);
 static char *jingle_show_channels(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
 static char *jingle_do_reload(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
+static void jingle_set_owner(struct jingle_pvt *pvt, struct ast_channel *chan);
 
 /*! \brief PBX interface structure for channel registration */
 static struct ast_channel_tech jingle_tech = {
@@ -833,6 +834,17 @@
 	return tmp;
 }
 
+static void jingle_set_owner(struct jingle_pvt *pvt, struct ast_channel *chan)
+{
+	pvt->owner = chan;
+	if (pvt->rtp) {
+		ast_rtp_instance_set_channel_id(pvt->rtp, pvt->owner ? ast_channel_uniqueid(pvt->owner) : "");
+	}
+	if (pvt->vrtp) {
+		ast_rtp_instance_set_channel_id(pvt->vrtp, pvt->owner ? ast_channel_uniqueid(pvt->owner) : "");
+	}
+}
+
 /*! \brief Start new jingle channel */
 static struct ast_channel *jingle_new(struct jingle *client, struct jingle_pvt *i, int state, const char *title, const char *linkedid)
 {
@@ -908,7 +920,7 @@
 		ast_channel_language_set(tmp, client->language);
 	if (!ast_strlen_zero(client->musicclass))
 		ast_channel_musicclass_set(tmp, client->musicclass);
-	i->owner = tmp;
+	jingle_set_owner(i, tmp);
 	ast_channel_context_set(tmp, client->context);
 	ast_channel_exten_set(tmp, i->exten);
 	/* Don't use ast_set_callerid() here because it will
@@ -1321,8 +1333,9 @@
 		ast_mutex_unlock(&p->lock);
 		return -1;
 	}
-	if (p->owner == oldchan)
-		p->owner = newchan;
+	if (p->owner == oldchan) {
+		jingle_set_owner(p, newchan);
+	}
 	ast_mutex_unlock(&p->lock);
 	return 0;
 }
@@ -1540,7 +1553,7 @@
 
 	ast_mutex_lock(&p->lock);
 	client = p->parent;
-	p->owner = NULL;
+	jingle_set_owner(p, NULL);
 	ast_channel_tech_pvt_set(ast, NULL);
 	if (!p->alreadygone)
 		jingle_action(client, p, JINGLE_TERMINATE);

Modified: team/dlee/stasis-cache-split/channels/chan_mgcp.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/channels/chan_mgcp.c?view=diff&rev=393860&r1=393859&r2=393860
==============================================================================
--- team/dlee/stasis-cache-split/channels/chan_mgcp.c (original)
+++ team/dlee/stasis-cache-split/channels/chan_mgcp.c Mon Jul  8 17:07:50 2013
@@ -431,6 +431,7 @@
 
 static struct sockaddr_in bindaddr;
 
+static void mgcp_set_owner(struct mgcp_subchannel *sub, struct ast_channel *chan);
 static struct ast_frame  *mgcp_read(struct ast_channel *ast);
 static int transmit_response(struct mgcp_subchannel *sub, char *msg, struct mgcp_request *req, char *msgrest);
 static int transmit_notify_request(struct mgcp_subchannel *sub, char *tone);
@@ -528,7 +529,7 @@
 	}
 	ast_debug(1, "Released sub %d of channel %s@%s\n", sub->id, p->name, p->parent->name);
 
-	sub->owner = NULL;
+	mgcp_set_owner(sub, NULL);
 	if (!ast_strlen_zero(sub->cxident)) {
 		transmit_connection_del(sub);
 	}
@@ -945,7 +946,7 @@
 		}
 	}
 
-	sub->owner = NULL;
+	mgcp_set_owner(sub, NULL);
 
 	/* for deleting gate */
 	if (p->pktcgatealloc && sub->gate) {
@@ -1225,6 +1226,13 @@
 	return f;
 }
 
+static void mgcp_set_owner(struct mgcp_subchannel *sub, struct ast_channel *chan)
+{
+	sub->owner = chan;
+	if (sub->rtp) {
+		ast_rtp_instance_set_channel_id(sub->rtp, sub->owner ? ast_channel_uniqueid(chan) : "");
+	}
+}
 
 static struct ast_frame *mgcp_read(struct ast_channel *ast)
 {
@@ -1288,7 +1296,7 @@
 		ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, sub->owner);
 		return -1;
 	}
-	sub->owner = newchan;
+	mgcp_set_owner(sub, newchan);
 	ast_mutex_unlock(&sub->lock);
 	return 0;
 }
@@ -1529,7 +1537,7 @@
 			ast_channel_accountcode_set(tmp, i->accountcode);
 		if (i->amaflags)
 			ast_channel_amaflags_set(tmp, i->amaflags);
-		sub->owner = tmp;
+		mgcp_set_owner(sub, tmp);
 		ast_module_ref(ast_module_info->self);
 		ast_channel_callgroup_set(tmp, i->callgroup);
 		ast_channel_pickupgroup_set(tmp, i->pickupgroup);

Modified: team/dlee/stasis-cache-split/channels/chan_motif.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/channels/chan_motif.c?view=diff&rev=393860&r1=393859&r2=393860
==============================================================================
--- team/dlee/stasis-cache-split/channels/chan_motif.c (original)
+++ team/dlee/stasis-cache-split/channels/chan_motif.c Mon Jul  8 17:07:50 2013
@@ -656,6 +656,18 @@
 	.update_peer = jingle_set_rtp_peer,
 };
 
+/*! \brief Set the channel owner on the \ref jingle_session object and related objects */
+static void jingle_set_owner(struct jingle_session *session, struct ast_channel *chan)
+{
+	session->owner = chan;
+	if (session->rtp) {
+		ast_rtp_instance_set_channel_id(session->rtp, session->owner ? ast_channel_uniqueid(session->owner) : "");
+	}
+	if (session->vrtp) {
+		ast_rtp_instance_set_channel_id(session->vrtp, session->owner ? ast_channel_uniqueid(session->owner) : "");
+	}
+}
+
 /*! \brief Internal helper function which enables video support on a sesson if possible */
 static void jingle_enable_video(struct jingle_session *session)
 {
@@ -679,7 +691,7 @@
 	}
 
 	ast_rtp_instance_set_prop(session->vrtp, AST_RTP_PROPERTY_RTCP, 1);
-
+	ast_rtp_instance_set_channel_id(session->vrtp, ast_channel_uniqueid(session->owner));
 	ast_channel_set_fd(session->owner, 2, ast_rtp_instance_fd(session->vrtp, 0));
 	ast_channel_set_fd(session->owner, 3, ast_rtp_instance_fd(session->vrtp, 1));
 	ast_rtp_codecs_packetization_set(ast_rtp_instance_get_codecs(session->vrtp), session->vrtp, &session->prefs);
@@ -775,7 +787,7 @@
 
 	ast_channel_tech_set(chan, &jingle_tech);
 	ast_channel_tech_pvt_set(chan, session);
-	session->owner = chan;
+	jingle_set_owner(session, chan);
 
 	ast_channel_callid_set(chan, session->callid);
 
@@ -1712,7 +1724,7 @@
 
 	ao2_lock(session);
 
-	session->owner = newchan;
+	jingle_set_owner(session, newchan);
 
 	ao2_unlock(session);
 
@@ -1862,7 +1874,7 @@
 	}
 
 	ast_channel_tech_pvt_set(ast, NULL);
-	session->owner = NULL;
+	jingle_set_owner(session, NULL);
 
 	ao2_unlink(session->state->sessions, session);
 	ao2_ref(session->state, -1);

Modified: team/dlee/stasis-cache-split/channels/chan_multicast_rtp.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/channels/chan_multicast_rtp.c?view=diff&rev=393860&r1=393859&r2=393860
==============================================================================
--- team/dlee/stasis-cache-split/channels/chan_multicast_rtp.c (original)
+++ team/dlee/stasis-cache-split/channels/chan_multicast_rtp.c Mon Jul  8 17:07:50 2013
@@ -153,7 +153,7 @@
 		ast_rtp_instance_destroy(instance);
 		goto failure;
 	}
-
+	ast_rtp_instance_set_channel_id(instance, ast_channel_uniqueid(chan));
 	ast_rtp_instance_set_remote_address(instance, &destination_address);
 
 	ast_channel_tech_set(chan, &multicast_rtp_tech);

Modified: team/dlee/stasis-cache-split/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/channels/chan_sip.c?view=diff&rev=393860&r1=393859&r2=393860
==============================================================================
--- team/dlee/stasis-cache-split/channels/chan_sip.c (original)
+++ team/dlee/stasis-cache-split/channels/chan_sip.c Mon Jul  8 17:07:50 2013
@@ -294,7 +294,9 @@
 #include "asterisk/sip_api.h"
 #include "asterisk/app.h"
 #include "asterisk/bridging.h"
+#include "asterisk/stasis.h"
 #include "asterisk/stasis_endpoints.h"
+#include "asterisk/stasis_system.h"
 #include "asterisk/stasis_channels.h"
 #include "asterisk/features_config.h"
 
@@ -1240,6 +1242,7 @@
 static int get_sip_pvt_from_replaces(const char *callid, const char *totag, const char *fromtag,
 		struct sip_pvt **out_pvt, struct ast_channel **out_chan);
 static void check_pendings(struct sip_pvt *p);
+static void sip_set_owner(struct sip_pvt *p, struct ast_channel *chan);
 
 static void *sip_pickup_thread(void *stuff);
 static int sip_pickup(struct ast_channel *chan);
@@ -3494,7 +3497,7 @@
 		ast_channel_tech_pvt_set(owner, dialog_unref(ast_channel_tech_pvt(owner), "resetting channel dialog ptr in unlink_all"));
 		ast_channel_unlock(owner);
 		ast_channel_unref(owner);
-		dialog->owner = NULL;
+		sip_set_owner(dialog, NULL);
 	}
 	sip_pvt_unlock(dialog);
 
@@ -7183,7 +7186,7 @@
 		ast_clear_flag(&p->flags[0], SIP_DEFER_BYE_ON_TRANSFER);	/* Really hang up next time */
 		ast_channel_tech_pvt_set(p->owner, dialog_unref(ast_channel_tech_pvt(p->owner), "unref p->owner->tech_pvt"));
 		sip_pvt_lock(p);
-		p->owner = NULL;  /* Owner will be gone after we return, so take it away */
+		sip_set_owner(p, NULL); /* Owner will be gone after we return, so take it away */
 		sip_pvt_unlock(p);
 		ast_module_unref(ast_module_info->self);
 		return 0;
@@ -7218,7 +7221,7 @@
 	/* Disconnect */
 	disable_dsp_detect(p);
 
-	p->owner = NULL;
+	sip_set_owner(p, NULL);
 	ast_channel_tech_pvt_set(ast, dialog_unref(ast_channel_tech_pvt(ast), "unref ast->tech_pvt"));
 
 	ast_module_unref(ast_module_info->self);
@@ -7544,7 +7547,7 @@
 	if (p->owner != oldchan)
 		ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
 	else {
-		p->owner = newchan;
+		sip_set_owner(p, newchan);
 		/* Re-invite RTP back to Asterisk. Needed if channel is masqueraded out of a native
 		   RTP bridge (i.e., RTP not going through Asterisk): RTP bridge code might not be
 		   able to do this if the masquerade happens before the bridge breaks (e.g., AMI
@@ -8190,7 +8193,7 @@
 		}
 		ast_channel_zone_set(tmp, zone);
 	}
-	i->owner = tmp;
+	sip_set_owner(i, tmp);
 	ast_module_ref(ast_module_info->self);
 	ast_channel_context_set(tmp, i->context);
 	/*Since it is valid to have extensions in the dialplan that have unescaped characters in them
@@ -9250,6 +9253,21 @@
 
 	/* If owner exists, it is locked and reffed */
 	return pvt->owner;
+}
+
+/*! \brief Set the owning channel on the \ref sip_pvt object */
+static void sip_set_owner(struct sip_pvt *p, struct ast_channel *chan)
+{
+	p->owner = chan;
+	if (p->rtp) {
+		ast_rtp_instance_set_channel_id(p->rtp, p->owner ? ast_channel_uniqueid(p->owner) : "");
+	}
+	if (p->vrtp) {
+		ast_rtp_instance_set_channel_id(p->vrtp, p->owner ? ast_channel_uniqueid(p->owner) : "");
+	}
+	if (p->trtp) {
+		ast_rtp_instance_set_channel_id(p->trtp, p->owner ? ast_channel_uniqueid(p->owner) : "");
+	}
 }
 
 /*! \brief find or create a dialog structure for an incoming SIP message.
@@ -15060,6 +15078,11 @@
 	return map_x_s(regstatestrings, regstate, "Unknown");
 }
 
+static void sip_publish_registry(const char *username, const char *domain, const char *status)
+{
+	ast_system_publish_registry("SIP", username, domain, status, NULL);
+}
+
 /*! \brief Update registration with SIP Proxy.
  * Called from the scheduler when the previous registration expires,
  * so we don't have to cancel the pending event.
@@ -15160,7 +15183,7 @@
 		transmit_register(r, SIP_REGISTER, NULL, NULL);
 		ast_log(LOG_NOTICE, "   -- Registration for '%s@%s' timed out, trying again (Attempt #%d)\n", r->username, r->hostname, r->regattempts);
 	}
-	manager_event(EVENT_FLAG_SYSTEM, "Registry", "ChannelType: SIP\r\nUsername: %s\r\nDomain: %s\r\nStatus: %s\r\n", r->username, r->hostname, regstate2str(r->regstate));
+	sip_publish_registry(r->username, r->hostname, regstate2str(r->regstate));
 	registry_unref(r, "unreffing registry_unref r");
 	return 0;
 }
@@ -23676,7 +23699,7 @@
 			r->regstate = REG_STATE_UNREGISTERED;
 			transmit_register(r, SIP_REGISTER, NULL, NULL);
 		}
-		manager_event(EVENT_FLAG_SYSTEM, "Registry", "ChannelType: SIP\r\nUsername: %s\r\nDomain: %s\r\nStatus: %s\r\n", r->username, r->hostname, regstate2str(r->regstate));
+		sip_publish_registry(r->username, r->hostname, regstate2str(r->regstate));
 		break;
 	case 479:	/* SER: Not able to process the URI - address is wrong in register*/
 		ast_log(LOG_WARNING, "Got error 479 on register to %s@%s, giving up (check config)\n", p->registry->username, p->registry->hostname);
@@ -23695,7 +23718,7 @@
 
 		r->regstate = REG_STATE_REGISTERED;
 		r->regtime = ast_tvnow();		/* Reset time of last successful registration */
-		manager_event(EVENT_FLAG_SYSTEM, "Registry", "ChannelType: SIP\r\nUsername: %s\r\nDomain: %s\r\nStatus: %s\r\n", r->username, r->hostname, regstate2str(r->regstate));
+		sip_publish_registry(r->username, r->hostname, regstate2str(r->regstate));
 		r->regattempts = 0;
 		ast_debug(1, "Registration successful\n");
 		if (r->timeout > -1) {

Modified: team/dlee/stasis-cache-split/channels/chan_skinny.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/channels/chan_skinny.c?view=diff&rev=393860&r1=393859&r2=393860
==============================================================================
--- team/dlee/stasis-cache-split/channels/chan_skinny.c (original)
+++ team/dlee/stasis-cache-split/channels/chan_skinny.c Mon Jul  8 17:07:50 2013
@@ -1638,6 +1638,7 @@
 static int skinny_dialer_cb(const void *data);
 static int skinny_reload(void);
 
+static void skinny_set_owner(struct skinny_subchannel* sub, struct ast_channel* chan);
 static void setsubstate(struct skinny_subchannel *sub, int state);
 static void dumpsub(struct skinny_subchannel *sub, int forcehangup);
 static void activatesub(struct skinny_subchannel *sub, int state);
@@ -4797,10 +4798,12 @@
 	}
 
 	if (sub->rtp && sub->owner) {
+		ast_rtp_instance_set_channel_id(sub->rtp, ast_channel_uniqueid(sub->owner));
 		ast_channel_set_fd(sub->owner, 0, ast_rtp_instance_fd(sub->rtp, 0));
 		ast_channel_set_fd(sub->owner, 1, ast_rtp_instance_fd(sub->rtp, 1));
 	}
 	if (hasvideo && sub->vrtp && sub->owner) {
+		ast_rtp_instance_set_channel_id(sub->vrtp, ast_channel_uniqueid(sub->owner));
 		ast_channel_set_fd(sub->owner, 2, ast_rtp_instance_fd(sub->vrtp, 0));
 		ast_channel_set_fd(sub->owner, 3, ast_rtp_instance_fd(sub->vrtp, 1));
 	}
@@ -5009,7 +5012,7 @@
 	SKINNY_DEBUG(DEBUG_SUB, 3, "Sub %d - Destroying\n", sub->callid);
 
 	ast_mutex_lock(&sub->lock);
-	sub->owner = NULL;
+	skinny_set_owner(sub, NULL);
 	ast_channel_tech_pvt_set(ast, NULL);
 	destroy_rtp(sub);
 	ast_free(sub->origtonum);
@@ -5133,7 +5136,7 @@
 		ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, sub->owner);
 		return -1;
 	}
-	sub->owner = newchan;
+	skinny_set_owner(sub, newchan);
 	return 0;
 }
 
@@ -5361,6 +5364,17 @@
 	return 0;
 }
 
+static void skinny_set_owner(struct skinny_subchannel* sub, struct ast_channel* chan)
+{
+	sub->owner = chan;
+	if (sub->rtp) {
+		ast_rtp_instance_set_channel_id(sub->rtp, sub->owner ? ast_channel_uniqueid(sub->owner) : "");
+	}
+	if (sub->vrtp) {
+		ast_rtp_instance_set_channel_id(sub->vrtp, sub->owner ? ast_channel_uniqueid(sub->owner) : "");
+	}
+}
+
 static struct ast_channel *skinny_new(struct skinny_line *l, struct skinny_subline *subline, int state, const char *linkedid, int direction)
 {
 	struct ast_channel *tmp;
@@ -5386,7 +5400,7 @@
 		} else {
 			ast_mutex_init(&sub->lock);
 
-			sub->owner = tmp;
+			skinny_set_owner(sub, tmp);
 			sub->callid = callnums++;
 			d->lastlineinstance = l->instance;
 			d->lastcallreference = sub->callid;

Modified: team/dlee/stasis-cache-split/channels/chan_unistim.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/channels/chan_unistim.c?view=diff&rev=393860&r1=393859&r2=393860
==============================================================================
--- team/dlee/stasis-cache-split/channels/chan_unistim.c (original)
+++ team/dlee/stasis-cache-split/channels/chan_unistim.c Mon Jul  8 17:07:50 2013
@@ -675,6 +675,7 @@
 static int reload(void);
 static int unload_module(void);
 static int reload_config(void);
+static void unistim_set_owner(struct unistim_subchannel *sub, struct ast_channel *chan);
 static void show_main_page(struct unistimsession *pte);
 static struct ast_channel *unistim_request(const char *type, struct ast_format_cap *cap, const struct ast_channel *requestor,
 	const char *dest, int *cause);
@@ -2749,6 +2750,7 @@
 		return;
 	}
 	ast_rtp_instance_set_prop(sub->rtp, AST_RTP_PROPERTY_RTCP, 1);
+	ast_rtp_instance_set_channel_id(sub->rtp, ast_channel_uniqueid(sub->owner));
 	ast_channel_internal_fd_set(sub->owner, 0, ast_rtp_instance_fd(sub->rtp, 0));
 	ast_channel_internal_fd_set(sub->owner, 1, ast_rtp_instance_fd(sub->rtp, 1));
 	ast_rtp_instance_set_qos(sub->rtp, qos.tos_audio, qos.cos_audio, "UNISTIM RTP");
@@ -4736,7 +4738,7 @@
 static int unistim_hangup_clean(struct ast_channel *ast, struct unistim_subchannel *sub) {
 	ast_mutex_lock(&sub->lock);
 	ast_channel_tech_pvt_set(ast, NULL);
-	sub->owner = NULL;
+	unistim_set_owner(sub, NULL);
 	sub->alreadygone = 0;
 	ast_mutex_unlock(&sub->lock);
 	if (sub->rtp) {
@@ -5072,7 +5074,7 @@
 		return -1;
 	}
 
-	p->owner = newchan;
+	unistim_set_owner(p, newchan);
 
 	ast_mutex_unlock(&p->lock);
 
@@ -5589,7 +5591,7 @@
 	if (!ast_strlen_zero(l->parent->language)) {
 		ast_channel_language_set(tmp, l->parent->language);
 	}
-	sub->owner = tmp;
+	unistim_set_owner(sub, tmp);
 	ast_update_use_count();
 	ast_channel_callgroup_set(tmp, l->callgroup);
 	ast_channel_pickupgroup_set(tmp, l->pickupgroup);
@@ -5621,6 +5623,14 @@
 	}
 
 	return tmp;
+}
+
+static void unistim_set_owner(struct unistim_subchannel *sub, struct ast_channel *chan)
+{
+	sub->owner = chan;
+	if (sub->rtp) {
+		ast_rtp_instance_set_channel_id(sub->rtp, sub->owner ? ast_channel_uniqueid(sub->owner) : "");
+	}
 }
 
 static void *do_monitor(void *data)

Modified: team/dlee/stasis-cache-split/include/asterisk.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/include/asterisk.h?view=diff&rev=393860&r1=393859&r2=393860
==============================================================================
--- team/dlee/stasis-cache-split/include/asterisk.h (original)
+++ team/dlee/stasis-cache-split/include/asterisk.h Mon Jul  8 17:07:50 2013
@@ -216,27 +216,6 @@
 #define ast_mark(a, b) do { } while (0)
 #endif /* LOW_MEMORY */
 
-/*!
- * \since 12
- * \brief A \ref stasis topic which publishes messages regarding system changes
- *
- * \retval \ref stasis_topic for system level changes
- * \retval NULL on error
- */
-struct stasis_topic *ast_system_topic(void);
-
-/*!
- * \since 12
- * \brief A \ref stasis_message_type for network changes
- *
- * \retval NULL on error
- * \retval \ref stasis_message_type for network changes
- *
- * \note Messages of this type should always be issued on and expected from
- *       the \ref ast_system_topic \ref stasis topic
- */
-struct stasis_message_type *ast_network_change_type(void);
-
 /*! \brief
  * Definition of various structures that many asterisk files need,
  * but only because they need to know that the type exists.

Modified: team/dlee/stasis-cache-split/include/asterisk/bridging.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/include/asterisk/bridging.h?view=diff&rev=393860&r1=393859&r2=393860
==============================================================================
--- team/dlee/stasis-cache-split/include/asterisk/bridging.h (original)
+++ team/dlee/stasis-cache-split/include/asterisk/bridging.h Mon Jul  8 17:07:50 2013
@@ -870,19 +870,23 @@
  */
 int ast_bridge_unsuspend(struct ast_bridge *bridge, struct ast_channel *chan);
 
+struct ast_unreal_pvt;
+
 /*!
  * \brief Check and optimize out the unreal channels between bridges.
  * \since 12.0.0
  *
  * \param chan Unreal channel writing a frame into the channel driver.
  * \param peer Other unreal channel in the pair.
+ * \param pvt Private data provided by an implementation of the unreal driver that
+ * contains the callbacks that should be called when optimization begins/ends
  *
  * \note It is assumed that chan is already locked.
  *
  * \retval 0 if unreal channels were not optimized out.
  * \retval non-zero if unreal channels were optimized out.
  */
-int ast_bridge_unreal_optimized_out(struct ast_channel *chan, struct ast_channel *peer);
+int ast_bridge_unreal_optimize_out(struct ast_channel *chan, struct ast_channel *peer, struct ast_unreal_pvt *pvt);
 
 /*!
  * \brief Tells, if optimization is allowed, how the optimization would be performed

Modified: team/dlee/stasis-cache-split/include/asterisk/cdr.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/include/asterisk/cdr.h?view=diff&rev=393860&r1=393859&r2=393860
==============================================================================
--- team/dlee/stasis-cache-split/include/asterisk/cdr.h (original)
+++ team/dlee/stasis-cache-split/include/asterisk/cdr.h Mon Jul  8 17:07:50 2013
@@ -178,7 +178,7 @@
  *
  * The following transitions can occur while in the Bridge state:
  * \li If a \ref ast_bridge_blob_type message indicating a leave is received,
- * the state transitions to the Pending state
+ * the state transitions to the Finalized state.
  *
  * \par Parked
  *
@@ -203,27 +203,7 @@
  *
  * The following transitions can occur while in the Parked state:
  * \li If a \ref ast_bridge_blob_type message indicating a leave is received,
- * the state transitions to the Pending state
- *
- * \par Pending
- *
- * After a channel leaves a bridge, we often don't know what's going to happen

[... 7901 lines stripped ...]



More information about the svn-commits mailing list