[asterisk-commits] nadi: branch group/trunk-cm-csel-hash r47735 -
/team/group/trunk-cm-csel-hash...
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Thu Nov 16 08:15:53 MST 2006
Author: nadi
Date: Thu Nov 16 09:15:53 2006
New Revision: 47735
URL: http://svn.digium.com/view/asterisk?view=rev&rev=47735
Log:
chan_list is gone, misdn_ch is born, linked list via AST_RWLIST
Modified:
team/group/trunk-cm-csel-hash/channels/chan_misdn.c
Modified: team/group/trunk-cm-csel-hash/channels/chan_misdn.c
URL: http://svn.digium.com/view/asterisk/team/group/trunk-cm-csel-hash/channels/chan_misdn.c?view=diff&rev=47735&r1=47734&r2=47735
==============================================================================
--- team/group/trunk-cm-csel-hash/channels/chan_misdn.c (original)
+++ team/group/trunk-cm-csel-hash/channels/chan_misdn.c Thu Nov 16 09:15:53 2006
@@ -86,9 +86,7 @@
#define AST_CID_P(ast) ((ast)->cid.cid_num)
#define AST_BRIDGED_P(ast) ast_bridged_channel((ast))
-
#define MISDN_ASTERISK_TECH_PVT(ast) ((ast)->tech_pvt)
-#define MISDN_ASTERISK_PVT(ast) 1
enum asterisk_events {
AEVENT_NOTHING = EVENT_UNKNOWN + 1,
@@ -163,11 +161,10 @@
enum event_log_elements additional;
};
-struct chan_list {
- char allowed_bearers[BUFFERSIZE];
-
+struct misdn_ch {
struct statemachine *sm;
+ char allowed_bearers[BUFFERSIZE];
int need_queue_hangup;
int need_hangup;
int need_busy;
@@ -208,12 +205,12 @@
char context[BUFFERSIZE];
int dropped_frame_cnt;
int other_pid;
- struct chan_list *other_ch;
+ struct misdn_ch *other_ch;
const struct tone_zone_sound *ts;
int destroy_me;
- struct chan_list *next;
+ AST_RWLIST_ENTRY(misdn_ch) next;
};
struct allowed_bearer {
@@ -250,8 +247,7 @@
static int g_config_initialized = 0;
static int glob_channel = 0;
-static struct chan_list * cl_te = NULL;
-static ast_mutex_t cl_te_lock;
+static AST_RWLIST_HEAD_STATIC(ch_list, misdn_ch);
static char ** misdn_key_vector = NULL;
static int misdn_key_vector_size = 0;
@@ -882,7 +878,7 @@
return misdn_chan_states[state];
}
-static inline void event_info_string (char *buf, int bufsize, struct chan_list *ch, int *elems, int num)
+static inline void event_info_string (char *buf, int bufsize, struct misdn_ch *ch, int *elems, int num)
{
int first = 0;
char tmpbuf[256];
@@ -922,7 +918,7 @@
static void log_event (void *p, int direction, int state, int event)
{
- struct chan_list *ch = p;
+ struct misdn_ch *ch = p;
const struct event_log_info *info = get_event_info(event);
int elems;
char buf[1024] = "";
@@ -948,14 +944,15 @@
static int send_event (void *p, int event)
{
- struct chan_list *ch = p;
+ struct misdn_ch *ch = p;
struct misdn_bchannel *bc = ch->bc;
int re = 0;
if (event > EVENT_NOTHING && event < EVENT_UNKNOWN) {
misdn_lib_send_event(bc, event);
if (event == EVENT_HOLD_ACKNOWLEDGE) {
- /*forget the channel now*/
+ /* XXX find a better place for this */
+ /* forget the channel now */
ch->bc = NULL;
ch->hold_info.port = bc->port;
ch->hold_info.channel = bc->channel;
@@ -1063,115 +1060,140 @@
AST_HASH_DESTROY(&group_csel_hash);
}
-/* Chanlist Helpers */
-static struct chan_list * init_chan_list (int orig)
-{
- struct chan_list *cl = calloc(1, sizeof(struct chan_list));
-
- if (!cl) {
+/* misdn_ch Helper */
+static struct misdn_ch * misdn_ch_init (int orig)
+{
+ struct misdn_ch *ch = calloc(1, sizeof(struct misdn_ch));
+
+ if (!ch) {
chan_misdn_log(-1, 0, "misdn_request: malloc failed!");
return NULL;
}
- cl->sm = statemachine_create(cl, MISDN_NOTHING, misdn_state_table,
- sizeof(misdn_state_table) / sizeof(struct statemachine_transition),
- send_event,
- log_event);
- cl->orginator = orig;
- cl->need_queue_hangup = 1;
- cl->need_hangup = 1;
- cl->need_busy = 1;
- cl->overlap_dial_task = -1;
-
- return cl;
-}
-
-static void cl_queue_chan(struct chan_list **list, struct chan_list *chan)
-{
- struct chan_list *help = *list;
-
- chan_misdn_log(4, chan->bc? chan->bc->port : 0, "* Queuing chan %p\n", chan);
-
- ast_mutex_lock(&cl_te_lock);
- if (!*list) {
- *list = chan;
- } else {
- for (; help->next; help = help->next);
- help->next = chan;
- }
- chan->next = NULL;
- ast_mutex_unlock(&cl_te_lock);
-}
-
-static void cl_dequeue_chan (struct chan_list **list, struct chan_list *chan)
-{
- struct chan_list *help = *list;
-
+ ch->sm = statemachine_create(ch, MISDN_NOTHING, misdn_state_table,
+ sizeof(misdn_state_table) / sizeof(struct statemachine_transition),
+ send_event,
+ log_event);
+ ch->orginator = orig;
+ ch->need_queue_hangup = 1;
+ ch->need_hangup = 1;
+ ch->need_busy = 1;
+ ch->overlap_dial_task = -1;
+
+ return ch;
+}
+
+static void misdn_ch_queue (struct misdn_ch *chan)
+{
+ AST_RWLIST_WRLOCK(&ch_list);
+ AST_RWLIST_INSERT_TAIL(&ch_list, chan, next);
+ AST_RWLIST_UNLOCK(&ch_list);
+}
+
+static void misdn_ch_dequeue (struct misdn_ch *chan)
+{
if (chan->dsp)
ast_dsp_free(chan->dsp);
if (chan->trans)
ast_translator_free_path(chan->trans);
- ast_mutex_lock(&cl_te_lock);
- if (!help) {
- ast_mutex_unlock(&cl_te_lock);
- return;
- }
-
- if (help == chan)
- *list = help->next;
- else
- for (; help->next; help = help->next) {
- if (help->next == chan) {
- help->next = chan->next;
- break;
- }
- }
+ AST_RWLIST_WRLOCK(&ch_list);
+ AST_RWLIST_REMOVE(&ch_list, chan, next);
+ AST_RWLIST_UNLOCK(&ch_list);
+}
+
+static struct misdn_ch * misdn_ch_by_bc (struct misdn_bchannel *bc)
+{
+ struct misdn_ch *ch;
+
+ AST_RWLIST_RDLOCK(&ch_list);
+ AST_RWLIST_TRAVERSE(&ch_list, ch, next) {
+ if (ch->bc == bc)
+ break;
+ }
+ AST_RWLIST_UNLOCK(&ch_list);
+
+ if (!ch)
+ chan_misdn_log(6, bc->port, "$$$ find_chan: No channel found for oad:%s dad:%s\n", bc->oad, bc->dad);
+
+ return ch;
+}
+
+static struct misdn_ch * misdn_ch_by_pid (int pid)
+{
+ struct misdn_ch *ch;
+
+ AST_RWLIST_RDLOCK(&ch_list);
+ AST_RWLIST_TRAVERSE(&ch_list, ch, next) {
+ if (ch->bc && ch->bc->pid == pid)
+ break;
+ }
+ AST_RWLIST_UNLOCK(&ch_list);
+
+ if (!ch)
+ chan_misdn_log(6, 0, "$$$ find_chan: No channel found for pid:%d\n", pid);
+
+ return ch;
+}
+
+static struct misdn_ch * misdn_ch_by_ast (struct ast_channel *ast)
+{
+ struct misdn_ch *ch;
+
+ AST_RWLIST_RDLOCK(&ch_list);
+ AST_RWLIST_TRAVERSE(&ch_list, ch, next) {
+ if (ch->ast == ast)
+ break;
+ }
+ AST_RWLIST_UNLOCK(&ch_list);
+
+ return ch;
+}
+
+static struct misdn_ch * misdn_ch_by_ast_name (char *name)
+{
+ struct misdn_ch *ch;
+
+ AST_RWLIST_RDLOCK(&ch_list);
+ AST_RWLIST_TRAVERSE(&ch_list, ch, next) {
+ if (ch->ast && !strcmp(ch->ast->name, name))
+ break;
+ }
+ AST_RWLIST_UNLOCK(&ch_list);
+
+ return ch;
+}
+
+static struct misdn_ch * misdn_ch_holded (struct misdn_bchannel *bc)
+{
+ struct misdn_ch *ch;
+
+ AST_RWLIST_RDLOCK(&ch_list);
+ AST_RWLIST_TRAVERSE(&ch_list, ch, next) {
+ if (statemachine_get_state(ch->sm) == MISDN_HOLDED && ch->hold_info.port == bc->port)
+ break;
+ }
+ AST_RWLIST_UNLOCK(&ch_list);
+
+ if (!ch)
+ chan_misdn_log(6, bc->port, "$$$ find_chan: No channel found for oad:%s dad:%s\n", bc->oad, bc->dad);
+
+ return ch;
+}
+
+static struct misdn_ch * misdn_ch_holded_l3 (unsigned long l3_id)
+{
+ struct misdn_ch *ch;
+
+ AST_RWLIST_RDLOCK(&ch_list);
+ AST_RWLIST_TRAVERSE(&ch_list, ch, next) {
+ if (statemachine_get_state(ch->sm) == MISDN_HOLDED && ch->l3id == l3_id)
+ break;
+ }
+ AST_RWLIST_UNLOCK(&ch_list);
- ast_mutex_unlock(&cl_te_lock);
-}
-
-static struct chan_list * find_chan_by_bc (struct chan_list *list, struct misdn_bchannel *bc)
-{
- for (; list; list = list->next)
- if (list->bc == bc)
- return list;
-
- chan_misdn_log(6, bc->port, "$$$ find_chan: No channel found for oad:%s dad:%s\n", bc->oad, bc->dad);
- return NULL;
-}
-
-static struct chan_list * find_chan_by_pid (struct chan_list *list, int pid)
-{
- for (; list; list = list->next)
- if (list->bc && list->bc->pid == pid)
- return list;
-
- chan_misdn_log(6, 0, "$$$ find_chan: No channel found for pid:%d\n", pid);
- return NULL;
-}
-
-static struct chan_list * find_holded (struct chan_list *list, struct misdn_bchannel *bc)
-{
- for (; list; list = list->next) {
- chan_misdn_log(4, bc->port, "$$$ find_holded: --> holded:%d channel:%d\n",
- statemachine_get_state(list->sm) == MISDN_HOLDED, list->hold_info.channel);
- if (statemachine_get_state(list->sm) == MISDN_HOLDED && list->hold_info.port == bc->port)
- return list;
- }
-
- chan_misdn_log(6, bc->port, "$$$ find_chan: No channel found for oad:%s dad:%s\n", bc->oad, bc->dad);
- return NULL;
-}
-
-static struct chan_list * find_holded_l3 (struct chan_list *list, unsigned long l3_id, int w)
-{
- for (; list; list = list->next)
- if (statemachine_get_state(list->sm) == MISDN_HOLDED && list->l3id == l3_id)
- return list;
-
- return NULL;
+ return ch;
}
/* Jitterbuffer */
@@ -1291,7 +1313,7 @@
static int bc_jb_empty (struct misdn_bchannel *bc, char *buf, int len)
{
- struct chan_list *ch = find_chan_by_bc(cl_te, bc);
+ struct misdn_ch *ch = misdn_ch_by_bc(bc);
if (ch && ch->jb)
return misdn_jb_empty(ch->jb, buf, len);
@@ -1365,28 +1387,6 @@
};
/* Simple Helpers */
-static struct chan_list * get_chan_by_ast (struct ast_channel *ast)
-{
- struct chan_list *tmp;
-
- for (tmp = cl_te; tmp; tmp = tmp->next)
- if (tmp->ast == ast)
- return tmp;
-
- return NULL;
-}
-
-static struct chan_list * get_chan_by_ast_name (char *name)
-{
- struct chan_list *tmp;
-
- for (tmp = cl_te; tmp; tmp = tmp->next)
- if (tmp->ast && !strcmp(tmp->ast->name, name))
- return tmp;
-
- return NULL;
-}
-
static char * get_bearer_str (int cap)
{
static char unknown[] = "Unknown Bearer";
@@ -1490,9 +1490,9 @@
}
}
-static void print_bc_info (int fd, struct chan_list *help, struct misdn_bchannel *bc)
-{
- struct ast_channel *ast = help->ast;
+static void print_bc_info (int fd, struct misdn_ch *ch, struct misdn_bchannel *bc)
+{
+ struct ast_channel *ast = ch->ast;
ast_cli(fd,
"* Pid:%d Prt:%d Ch:%d Mode:%s Org:%s dad:%s oad:%s rad:%s ctx:%s state:%s\n",
@@ -1500,12 +1500,12 @@
bc->port,
bc->channel,
bc->nt ? "NT" : "TE",
- help->orginator == ORG_AST ? "*" : "I",
+ ch->orginator == ORG_AST ? "*" : "I",
ast ? ast->exten : "",
ast ? AST_CID_P(ast) : "",
bc->rad,
ast ? ast->context : "",
- get_state_string(statemachine_get_state(help->sm)));
+ get_state_string(statemachine_get_state(ch->sm)));
if (misdn_debug[bc->port] > 0)
ast_cli(fd,
@@ -1520,21 +1520,21 @@
" --> echo_cancel: %d\n"
" --> notone : rx %d tx:%d\n"
" --> bc_hold: %d\n",
- help->ast->name,
- help->l3id,
- help->addr,
+ ch->ast->name,
+ ch->l3id,
+ ch->addr,
bc->addr,
bc->l3_id,
bc->display,
bc_state2str(bc->bc_state),
get_bearer_str(bc->capability),
bc->ec_enable,
- help->norxtone,
- help->notxtone,
+ ch->norxtone,
+ ch->notxtone,
bc->holded);
}
-static void import_ch (struct ast_channel *chan, struct misdn_bchannel *bc, struct chan_list *ch)
+static void import_ch (struct ast_channel *chan, struct misdn_bchannel *bc, struct misdn_ch *ch)
{
const char *tmp;
@@ -1543,7 +1543,7 @@
ch->other_pid = atoi(tmp);
chan_misdn_log(2, bc->port, "IMPORT_PID: importing pid:%s\n", tmp);
if (ch->other_pid > 0) {
- ch->other_ch = find_chan_by_pid(cl_te, ch->other_pid);
+ ch->other_ch = misdn_ch_by_pid(ch->other_pid);
if (ch->other_ch)
ch->other_ch->other_ch = ch;
}
@@ -1659,14 +1659,14 @@
}
/* Channel Helpers */
-static int pbx_start_chan (struct chan_list *ch)
+static int pbx_start_chan (struct misdn_ch *ch)
{
int ret = ast_pbx_start(ch->ast);
ch->need_hangup = ret >= 0 ? 0 : 1;
return ret;
}
-static void export_chan (struct ast_channel *chan, struct misdn_bchannel *bc, struct chan_list *ch)
+static void export_chan (struct ast_channel *chan, struct misdn_bchannel *bc, struct misdn_ch *ch)
{
char tmp[32];
chan_misdn_log(2, bc->port, "EXPORT_PID: pid:%d\n", bc->pid);
@@ -1674,9 +1674,9 @@
pbx_builtin_setvar_helper(chan, "_MISDN_PID", tmp);
}
-static void send_digit_to_chan (struct chan_list *cl, char digit)
-{
- struct ast_channel *chan = cl->ast;
+static void send_digit_to_chan (struct misdn_ch *ch, char digit)
+{
+ struct ast_channel *chan = ch->ast;
static const char *dtmf_tones[] = {
"!941+1336/100, !0/100", /* 0 */
"!697+1209/100, !0/100", /* 1 */
@@ -1708,7 +1708,7 @@
ast_log(LOG_DEBUG, "Unable to handle DTMF tone '%c' for '%s'\n", digit, chan->name);
}
-static void send_cause_to_ast (struct ast_channel *ast, struct misdn_bchannel *bc, struct chan_list *ch)
+static void send_cause_to_ast (struct ast_channel *ast, struct misdn_bchannel *bc, struct misdn_ch *ch)
{
if (!ast) {
chan_misdn_log(2, 0, "send_cause_to_ast: No Ast\n");
@@ -1737,63 +1737,63 @@
}
}
-static int dialtone_indicate (struct chan_list *cl)
+static int dialtone_indicate (struct misdn_ch *ch)
{
const struct tone_zone_sound *ts= NULL;
int nd = 0;
- if (!cm_get_strcasecmp(misdn_cm, "yes", PORT, MCFG_NODIALTONE, cl->bc->port))
+ if (!cm_get_strcasecmp(misdn_cm, "yes", PORT, MCFG_NODIALTONE, ch->bc->port))
nd = 1;
if (nd) {
- chan_misdn_log(2, cl->bc->port, "Not sending Dialtone, because config wants it\n");
+ chan_misdn_log(2, ch->bc->port, "Not sending Dialtone, because config wants it\n");
return 0;
}
- chan_misdn_log(3, cl->bc->port, " --> Dial\n");
- ts = ast_get_indication_tone(cl->ast->zone, "dial");
- cl->ts = ts;
+ chan_misdn_log(3, ch->bc->port, " --> Dial\n");
+ ts = ast_get_indication_tone(ch->ast->zone, "dial");
+ ch->ts = ts;
if (ts) {
- cl->notxtone = 0;
- cl->norxtone = 0;
- ast_playtones_start(cl->ast, 0, ts->data, 0);
- chan_misdn_log(4, cl->bc->port, "Starting Playtones\n");
- misdn_lib_tone_generator_start(cl->bc);
+ ch->notxtone = 0;
+ ch->norxtone = 0;
+ ast_playtones_start(ch->ast, 0, ts->data, 0);
+ chan_misdn_log(4, ch->bc->port, "Starting Playtones\n");
+ misdn_lib_tone_generator_start(ch->bc);
}
return 0;
}
-static int hanguptone_indicate (struct chan_list *cl)
-{
- misdn_lib_send_tone(cl->bc, TONE_HANGUP);
+static int hanguptone_indicate (struct misdn_ch *ch)
+{
+ misdn_lib_send_tone(ch->bc, TONE_HANGUP);
return 0;
}
-static int stop_indicate (struct chan_list *cl)
-{
- chan_misdn_log(3, cl->bc->port, " --> None\n");
- misdn_lib_tone_generator_stop(cl->bc);
- ast_playtones_stop(cl->ast);
+static int stop_indicate (struct misdn_ch *ch)
+{
+ chan_misdn_log(3, ch->bc->port, " --> None\n");
+ misdn_lib_tone_generator_stop(ch->bc);
+ ast_playtones_stop(ch->ast);
return 0;
}
-static int start_bc_tones (struct chan_list *cl)
-{
- misdn_lib_tone_generator_stop(cl->bc);
- cl->notxtone = 0;
- cl->norxtone = 0;
+static int start_bc_tones (struct misdn_ch *ch)
+{
+ misdn_lib_tone_generator_stop(ch->bc);
+ ch->notxtone = 0;
+ ch->norxtone = 0;
return 0;
}
-static int stop_bc_tones (struct chan_list *cl)
-{
- cl->notxtone = 1;
- cl->norxtone = 1;
+static int stop_bc_tones (struct misdn_ch *ch)
+{
+ ch->notxtone = 1;
+ ch->norxtone = 1;
return 0;
}
-static void hangup_chan (struct chan_list *ch)
+static void hangup_chan (struct misdn_ch *ch)
{
int port;
@@ -1828,7 +1828,7 @@
}
/* Isdn asks us to release channel, pendant to misdn_hangup */
-static void release_chan (struct chan_list *ch)
+static void release_chan (struct misdn_ch *ch)
{
struct ast_channel *ast;
struct misdn_bchannel *bc = ch->bc;
@@ -1873,19 +1873,19 @@
}
}
- cl_dequeue_chan(&cl_te, ch);
+ misdn_ch_dequeue(ch);
statemachine_destroy(ch->sm);
free(ch);
}
-static void misdn_transfer_bc (struct chan_list *tmp_ch, struct chan_list *holded_chan)
-{
- chan_misdn_log(4, 0, "TRANSFERING %s to %s\n", holded_chan->ast->name, tmp_ch->ast->name);
- statemachine_set_state(tmp_ch->sm, MISDN_HOLD_DISCONNECT);
- ast_moh_stop(AST_BRIDGED_P(holded_chan->ast));
- statemachine_set_state(holded_chan->sm, MISDN_CONNECTED);
-/* misdn_lib_transfer(holded_chan->bc); */
- ast_channel_masquerade(holded_chan->ast, AST_BRIDGED_P(tmp_ch->ast));
+static void misdn_transfer_bc (struct misdn_ch *ch, struct misdn_ch *holded_ch)
+{
+ chan_misdn_log(4, 0, "TRANSFERING %s to %s\n", holded_ch->ast->name, ch->ast->name);
+ statemachine_set_state(ch->sm, MISDN_HOLD_DISCONNECT);
+ ast_moh_stop(AST_BRIDGED_P(holded_ch->ast));
+ statemachine_set_state(holded_ch->sm, MISDN_CONNECTED);
+/* misdn_lib_transfer(holded_ch->bc); */
+ ast_channel_masquerade(holded_ch->ast, AST_BRIDGED_P(ch->ast));
}
static int add_in_calls (int port)
@@ -1929,7 +1929,7 @@
{
struct timeval tv_end, tv_now;
int diff;
- struct chan_list *ch = (struct chan_list *)data;
+ struct misdn_ch *ch = (struct misdn_ch *)data;
chan_misdn_log(4, ch->bc->port, "overlap dial task, chan_state: %d\n", statemachine_get_state(ch->sm));
@@ -2017,7 +2017,7 @@
{
char *channame,
*nr;
- struct chan_list *tmp;
+ struct misdn_ch *ch;
if (argc != 5)
return RESULT_SHOWUSAGE;
@@ -2025,17 +2025,17 @@
channame = argv[3];
nr = argv[4];
ast_cli(fd, "Sending Calldeflection (%s) to %s\n", nr, channame);
- tmp = get_chan_by_ast_name(channame);
- if (!tmp) {
+ ch = misdn_ch_by_ast_name(channame);
+ if (!ch) {
ast_cli(fd, "Sending CD with nr %s to %s failed: Channel does not exist.\n", nr, channame);
} else {
if (strlen(nr) >= 15) {
ast_cli(fd, "Sending CD with nr %s to %s failed: Number too long (up to 15 digits are allowed).\n", nr, channame);
return 0;
}
- tmp->bc->fac_out.Function = Fac_CD;
- strncpy((char *)tmp->bc->fac_out.u.CDeflection.DeflectedToNumber, nr, sizeof(tmp->bc->fac_out.u.CDeflection.DeflectedToNumber));
- misdn_lib_send_event(tmp->bc, EVENT_FACILITY);
+ ch->bc->fac_out.Function = Fac_CD;
+ strncpy((char *)ch->bc->fac_out.u.CDeflection.DeflectedToNumber, nr, sizeof(ch->bc->fac_out.u.CDeflection.DeflectedToNumber));
+ misdn_lib_send_event(ch->bc, EVENT_FACILITY);
}
return 0;
@@ -2045,7 +2045,7 @@
{
char *channame,
*msg;
- struct chan_list *tmp;
+ struct misdn_ch *ch;
int i,
msglen;
@@ -2055,14 +2055,14 @@
channame = argv[3];
msg = argv[4];
ast_cli(fd, "Sending %s to %s\n", msg, channame);
- tmp = get_chan_by_ast_name(channame);
- if (!tmp) {
+ ch = misdn_ch_by_ast_name(channame);
+ if (!ch) {
ast_cli(fd, "Sending %s to %s failed Channel does not exist\n", msg, channame);
} else {
msglen = strlen(msg);
for (i = 0; i < msglen; ++i) {
ast_cli(fd, "Sending: %c\n", msg[i]);
- send_digit_to_chan(tmp, msg[i]);
+ send_digit_to_chan(ch, msg[i]);
usleep(250000);
}
}
@@ -2073,7 +2073,7 @@
static int misdn_toggle_echocancel (int fd, int argc, char *argv[])
{
char *channame;
- struct chan_list *tmp;
+ struct misdn_ch *ch;
if (argc != 4)
return RESULT_SHOWUSAGE;
@@ -2081,16 +2081,16 @@
channame = argv[3];
ast_cli(fd, "Toggling EchoCancel on %s\n", channame);
- tmp = get_chan_by_ast_name(channame);
- if (!tmp) {
+ ch = misdn_ch_by_ast_name(channame);
+ if (!ch) {
ast_cli(fd, "Toggling EchoCancel %s failed Channel does not exist\n", channame);
} else {
- tmp->toggle_ec = tmp->toggle_ec ? 0 : 1;
- if (tmp->toggle_ec) {
- config_bc_echocancel(tmp->bc);
- manager_ec_enable(tmp->bc);
+ ch->toggle_ec = ch->toggle_ec ? 0 : 1;
+ if (ch->toggle_ec) {
+ config_bc_echocancel(ch->bc);
+ manager_ec_enable(ch->bc);
} else {
- manager_ec_disable(tmp->bc);
+ manager_ec_disable(ch->bc);
}
}
@@ -2101,7 +2101,7 @@
{
char *channame,
*msg;
- struct chan_list *tmp;
+ struct misdn_ch *ch;
if (argc != 5)
return RESULT_SHOWUSAGE;
@@ -2109,10 +2109,10 @@
channame = argv[3];
msg = argv[4];
ast_cli(fd, "Sending %s to %s\n", msg, channame);
- tmp = get_chan_by_ast_name(channame);
- if (tmp && tmp->bc) {
- ast_copy_string(tmp->bc->display, msg, sizeof(tmp->bc->display));
- misdn_lib_send_event(tmp->bc, EVENT_INFORMATION);
+ ch = misdn_ch_by_ast_name(channame);
+ if (ch && ch->bc) {
+ ast_copy_string(ch->bc->display, msg, sizeof(ch->bc->display));
+ misdn_lib_send_event(ch->bc, EVENT_INFORMATION);
} else {
ast_cli(fd, "No such channel %s\n", channame);
return RESULT_FAILURE;
@@ -2135,50 +2135,44 @@
static int misdn_show_cls (int fd, int argc, char *argv[])
{
- struct misdn_bchannel *bc;
- struct ast_channel *ast;
- struct chan_list *help = cl_te;
-
- ast_cli(fd, "Chan List: %p\n", cl_te);
-
- for (; help; help = help->next) {
- bc = help->bc;
- ast = help->ast;
+ struct misdn_ch *ch;
+
+ AST_RWLIST_RDLOCK(&ch_list);
+ ast_cli(fd, "Chan List:\n");
+ AST_RWLIST_TRAVERSE(&ch_list, ch, next) {
if (misdn_debug[0] > 2)
- ast_cli(fd, "Bc:%p Ast:%p\n", bc, ast);
- if (bc) {
- print_bc_info(fd, help, bc);
+ ast_cli(fd, "Bc:%p Ast:%p\n", ch->bc, ch->ast);
+ if (ch->bc) {
+ print_bc_info(fd, ch, ch->bc);
} else {
- if (statemachine_get_state(help->sm) == MISDN_HOLDED)
+ if (statemachine_get_state(ch->sm) == MISDN_HOLDED)
chan_misdn_log(0, 0, "IT'S A HOLDED BC:\n --> l3_id: %x\n --> dad:%s oad:%s\n --> hold_port: %d\n --> hold_channel: %d\n",
- help->l3id, ast->exten, AST_CID_P(ast), help->hold_info.port, help->hold_info.channel);
+ ch->l3id, ch->ast->exten, AST_CID_P(ch->ast), ch->hold_info.port, ch->hold_info.channel);
else
- ast_cli(fd,"* Channel in unknown STATE !!! Exten:%s, Callerid:%s\n", ast->exten, AST_CID_P(ast));
- }
- }
+ ast_cli(fd,"* Channel in unknown STATE !!! Exten:%s, Callerid:%s\n", ch->ast->exten, AST_CID_P(ch->ast));
+ }
+ }
+ AST_RWLIST_UNLOCK(&ch_list);
return 0;
}
static int misdn_show_cl (int fd, int argc, char *argv[])
{
- struct misdn_bchannel *bc;
- struct ast_channel *ast;
- struct chan_list *help = cl_te;
+ struct misdn_ch *ch;
if (argc != 4)
return RESULT_SHOWUSAGE;
- for (; help; help = help->next) {
- bc = help->bc;
- ast = help->ast;
- if (bc && ast) {
- if (!strcasecmp(ast->name, argv[3])) {
- print_bc_info(fd, help, bc);
- break;
- }
- }
- }
+ AST_RWLIST_RDLOCK(&ch_list);
+ ast_cli(fd, "Chan List:\n");
+ AST_RWLIST_TRAVERSE(&ch_list, ch, next) {
+ if (ch->bc && ch->ast && !strcasecmp(ch->ast->name, argv[3])) {
+ print_bc_info(fd, ch, ch->bc);
+ break;
+ }
+ }
+ AST_RWLIST_UNLOCK(&ch_list);
return 0;
}
@@ -2392,7 +2386,7 @@
};
/* Channel configuration */
-static int config_ch_pres_screen (struct chan_list *ch)
+static int config_ch_pres_screen (struct misdn_ch *ch)
{
struct ast_channel *ast;
struct misdn_bchannel *bc;
@@ -2489,7 +2483,7 @@
return 0;
}
-static int config_ch_hdlc (struct chan_list *ch)
+static int config_ch_hdlc (struct misdn_ch *ch)
{
struct misdn_bchannel *bc = ch->bc;
int hdlc;
@@ -2508,7 +2502,7 @@
return 0;
}
-static void config_ch_jitterbuffer (struct chan_list *ch)
+static void config_ch_jitterbuffer (struct misdn_ch *ch)
{
struct misdn_bchannel *bc = ch->bc;
int len = ch->jb_len,
@@ -2550,7 +2544,7 @@
return 0;
}
-static int config_ch (struct chan_list *ch, int orig)
+static int config_ch (struct misdn_ch *ch, int orig)
{
struct ast_channel *ast;
struct misdn_bchannel *bc;
@@ -2694,7 +2688,7 @@
}
/* mISDN ast_channel Constructor */
-static struct ast_channel * misdn_new (struct chan_list *chlist, int state, char *exten, char *callerid, int format, int port, int c)
+static struct ast_channel * misdn_new (struct misdn_ch *ch, int state, char *exten, char *callerid, int format, int port, int c)
{
int bridging,
chan_offset = 0,
@@ -2724,7 +2718,7 @@
tmp->rawreadformat = format;
tmp->writeformat = format;
tmp->rawwriteformat = format;
- tmp->tech_pvt = chlist;
+ tmp->tech_pvt = ch;
tmp->priority = 1;
if (cm_get_int(misdn_cm, bridging, GENERAL, MCFG_BRIDGING))
@@ -2745,9 +2739,9 @@
tmp->cid.cid_name = ast_strdup(cid_name);
}
- if (pipe(chlist->pipe) < 0)
+ if (pipe(ch->pipe) < 0)
perror("Pipe failed\n");
- tmp->fds[0] = chlist->pipe[0];
+ tmp->fds[0] = ch->pipe[0];
tmp->rings = (state == AST_STATE_RING);
} else
chan_misdn_log(-1, 0, "Unable to allocate channel structure\n");
@@ -2768,7 +2762,7 @@
port = 0;
struct misdn_bchannel *newbc = NULL;
struct csel *cs = NULL;
- struct chan_list *cl = init_chan_list(ORG_AST);
+ struct misdn_ch *ch = misdn_ch_init(ORG_AST);
ast_copy_string(buf, data, sizeof(buf));
@@ -2812,19 +2806,19 @@
}
/* create ast_channel and link all the objects together */
- cl->bc = newbc;
- cl->ast = misdn_new(cl, AST_STATE_RESERVED, ext, NULL, format, port, channel);
+ ch->bc = newbc;
+ ch->ast = misdn_new(ch, AST_STATE_RESERVED, ext, NULL, format, port, channel);
/* register chan in local list */
- cl_queue_chan(&cl_te, cl) ;
+ misdn_ch_queue(ch) ;
/* fill in the config into the objects */
- config_ch(cl, ORG_AST);
+ config_ch(ch, ORG_AST);
/* important */
- cl->need_hangup = 0;
-
- return cl->ast;
+ ch->need_hangup = 0;
+
+ return ch->ast;
}
static int misdn_digit_begin (struct ast_channel *chan, char digit)
@@ -2836,13 +2830,13 @@
static int misdn_digit_end (struct ast_channel *ast, char digit)
{
struct misdn_bchannel *bc;
- struct chan_list *p;
+ struct misdn_ch *ch;
char buf[8];
- if (!ast || !(p = MISDN_ASTERISK_TECH_PVT(ast)))
+ if (!ast || !(ch = MISDN_ASTERISK_TECH_PVT(ast)))
return -1;
- bc = p->bc;
+ bc = ch->bc;
if (!bc) {
ast_log(LOG_WARNING, " --> !! Got Digit Event withut having bchannel Object\n");
return -1;
@@ -2850,7 +2844,7 @@
chan_misdn_log(2, bc->port, "* IND : Digit %c\n", digit);
- switch (statemachine_get_state(p->sm)) {
+ switch (statemachine_get_state(ch->sm)) {
case MISDN_CALLING:
buf[0] = digit;
buf[1] = 0;
@@ -2862,13 +2856,13 @@
bc->info_dad[1] = 0;
strncat(bc->dad, bc->info_dad, sizeof(bc->dad) - strlen(bc->dad));
bc->dad[sizeof(bc->dad) - 1] = 0;
- strncpy(p->ast->exten, bc->dad, sizeof(p->ast->exten));
- p->ast->exten[sizeof(p->ast->exten) - 1] = 0;
+ strncpy(ch->ast->exten, bc->dad, sizeof(ch->ast->exten));
+ ch->ast->exten[sizeof(ch->ast->exten) - 1] = 0;
misdn_lib_send_event(bc, EVENT_INFORMATION);
break;
default:
if (bc->send_dtmf)
- send_digit_to_chan(p, digit);
+ send_digit_to_chan(ch, digit);
}
return 0;
@@ -2879,7 +2873,7 @@
int port = 0;
int r;
int exceed;
- struct chan_list *ch = MISDN_ASTERISK_TECH_PVT(ast);
+ struct misdn_ch *ch = MISDN_ASTERISK_TECH_PVT(ast);
struct misdn_bchannel *newbc;
char *opts = NULL,
*ext,
@@ -2987,15 +2981,15 @@
static enum ast_bridge_result misdn_bridge (struct ast_channel *c0, struct ast_channel *c1, int flags,
struct ast_frame **fo, struct ast_channel **rc, int timeoutms)
{
- struct chan_list *ch1, *ch2;
+ struct misdn_ch *ch1, *ch2;
struct ast_channel *carr[2], *who;
struct ast_frame *f;
int to = -1,
bridging = 0,
ec = 0;
- ch1 = get_chan_by_ast(c0);
- ch2 = get_chan_by_ast(c1);
+ ch1 = misdn_ch_by_ast(c0);
+ ch2 = misdn_ch_by_ast(c1);
carr[0] = c0;
carr[1] = c1;
@@ -3069,24 +3063,24 @@
static int misdn_hangup (struct ast_channel *ast)
{
- struct chan_list *p;
+ struct misdn_ch *ch;
struct misdn_bchannel *bc;
const char *varcause;
int tmpcause,
re;
int state;
- if (!ast || !(p = MISDN_ASTERISK_TECH_PVT(ast)))
+ if (!ast || !(ch = MISDN_ASTERISK_TECH_PVT(ast)))
return -1;
if (option_debug)
ast_log(LOG_DEBUG, "misdn_hangup(%s)\n", ast->name);
- bc = p->bc;
+ bc = ch->bc;
MISDN_ASTERISK_TECH_PVT(ast) = NULL;
- p->ast = NULL;
-
- state = statemachine_get_state(p->sm);
+ ch->ast = NULL;
+
+ state = statemachine_get_state(ch->sm);
if (!bc ||
ast->_state == AST_STATE_RESERVED ||
@@ -3097,20 +3091,20 @@
/* between request and call */
if (!bc)
ast_log(LOG_WARNING,"Hangup with private but no bc ? state:%s l3id:%x\n",
- get_state_string(statemachine_get_state(p->sm)), p->l3id);
+ get_state_string(statemachine_get_state(ch->sm)), ch->l3id);
if (option_debug)
ast_log(LOG_DEBUG, "State Reserved (or nothing) => chanIsAvail\n");
- cl_dequeue_chan(&cl_te, p);
- close(p->pipe[0]);
- close(p->pipe[1]);
- free(p);
+ misdn_ch_dequeue(ch);
+ close(ch->pipe[0]);
+ close(ch->pipe[1]);
+ free(ch);
misdn_lib_release(bc);
return 0;
}
- p->need_hangup = p->need_queue_hangup = p->need_busy = 0;
+ ch->need_hangup = ch->need_queue_hangup = ch->need_busy = 0;
if (!bc->nt)
- stop_bc_tones(p);
+ stop_bc_tones(ch);
bc->out_cause = ast->hangupcause ? ast->hangupcause : 16;
if ((varcause = pbx_builtin_getvar_helper(ast, "HANGUPCAUSE")) ||
@@ -3122,24 +3116,24 @@
chan_misdn_log(2, bc->port,
"* IND : HANGUP\tpid:%d ctx:%s dad:%s oad:%s state:%s\n"
" --> l3id:%x\n --> cause:%d\n --> out_cause:%d\n",
- p->bc ? p->bc->pid : -1, ast->context, ast->exten, AST_CID_P(ast),
- get_state_string(statemachine_get_state(p->sm)),
- p->l3id, bc->cause, bc->out_cause);
-
- if ((re = statemachine_run(p->sm, AEVENT_HANGUP))) {
+ ch->bc ? ch->bc->pid : -1, ast->context, ast->exten, AST_CID_P(ast),
+ get_state_string(statemachine_get_state(ch->sm)),
+ ch->l3id, bc->cause, bc->out_cause);
+
+ if ((re = statemachine_run(ch->sm, AEVENT_HANGUP))) {
chan_misdn_log(0, bc->port, "statemachine_run failed on AEVENT_HANGUP: %d!\n", re);
return -1;
}
chan_misdn_log(2, bc->port, "Channel: %s hanguped new state:%s\n", ast->name,
- get_state_string(statemachine_get_state(p->sm)));
+ get_state_string(statemachine_get_state(ch->sm)));
return 0;
}
static struct statemachine_handle_retval handle_aevent_hangup (void *p, int state, int event)
{
- struct chan_list *ch = p;
+ struct misdn_ch *ch = ch;
struct misdn_bchannel *bc = ch->bc;
int re = EVENT_DEFAULT;
@@ -3188,57 +3182,57 @@
static int misdn_answer (struct ast_channel *ast)
{
- struct chan_list *p;
+ struct misdn_ch *ch;
const char *tmp_key, *nodsp;
- if (!ast || !(p = MISDN_ASTERISK_TECH_PVT(ast)) || !p->bc)
+ if (!ast || !(ch = MISDN_ASTERISK_TECH_PVT(ast)) || !ch->bc)
return -1;
- chan_misdn_log(2, p->bc->port, "* ANSWER:\n");
-
- tmp_key = pbx_builtin_getvar_helper(p->ast, "CRYPT_KEY");
+ chan_misdn_log(2, ch->bc->port, "* ANSWER:\n");
+
+ tmp_key = pbx_builtin_getvar_helper(ch->ast, "CRYPT_KEY");
if (tmp_key) {
- chan_misdn_log(2, p->bc->port, " --> Connection will be BF crypted\n");
- strncpy(p->bc->crypt_key, tmp_key, sizeof(p->bc->crypt_key));
- p->bc->crypt_key[sizeof(p->bc->crypt_key) - 1] = 0;
+ chan_misdn_log(2, ch->bc->port, " --> Connection will be BF crypted\n");
+ strncpy(ch->bc->crypt_key, tmp_key, sizeof(ch->bc->crypt_key));
+ ch->bc->crypt_key[sizeof(ch->bc->crypt_key) - 1] = 0;
} else
- chan_misdn_log(3, p->bc->port, " --> Connection is without BF encryption\n");
+ chan_misdn_log(3, ch->bc->port, " --> Connection is without BF encryption\n");
nodsp = pbx_builtin_getvar_helper(ast, "MISDN_DIGITAL_TRANS");
if (nodsp) {
- chan_misdn_log(2, p->bc->port, " --> Connection is transparent digital\n");
- p->bc->nodsp = 1;
- p->bc->hdlc = 0;
- p->bc->nojitter = 1;
+ chan_misdn_log(2, ch->bc->port, " --> Connection is transparent digital\n");
+ ch->bc->nodsp = 1;
+ ch->bc->hdlc = 0;
+ ch->bc->nojitter = 1;
}
- misdn_lib_echo(p->bc, 0);
- stop_indicate(p);
-
- if (ast_strlen_zero(p->bc->cad)) {
- chan_misdn_log(2, p->bc->port, " --> empty cad using dad\n");
- ast_copy_string(p->bc->cad, p->bc->dad, sizeof(p->bc->cad));
- }
-
- statemachine_run(p->sm, AEVENT_ANSWER);
+ misdn_lib_echo(ch->bc, 0);
+ stop_indicate(ch);
+
+ if (ast_strlen_zero(ch->bc->cad)) {
+ chan_misdn_log(2, ch->bc->port, " --> empty cad using dad\n");
+ ast_copy_string(ch->bc->cad, ch->bc->dad, sizeof(ch->bc->cad));
+ }
+
+ statemachine_run(ch->sm, AEVENT_ANSWER);
- start_bc_tones(p);
+ start_bc_tones(ch);
return 0;
}
-static struct ast_frame * process_ast_dsp (struct chan_list *tmp, struct ast_frame *frame)
+static struct ast_frame * process_ast_dsp (struct misdn_ch *ch, struct ast_frame *frame)
{
struct ast_frame *f, *f2;
struct ast_channel *ast;
char *context,
context_tmp[BUFFERSIZE];
- if (tmp->trans) {
- f2 = ast_translate(tmp->trans, frame, 0);
- f = ast_dsp_process(tmp->ast, tmp->dsp, f2);
+ if (ch->trans) {
+ f2 = ast_translate(ch->trans, frame, 0);
+ f = ast_dsp_process(ch->ast, ch->dsp, f2);
} else {
- chan_misdn_log(0, tmp->bc->port, "No T-Path found\n");
+ chan_misdn_log(0, ch->bc->port, "No T-Path found\n");
return NULL;
}
@@ -3248,23 +3242,23 @@
if (option_debug)
ast_log(LOG_DEBUG, "Detected inband DTMF digit: %c\n", f->subclass);
- if (tmp->faxdetect && (f->subclass == 'f')) {
+ if (ch->faxdetect && (f->subclass == 'f')) {
/* Fax tone -- Handle and return NULL */
- if (!tmp->faxhandled) {
- ast = tmp->ast;
- tmp->faxhandled++;
- chan_misdn_log(0, tmp->bc->port, "Fax detected, preparing %s for fax transfer.\n", ast->name);
- tmp->bc->rxgain = 0;
- isdn_lib_update_rxgain(tmp->bc);
- tmp->bc->txgain = 0;
- isdn_lib_update_txgain(tmp->bc);
- tmp->bc->ec_enable = 0;
- isdn_lib_update_ec(tmp->bc);
- isdn_lib_stop_dtmf(tmp->bc);
- switch (tmp->faxdetect) {
+ if (!ch->faxhandled) {
+ ast = ch->ast;
+ ch->faxhandled++;
+ chan_misdn_log(0, ch->bc->port, "Fax detected, preparing %s for fax transfer.\n", ast->name);
+ ch->bc->rxgain = 0;
+ isdn_lib_update_rxgain(ch->bc);
+ ch->bc->txgain = 0;
+ isdn_lib_update_txgain(ch->bc);
+ ch->bc->ec_enable = 0;
+ isdn_lib_update_ec(ch->bc);
+ isdn_lib_stop_dtmf(ch->bc);
+ switch (ch->faxdetect) {
case 1:
if (strcmp(ast->exten, "fax")) {
- cm_get(misdn_cm, context_tmp, sizeof(context_tmp), PORT, MCFG_FAXDETECT_TIMEOUT, tmp->bc->port);
+ cm_get(misdn_cm, context_tmp, sizeof(context_tmp), PORT, MCFG_FAXDETECT_TIMEOUT, ch->bc->port);
context = ast_strlen_zero(context_tmp) ? (ast_strlen_zero(ast->macrocontext) ? ast->context : ast->macrocontext) : context_tmp;
if (ast_exists_extension(ast, context, "fax", 1, AST_CID_P(ast))) {
if (option_verbose > 2)
@@ -3286,15 +3280,15 @@
ast_log(LOG_DEBUG, "Fax already handled\n");
}
- if (tmp->ast_dsp && (f->subclass != 'f'))
- chan_misdn_log(2, tmp->bc->port, " --> * SEND: DTMF (AST_DSP) :%c\n", f->subclass);
+ if (ch->ast_dsp && (f->subclass != 'f'))
+ chan_misdn_log(2, ch->bc->port, " --> * SEND: DTMF (AST_DSP) :%c\n", f->subclass);
return frame;
}
static struct ast_frame * misdn_read (struct ast_channel *ast)
{
- struct chan_list *tmp;
+ struct misdn_ch *ch;
struct timeval tv_now;
int diff, len;
@@ -3302,59 +3296,59 @@
chan_misdn_log(2, 0, "misdn_read called without ast\n");
return NULL;
}
- if (!(tmp = MISDN_ASTERISK_TECH_PVT(ast))) {
+ if (!(ch = MISDN_ASTERISK_TECH_PVT(ast))) {
chan_misdn_log(2, 0, "misdn_read called without ast->pvt\n");
return NULL;
}
- if (!tmp->bc) {
+ if (!ch->bc) {
chan_misdn_log(2, 0, "misdn_read called without bc\n");
return NULL;
}
- len = read(tmp->pipe[0], tmp->ast_rd_buf, sizeof(tmp->ast_rd_buf));
+ len = read(ch->pipe[0], ch->ast_rd_buf, sizeof(ch->ast_rd_buf));
if (len <= 0) {
/* we hangup here, since our pipe is closed */
- chan_misdn_log(2, tmp->bc->port, "misdn_read: Pipe closed, hanging up\n");
+ chan_misdn_log(2, ch->bc->port, "misdn_read: Pipe closed, hanging up\n");
return NULL;
}
- tmp->frame.frametype = AST_FRAME_VOICE;
- tmp->frame.subclass = AST_FORMAT_ALAW;
- tmp->frame.datalen = len;
- tmp->frame.samples = len;
- tmp->frame.mallocd = 0;
- tmp->frame.offset = 0;
- tmp->frame.delivery = ast_tv(0, 0);
- tmp->frame.src = NULL;
- tmp->frame.data = tmp->ast_rd_buf;
-
- if (tmp->faxdetect && !tmp->faxhandled) {
- if (tmp->faxdetect_timeout) {
- if (ast_tvzero(tmp->faxdetect_tv)) {
- tmp->faxdetect_tv = ast_tvnow();
- chan_misdn_log(2, tmp->bc->port, "faxdetect: starting detection with timeout: %ds ...\n", tmp->faxdetect_timeout);
- return process_ast_dsp(tmp, &tmp->frame);
+ ch->frame.frametype = AST_FRAME_VOICE;
+ ch->frame.subclass = AST_FORMAT_ALAW;
+ ch->frame.datalen = len;
+ ch->frame.samples = len;
+ ch->frame.mallocd = 0;
+ ch->frame.offset = 0;
+ ch->frame.delivery = ast_tv(0, 0);
+ ch->frame.src = NULL;
+ ch->frame.data = ch->ast_rd_buf;
+
+ if (ch->faxdetect && !ch->faxhandled) {
+ if (ch->faxdetect_timeout) {
+ if (ast_tvzero(ch->faxdetect_tv)) {
+ ch->faxdetect_tv = ast_tvnow();
+ chan_misdn_log(2, ch->bc->port, "faxdetect: starting detection with timeout: %ds ...\n", ch->faxdetect_timeout);
+ return process_ast_dsp(ch, &ch->frame);
}
tv_now = ast_tvnow();
- diff = ast_tvdiff_ms(tv_now, tmp->faxdetect_tv);
- if (diff <= (tmp->faxdetect_timeout * 1000)) {
- chan_misdn_log(5, tmp->bc->port, "faxdetect: detecting ...\n");
- return process_ast_dsp(tmp, &tmp->frame);
+ diff = ast_tvdiff_ms(tv_now, ch->faxdetect_tv);
+ if (diff <= (ch->faxdetect_timeout * 1000)) {
+ chan_misdn_log(5, ch->bc->port, "faxdetect: detecting ...\n");
+ return process_ast_dsp(ch, &ch->frame);
}
- chan_misdn_log(2, tmp->bc->port, "faxdetect: stopping detection (time ran out) ...\n");
- tmp->faxdetect = 0;
- return &tmp->frame;
- }
- chan_misdn_log(5, tmp->bc->port, "faxdetect: detecting ... (no timeout)\n");
- return process_ast_dsp(tmp, &tmp->frame);
+ chan_misdn_log(2, ch->bc->port, "faxdetect: stopping detection (time ran out) ...\n");
+ ch->faxdetect = 0;
+ return &ch->frame;
+ }
+ chan_misdn_log(5, ch->bc->port, "faxdetect: detecting ... (no timeout)\n");
+ return process_ast_dsp(ch, &ch->frame);
}
- return tmp->ast_dsp ? process_ast_dsp(tmp, &tmp->frame) : &tmp->frame;
+ return ch->ast_dsp ? process_ast_dsp(ch, &ch->frame) : &ch->frame;
}
static int misdn_write (struct ast_channel *ast, struct ast_frame *frame)
{
- struct chan_list *ch;
+ struct misdn_ch *ch;
int i = 0;
if (!ast || !(ch = MISDN_ASTERISK_TECH_PVT(ast)))
@@ -3417,7 +3411,7 @@
static int misdn_indication (struct ast_channel *ast, int cond, const void *data, size_t datalen)
{
- struct chan_list *p;
+ struct misdn_ch *p;
if (!ast || !(p = MISDN_ASTERISK_TECH_PVT(ast)) || !p->bc) {
ast_log(LOG_WARNING, "Returned -1 in misdn_indication\n");
@@ -3524,7 +3518,7 @@
static int misdn_fixup (struct ast_channel *oldast, struct ast_channel *ast)
{
- struct chan_list *p;
+ struct misdn_ch *p;
if (!ast || !(p = MISDN_ASTERISK_TECH_PVT(ast)))
return -1;
@@ -3537,11 +3531,11 @@
static int misdn_send_text (struct ast_channel *chan, const char *text)
{
- struct chan_list *tmp = chan->tech_pvt;
-
- if (tmp && tmp->bc) {
- ast_copy_string(tmp->bc->display, text, sizeof(tmp->bc->display));
- misdn_lib_send_event(tmp->bc, EVENT_INFORMATION);
+ struct misdn_ch *ch = chan->tech_pvt;
+
+ if (ch && ch->bc) {
+ ast_copy_string(ch->bc->display, text, sizeof(ch->bc->display));
+ misdn_lib_send_event(ch->bc, EVENT_INFORMATION);
} else {
ast_log(LOG_WARNING, "No chan_list but send_text request?\n");
return -1;
@@ -3553,7 +3547,7 @@
/* misdn event handler functions, called by statemachine on event */
static struct statemachine_handle_retval handle_mevent_setup (void *p, int state, int event)
{
- struct chan_list *ch = p;
+ struct misdn_ch *ch = p;
struct misdn_bchannel *bc = ch->bc;
int i;
@@ -3575,7 +3569,7 @@
static struct statemachine_handle_retval handle_mevent_setup_followup (void *p, int state, int event)
{
- struct chan_list *ch = p;
+ struct misdn_ch *ch = p;
struct misdn_bchannel *bc = ch->bc;
int im,
dad_len;
@@ -3666,7 +3660,7 @@
static struct statemachine_handle_retval handle_mevent_information (void *p, int state, int event)
{
- struct chan_list *ch = p;
+ struct misdn_ch *ch = p;
struct misdn_bchannel *bc = ch->bc;
stop_indicate(ch);
@@ -3685,7 +3679,7 @@
static struct statemachine_handle_retval handle_mevent_information_dtmf (void *p, int state, int event)
{
- struct chan_list *ch = p;
[... 276 lines stripped ...]
More information about the asterisk-commits
mailing list