[asterisk-commits] mmichelson: branch mmichelson/transfer r389260 - in /team/mmichelson/transfer...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Mon May 20 13:19:46 CDT 2013
Author: mmichelson
Date: Mon May 20 13:19:37 2013
New Revision: 389260
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=389260
Log:
Resolve conflict and reset automerge.
Added:
team/mmichelson/transfer/apps/confbridge/confbridge_manager.c
- copied unchanged from r389253, team/group/bridge_construction/apps/confbridge/confbridge_manager.c
team/mmichelson/transfer/res/res_stasis_answer.exports.in
- copied unchanged from r389253, team/group/bridge_construction/res/res_stasis_answer.exports.in
Removed:
team/mmichelson/transfer/apps/app_parkandannounce.c
Modified:
team/mmichelson/transfer/ (props changed)
team/mmichelson/transfer/CHANGES
team/mmichelson/transfer/UPGRADE.txt
team/mmichelson/transfer/addons/chan_ooh323.c
team/mmichelson/transfer/addons/chan_ooh323.h
team/mmichelson/transfer/apps/app_bridgewait.c (props changed)
team/mmichelson/transfer/apps/app_celgenuserevent.c (props changed)
team/mmichelson/transfer/apps/app_confbridge.c
team/mmichelson/transfer/apps/app_dial.c
team/mmichelson/transfer/apps/app_morsecode.c (props changed)
team/mmichelson/transfer/apps/app_queue.c
team/mmichelson/transfer/apps/app_setcallerid.c (props changed)
team/mmichelson/transfer/apps/app_stasis.c (props changed)
team/mmichelson/transfer/apps/app_voicemail.c
team/mmichelson/transfer/apps/app_waituntil.c (props changed)
team/mmichelson/transfer/apps/confbridge/conf_config_parser.c
team/mmichelson/transfer/apps/confbridge/include/confbridge.h
team/mmichelson/transfer/bridges/bridge_builtin_interval_features.c (props changed)
team/mmichelson/transfer/bridges/bridge_holding.c (props changed)
team/mmichelson/transfer/channels/chan_iax2.c
team/mmichelson/transfer/channels/chan_mgcp.c
team/mmichelson/transfer/channels/chan_sip.c
team/mmichelson/transfer/channels/chan_skinny.c
team/mmichelson/transfer/channels/sip/config_parser.c
team/mmichelson/transfer/channels/sip/dialplan_functions.c
team/mmichelson/transfer/channels/sip/include/config_parser.h
team/mmichelson/transfer/channels/sip/include/sip.h
team/mmichelson/transfer/channels/sip/security_events.c
team/mmichelson/transfer/configs/skinny.conf.sample
team/mmichelson/transfer/funcs/func_presencestate.c
team/mmichelson/transfer/include/asterisk/acl.h
team/mmichelson/transfer/include/asterisk/ael_structs.h (props changed)
team/mmichelson/transfer/include/asterisk/bridging.h
team/mmichelson/transfer/include/asterisk/bridging_roles.h (props changed)
team/mmichelson/transfer/include/asterisk/cel.h (props changed)
team/mmichelson/transfer/include/asterisk/core_unreal.h
team/mmichelson/transfer/include/asterisk/dial.h
team/mmichelson/transfer/include/asterisk/event.h (props changed)
team/mmichelson/transfer/include/asterisk/event_defs.h (props changed)
team/mmichelson/transfer/include/asterisk/frame_defs.h (props changed)
team/mmichelson/transfer/include/asterisk/hashtab.h (props changed)
team/mmichelson/transfer/include/asterisk/json.h (contents, props changed)
team/mmichelson/transfer/include/asterisk/netsock2.h
team/mmichelson/transfer/include/asterisk/parking.h (props changed)
team/mmichelson/transfer/include/asterisk/paths.h (props changed)
team/mmichelson/transfer/include/asterisk/pktccops.h (props changed)
team/mmichelson/transfer/include/asterisk/res_sip.h
team/mmichelson/transfer/include/asterisk/res_srtp.h (props changed)
team/mmichelson/transfer/include/asterisk/security_events.h
team/mmichelson/transfer/include/asterisk/security_events_defs.h
team/mmichelson/transfer/include/asterisk/sha1.h (props changed)
team/mmichelson/transfer/include/asterisk/smdi.h (props changed)
team/mmichelson/transfer/include/asterisk/stasis.h (contents, props changed)
team/mmichelson/transfer/include/asterisk/stasis_app.h (props changed)
team/mmichelson/transfer/include/asterisk/stasis_channels.h
team/mmichelson/transfer/include/asterisk/stasis_http.h (props changed)
team/mmichelson/transfer/include/asterisk/stasis_message_router.h (contents, props changed)
team/mmichelson/transfer/include/asterisk/stringfields.h (props changed)
team/mmichelson/transfer/include/asterisk/udptl.h (props changed)
team/mmichelson/transfer/main/app.c
team/mmichelson/transfer/main/asterisk.c
team/mmichelson/transfer/main/bridging.c
team/mmichelson/transfer/main/channel.c
team/mmichelson/transfer/main/core_local.c
team/mmichelson/transfer/main/core_unreal.c
team/mmichelson/transfer/main/devicestate.c
team/mmichelson/transfer/main/dial.c
team/mmichelson/transfer/main/endpoints.c
team/mmichelson/transfer/main/json.c
team/mmichelson/transfer/main/manager.c
team/mmichelson/transfer/main/manager_channels.c
team/mmichelson/transfer/main/named_acl.c
team/mmichelson/transfer/main/pbx.c
team/mmichelson/transfer/main/security_events.c
team/mmichelson/transfer/main/sorcery.c
team/mmichelson/transfer/main/stasis.c
team/mmichelson/transfer/main/stasis_cache.c
team/mmichelson/transfer/main/stasis_channels.c
team/mmichelson/transfer/main/stasis_endpoints.c
team/mmichelson/transfer/main/stasis_message_router.c
team/mmichelson/transfer/res/parking/parking_applications.c (contents, props changed)
team/mmichelson/transfer/res/parking/parking_bridge.c (contents, props changed)
team/mmichelson/transfer/res/parking/parking_bridge_features.c (props changed)
team/mmichelson/transfer/res/parking/parking_controller.c (props changed)
team/mmichelson/transfer/res/parking/parking_manager.c (props changed)
team/mmichelson/transfer/res/parking/parking_ui.c (props changed)
team/mmichelson/transfer/res/parking/res_parking.h (contents, props changed)
team/mmichelson/transfer/res/res_chan_stats.c
team/mmichelson/transfer/res/res_jabber.c
team/mmichelson/transfer/res/res_parking.c
team/mmichelson/transfer/res/res_security_log.c
team/mmichelson/transfer/res/res_sip.c
team/mmichelson/transfer/res/res_sip/config_transport.c
team/mmichelson/transfer/res/res_sip_acl.c
team/mmichelson/transfer/res/res_sip_endpoint_identifier_ip.c
team/mmichelson/transfer/res/res_sip_nat.c
team/mmichelson/transfer/res/res_sip_outbound_registration.c
team/mmichelson/transfer/res/res_stasis.c
team/mmichelson/transfer/res/stasis/app.c
team/mmichelson/transfer/res/stasis/app.h
team/mmichelson/transfer/tests/test_security_events.c
Propchange: team/mmichelson/transfer/
------------------------------------------------------------------------------
automerge = *
Propchange: team/mmichelson/transfer/
------------------------------------------------------------------------------
--- bridge_construction-integrated (original)
+++ bridge_construction-integrated Mon May 20 13:19:37 2013
@@ -1,1 +1,1 @@
-/trunk:1-388840
+/trunk:1-389224
Propchange: team/mmichelson/transfer/
------------------------------------------------------------------------------
--- transfer-integrated (original)
+++ transfer-integrated Mon May 20 13:19:37 2013
@@ -1,1 +1,1 @@
-/team/group/bridge_construction:1-388894
+/team/group/bridge_construction:1-389255
Modified: team/mmichelson/transfer/CHANGES
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/transfer/CHANGES?view=diff&rev=389260&r1=389259&r2=389260
==============================================================================
--- team/mmichelson/transfer/CHANGES (original)
+++ team/mmichelson/transfer/CHANGES Mon May 20 13:19:37 2013
@@ -151,10 +151,11 @@
methods and the contents of parking lots will be visible though certain bridge
commands.
- * The order of arguments for the new parking application are different from the
- old one to be more intuitive. Timeout and return context/exten/priority are now
+ * The order of arguments for the new parking applications are different from the
+ old ones to be more intuitive. Timeout and return context/exten/priority are now
implemented as options. parking_lot_name is now the first parameter. See the
- application documentation for Park for more in-depth information.
+ application documentation for Park, ParkedCall, and ParkAndAnnounce for more
+ in-depth information as well as syntax.
* Extensions are no longer automatically created in the dialplan to park calls,
pickup parked calls, etc by default.
@@ -176,6 +177,13 @@
* The AMI command 'ParkedCalls' will now accept a 'ParkingLot' argument which
can be used to get a list of parked calls only for a specific parking lot.
+
+ * The ParkAndAnnounce application is now provided through res_parking instead
+ of through the separate app_parkandannounce module.
+
+ * ParkAndAnnounce will no longer go to the next position in dialplan on timeout
+ by default. Instead, it will follow the timeout rules of the parking lot. The
+ old behavior can be reproduced by using the 'c' option.
Queue
-------------------
@@ -213,6 +221,11 @@
If any resource is available the device state is considered to be not in use.
If no resources exist or all are unavailable the device state is considered
to be unavailable.
+
+Security Events Framework
+-------------------------
+ * Security Event timestamps now use ISO 8601 formatted date/time instead of the
+ "seconds-microseconds" format that it was using previously.
Sorcery
------------------
Modified: team/mmichelson/transfer/UPGRADE.txt
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/transfer/UPGRADE.txt?view=diff&rev=389260&r1=389259&r2=389260
==============================================================================
--- team/mmichelson/transfer/UPGRADE.txt (original)
+++ team/mmichelson/transfer/UPGRADE.txt Mon May 20 13:19:37 2013
@@ -89,6 +89,12 @@
no longer honored. The feature is activated by which channel
DYNAMIC_FEATURES includes the feature is on. Use predial to set different
values of DYNAMIC_FEATURES on the channels
+
+Parking:
+ - The arguments for the Park, ParkedCall, and ParkAndAnnounce applications have
+ been modified significantly. See the application documents for specific details.
+ Also parking lot configuration is now done in res_parking.conf instead of
+ features.conf
From 10 to 11:
Modified: team/mmichelson/transfer/addons/chan_ooh323.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/transfer/addons/chan_ooh323.c?view=diff&rev=389260&r1=389259&r2=389260
==============================================================================
--- team/mmichelson/transfer/addons/chan_ooh323.c (original)
+++ team/mmichelson/transfer/addons/chan_ooh323.c Mon May 20 13:19:37 2013
@@ -489,9 +489,8 @@
}
if (ch) {
- manager_event(EVENT_FLAG_SYSTEM, "ChannelUpdate",
- "Channel: %s\r\nChanneltype: %s\r\n"
- "CallRef: %d\r\n", ast_channel_name(ch), "OOH323", i->call_reference);
+ ast_publish_channel_state(ch);
+
}
} else
ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
@@ -2148,8 +2147,7 @@
ast_queue_control(c, AST_CONTROL_ANSWER);
ast_channel_unlock(p->owner);
- manager_event(EVENT_FLAG_SYSTEM,"ChannelUpdate","Channel: %s\r\nChanneltype: %s\r\n"
- "CallRef: %d\r\n", ast_channel_name(c), "OOH323", p->call_reference);
+ ast_publish_channel_state(c);
}
ast_mutex_unlock(&p->lock);
Modified: team/mmichelson/transfer/addons/chan_ooh323.h
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/transfer/addons/chan_ooh323.h?view=diff&rev=389260&r1=389259&r2=389260
==============================================================================
--- team/mmichelson/transfer/addons/chan_ooh323.h (original)
+++ team/mmichelson/transfer/addons/chan_ooh323.h Mon May 20 13:19:37 2013
@@ -64,6 +64,7 @@
#include "asterisk/format.h"
#include "asterisk/format_cap.h"
#include "asterisk/udptl.h"
+#include "asterisk/stasis_channels.h"
#include "ootypes.h"
#include "ooUtils.h"
Propchange: team/mmichelson/transfer/apps/app_bridgewait.c
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Mon May 20 13:19:37 2013
@@ -1,1 +1,1 @@
-"Author Date Id Rev URL"
+Author Date Id Revision
Propchange: team/mmichelson/transfer/apps/app_celgenuserevent.c
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Mon May 20 13:19:37 2013
@@ -1,1 +1,1 @@
-Author Id Date Revision
+Author Date Id Revision
Modified: team/mmichelson/transfer/apps/app_confbridge.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/transfer/apps/app_confbridge.c?view=diff&rev=389260&r1=389259&r2=389260
==============================================================================
--- team/mmichelson/transfer/apps/app_confbridge.c (original)
+++ team/mmichelson/transfer/apps/app_confbridge.c Mon May 20 13:19:37 2013
@@ -67,6 +67,9 @@
#include "asterisk/paths.h"
#include "asterisk/manager.h"
#include "asterisk/test.h"
+#include "asterisk/stasis.h"
+#include "asterisk/stasis_bridging.h"
+#include "asterisk/json.h"
/*** DOCUMENTATION
<application name="ConfBridge" language="en_US">
@@ -412,183 +415,77 @@
return "";
}
-static void send_conf_start_event(const char *conf_name)
-{
- /*** DOCUMENTATION
- <managerEventInstance>
- <synopsis>Raised when a conference starts.</synopsis>
- <syntax>
- <parameter name="Conference">
- <para>The name of the Confbridge conference.</para>
- </parameter>
- </syntax>
- <see-also>
- <ref type="managerEvent">ConfbridgeEnd</ref>
- <ref type="application">ConfBridge</ref>
- </see-also>
- </managerEventInstance>
- ***/
- manager_event(EVENT_FLAG_CALL, "ConfbridgeStart", "Conference: %s\r\n", conf_name);
-}
-
-static void send_conf_end_event(const char *conf_name)
-{
- /*** DOCUMENTATION
- <managerEventInstance>
- <synopsis>Raised when a conference ends.</synopsis>
- <syntax>
- <xi:include xpointer="xpointer(/docs/managerEvent[@name='ConfbridgeStart']/managerEventInstance/syntax/parameter[@name='Conference'])" />
- </syntax>
- <see-also>
- <ref type="managerEvent">ConfbridgeStart</ref>
- </see-also>
- </managerEventInstance>
- ***/
- manager_event(EVENT_FLAG_CALL, "ConfbridgeEnd", "Conference: %s\r\n", conf_name);
-}
-
-static void send_join_event(struct ast_channel *chan, const char *conf_name)
-{
- /*** DOCUMENTATION
- <managerEventInstance>
- <synopsis>Raised when a channel joins a Confbridge conference.</synopsis>
- <syntax>
- <xi:include xpointer="xpointer(/docs/managerEvent[@name='ConfbridgeStart']/managerEventInstance/syntax/parameter[@name='Conference'])" />
- </syntax>
- <see-also>
- <ref type="managerEvent">ConfbridgeLeave</ref>
- <ref type="application">ConfBridge</ref>
- </see-also>
- </managerEventInstance>
- ***/
- ast_manager_event(chan, EVENT_FLAG_CALL, "ConfbridgeJoin",
- "Channel: %s\r\n"
- "Uniqueid: %s\r\n"
- "Conference: %s\r\n"
- "CallerIDnum: %s\r\n"
- "CallerIDname: %s\r\n",
- ast_channel_name(chan),
- ast_channel_uniqueid(chan),
- conf_name,
- S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, "<unknown>"),
- S_COR(ast_channel_caller(chan)->id.name.valid, ast_channel_caller(chan)->id.name.str, "<unknown>")
- );
-}
-
-static void send_leave_event(struct ast_channel *chan, const char *conf_name)
-{
- /*** DOCUMENTATION
- <managerEventInstance>
- <synopsis>Raised when a channel leaves a Confbridge conference.</synopsis>
- <syntax>
- <xi:include xpointer="xpointer(/docs/managerEvent[@name='ConfbridgeStart']/managerEventInstance/syntax/parameter[@name='Conference'])" />
- </syntax>
- <see-also>
- <ref type="managerEvent">ConfbridgeJoin</ref>
- </see-also>
- </managerEventInstance>
- ***/
- ast_manager_event(chan, EVENT_FLAG_CALL, "ConfbridgeLeave",
- "Channel: %s\r\n"
- "Uniqueid: %s\r\n"
- "Conference: %s\r\n"
- "CallerIDnum: %s\r\n"
- "CallerIDname: %s\r\n",
- ast_channel_name(chan),
- ast_channel_uniqueid(chan),
- conf_name,
- S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, "<unknown>"),
- S_COR(ast_channel_caller(chan)->id.name.valid, ast_channel_caller(chan)->id.name.str, "<unknown>")
- );
-}
-
-static void send_start_record_event(const char *conf_name)
-{
- /*** DOCUMENTATION
- <managerEventInstance>
- <synopsis>Raised when a conference recording starts.</synopsis>
- <syntax>
- <xi:include xpointer="xpointer(/docs/managerEvent[@name='ConfbridgeStart']/managerEventInstance/syntax/parameter[@name='Conference'])" />
- </syntax>
- <see-also>
- <ref type="managerEvent">ConfbridgeStopRecord</ref>
- <ref type="application">ConfBridge</ref>
- </see-also>
- </managerEventInstance>
- ***/
-
- manager_event(EVENT_FLAG_CALL, "ConfbridgeStartRecord", "Conference: %s\r\n", conf_name);
-}
-
-static void send_stop_record_event(const char *conf_name)
-{
- /*** DOCUMENTATION
- <managerEventInstance>
- <synopsis>Raised when a conference recording stops.</synopsis>
- <syntax>
- <xi:include xpointer="xpointer(/docs/managerEvent[@name='ConfbridgeStart']/managerEventInstance/syntax/parameter[@name='Conference'])" />
- </syntax>
- <see-also>
- <ref type="managerEvent">ConfbridgeStartRecord</ref>
- </see-also>
- </managerEventInstance>
- ***/
- manager_event(EVENT_FLAG_CALL, "ConfbridgeStopRecord", "Conference: %s\r\n", conf_name);
-}
-
-static void send_mute_event(struct ast_channel *chan, const char *conf_name)
-{
- /*** DOCUMENTATION
- <managerEventInstance>
- <synopsis>Raised when a Confbridge participant mutes.</synopsis>
- <syntax>
- <xi:include xpointer="xpointer(/docs/managerEvent[@name='ConfbridgeStart']/managerEventInstance/syntax/parameter[@name='Conference'])" />
- </syntax>
- <see-also>
- <ref type="managerEvent">ConfbridgeUnmute</ref>
- <ref type="application">ConfBridge</ref>
- </see-also>
- </managerEventInstance>
- ***/
- ast_manager_event(chan, EVENT_FLAG_CALL, "ConfbridgeMute",
- "Channel: %s\r\n"
- "Uniqueid: %s\r\n"
- "Conference: %s\r\n"
- "CallerIDnum: %s\r\n"
- "CallerIDname: %s\r\n",
- ast_channel_name(chan),
- ast_channel_uniqueid(chan),
- conf_name,
- S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, "<unknown>"),
- S_COR(ast_channel_caller(chan)->id.name.valid, ast_channel_caller(chan)->id.name.str, "<unknown>")
- );
-}
-
-static void send_unmute_event(struct ast_channel *chan, const char *conf_name)
-{
- /*** DOCUMENTATION
- <managerEventInstance>
- <synopsis>Raised when a Confbridge participant unmutes.</synopsis>
- <syntax>
- <xi:include xpointer="xpointer(/docs/managerEvent[@name='ConfbridgeStart']/managerEventInstance/syntax/parameter[@name='Conference'])" />
- </syntax>
- <see-also>
- <ref type="managerEvent">ConfbridgeMute</ref>
- </see-also>
- </managerEventInstance>
- ***/
- ast_manager_event(chan, EVENT_FLAG_CALL, "ConfbridgeUnmute",
- "Channel: %s\r\n"
- "Uniqueid: %s\r\n"
- "Conference: %s\r\n"
- "CallerIDnum: %s\r\n"
- "CallerIDname: %s\r\n",
- ast_channel_name(chan),
- ast_channel_uniqueid(chan),
- conf_name,
- S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, "<unknown>"),
- S_COR(ast_channel_caller(chan)->id.name.valid, ast_channel_caller(chan)->id.name.str, "<unknown>")
- );
+static void send_conf_stasis(struct confbridge_conference *conference, struct ast_channel *chan, const char *type, struct ast_json *extras, int channel_topic)
+{
+ RAII_VAR(struct stasis_message *, msg, NULL, ao2_cleanup);
+ RAII_VAR(struct ast_json *, json_object, NULL, ast_json_unref);
+
+ json_object = ast_json_pack("{s: s, s: s}",
+ "type", type,
+ "conference", conference->name);
+
+ if (!json_object) {
+ return;
+ }
+
+ if (extras) {
+ ast_json_object_update(json_object, extras);
+ }
+
+ msg = ast_bridge_blob_create(confbridge_message_type(),
+ conference->bridge,
+ chan,
+ json_object);
+ if (!msg) {
+ return;
+ }
+
+ if (channel_topic) {
+ stasis_publish(ast_channel_topic(chan), msg);
+ } else {
+ stasis_publish(ast_bridge_topic(conference->bridge), msg);
+ }
+
+}
+
+static void send_conf_start_event(struct confbridge_conference *conference)
+{
+ send_conf_stasis(conference, NULL, "confbridge_start", NULL, 0);
+}
+
+static void send_conf_end_event(struct confbridge_conference *conference)
+{
+ send_conf_stasis(conference, NULL, "confbridge_end", NULL, 0);
+}
+
+static void send_join_event(struct ast_channel *chan, struct confbridge_conference *conference)
+{
+ send_conf_stasis(conference, chan, "confbridge_join", NULL, 0);
+}
+
+static void send_leave_event(struct ast_channel *chan, struct confbridge_conference *conference)
+{
+ send_conf_stasis(conference, chan, "confbridge_leave", NULL, 0);
+}
+
+static void send_start_record_event(struct confbridge_conference *conference)
+{
+ send_conf_stasis(conference, NULL, "confbridge_record", NULL, 0);
+}
+
+static void send_stop_record_event(struct confbridge_conference *conference)
+{
+ send_conf_stasis(conference, NULL, "confbridge_stop_record", NULL, 0);
+}
+
+static void send_mute_event(struct ast_channel *chan, struct confbridge_conference *conference)
+{
+ send_conf_stasis(conference, chan, "confbridge_mute", NULL, 1);
+}
+
+static void send_unmute_event(struct ast_channel *chan, struct confbridge_conference *conference)
+{
+ send_conf_stasis(conference, chan, "confbridge_unmute", NULL, 1);
}
@@ -693,6 +590,7 @@
return NULL;
}
if (ast_bridge_features_init(&features)) {
+ ast_bridge_features_cleanup(&features);
conference->record_thread = AST_PTHREADT_NULL;
ast_mutex_unlock(&conference->record_lock);
ao2_ref(conference, -1);
@@ -747,7 +645,7 @@
ast_queue_frame(chan, &ast_null_frame);
chan = ast_channel_unref(chan);
ast_test_suite_event_notify("CONF_STOP_RECORD", "Message: stopped conference recording channel\r\nConference: %s", conference->b_profile.name);
- send_stop_record_event(conference->name);
+ send_stop_record_event(conference);
return 0;
}
@@ -821,7 +719,7 @@
ast_cond_signal(&conference->record_cond);
ast_mutex_unlock(&conference->record_lock);
ast_test_suite_event_notify("CONF_START_RECORD", "Message: started conference recording channel\r\nConference: %s", conference->b_profile.name);
- send_start_record_event(conference->name);
+ send_start_record_event(conference);
return 0;
}
@@ -1260,7 +1158,7 @@
{
/* Called with a reference to conference */
ao2_unlink(conference_bridges, conference);
- send_conf_end_event(conference->name);
+ send_conf_end_event(conference);
conf_stop_record_thread(conference);
}
@@ -1361,7 +1259,7 @@
ao2_unlock(conference);
}
- send_conf_start_event(conference->name);
+ send_conf_start_event(conference);
ast_debug(1, "Created conference '%s' and linked to container.\n", conference_name);
}
@@ -1563,31 +1461,22 @@
static void conf_handle_talker_cb(struct ast_bridge_channel *bridge_channel, void *pvt_data, int talking)
{
const char *conf_name = pvt_data;
-
- /* notify AMI someone is has either started or stopped talking */
- /*** DOCUMENTATION
- <managerEventInstance>
- <synopsis>Raised when a conference participant has started or stopped talking.</synopsis>
- <syntax>
- <xi:include xpointer="xpointer(/docs/managerEvent[@name='ConfbridgeStart']/managerEventInstance/syntax/parameter[@name='Conference'])" />
- <parameter name="TalkingStatus">
- <enumlist>
- <enum name="on"/>
- <enum name="off"/>
- </enumlist>
- </parameter>
- </syntax>
- </managerEventInstance>
- ***/
- ast_manager_event(bridge_channel->chan, EVENT_FLAG_CALL, "ConfbridgeTalking",
- "Channel: %s\r\n"
- "Uniqueid: %s\r\n"
- "Conference: %s\r\n"
- "TalkingStatus: %s\r\n",
- ast_channel_name(bridge_channel->chan),
- ast_channel_uniqueid(bridge_channel->chan),
- conf_name,
- talking ? "on" : "off");
+ struct confbridge_conference *conference = ao2_find(conference_bridges, conf_name, OBJ_KEY);
+ struct ast_json *talking_extras;
+
+ if (!conference) {
+ return;
+ }
+
+ talking_extras = ast_json_pack("{s: s}",
+ "talking_status", talking ? "on" : "off");
+
+ if (!talking_extras) {
+ return;
+ }
+
+ send_conf_stasis(conference, bridge_channel->chan, "confbridge_talking", talking_extras, 0);
+ ast_json_unref(talking_extras);
}
static int conf_get_pin(struct ast_channel *chan, struct confbridge_user *user)
@@ -1837,14 +1726,14 @@
conf_moh_unsuspend(&user);
/* Join our conference bridge for real */
- send_join_event(user.chan, conference->name);
+ send_join_event(user.chan, conference);
ast_bridge_join(conference->bridge,
chan,
NULL,
&user.features,
&user.tech_args,
0);
- send_leave_event(user.chan, conference->name);
+ send_leave_event(user.chan, conference);
/* if we're shutting down, don't attempt to do further processing */
if (ast_shutting_down()) {
@@ -1911,9 +1800,9 @@
user->features.mute = (!user->features.mute ? 1 : 0);
ast_test_suite_event_notify("CONF_MUTE", "Message: participant %s %s\r\nConference: %s\r\nChannel: %s", ast_channel_name(chan), user->features.mute ? "muted" : "unmuted", user->b_profile.name, ast_channel_name(chan));
if (user->features.mute) {
- send_mute_event(chan, conference->name);
- } else {
- send_unmute_event(chan, conference->name);
+ send_mute_event(chan, conference);
+ } else {
+ send_unmute_event(chan, conference);
}
}
return ast_stream_and_wait(chan, (user->features.mute ?
@@ -3234,6 +3123,9 @@
ast_manager_unregister("ConfbridgeStopRecord");
ast_manager_unregister("ConfbridgeSetSingleVideoSrc");
+ /* Unsubscribe from stasis confbridge message type and clean it up. */
+ manager_confbridge_shutdown();
+
/* Get rid of the conference bridges container. Since we only allow dynamic ones none will be active. */
ao2_cleanup(conference_bridges);
conference_bridges = NULL;
@@ -3283,6 +3175,9 @@
unload_module();
return AST_MODULE_LOAD_FAILURE;
}
+
+ /* Setup manager stasis subscriptions */
+ res |= manager_confbridge_init();
res |= ast_register_application_xml(app, confbridge_exec);
Modified: team/mmichelson/transfer/apps/app_dial.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/transfer/apps/app_dial.c?view=diff&rev=389260&r1=389259&r2=389260
==============================================================================
--- team/mmichelson/transfer/apps/app_dial.c (original)
+++ team/mmichelson/transfer/apps/app_dial.c Mon May 20 13:19:37 2013
@@ -972,6 +972,7 @@
ast_channel_appl_set(c, "AppDial");
ast_channel_data_set(c, "(Outgoing Line)");
+ ast_publish_channel_state(c);
ast_channel_unlock(in);
if (single && !ast_test_flag64(o, OPT_IGNORE_CONNECTEDLINE)) {
@@ -2487,6 +2488,8 @@
ast_channel_appl_set(tc, "AppDial");
ast_channel_data_set(tc, "(Outgoing Line)");
+ ast_publish_channel_state(tc);
+
memset(ast_channel_whentohangup(tc), 0, sizeof(*ast_channel_whentohangup(tc)));
/* Determine CallerID to store in outgoing channel. */
Propchange: team/mmichelson/transfer/apps/app_morsecode.c
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Mon May 20 13:19:37 2013
@@ -1,1 +1,1 @@
-Author Revision Id Date
+Author Date Id Revision
Modified: team/mmichelson/transfer/apps/app_queue.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/transfer/apps/app_queue.c?view=diff&rev=389260&r1=389259&r2=389260
==============================================================================
--- team/mmichelson/transfer/apps/app_queue.c (original)
+++ team/mmichelson/transfer/apps/app_queue.c Mon May 20 13:19:37 2013
@@ -9875,9 +9875,7 @@
res |= ast_data_unregister(NULL);
- if (device_state_sub) {
- device_state_sub = stasis_unsubscribe(device_state_sub);
- }
+ device_state_sub = stasis_unsubscribe_and_join(device_state_sub);
ast_extension_state_del(0, extension_state_cb);
Propchange: team/mmichelson/transfer/apps/app_setcallerid.c
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Mon May 20 13:19:37 2013
@@ -1,1 +1,1 @@
-Author Revision Id Date
+Author Date Id Revision
Propchange: team/mmichelson/transfer/apps/app_stasis.c
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Mon May 20 13:19:37 2013
@@ -1,1 +1,1 @@
-Author Date Id Rev URL
+Author Date Id Revision
Modified: team/mmichelson/transfer/apps/app_voicemail.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/transfer/apps/app_voicemail.c?view=diff&rev=389260&r1=389259&r2=389260
==============================================================================
--- team/mmichelson/transfer/apps/app_voicemail.c (original)
+++ team/mmichelson/transfer/apps/app_voicemail.c Mon May 20 13:19:37 2013
@@ -12689,9 +12689,7 @@
{
poll_thread_run = 0;
- if (mwi_sub_sub) {
- mwi_sub_sub = stasis_unsubscribe(mwi_sub_sub);
- }
+ mwi_sub_sub = stasis_unsubscribe_and_join(mwi_sub_sub);
ast_mutex_lock(&poll_lock);
ast_cond_signal(&poll_cond);
Propchange: team/mmichelson/transfer/apps/app_waituntil.c
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Mon May 20 13:19:37 2013
@@ -1,1 +1,1 @@
-Id Author Revision Date
+Author Date Id Revision
Modified: team/mmichelson/transfer/apps/confbridge/conf_config_parser.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/transfer/apps/confbridge/conf_config_parser.c?view=diff&rev=389260&r1=389259&r2=389260
==============================================================================
--- team/mmichelson/transfer/apps/confbridge/conf_config_parser.c (original)
+++ team/mmichelson/transfer/apps/confbridge/conf_config_parser.c Mon May 20 13:19:37 2013
@@ -290,6 +290,15 @@
allows the record name to be specified and a unique name to be chosen.
By default, the record_file is stored in Asterisk's spool/monitor directory
with a unique filename starting with the 'confbridge' prefix.
+ </para></description>
+ </configOption>
+ <configOption name="record_file_append" default="yes">
+ <synopsis>Append record file when starting/stopping on same conference recording</synopsis>
+ <description><para>
+ When record_file_append is set to yes, stopping and starting recording on a
+ conference adds the new portion to end of current record_file. When this is
+ set to no, a new record_file is generated every time you start then stop recording
+ on a conference.
</para></description>
</configOption>
<configOption name="video_mode">
Modified: team/mmichelson/transfer/apps/confbridge/include/confbridge.h
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/transfer/apps/confbridge/include/confbridge.h?view=diff&rev=389260&r1=389259&r2=389260
==============================================================================
--- team/mmichelson/transfer/apps/confbridge/include/confbridge.h (original)
+++ team/mmichelson/transfer/apps/confbridge/include/confbridge.h Mon May 20 13:19:37 2013
@@ -460,4 +460,28 @@
* \retval non-zero failure
*/
int conf_add_post_join_action(struct confbridge_user *user, int (*func)(struct confbridge_user *user));
+
+/*!
+ * \since 12.0
+ * \brief get the confbridge stasis message type
+ *
+ * \retval stasis message type for confbridge messages if it's available
+ * \retval NULL if it isn't
+ */
+struct stasis_message_type *confbridge_message_type(void);
+
+/*!
+ * \since 12.0
+ * \brief register stasis message routers to handle manager events for confbridge messages
+ *
+ * \retval 0 success
+ * \retval non-zero failure
+ */
+int manager_confbridge_init(void);
+
+/*!
+ * \since 12.0
+ * \brief unregister stasis message routers to handle manager events for confbridge messages
+ */
+void manager_confbridge_shutdown(void);
#endif
Propchange: team/mmichelson/transfer/bridges/bridge_builtin_interval_features.c
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Mon May 20 13:19:37 2013
@@ -1,1 +1,1 @@
-"Author Date Id Rev URL"
+Author Date Id Revision
Propchange: team/mmichelson/transfer/bridges/bridge_holding.c
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Mon May 20 13:19:37 2013
@@ -1,1 +1,1 @@
-"Author Date Id Rev URL"
+Author Date Id Revision
Modified: team/mmichelson/transfer/channels/chan_iax2.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/transfer/channels/chan_iax2.c?view=diff&rev=389260&r1=389259&r2=389260
==============================================================================
--- team/mmichelson/transfer/channels/chan_iax2.c (original)
+++ team/mmichelson/transfer/channels/chan_iax2.c Mon May 20 13:19:37 2013
@@ -101,6 +101,7 @@
#include "asterisk/test.h"
#include "asterisk/data.h"
#include "asterisk/netsock2.h"
+#include "asterisk/security_events.h"
#include "asterisk/bridging.h"
#include "iax2/include/iax2.h"
@@ -1334,24 +1335,20 @@
static void network_change_stasis_unsubscribe(void)
{
- if (network_change_sub) {
- network_change_sub = stasis_unsubscribe(network_change_sub);
- }
+ network_change_sub = stasis_unsubscribe_and_join(network_change_sub);
}
static void acl_change_stasis_subscribe(void)
{
if (!acl_change_sub) {
- acl_change_sub = stasis_subscribe(ast_acl_topic(),
+ acl_change_sub = stasis_subscribe(ast_security_topic(),
acl_change_stasis_cb, NULL);
}
}
static void acl_change_stasis_unsubscribe(void)
{
- if (acl_change_sub) {
- acl_change_sub = stasis_unsubscribe(acl_change_sub);
- }
+ acl_change_sub = stasis_unsubscribe_and_join(acl_change_sub);
}
static int network_change_sched_cb(const void *data)
@@ -6262,7 +6259,7 @@
struct MD5Context md5;
unsigned char digest[16];
char *tmppw, *stringp;
-
+
tmppw = ast_strdupa(iaxs[callno]->secret);
stringp = tmppw;
while ((tmppw = strsep(&stringp, ";"))) {
@@ -7824,10 +7821,13 @@
if ((p->authmethods & IAX_AUTH_RSA) && !ast_strlen_zero(rsasecret) && !ast_strlen_zero(p->inkeys)) {
struct ast_key *key;
char *keyn;
- char tmpkey[256];
+ char *tmpkey;
char *stringp=NULL;
- ast_copy_string(tmpkey, p->inkeys, sizeof(tmpkey));
- stringp=tmpkey;
+ if (!(tmpkey = ast_strdup(p->inkeys))) {
+ ast_log(LOG_ERROR, "Unable to create a temporary string for parsing stored 'inkeys'\n");
+ return res;
+ }
+ stringp = tmpkey;
keyn = strsep(&stringp, ":");
while(keyn) {
key = ast_key_get(keyn, AST_KEY_PUBLIC);
@@ -7838,11 +7838,12 @@
ast_log(LOG_WARNING, "requested inkey '%s' for RSA authentication does not exist\n", keyn);
keyn = strsep(&stringp, ":");
}
+ ast_free(tmpkey);
} else if (p->authmethods & IAX_AUTH_MD5) {
struct MD5Context md5;
unsigned char digest[16];
char *tmppw, *stringp;
-
+
tmppw = ast_strdupa(p->secret);
stringp = tmppw;
while((tmppw = strsep(&stringp, ";"))) {
@@ -7945,10 +7946,13 @@
/* Check secret against what we have on file */
if (!ast_strlen_zero(rsasecret) && (p->authmethods & IAX_AUTH_RSA) && !ast_strlen_zero(iaxs[callno]->challenge)) {
if (!ast_strlen_zero(p->inkeys)) {
- char tmpkeys[256];
+ char *tmpkey;
char *stringp=NULL;
- ast_copy_string(tmpkeys, p->inkeys, sizeof(tmpkeys));
- stringp=tmpkeys;
+ if (!(tmpkey = ast_strdup(p->inkeys))) {
+ ast_log(LOG_ERROR, "Unable to create a temporary string for parsing stored 'inkeys'\n");
+ goto return_unref;
+ }
+ stringp = tmpkey;
keyn = strsep(&stringp, ":");
while(keyn) {
key = ast_key_get(keyn, AST_KEY_PUBLIC);
@@ -7959,6 +7963,7 @@
ast_log(LOG_WARNING, "requested inkey '%s' does not exist\n", keyn);
keyn = strsep(&stringp, ":");
}
+ ast_free(tmpkey);
if (!keyn) {
if (authdebug)
ast_log(LOG_NOTICE, "Host %s failed RSA authentication with inkeys '%s'\n", peer, p->inkeys);
@@ -12264,9 +12269,7 @@
if (peer->dnsmgr)
ast_dnsmgr_release(peer->dnsmgr);
- if (peer->mwi_event_sub) {
- peer->mwi_event_sub = stasis_unsubscribe(peer->mwi_event_sub);
- }
+ peer->mwi_event_sub = stasis_unsubscribe(peer->mwi_event_sub);
ast_string_field_free_memory(peer);
}
@@ -14427,8 +14430,13 @@
struct ast_data *data_user, *data_authmethods, *data_enum_node;
struct iax2_user *user;
struct ao2_iterator i;
- char auth[90];
+ struct ast_str *auth;
char *pstr = "";
+
+ if (!(auth = ast_str_create(90))) {
+ ast_log(LOG_ERROR, "Unable to create temporary string for storing 'secret'\n");
+ return 0;
+ }
i = ao2_iterator_init(users, 0);
for (; (user = ao2_iterator_next(&i)); user_unref(user)) {
@@ -14442,13 +14450,13 @@
iax2_data_add_codecs(data_user, "codecs", user->capability);
if (!ast_strlen_zero(user->secret)) {
- ast_copy_string(auth, user->secret, sizeof(auth));
+ ast_str_set(&auth, 0, "%s", user->secret);
} else if (!ast_strlen_zero(user->inkeys)) {
- snprintf(auth, sizeof(auth), "Key: %s", user->inkeys);
+ ast_str_set(&auth, 0, "Key: %s", user->inkeys);
} else {
- ast_copy_string(auth, "no secret", sizeof(auth));
- }
- ast_data_add_password(data_user, "secret", auth);
+ ast_str_set(&auth, 0, "no secret");
+ }
+ ast_data_add_password(data_user, "secret", ast_str_buffer(auth));
ast_data_add_str(data_user, "context", user->contexts ? user->contexts->context : DEFAULT_CONTEXT);
@@ -14488,6 +14496,7 @@
}
ao2_iterator_destroy(&i);
+ ast_free(auth);
return 0;
}
Modified: team/mmichelson/transfer/channels/chan_mgcp.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/transfer/channels/chan_mgcp.c?view=diff&rev=389260&r1=389259&r2=389260
==============================================================================
--- team/mmichelson/transfer/channels/chan_mgcp.c (original)
+++ team/mmichelson/transfer/channels/chan_mgcp.c Mon May 20 13:19:37 2013
@@ -83,6 +83,7 @@
#include "asterisk/chanvars.h"
#include "asterisk/pktccops.h"
#include "asterisk/stasis.h"
+#include "asterisk/bridging.h"
/*
* Define to work around buggy dlink MGCP phone firmware which
@@ -3212,56 +3213,55 @@
return NULL;
}
-static int attempt_transfer(struct mgcp_endpoint *p)
-{
- /* *************************
- * I hope this works.
- * Copied out of chan_zap
- * Cross your fingers
- * *************************/
-
- /* In order to transfer, we need at least one of the channels to
- actually be in a call bridge. We can't conference two applications
- together (but then, why would we want to?) */
- if (ast_bridged_channel(p->sub->owner)) {
- /* The three-way person we're about to transfer to could still be in MOH, so
- stop it now */
- ast_queue_control(p->sub->next->owner, AST_CONTROL_UNHOLD);
- if (ast_channel_state(p->sub->owner) == AST_STATE_RINGING) {
- ast_queue_control(p->sub->next->owner, AST_CONTROL_RINGING);
- }
- if (ast_channel_masquerade(p->sub->next->owner, ast_bridged_channel(p->sub->owner))) {
- ast_log(LOG_WARNING, "Unable to masquerade %s as %s\n",
- ast_channel_name(ast_bridged_channel(p->sub->owner)), ast_channel_name(p->sub->next->owner));
- return -1;
- }
- /* Orphan the channel */
- unalloc_sub(p->sub->next);
- } else if (ast_bridged_channel(p->sub->next->owner)) {
- if (ast_channel_state(p->sub->owner) == AST_STATE_RINGING) {
- ast_queue_control(p->sub->next->owner, AST_CONTROL_RINGING);
- }
- ast_queue_control(p->sub->next->owner, AST_CONTROL_UNHOLD);
[... 6833 lines stripped ...]
More information about the asterisk-commits
mailing list