[asterisk-commits] dlee: branch dlee/record-controls r395356 - in /team/dlee/record-controls: ./...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Jul 24 20:10:14 CDT 2013
Author: dlee
Date: Wed Jul 24 20:10:12 2013
New Revision: 395356
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=395356
Log:
Merged revisions 395167-395351 from http://svn.asterisk.org/svn/asterisk/trunk
Added:
team/dlee/record-controls/include/asterisk/bridging_channel.h
- copied unchanged from r395351, trunk/include/asterisk/bridging_channel.h
team/dlee/record-controls/include/asterisk/bridging_channel_internal.h
- copied unchanged from r395351, trunk/include/asterisk/bridging_channel_internal.h
team/dlee/record-controls/main/bridging_channel.c
- copied unchanged from r395351, trunk/main/bridging_channel.c
Modified:
team/dlee/record-controls/ (props changed)
team/dlee/record-controls/apps/app_agent_pool.c
team/dlee/record-controls/apps/app_confbridge.c
team/dlee/record-controls/bridges/bridge_builtin_features.c
team/dlee/record-controls/bridges/bridge_builtin_interval_features.c
team/dlee/record-controls/bridges/bridge_native_rtp.c
team/dlee/record-controls/bridges/bridge_softmix.c
team/dlee/record-controls/channels/chan_dahdi.c
team/dlee/record-controls/channels/chan_dahdi.h
team/dlee/record-controls/channels/chan_gulp.c
team/dlee/record-controls/channels/chan_mgcp.c
team/dlee/record-controls/channels/dahdi/bridge_native_dahdi.c
team/dlee/record-controls/contrib/scripts/install_prereq
team/dlee/record-controls/funcs/func_channel.c
team/dlee/record-controls/include/asterisk/bridging.h
team/dlee/record-controls/include/asterisk/bridging_basic.h
team/dlee/record-controls/include/asterisk/bridging_features.h
team/dlee/record-controls/include/asterisk/bridging_internal.h
team/dlee/record-controls/include/asterisk/bridging_technology.h
team/dlee/record-controls/include/asterisk/channel.h
team/dlee/record-controls/include/asterisk/features.h
team/dlee/record-controls/main/asterisk.exports.in
team/dlee/record-controls/main/bridging.c
team/dlee/record-controls/main/bridging_basic.c
team/dlee/record-controls/main/channel.c
team/dlee/record-controls/main/features.c
team/dlee/record-controls/main/manager_bridging.c
team/dlee/record-controls/main/utils.c
team/dlee/record-controls/res/parking/parking_bridge.c
team/dlee/record-controls/res/parking/parking_bridge_features.c
team/dlee/record-controls/res/res_sip.c
team/dlee/record-controls/res/res_sip/sip_distributor.c
team/dlee/record-controls/res/res_sip/sip_global_headers.c
team/dlee/record-controls/res/res_sip_session.c
Propchange: team/dlee/record-controls/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Wed Jul 24 20:10:12 2013
@@ -1,1 +1,1 @@
-/trunk:1-395155
+/trunk:1-395355
Modified: team/dlee/record-controls/apps/app_agent_pool.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/record-controls/apps/app_agent_pool.c?view=diff&rev=395356&r1=395355&r2=395356
==============================================================================
--- team/dlee/record-controls/apps/app_agent_pool.c (original)
+++ team/dlee/record-controls/apps/app_agent_pool.c Wed Jul 24 20:10:12 2013
@@ -41,6 +41,7 @@
#include "asterisk/module.h"
#include "asterisk/channel.h"
#include "asterisk/bridging.h"
+#include "asterisk/bridging_internal.h"
#include "asterisk/bridging_basic.h"
#include "asterisk/config_options.h"
#include "asterisk/features_config.h"
@@ -1054,7 +1055,7 @@
if (!caller_bridge) {
/* Reset agent. */
- ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
+ ast_bridge_channel_leave_bridge(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
return;
}
res = ast_bridge_move(caller_bridge, bridge_channel->bridge, bridge_channel->chan,
@@ -1062,7 +1063,7 @@
if (res) {
/* Reset agent. */
ast_bridge_destroy(caller_bridge);
- ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
+ ast_bridge_channel_leave_bridge(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
return;
}
ast_bridge_channel_write_control_data(bridge_channel, AST_CONTROL_ANSWER, NULL, 0);
@@ -1158,13 +1159,13 @@
if (deferred_logoff) {
ast_debug(1, "Agent %s: Deferred logoff.\n", agent->username);
- ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
+ ast_bridge_channel_leave_bridge(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
} else if (probation_timedout) {
ast_debug(1, "Agent %s: Login complete.\n", agent->username);
agent_devstate_changed(agent->username);
} else if (ack_timedout) {
ast_debug(1, "Agent %s: Ack call timeout.\n", agent->username);
- ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
+ ast_bridge_channel_leave_bridge(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
} else if (wrapup_timedout) {
ast_debug(1, "Agent %s: Wrapup timeout. Ready for new call.\n", agent->username);
agent_devstate_changed(agent->username);
@@ -1269,7 +1270,7 @@
* agent will have some slightly different behavior in corner
* cases.
*/
- ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
+ ast_bridge_channel_leave_bridge(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
return 0;
}
@@ -1393,11 +1394,11 @@
{
struct ast_bridge *bridge;
- bridge = ast_bridge_alloc(sizeof(struct ast_bridge), &bridge_agent_hold_v_table);
- bridge = ast_bridge_base_init(bridge, AST_BRIDGE_CAPABILITY_HOLDING,
+ bridge = bridge_alloc(sizeof(struct ast_bridge), &bridge_agent_hold_v_table);
+ bridge = bridge_base_init(bridge, AST_BRIDGE_CAPABILITY_HOLDING,
AST_BRIDGE_FLAG_MERGE_INHIBIT_TO | AST_BRIDGE_FLAG_MERGE_INHIBIT_FROM
| AST_BRIDGE_FLAG_SWAP_INHIBIT_FROM | AST_BRIDGE_FLAG_TRANSFER_PROHIBITED);
- bridge = ast_bridge_register(bridge);
+ bridge = bridge_register(bridge);
return bridge;
}
@@ -1703,7 +1704,7 @@
}
/* Kick the agent out of the holding bridge to reset it. */
- ast_bridge_change_state_nolock(logged, AST_BRIDGE_CHANNEL_STATE_END);
+ ast_bridge_channel_leave_bridge_nolock(logged, AST_BRIDGE_CHANNEL_STATE_END);
ast_bridge_channel_unlock(logged);
}
@@ -1713,7 +1714,7 @@
if (agent->state == AGENT_STATE_CALL_PRESENT) {
ast_verb(3, "Agent '%s' did not respond. Safety timeout.\n", agent->username);
- ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
+ ast_bridge_channel_leave_bridge(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
caller_abort_agent(agent);
}
Modified: team/dlee/record-controls/apps/app_confbridge.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/record-controls/apps/app_confbridge.c?view=diff&rev=395356&r1=395355&r2=395356
==============================================================================
--- team/dlee/record-controls/apps/app_confbridge.c (original)
+++ team/dlee/record-controls/apps/app_confbridge.c Wed Jul 24 20:10:12 2013
@@ -1402,25 +1402,26 @@
ast_free(pvt_data);
}
-static void conf_handle_talker_cb(struct ast_bridge_channel *bridge_channel, void *pvt_data, int talking)
+static int conf_handle_talker_cb(struct ast_bridge_channel *bridge_channel, void *pvt_data, int talking)
{
const char *conf_name = pvt_data;
struct confbridge_conference *conference = ao2_find(conference_bridges, conf_name, OBJ_KEY);
struct ast_json *talking_extras;
if (!conference) {
- return;
+ /* Remove the hook since the conference does not exist. */
+ return -1;
}
talking_extras = ast_json_pack("{s: s}",
- "talking_status", talking ? "on" : "off");
-
+ "talking_status", talking ? "on" : "off");
if (!talking_extras) {
- return;
+ return 0;
}
send_conf_stasis(conference, bridge_channel->chan, confbridge_talking_type(), talking_extras, 0);
ast_json_unref(talking_extras);
+ return 0;
}
static int conf_get_pin(struct ast_channel *chan, struct confbridge_user *user)
@@ -1599,14 +1600,17 @@
/* Set a talker indicate call back if talking detection is requested */
if (ast_test_flag(&user.u_profile, USER_OPT_TALKER_DETECT)) {
char *conf_name = ast_strdup(args.conf_name); /* this is freed during feature cleanup */
- if (!(conf_name)) {
+
+ if (!conf_name) {
res = -1; /* invalid PIN */
goto confbridge_cleanup;
}
- ast_bridge_features_set_talk_detector(&user.features,
- conf_handle_talker_cb,
- conf_handle_talker_destructor,
- conf_name);
+ if (ast_bridge_talk_detector_hook(&user.features, conf_handle_talker_cb,
+ conf_name, conf_handle_talker_destructor, AST_BRIDGE_HOOK_REMOVE_ON_PULL)) {
+ ast_free(conf_name);
+ res = -1;
+ goto confbridge_cleanup;
+ }
}
/* Look for a conference bridge matching the provided name */
Modified: team/dlee/record-controls/bridges/bridge_builtin_features.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/record-controls/bridges/bridge_builtin_features.c?view=diff&rev=395356&r1=395355&r2=395356
==============================================================================
--- team/dlee/record-controls/bridges/bridge_builtin_features.c (original)
+++ team/dlee/record-controls/bridges/bridge_builtin_features.c Wed Jul 24 20:10:12 2013
@@ -483,7 +483,7 @@
* bridge_channel to force the channel out of the bridge and the
* core takes care of the rest.
*/
- ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
+ ast_bridge_channel_leave_bridge(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
return 0;
}
Modified: team/dlee/record-controls/bridges/bridge_builtin_interval_features.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/record-controls/bridges/bridge_builtin_interval_features.c?view=diff&rev=395356&r1=395355&r2=395356
==============================================================================
--- team/dlee/record-controls/bridges/bridge_builtin_interval_features.c (original)
+++ team/dlee/record-controls/bridges/bridge_builtin_interval_features.c Wed Jul 24 20:10:12 2013
@@ -58,7 +58,7 @@
ast_stream_and_wait(bridge_channel->chan, limits->duration_sound, AST_DIGIT_NONE);
}
- ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
+ ast_bridge_channel_leave_bridge(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
ast_test_suite_event_notify("BRIDGE_TIMELIMIT", "Channel1: %s", ast_channel_name(bridge_channel->chan));
return -1;
Modified: team/dlee/record-controls/bridges/bridge_native_rtp.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/record-controls/bridges/bridge_native_rtp.c?view=diff&rev=395356&r1=395355&r2=395356
==============================================================================
--- team/dlee/record-controls/bridges/bridge_native_rtp.c (original)
+++ team/dlee/record-controls/bridges/bridge_native_rtp.c Wed Jul 24 20:10:12 2013
@@ -84,7 +84,7 @@
/*! \brief Internal helper function which checks whether the channels are compatible with our native bridging */
static int native_rtp_bridge_capable(struct ast_channel *chan)
{
- return ast_channel_has_audio_frame_or_monitor(chan);
+ return !ast_channel_has_audio_frame_or_monitor(chan);
}
/*! \brief Internal helper function which gets all RTP information (glue and instances) relating to the given channels */
@@ -249,7 +249,7 @@
ast_channel_lock(bridge_channel->chan);
data->id = ast_framehook_attach(bridge_channel->chan, &hook);
ast_channel_unlock(bridge_channel->chan);
- if (!data->id < 0) {
+ if (data->id < 0) {
ao2_cleanup(data);
return -1;
}
@@ -323,11 +323,15 @@
}
ast_rtp_instance_set_bridged(instance0, instance1);
ast_rtp_instance_set_bridged(instance1, instance0);
+ ast_debug(2, "Locally RTP bridged '%s' and '%s' in stack\n",
+ ast_channel_name(c0->chan), ast_channel_name(c1->chan));
break;
case AST_RTP_GLUE_RESULT_REMOTE:
glue0->update_peer(c0->chan, instance1, vinstance1, tinstance1, cap1, 0);
glue1->update_peer(c1->chan, instance0, vinstance0, tinstance0, cap0, 0);
+ ast_debug(2, "Remotely bridged '%s' and '%s' - media will flow directly between them\n",
+ ast_channel_name(c0->chan), ast_channel_name(c1->chan));
break;
case AST_RTP_GLUE_RESULT_FORBID:
break;
@@ -378,6 +382,9 @@
case AST_RTP_GLUE_RESULT_FORBID:
break;
}
+
+ ast_debug(2, "Discontinued RTP bridging of '%s' and '%s' - media will flow through Asterisk core\n",
+ ast_channel_name(c0->chan), ast_channel_name(c1->chan));
}
static int native_rtp_bridge_write(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct ast_frame *frame)
Modified: team/dlee/record-controls/bridges/bridge_softmix.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/record-controls/bridges/bridge_softmix.c?view=diff&rev=395356&r1=395355&r2=395356
==============================================================================
--- team/dlee/record-controls/bridges/bridge_softmix.c (original)
+++ team/dlee/record-controls/bridges/bridge_softmix.c Wed Jul 24 20:10:12 2013
@@ -477,7 +477,7 @@
int video_src_priority;
/* Determine if the video frame should be distributed or not */
- switch (bridge->video_mode.mode) {
+ switch (bridge->softmix.video_mode.mode) {
case AST_BRIDGE_VIDEO_MODE_NONE:
break;
case AST_BRIDGE_VIDEO_MODE_SINGLE_SRC:
@@ -533,7 +533,7 @@
ast_mutex_lock(&sc->lock);
ast_dsp_silence_with_energy(sc->dsp, frame, &totalsilence, &cur_energy);
- if (bridge->video_mode.mode == AST_BRIDGE_VIDEO_MODE_TALKER_SRC) {
+ if (bridge->softmix.video_mode.mode == AST_BRIDGE_VIDEO_MODE_TALKER_SRC) {
int cur_slot = sc->video_talker.energy_history_cur_slot;
sc->video_talker.energy_accum -= sc->video_talker.energy_history[cur_slot];
@@ -851,7 +851,7 @@
/* These variables help determine if a rate change is required */
if (!stat_iteration_counter) {
memset(&stats, 0, sizeof(stats));
- stats.locked_rate = bridge->internal_sample_rate;
+ stats.locked_rate = bridge->softmix.internal_sample_rate;
}
/* If the sample rate has changed, update the translator helper */
@@ -942,8 +942,9 @@
ast_bridge_lock(bridge);
/* make sure to detect mixing interval changes if they occur. */
- if (bridge->internal_mixing_interval && (bridge->internal_mixing_interval != softmix_data->internal_mixing_interval)) {
- softmix_data->internal_mixing_interval = bridge->internal_mixing_interval;
+ if (bridge->softmix.internal_mixing_interval
+ && (bridge->softmix.internal_mixing_interval != softmix_data->internal_mixing_interval)) {
+ softmix_data->internal_mixing_interval = bridge->softmix.internal_mixing_interval;
ast_timer_set_rate(timer, (1000 / softmix_data->internal_mixing_interval));
update_all_rates = 1; /* if the interval changes, the rates must be adjusted as well just to be notified new interval.*/
}
Modified: team/dlee/record-controls/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/record-controls/channels/chan_dahdi.c?view=diff&rev=395356&r1=395355&r2=395356
==============================================================================
--- team/dlee/record-controls/channels/chan_dahdi.c (original)
+++ team/dlee/record-controls/channels/chan_dahdi.c Wed Jul 24 20:10:12 2013
@@ -62,6 +62,7 @@
#else
#include <sys/signal.h>
#endif
+#include <sys/stat.h>
#include <math.h>
#include "sig_analog.h"
@@ -1744,7 +1745,7 @@
if (bridged && ast_channel_tech(bridged) == &dahdi_tech) {
struct dahdi_pvt *p = ast_channel_tech_pvt(bridged);
- if (analog_lib_handles(p->sig, p->radio, p->oprmode)) {
+ if (dahdi_analog_lib_handles(p->sig, p->radio, p->oprmode)) {
return p->sig_pvt;
}
}
@@ -2429,9 +2430,9 @@
struct dahdi_pvt *p = pvt;
if (enable)
- dahdi_enable_ec(p);
+ dahdi_ec_enable(p);
else
- dahdi_disable_ec(p);
+ dahdi_ec_disable(p);
return 0;
}
@@ -3578,7 +3579,7 @@
struct ast_callid *callid = NULL;
int callid_created = ast_callid_threadstorage_auto(&callid);
p = openr2_chan_get_client_data(r2chan);
- dahdi_enable_ec(p);
+ dahdi_ec_enable(p);
p->mfcr2_call_accepted = 1;
/* if it's an incoming call ... */
if (OR2_DIR_BACKWARD == openr2_chan_get_direction(r2chan)) {
@@ -4364,7 +4365,7 @@
return 0;
}
-void update_conf(struct dahdi_pvt *p)
+void dahdi_conf_update(struct dahdi_pvt *p)
{
int needconf = 0;
int x;
@@ -4419,7 +4420,7 @@
ast_debug(1, "Updated conferencing on %d, with %d conference users\n", p->channel, needconf);
}
-void dahdi_enable_ec(struct dahdi_pvt *p)
+void dahdi_ec_enable(struct dahdi_pvt *p)
{
int res;
if (!p)
@@ -4491,7 +4492,7 @@
}
}
-void dahdi_disable_ec(struct dahdi_pvt *p)
+void dahdi_ec_disable(struct dahdi_pvt *p)
{
int res;
@@ -4993,7 +4994,7 @@
#endif /* defined(HAVE_SS7) */
/* If this is analog signalling we can exit here */
- if (analog_lib_handles(p->sig, p->radio, p->oprmode)) {
+ if (dahdi_analog_lib_handles(p->sig, p->radio, p->oprmode)) {
p->callwaitrings = 0;
res = analog_call(p->sig_pvt, ast, rdest, timeout);
ast_mutex_unlock(&p->lock);
@@ -5344,7 +5345,7 @@
}
if (p->sig_pvt) {
- if (analog_lib_handles(p->sig, 0, 0)) {
+ if (dahdi_analog_lib_handles(p->sig, 0, 0)) {
analog_delete(p->sig_pvt);
}
switch (p->sig) {
@@ -5747,7 +5748,7 @@
ast_mutex_lock(&p->lock);
p->exten[0] = '\0';
- if (analog_lib_handles(p->sig, p->radio, p->oprmode)) {
+ if (dahdi_analog_lib_handles(p->sig, p->radio, p->oprmode)) {
dahdi_confmute(p, 0);
restore_gains(p);
p->ignoredtmf = 0;
@@ -5805,14 +5806,14 @@
sig_pri_hangup(p->sig_pvt, ast);
tone_zone_play_tone(p->subs[SUB_REAL].dfd, -1);
- dahdi_disable_ec(p);
+ dahdi_ec_disable(p);
x = 0;
ast_channel_setoption(ast, AST_OPTION_TDD, &x, sizeof(char), 0);
p->didtdd = 0;/* Probably not used in this mode. Reset anyway. */
p->rdnis[0] = '\0';
- update_conf(p);
+ dahdi_conf_update(p);
reset_conf(p);
/* Restore data mode */
@@ -5867,13 +5868,13 @@
sig_ss7_hangup(p->sig_pvt, ast);
tone_zone_play_tone(p->subs[SUB_REAL].dfd, -1);
- dahdi_disable_ec(p);
+ dahdi_ec_disable(p);
x = 0;
ast_channel_setoption(ast, AST_OPTION_TDD, &x, sizeof(char), 0);
p->didtdd = 0;/* Probably not used in this mode. Reset anyway. */
- update_conf(p);
+ dahdi_conf_update(p);
reset_conf(p);
/* Restore data mode */
@@ -6094,7 +6095,7 @@
break;
}
if (p->sig)
- dahdi_disable_ec(p);
+ dahdi_ec_disable(p);
x = 0;
ast_channel_setoption(ast,AST_OPTION_TONE_VERIFY,&x,sizeof(char),0);
ast_channel_setoption(ast,AST_OPTION_TDD,&x,sizeof(char),0);
@@ -6105,7 +6106,7 @@
p->waitingfordt.tv_sec = 0;
p->dialing = 0;
p->rdnis[0] = '\0';
- update_conf(p);
+ dahdi_conf_update(p);
reset_conf(p);
/* Restore data mode */
switch (p->sig) {
@@ -6163,7 +6164,7 @@
return 0;
}
- if (analog_lib_handles(p->sig, p->radio, p->oprmode)) {
+ if (dahdi_analog_lib_handles(p->sig, p->radio, p->oprmode)) {
res = analog_answer(p->sig_pvt, ast);
ast_mutex_unlock(&p->lock);
return res;
@@ -6211,7 +6212,7 @@
return res;
}
-void disable_dtmf_detect(struct dahdi_pvt *p)
+void dahdi_dtmf_detect_disable(struct dahdi_pvt *p)
{
int val = 0;
@@ -6225,7 +6226,7 @@
}
}
-void enable_dtmf_detect(struct dahdi_pvt *p)
+void dahdi_dtmf_detect_enable(struct dahdi_pvt *p)
{
int val = DAHDI_TONEDETECT_ON | DAHDI_TONEDETECT_MUTE;
@@ -6350,7 +6351,7 @@
}
ast_debug(1, "Set option TDD MODE, value: %s(%d) on %s\n",
(*cp == 2) ? "MATE" : "ON", (int) *cp, ast_channel_name(chan));
- dahdi_disable_ec(p);
+ dahdi_ec_disable(p);
/* otherwise, turn it on */
if (!p->didtdd) { /* if havent done it yet */
unsigned char mybuf[41000];/*! \todo XXX This is an abuse of the stack!! */
@@ -6432,7 +6433,7 @@
if (!*cp) {
ast_debug(1, "Set option AUDIO MODE, value: OFF(0) on %s\n", ast_channel_name(chan));
x = 0;
- dahdi_disable_ec(p);
+ dahdi_ec_disable(p);
} else {
ast_debug(1, "Set option AUDIO MODE, value: ON(1) on %s\n", ast_channel_name(chan));
x = 1;
@@ -6467,19 +6468,19 @@
cp = (char *) data;
if (*cp) {
ast_debug(1, "Enabling echo cancellation on %s\n", ast_channel_name(chan));
- dahdi_enable_ec(p);
+ dahdi_ec_enable(p);
} else {
ast_debug(1, "Disabling echo cancellation on %s\n", ast_channel_name(chan));
- dahdi_disable_ec(p);
+ dahdi_ec_disable(p);
}
break;
case AST_OPTION_DIGIT_DETECT:
cp = (char *) data;
ast_debug(1, "%sabling digit detection on %s\n", *cp ? "En" : "Dis", ast_channel_name(chan));
if (*cp) {
- enable_dtmf_detect(p);
+ dahdi_dtmf_detect_enable(p);
} else {
- disable_dtmf_detect(p);
+ dahdi_dtmf_detect_disable(p);
}
break;
case AST_OPTION_FAX_DETECT:
@@ -6674,11 +6675,11 @@
} else if (!strcasecmp(data, "echocan_mode")) {
if (!strcasecmp(value, "on")) {
ast_mutex_lock(&p->lock);
- dahdi_enable_ec(p);
+ dahdi_ec_enable(p);
ast_mutex_unlock(&p->lock);
} else if (!strcasecmp(value, "off")) {
ast_mutex_lock(&p->lock);
- dahdi_disable_ec(p);
+ dahdi_ec_disable(p);
ast_mutex_unlock(&p->lock);
#ifdef HAVE_DAHDI_ECHOCANCEL_FAX_MODE
} else if (!strcasecmp(value, "fax")) {
@@ -6686,7 +6687,7 @@
ast_mutex_lock(&p->lock);
if (!p->echocanon) {
- dahdi_enable_ec(p);
+ dahdi_ec_enable(p);
}
if (ioctl(p->subs[SUB_REAL].dfd, DAHDI_ECHOCANCEL_FAX_MODE, &blah)) {
ast_log(LOG_WARNING, "Unable to place echocan into fax mode on channel %d: %s\n", p->channel, strerror(errno));
@@ -6697,7 +6698,7 @@
ast_mutex_lock(&p->lock);
if (!p->echocanon) {
- dahdi_enable_ec(p);
+ dahdi_ec_enable(p);
}
if (ioctl(p->subs[SUB_REAL].dfd, DAHDI_ECHOCANCEL_FAX_MODE, &blah)) {
ast_log(LOG_WARNING, "Unable to place echocan into voice mode on channel %d: %s\n", p->channel, strerror(errno));
@@ -6715,7 +6716,7 @@
return res;
}
-void dahdi_unlink(struct dahdi_pvt *slave, struct dahdi_pvt *master, int needlock)
+void dahdi_master_slave_unlink(struct dahdi_pvt *slave, struct dahdi_pvt *master, int needlock)
{
/* Unlink a specific slave or all slaves/masters from a given master */
int x;
@@ -6763,7 +6764,7 @@
}
master->master = NULL;
}
- update_conf(master);
+ dahdi_conf_update(master);
if (needlock) {
if (slave)
ast_mutex_unlock(&slave->lock);
@@ -6771,7 +6772,7 @@
}
}
-void dahdi_link(struct dahdi_pvt *slave, struct dahdi_pvt *master)
+void dahdi_master_slave_link(struct dahdi_pvt *slave, struct dahdi_pvt *master)
{
int x;
if (!slave || !master) {
@@ -6809,12 +6810,12 @@
for (x = 0; x < 3; x++) {
if (p->subs[x].owner == oldchan) {
if (!x) {
- dahdi_unlink(NULL, p, 0);
+ dahdi_master_slave_unlink(NULL, p, 0);
}
p->subs[x].owner = newchan;
}
}
- if (analog_lib_handles(p->sig, p->radio, p->oprmode)) {
+ if (dahdi_analog_lib_handles(p->sig, p->radio, p->oprmode)) {
analog_fixup(oldchan, newchan, p->sig_pvt);
#if defined(HAVE_PRI)
} else if (dahdi_sig_pri_lib_handles(p->sig)) {
@@ -6825,7 +6826,7 @@
sig_ss7_fixup(oldchan, newchan, p->sig_pvt);
#endif /* defined(HAVE_SS7) */
}
- update_conf(p);
+ dahdi_conf_update(p);
ast_mutex_unlock(&p->lock);
@@ -7268,7 +7269,7 @@
return NULL;
}
if (!x) { /* if not still dialing in driver */
- dahdi_enable_ec(p);
+ dahdi_ec_enable(p);
if (p->echobreak) {
dahdi_train_ec(p);
ast_copy_string(p->dop.dialstr, p->echorest, sizeof(p->dop.dialstr));
@@ -7463,7 +7464,7 @@
}
/* Fall through */
default:
- dahdi_disable_ec(p);
+ dahdi_ec_disable(p);
return NULL;
}
break;
@@ -7518,7 +7519,7 @@
case SIG_FXOKS:
switch (ast_channel_state(ast)) {
case AST_STATE_RINGING:
- dahdi_enable_ec(p);
+ dahdi_ec_enable(p);
dahdi_train_ec(p);
p->subs[idx].f.frametype = AST_FRAME_CONTROL;
p->subs[idx].f.subclass.integer = AST_CONTROL_ANSWER;
@@ -7786,7 +7787,7 @@
/* Swap things around between the three-way and real call */
swap_subs(p, SUB_THREEWAY, SUB_REAL);
/* Disable echo canceller for better dialing */
- dahdi_disable_ec(p);
+ dahdi_ec_disable(p);
res = tone_zone_play_tone(p->subs[SUB_REAL].dfd, DAHDI_TONE_DIALRECALL);
if (res)
ast_log(LOG_WARNING, "Unable to start dial recall tone on channel %d\n", p->channel);
@@ -7796,7 +7797,7 @@
} else if (ast_pthread_create_detached(&threadid, NULL, analog_ss_thread, chan)) {
ast_log(LOG_WARNING, "Unable to start simple switch on channel %d\n", p->channel);
res = tone_zone_play_tone(p->subs[SUB_REAL].dfd, DAHDI_TONE_CONGESTION);
- dahdi_enable_ec(p);
+ dahdi_ec_enable(p);
ast_hangup(chan);
} else {
ast_verb(3, "Started three way call on channel %d\n", p->channel);
@@ -7853,12 +7854,12 @@
ast_queue_unhold(p->subs[SUB_REAL].owner);
}
p->subs[SUB_REAL].needunhold = 1;
- dahdi_enable_ec(p);
+ dahdi_ec_enable(p);
}
}
}
winkflashdone:
- update_conf(p);
+ dahdi_conf_update(p);
break;
case SIG_EM:
case SIG_EM_E1:
@@ -8051,7 +8052,7 @@
}
switch (res) {
case DAHDI_EVENT_ONHOOK:
- dahdi_disable_ec(p);
+ dahdi_ec_disable(p);
if (p->owner) {
ast_verb(3, "Channel %s still has call, ringing phone\n", ast_channel_name(p->owner));
dahdi_ring_phone(p);
@@ -8060,10 +8061,10 @@
p->cid_suppress_expire = 0;
} else
ast_log(LOG_WARNING, "Absorbed on hook, but nobody is left!?!?\n");
- update_conf(p);
+ dahdi_conf_update(p);
break;
case DAHDI_EVENT_RINGOFFHOOK:
- dahdi_enable_ec(p);
+ dahdi_ec_enable(p);
dahdi_set_hook(p->subs[SUB_REAL].dfd, DAHDI_OFFHOOK);
if (p->owner && (ast_channel_state(p->owner) == AST_STATE_RINGING)) {
p->subs[SUB_REAL].needanswer = 1;
@@ -8094,7 +8095,7 @@
p->subs[SUB_REAL].needunhold = 1;
} else
ast_log(LOG_WARNING, "Absorbed on hook, but nobody is left!?!?\n");
- update_conf(p);
+ dahdi_conf_update(p);
break;
default:
ast_log(LOG_WARNING, "Don't know how to absorb event %s\n", event2str(res));
@@ -8132,7 +8133,7 @@
struct dahdi_pvt *p = ast_channel_tech_pvt(ast);
struct ast_frame *f;
ast_mutex_lock(&p->lock);
- if (analog_lib_handles(p->sig, p->radio, p->oprmode)) {
+ if (dahdi_analog_lib_handles(p->sig, p->radio, p->oprmode)) {
struct analog_pvt *analog_p = p->sig_pvt;
f = analog_exception(analog_p, ast);
} else {
@@ -8329,7 +8330,7 @@
* if this channel owns the private.
*/
if (p->fake_event && p->owner == ast) {
- if (analog_lib_handles(p->sig, p->radio, p->oprmode)) {
+ if (dahdi_analog_lib_handles(p->sig, p->radio, p->oprmode)) {
struct analog_pvt *analog_p = p->sig_pvt;
f = analog_exception(analog_p, ast);
@@ -8373,7 +8374,7 @@
ast_mutex_unlock(&p->lock);
return &p->subs[idx].f;
} else if (errno == ELAST) {
- if (analog_lib_handles(p->sig, p->radio, p->oprmode)) {
+ if (dahdi_analog_lib_handles(p->sig, p->radio, p->oprmode)) {
struct analog_pvt *analog_p = p->sig_pvt;
f = analog_exception(analog_p, ast);
} else {
@@ -8387,7 +8388,7 @@
}
if (res != (p->subs[idx].linear ? READ_SIZE * 2 : READ_SIZE)) {
ast_debug(1, "Short read (%d/%d), must be an event...\n", res, p->subs[idx].linear ? READ_SIZE * 2 : READ_SIZE);
- if (analog_lib_handles(p->sig, p->radio, p->oprmode)) {
+ if (dahdi_analog_lib_handles(p->sig, p->radio, p->oprmode)) {
struct analog_pvt *analog_p = p->sig_pvt;
f = analog_exception(analog_p, ast);
} else {
@@ -8565,7 +8566,7 @@
switch (f->frametype) {
case AST_FRAME_DTMF_BEGIN:
case AST_FRAME_DTMF_END:
- if (analog_lib_handles(p->sig, p->radio, p->oprmode)) {
+ if (dahdi_analog_lib_handles(p->sig, p->radio, p->oprmode)) {
analog_handle_dtmf(p->sig_pvt, ast, idx, &f);
} else {
dahdi_handle_dtmf(ast, idx, &f);
@@ -9013,7 +9014,7 @@
ast_channel_amaflags_set(tmp, i->amaflags);
i->subs[idx].owner = tmp;
ast_channel_context_set(tmp, i->context);
- if (!analog_lib_handles(i->sig, i->radio, i->oprmode)) {
+ if (!dahdi_analog_lib_handles(i->sig, i->radio, i->oprmode)) {
ast_channel_call_forward_set(tmp, i->call_forward);
}
/* If we've been told "no ADSI" then enforce it */
@@ -9157,7 +9158,7 @@
*/
static int dahdi_dnd(struct dahdi_pvt *dahdichan, int flag)
{
- if (analog_lib_handles(dahdichan->sig, dahdichan->radio, dahdichan->oprmode)) {
+ if (dahdi_analog_lib_handles(dahdichan->sig, dahdichan->radio, dahdichan->oprmode)) {
return analog_dnd(dahdichan->sig_pvt, flag);
}
@@ -9494,7 +9495,7 @@
goto quit;
}
}
- dahdi_enable_ec(p);
+ dahdi_ec_enable(p);
if (NEED_MFDETECT(p)) {
if (p->dsp) {
if (!p->hardwaredtmf)
@@ -9593,7 +9594,7 @@
ast_set_callerid(chan, NULL, p->cid_name, NULL);
}
ast_setstate(chan, AST_STATE_RING);
- dahdi_enable_ec(p);
+ dahdi_ec_enable(p);
res = ast_pbx_run(chan);
if (res) {
ast_log(LOG_WARNING, "PBX exited non-zero\n");
@@ -9640,7 +9641,7 @@
swap_subs(p, SUB_CALLWAIT, SUB_THREEWAY);
unalloc_sub(p, SUB_THREEWAY);
}
- dahdi_enable_ec(p);
+ dahdi_ec_enable(p);
if (ast_pickup_call(chan)) {
ast_debug(1, "No call pickup possible...\n");
res = tone_zone_play_tone(p->subs[idx].dfd, DAHDI_TONE_CONGESTION);
@@ -10424,7 +10425,7 @@
case DAHDI_EVENT_BITSCHANGED:
break;
case DAHDI_EVENT_NOALARM:
- if (analog_lib_handles(mtd->pvt->sig, mtd->pvt->radio, mtd->pvt->oprmode)) {
+ if (dahdi_analog_lib_handles(mtd->pvt->sig, mtd->pvt->radio, mtd->pvt->oprmode)) {
struct analog_pvt *analog_p = mtd->pvt->sig_pvt;
analog_p->inalarm = 0;
@@ -10433,7 +10434,7 @@
handle_clear_alarms(mtd->pvt);
break;
case DAHDI_EVENT_ALARM:
- if (analog_lib_handles(mtd->pvt->sig, mtd->pvt->radio, mtd->pvt->oprmode)) {
+ if (dahdi_analog_lib_handles(mtd->pvt->sig, mtd->pvt->radio, mtd->pvt->oprmode)) {
struct analog_pvt *analog_p = mtd->pvt->sig_pvt;
analog_p->inalarm = 1;
@@ -10453,7 +10454,7 @@
if ((chan = dahdi_new(mtd->pvt, AST_STATE_RING, 0, SUB_REAL, 0, NULL, callid))) {
int result;
- if (analog_lib_handles(mtd->pvt->sig, mtd->pvt->radio, mtd->pvt->oprmode)) {
+ if (dahdi_analog_lib_handles(mtd->pvt->sig, mtd->pvt->radio, mtd->pvt->oprmode)) {
result = analog_ss_thread_start(mtd->pvt->sig_pvt, chan);
} else {
result = ast_pthread_create_detached(&threadid, NULL, analog_ss_thread, chan);
@@ -10780,7 +10781,7 @@
restore_conference(i);
if (i->immediate) {
- dahdi_enable_ec(i);
+ dahdi_ec_enable(i);
/* The channel is immediately up. Start right away */
res = tone_zone_play_tone(i->subs[SUB_REAL].dfd, DAHDI_TONE_RINGTONE);
chan = dahdi_new(i, AST_STATE_RING, 1, SUB_REAL, 0, NULL, callid);
@@ -10929,7 +10930,7 @@
case SIG_FXSGS:
case SIG_FXSKS:
case SIG_FXOKS:
- dahdi_disable_ec(i);
+ dahdi_ec_disable(i);
/* Diddle the battery for the zhone */
#ifdef ZHONE_HACK
dahdi_set_hook(i->subs[SUB_REAL].dfd, DAHDI_OFFHOOK);
@@ -10940,7 +10941,7 @@
break;
case SIG_SS7:
case SIG_PRI_LIB_HANDLE_CASES:
- dahdi_disable_ec(i);
+ dahdi_ec_disable(i);
res = tone_zone_play_tone(i->subs[SUB_REAL].dfd, -1);
break;
default:
@@ -11048,7 +11049,7 @@
for (i = iflist; i; i = i->next) {
ast_mutex_lock(&i->lock);
if (pfds && (i->subs[SUB_REAL].dfd > -1) && i->sig && (!i->radio) && !(i->sig & SIG_MFCR2)) {
- if (analog_lib_handles(i->sig, i->radio, i->oprmode)) {
+ if (dahdi_analog_lib_handles(i->sig, i->radio, i->oprmode)) {
struct analog_pvt *p = i->sig_pvt;
if (!p) {
@@ -11162,7 +11163,7 @@
ast_debug(1, "Monitor doohicky got event %s on radio channel %d\n", event2str(res), i->channel);
/* Don't hold iflock while handling init events */
ast_mutex_unlock(&iflock);
- if (analog_lib_handles(i->sig, i->radio, i->oprmode))
+ if (dahdi_analog_lib_handles(i->sig, i->radio, i->oprmode))
doomed = (struct dahdi_pvt *) analog_handle_init_event(i->sig_pvt, dahdievent_to_analogevent(res));
else
doomed = handle_init_event(i, res);
@@ -11228,7 +11229,7 @@
pthread_t threadid;
struct ast_channel *chan;
ast_mutex_unlock(&iflock);
- if (analog_lib_handles(i->sig, i->radio, i->oprmode)) {
+ if (dahdi_analog_lib_handles(i->sig, i->radio, i->oprmode)) {
/* just in case this event changes or somehow destroys a channel, set doomed here too */
doomed = analog_handle_init_event(i->sig_pvt, ANALOG_EVENT_DTMFCID);
i->dtmfcid_holdoff_state = 1;
@@ -11273,7 +11274,7 @@
/* Don't hold iflock while handling init events */
ast_mutex_unlock(&iflock);
if (0 == i->mwisendactive || 0 == mwi_send_process_event(i, res)) {
- if (analog_lib_handles(i->sig, i->radio, i->oprmode))
+ if (dahdi_analog_lib_handles(i->sig, i->radio, i->oprmode))
doomed = (struct dahdi_pvt *) analog_handle_init_event(i->sig_pvt, dahdievent_to_analogevent(res));
else
doomed = handle_init_event(i, res);
@@ -11742,7 +11743,7 @@
tmp->sig = chan_sig;
tmp->outsigmod = conf->chan.outsigmod;
- if (analog_lib_handles(chan_sig, tmp->radio, tmp->oprmode)) {
+ if (dahdi_analog_lib_handles(chan_sig, tmp->radio, tmp->oprmode)) {
analog_p = analog_new(dahdisig_to_analogsig(chan_sig), tmp);
if (!analog_p) {
destroy_dahdi_pvt(tmp);
@@ -12256,7 +12257,7 @@
ast_copy_string(tmp->description, conf->chan.description, sizeof(tmp->description));
ast_copy_string(tmp->parkinglot, conf->chan.parkinglot, sizeof(tmp->parkinglot));
tmp->cid_ton = 0;
- if (analog_lib_handles(tmp->sig, tmp->radio, tmp->oprmode)) {
+ if (dahdi_analog_lib_handles(tmp->sig, tmp->radio, tmp->oprmode)) {
ast_copy_string(tmp->cid_num, conf->chan.cid_num, sizeof(tmp->cid_num));
ast_copy_string(tmp->cid_name, conf->chan.cid_name, sizeof(tmp->cid_name));
} else {
@@ -12322,7 +12323,7 @@
set_actual_gain(tmp->subs[SUB_REAL].dfd, tmp->rxgain, tmp->txgain, tmp->rxdrc, tmp->txdrc, tmp->law);
if (tmp->dsp)
ast_dsp_set_digitmode(tmp->dsp, DSP_DIGITMODE_DTMF | tmp->dtmfrelax);
- update_conf(tmp);
+ dahdi_conf_update(tmp);
if (!here) {
switch (chan_sig) {
case SIG_PRI_LIB_HANDLE_CASES:
@@ -12582,7 +12583,7 @@
if (p->inalarm)
return 0;
- if (analog_lib_handles(p->sig, p->radio, p->oprmode))
+ if (dahdi_analog_lib_handles(p->sig, p->radio, p->oprmode))
return analog_available(p->sig_pvt);
switch (p->sig) {
@@ -13088,7 +13089,7 @@
}
p->outgoing = 1;
- if (analog_lib_handles(p->sig, p->radio, p->oprmode)) {
+ if (dahdi_analog_lib_handles(p->sig, p->radio, p->oprmode)) {
tmp = analog_request(p->sig_pvt, &callwait, requestor);
#ifdef HAVE_PRI
} else if (dahdi_sig_pri_lib_handles(p->sig)) {
@@ -15432,7 +15433,7 @@
astman_send_error(s, m, "No such channel");
return 0;
}
- if (!analog_lib_handles(p->sig, 0, 0)) {
+ if (!dahdi_analog_lib_handles(p->sig, 0, 0)) {
astman_send_error(s, m, "Channel signaling is not analog");
return 0;
}
@@ -15455,7 +15456,7 @@
astman_send_error(s, m, "No such channel");
return 0;
}
- if (!analog_lib_handles(p->sig, 0, 0)) {
+ if (!dahdi_analog_lib_handles(p->sig, 0, 0)) {
astman_send_error(s, m, "Channel signaling is not analog");
return 0;
}
Modified: team/dlee/record-controls/channels/chan_dahdi.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/record-controls/channels/chan_dahdi.h?view=diff&rev=395356&r1=395355&r2=395356
==============================================================================
--- team/dlee/record-controls/channels/chan_dahdi.h (original)
+++ team/dlee/record-controls/channels/chan_dahdi.h Wed Jul 24 20:10:12 2013
@@ -745,7 +745,7 @@
return handles;
}
-static inline int analog_lib_handles(int signalling, int radio, int oprmode)
+static inline int dahdi_analog_lib_handles(int signalling, int radio, int oprmode)
{
switch (signalling) {
case SIG_FXOLS:
@@ -789,15 +789,15 @@
#define dahdi_get_index(ast, p, nullok) _dahdi_get_index(ast, p, nullok, __PRETTY_FUNCTION__, __LINE__)
int _dahdi_get_index(struct ast_channel *ast, struct dahdi_pvt *p, int nullok, const char *fname, unsigned long line);
-void disable_dtmf_detect(struct dahdi_pvt *p);
-void enable_dtmf_detect(struct dahdi_pvt *p);
-
-void dahdi_enable_ec(struct dahdi_pvt *p);
-void dahdi_disable_ec(struct dahdi_pvt *p);
-
-void update_conf(struct dahdi_pvt *p);
-void dahdi_link(struct dahdi_pvt *slave, struct dahdi_pvt *master);
-void dahdi_unlink(struct dahdi_pvt *slave, struct dahdi_pvt *master, int needlock);
+void dahdi_dtmf_detect_disable(struct dahdi_pvt *p);
+void dahdi_dtmf_detect_enable(struct dahdi_pvt *p);
+
+void dahdi_ec_enable(struct dahdi_pvt *p);
+void dahdi_ec_disable(struct dahdi_pvt *p);
+
+void dahdi_conf_update(struct dahdi_pvt *p);
+void dahdi_master_slave_link(struct dahdi_pvt *slave, struct dahdi_pvt *master);
+void dahdi_master_slave_unlink(struct dahdi_pvt *slave, struct dahdi_pvt *master, int needlock);
/* ------------------------------------------------------------------- */
Modified: team/dlee/record-controls/channels/chan_gulp.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/record-controls/channels/chan_gulp.c?view=diff&rev=395356&r1=395355&r2=395356
==============================================================================
--- team/dlee/record-controls/channels/chan_gulp.c (original)
+++ team/dlee/record-controls/channels/chan_gulp.c Wed Jul 24 20:10:12 2013
@@ -1510,7 +1510,7 @@
}
clear_session_and_channel(session, ast, pvt);
- ao2_cleanup(pvt);
+ ao2_cleanup(channel);
ao2_cleanup(h_data);
return 0;
@@ -1540,7 +1540,7 @@
* to be able to send our SIP request/response
*/
clear_session_and_channel(channel->session, ast, pvt);
- ao2_cleanup(pvt);
+ ao2_cleanup(channel);
ao2_cleanup(h_data);
return -1;
@@ -1604,7 +1604,7 @@
static struct ast_channel *gulp_request(const char *type, struct ast_format_cap *cap, const struct ast_channel *requestor, const char *data, int *cause)
{
struct request_data req_data;
- struct ast_sip_session *session;
+ RAII_VAR(struct ast_sip_session *, session, NULL, ao2_cleanup);
req_data.caps = cap;
req_data.dest = data;
Modified: team/dlee/record-controls/channels/chan_mgcp.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/record-controls/channels/chan_mgcp.c?view=diff&rev=395356&r1=395355&r2=395356
==============================================================================
--- team/dlee/record-controls/channels/chan_mgcp.c (original)
+++ team/dlee/record-controls/channels/chan_mgcp.c Wed Jul 24 20:10:12 2013
@@ -3049,7 +3049,6 @@
p->hidecallerid ? "" : p->cid_name,
ast_channel_caller(chan)->ani.number.valid ? NULL : p->cid_num);
ast_setstate(chan, AST_STATE_RING);
- /*dahdi_enable_ec(p);*/
if (p->dtmfmode & MGCP_DTMF_HYBRID) {
p->dtmfmode |= MGCP_DTMF_INBAND;
ast_indicate(chan, -1);
Modified: team/dlee/record-controls/channels/dahdi/bridge_native_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/record-controls/channels/dahdi/bridge_native_dahdi.c?view=diff&rev=395356&r1=395355&r2=395356
==============================================================================
--- team/dlee/record-controls/channels/dahdi/bridge_native_dahdi.c (original)
+++ team/dlee/record-controls/channels/dahdi/bridge_native_dahdi.c Wed Jul 24 20:10:12 2013
@@ -156,16 +156,16 @@
ast_mutex_lock(&chan_tech_pvt->pvt->lock);
if (chan_tech_pvt->pvt == ast_channel_tech_pvt(cur->chan)) {
- dahdi_enable_ec(chan_tech_pvt->pvt);
+ dahdi_ec_enable(chan_tech_pvt->pvt);
}
if (chan_tech_pvt->index == SUB_REAL) {
- enable_dtmf_detect(chan_tech_pvt->pvt);
+ dahdi_dtmf_detect_enable(chan_tech_pvt->pvt);
}
[... 5387 lines stripped ...]
More information about the asterisk-commits
mailing list