[asterisk-commits] russell: branch russell/sla_updates r57315 -
/team/russell/sla_updates/apps/
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Thu Mar 1 15:05:17 MST 2007
Author: russell
Date: Thu Mar 1 16:05:17 2007
New Revision: 57315
URL: http://svn.digium.com/view/asterisk?view=rev&rev=57315
Log:
Fix a couple of bugs found when testing IP trunk support
Modified:
team/russell/sla_updates/apps/app_meetme.c
Modified: team/russell/sla_updates/apps/app_meetme.c
URL: http://svn.digium.com/view/asterisk/team/russell/sla_updates/apps/app_meetme.c?view=diff&rev=57315&r1=57314&r2=57315
==============================================================================
--- team/russell/sla_updates/apps/app_meetme.c (original)
+++ team/russell/sla_updates/apps/app_meetme.c Thu Mar 1 16:05:17 2007
@@ -353,7 +353,6 @@
time_t jointime; /*!< Time the user joined the conference */
struct volume talk;
struct volume listen;
- AST_LIST_HEAD_NOLOCK(, ast_frame) frame_q;
AST_LIST_ENTRY(ast_conf_user) list;
};
@@ -1240,17 +1239,15 @@
}
static void conf_queue_dtmf(const struct ast_conference *conf,
- const struct ast_conf_user *sender, const struct ast_frame *_f)
-{
- struct ast_frame *f;
+ const struct ast_conf_user *sender, struct ast_frame *f)
+{
struct ast_conf_user *user;
AST_LIST_TRAVERSE(&conf->userlist, user, list) {
if (user == sender)
continue;
- if (!(f = ast_frdup(_f)))
- return;
- AST_LIST_INSERT_TAIL(&user->frame_q, f, frame_list);
+ if (ast_write(user->chan, f) < 0)
+ ast_log(LOG_WARNING, "Error writing frame to channel %s\n", user->chan->name);
}
}
@@ -1869,14 +1866,6 @@
f = ast_read(c);
if (!f)
break;
- if (!AST_LIST_EMPTY(&user->frame_q)) {
- struct ast_frame *f;
- f = AST_LIST_REMOVE_HEAD(&user->frame_q, frame_list);
- if (ast_write(chan, f) < 0) {
- ast_log(LOG_WARNING, "Error writing frame to channel!\n");
- }
- ast_frfree(f);
- }
if ((f->frametype == AST_FRAME_VOICE) && (f->subclass == AST_FORMAT_SLINEAR)) {
if (user->talk.actual)
ast_frame_adjust_volume(f, user->talk.actual);
@@ -3931,7 +3920,7 @@
}
struct dial_trunk_args {
- struct sla_trunk *trunk;
+ struct sla_trunk_ref *trunk_ref;
struct sla_station *station;
ast_mutex_t *cond_lock;
ast_cond_t *cond;
@@ -3946,7 +3935,7 @@
char conf_name[MAX_CONFNUM];
struct ast_conference *conf;
struct ast_flags conf_flags = { 0 };
- struct sla_trunk *trunk = args->trunk;
+ struct sla_trunk_ref *trunk_ref = args->trunk_ref;
if (!(dial = ast_dial_create())) {
ast_mutex_lock(args->cond_lock);
@@ -3955,7 +3944,7 @@
return NULL;
}
- tech_data = ast_strdupa(trunk->device);
+ tech_data = ast_strdupa(trunk_ref->trunk->device);
tech = strsep(&tech_data, "/");
if (ast_dial_append(dial, tech, tech_data) == -1) {
ast_mutex_lock(args->cond_lock);
@@ -3965,7 +3954,7 @@
return NULL;
}
- dial_res = ast_dial_run(dial, NULL, 1);
+ dial_res = ast_dial_run(dial, trunk_ref->chan, 1);
if (dial_res != AST_DIAL_RESULT_TRYING) {
ast_mutex_lock(args->cond_lock);
ast_cond_signal(args->cond);
@@ -3978,7 +3967,7 @@
unsigned int done = 0;
switch ((dial_res = ast_dial_state(dial))) {
case AST_DIAL_RESULT_ANSWERED:
- trunk->chan = ast_dial_answered(dial);
+ trunk_ref->trunk->chan = ast_dial_answered(dial);
case AST_DIAL_RESULT_HANGUP:
case AST_DIAL_RESULT_INVALID:
case AST_DIAL_RESULT_FAILED:
@@ -3995,7 +3984,7 @@
break;
}
- if (!trunk->chan) {
+ if (!trunk_ref->trunk->chan) {
ast_mutex_lock(args->cond_lock);
ast_cond_signal(args->cond);
ast_mutex_unlock(args->cond_lock);
@@ -4004,7 +3993,7 @@
return NULL;
}
- snprintf(conf_name, sizeof(conf_name), "SLA_%s", trunk->name);
+ snprintf(conf_name, sizeof(conf_name), "SLA_%s", trunk_ref->trunk->name);
ast_set_flag(&conf_flags,
CONFFLAG_QUIET | CONFFLAG_MARKEDEXIT | CONFFLAG_MARKEDUSER |
CONFFLAG_PASS_DTMF | CONFFLAG_SLA_TRUNK);
@@ -4015,12 +4004,12 @@
ast_mutex_unlock(args->cond_lock);
if (conf) {
- conf_run(trunk->chan, conf, conf_flags.flags, NULL);
+ conf_run(trunk_ref->trunk->chan, conf, conf_flags.flags, NULL);
dispose_conf(conf);
conf = NULL;
}
- trunk->chan = NULL;
+ trunk_ref->trunk->chan = NULL;
ast_dial_join(dial);
ast_dial_destroy(dial);
@@ -4095,13 +4084,15 @@
return 0;
}
+ trunk_ref->chan = chan;
+
if (!trunk_ref->trunk->chan) {
ast_mutex_t cond_lock;
ast_cond_t cond;
pthread_t dont_care;
pthread_attr_t attr;
struct dial_trunk_args args = {
- .trunk = trunk_ref->trunk,
+ .trunk_ref = trunk_ref,
.station = station,
.cond_lock = &cond_lock,
.cond = &cond,
@@ -4127,6 +4118,7 @@
ast_log(LOG_DEBUG, "Trunk didn't get created. chan: %lx\n", (long) trunk_ref->trunk->chan);
pbx_builtin_setvar_helper(chan, "SLASTATION_STATUS", "CONGESTION");
sla_change_trunk_state(trunk_ref->trunk, SLA_TRUNK_STATE_IDLE, ALL_TRUNK_REFS);
+ trunk_ref->chan = NULL;
return 0;
}
}
@@ -4135,7 +4127,6 @@
snprintf(conf_name, sizeof(conf_name), "SLA_%s", trunk_ref->trunk->name);
ast_set_flag(&conf_flags,
CONFFLAG_QUIET | CONFFLAG_MARKEDEXIT | CONFFLAG_PASS_DTMF | CONFFLAG_SLA_STATION);
- trunk_ref->chan = chan;
ast_answer(chan);
conf = build_conf(conf_name, "", "", 0, 0, 1);
if (conf) {
More information about the asterisk-commits
mailing list