Index: channels/sig_analog.c =================================================================== --- channels/sig_analog.c (revision 211229) +++ channels/sig_analog.c (working copy) @@ -147,42 +147,42 @@ static int analog_start_cid_detect(struct analog_pvt *p, int cid_signalling) { - if (p->calls->start_cid_detect) + if (p->calls->start_cid_detect) { return p->calls->start_cid_detect(p->chan_pvt, cid_signalling); - else - return -1; + } + return -1; } static int analog_stop_cid_detect(struct analog_pvt *p) { - if (p->calls->stop_cid_detect) + if (p->calls->stop_cid_detect) { return p->calls->stop_cid_detect(p->chan_pvt); - else - return -1; + } + return -1; } static int analog_get_callerid(struct analog_pvt *p, char *name, char *number, enum analog_event *ev, size_t timeout) { - if (p->calls->get_callerid) + if (p->calls->get_callerid) { return p->calls->get_callerid(p->chan_pvt, name, number, ev, timeout); - else - return -1; + } + return -1; } static int analog_get_event(struct analog_pvt *p) { - if (p->calls->get_event) + if (p->calls->get_event) { return p->calls->get_event(p->chan_pvt); - else - return -1; + } + return -1; } static int analog_wait_event(struct analog_pvt *p) { - if (p->calls->wait_event) + if (p->calls->wait_event) { return p->calls->wait_event(p->chan_pvt); - else - return -1; + } + return -1; } enum analog_cid_start analog_str_to_cidstart(const char *value) @@ -282,9 +282,9 @@ p->subs[b].owner = towner; p->subs[b].inthreeway = tinthreeway; - if (p->calls->swap_subs) + if (p->calls->swap_subs) { p->calls->swap_subs(p->chan_pvt, a, p->subs[a].owner, b, p->subs[b].owner); - + } } static int analog_alloc_sub(struct analog_pvt *p, enum analog_sub x) @@ -292,11 +292,11 @@ if (p->calls->allocate_sub) { int res; res = p->calls->allocate_sub(p->chan_pvt, x); - if (!res) + if (!res) { p->subs[x].allocd = 1; + } return res; } - return 0; } @@ -304,9 +304,9 @@ { p->subs[x].allocd = 0; p->subs[x].owner = NULL; - if (p->calls->unallocate_sub) + if (p->calls->unallocate_sub) { return p->calls->unallocate_sub(p->chan_pvt, x); - + } return 0; } @@ -318,195 +318,202 @@ p->callwaitcas = 0; } - if (p->calls->send_callerid) + if (p->calls->send_callerid) { return p->calls->send_callerid(p->chan_pvt, cwcid, cid); - else - return 0; + } + return 0; } static int analog_get_index(struct ast_channel *ast, struct analog_pvt *p, int nullok) { int res; - if (p->subs[ANALOG_SUB_REAL].owner == ast) + if (p->subs[ANALOG_SUB_REAL].owner == ast) { res = ANALOG_SUB_REAL; - else if (p->subs[ANALOG_SUB_CALLWAIT].owner == ast) + } else if (p->subs[ANALOG_SUB_CALLWAIT].owner == ast) { res = ANALOG_SUB_CALLWAIT; - else if (p->subs[ANALOG_SUB_THREEWAY].owner == ast) + } else if (p->subs[ANALOG_SUB_THREEWAY].owner == ast) { res = ANALOG_SUB_THREEWAY; - else { + } else { res = -1; - if (!nullok) + if (!nullok) { ast_log(LOG_WARNING, "Unable to get index, and nullok is not asserted\n"); + } } return res; } static int analog_dsp_reset_and_flush_digits(struct analog_pvt *p) { - if (p->calls->dsp_reset_and_flush_digits) + if (p->calls->dsp_reset_and_flush_digits) { return p->calls->dsp_reset_and_flush_digits(p->chan_pvt); - else - /* Return 0 since I think this is unnecessary to do in most cases it is used. Mostly only for ast_dsp */ - return 0; + } + + /* Return 0 since I think this is unnecessary to do in most cases it is used. Mostly only for ast_dsp */ + return 0; } static int analog_play_tone(struct analog_pvt *p, enum analog_sub sub, enum analog_tone tone) { - if (p->calls->play_tone) + if (p->calls->play_tone) { return p->calls->play_tone(p->chan_pvt, sub, tone); - else - return -1; + } + return -1; } static struct ast_channel * analog_new_ast_channel(struct analog_pvt *p, int state, int startpbx, enum analog_sub sub, const struct ast_channel *requestor) { + if (!p->calls->new_ast_channel) { + return NULL; + } + struct ast_channel *c; - if (p->calls->new_ast_channel) - c = p->calls->new_ast_channel(p->chan_pvt, state, startpbx, sub, requestor); - else - return NULL; - + c = p->calls->new_ast_channel(p->chan_pvt, state, startpbx, sub, requestor); p->subs[sub].owner = c; - if (!p->owner) + if (!p->owner) { p->owner = c; + } return c; } static int analog_set_echocanceller(struct analog_pvt *p, int enable) { - if (p->calls->set_echocanceller) + if (p->calls->set_echocanceller) { return p->calls->set_echocanceller(p->chan_pvt, enable); - else - return -1; + } + return -1; } static int analog_train_echocanceller(struct analog_pvt *p) { - if (p->calls->train_echocanceller) + if (p->calls->train_echocanceller) { return p->calls->train_echocanceller(p->chan_pvt); - else - return -1; + } + return -1; } static int analog_is_off_hook(struct analog_pvt *p) { - if (p->calls->is_off_hook) + if (p->calls->is_off_hook) { return p->calls->is_off_hook(p->chan_pvt); - else - return -1; + } + return -1; } static int analog_ring(struct analog_pvt *p) { - if (p->calls->ring) + if (p->calls->ring) { return p->calls->ring(p->chan_pvt); - else - return -1; + } + return -1; } static int analog_flash(struct analog_pvt *p) { - if (p->calls->flash) + if (p->calls->flash) { return p->calls->flash(p->chan_pvt); - else - return -1; + } + return -1; } static int analog_start(struct analog_pvt *p) { - if (p->calls->start) + if (p->calls->start) { return p->calls->start(p->chan_pvt); - else - return -1; + } + return -1; } static int analog_dial_digits(struct analog_pvt *p, enum analog_sub sub, struct analog_dialoperation *dop) { - if (p->calls->dial_digits) + if (p->calls->dial_digits) { return p->calls->dial_digits(p->chan_pvt, sub, dop); - else - return -1; + } + return -1; } static int analog_on_hook(struct analog_pvt *p) { - if (p->calls->on_hook) + if (p->calls->on_hook) { return p->calls->on_hook(p->chan_pvt); - else - return -1; + } + return -1; } static int analog_check_for_conference(struct analog_pvt *p) { - if (p->calls->check_for_conference) + if (p->calls->check_for_conference) { return p->calls->check_for_conference(p->chan_pvt); - else - return -1; + } + return -1; } static void analog_all_subchannels_hungup(struct analog_pvt *p) { - if (p->calls->all_subchannels_hungup) + if (p->calls->all_subchannels_hungup) { p->calls->all_subchannels_hungup(p->chan_pvt); + } } static void analog_unlock_private(struct analog_pvt *p) { - if (p->calls->unlock_private) + if (p->calls->unlock_private) { p->calls->unlock_private(p->chan_pvt); + } } static void analog_lock_private(struct analog_pvt *p) { - if (p->calls->lock_private) + if (p->calls->lock_private) { p->calls->lock_private(p->chan_pvt); + } } static int analog_off_hook(struct analog_pvt *p) { - if (p->calls->off_hook) + if (p->calls->off_hook) { return p->calls->off_hook(p->chan_pvt); - else - return -1; + } + return -1; } static int analog_dsp_set_digitmode(struct analog_pvt *p, enum analog_dsp_digitmode mode) { - if (p->calls->dsp_set_digitmode) + if (p->calls->dsp_set_digitmode) { return p->calls->dsp_set_digitmode(p->chan_pvt, mode); - else - return -1; + } + return -1; } static void analog_cb_handle_dtmfup(struct analog_pvt *p, struct ast_channel *ast, enum analog_sub analog_index, struct ast_frame **dest) { - if (p->calls->handle_dtmfup) + if (p->calls->handle_dtmfup) { p->calls->handle_dtmfup(p->chan_pvt, ast, analog_index, dest); + } } static int analog_wink(struct analog_pvt *p, enum analog_sub index) { - if (p->calls->wink) + if (p->calls->wink) { return p->calls->wink(p->chan_pvt, index); - else - return -1; + } + return -1; } static int analog_has_voicemail(struct analog_pvt *p) { - if (p->calls->has_voicemail) + if (p->calls->has_voicemail) { return p->calls->has_voicemail(p->chan_pvt); - else - return -1; + } + return -1; } static int analog_is_dialing(struct analog_pvt *p, enum analog_sub index) { - if (p->calls->is_dialing) + if (p->calls->is_dialing) { return p->calls->is_dialing(p->chan_pvt, index); - else - return -1; + } + return -1; } static int analog_attempt_transfer(struct analog_pvt *p) @@ -517,8 +524,9 @@ if (ast_bridged_channel(p->subs[ANALOG_SUB_REAL].owner)) { /* The three-way person we're about to transfer to could still be in MOH, so stop if now if appropriate */ - if (ast_bridged_channel(p->subs[ANALOG_SUB_THREEWAY].owner)) + if (ast_bridged_channel(p->subs[ANALOG_SUB_THREEWAY].owner)) { ast_queue_control(p->subs[ANALOG_SUB_THREEWAY].owner, AST_CONTROL_UNHOLD); + } if (p->subs[ANALOG_SUB_REAL].owner->_state == AST_STATE_RINGING) { ast_indicate(ast_bridged_channel(p->subs[ANALOG_SUB_REAL].owner), AST_CONTROL_RINGING); } @@ -528,7 +536,7 @@ if (!p->subs[ANALOG_SUB_THREEWAY].inthreeway) { ast_cel_report_event(p->subs[ANALOG_SUB_THREEWAY].owner, AST_CEL_ATTENDEDTRANSFER, NULL, p->subs[ANALOG_SUB_THREEWAY].owner->linkedid, NULL); } - if (ast_channel_masquerade(p->subs[ANALOG_SUB_THREEWAY].owner, ast_bridged_channel(p->subs[ANALOG_SUB_REAL].owner))) { + if (ast_channel_masquerade(p->subs[ANALOG_SUB_THREEWAY].owner, ast_bridged_channel(p->subs[ANALOG_SUB_REAL].owner))) { ast_log(LOG_WARNING, "Unable to masquerade %s as %s\n", ast_bridged_channel(p->subs[ANALOG_SUB_REAL].owner)->name, p->subs[ANALOG_SUB_THREEWAY].owner->name); return -1; @@ -574,18 +582,21 @@ for (x = 0; x < 3; x++) { /* Look for three way calls */ if ((p->subs[x].allocd) && p->subs[x].inthreeway) { - if (p->calls->conf_add) + if (p->calls->conf_add) { p->calls->conf_add(p->chan_pvt, x); + } needconf++; } else { - if (p->calls->conf_del) + if (p->calls->conf_del) { p->calls->conf_del(p->chan_pvt, x); + } } } ast_debug(1, "Updated conferencing on %d, with %d conference users\n", p->channel, needconf); - if (p->calls->complete_conference_update) + if (p->calls->complete_conference_update) { p->calls->complete_conference_update(p->chan_pvt, needconf); + } return 0; } @@ -611,20 +622,24 @@ ast_log(LOG_DEBUG, "%s %d\n", __FUNCTION__, p->channel); /* We're at least busy at this point */ if (busy) { - if ((p->sig == ANALOG_SIG_FXOKS) || (p->sig == ANALOG_SIG_FXOLS) || (p->sig == ANALOG_SIG_FXOGS)) + if ((p->sig == ANALOG_SIG_FXOKS) || (p->sig == ANALOG_SIG_FXOLS) || (p->sig == ANALOG_SIG_FXOGS)) { *busy = 1; + } } /* If do not disturb, definitely not */ - if (p->dnd) + if (p->dnd) { return 0; + } /* If guard time, definitely not */ - if (p->guardtime && (time(NULL) < p->guardtime)) + if (p->guardtime && (time(NULL) < p->guardtime)) { return 0; + } /* If no owner definitely available */ if (!p->owner) { - if (p->sig == ANALOG_SIG_FXSLS) + if (p->sig == ANALOG_SIG_FXSLS) { return 1; + } offhook = analog_is_off_hook(p); @@ -632,10 +647,10 @@ /* When "onhook" that means no battery on the line, and thus it is out of service..., if it's on a TDM card... If it's a channel bank, there is no telling... */ - if (offhook) + if (offhook) { return 1; - else - return 0; + } + return 0; } else if (offhook) { ast_debug(1, "Channel %d off hook, can't use\n", p->channel); /* Not available when the other end is off hook */ @@ -645,8 +660,9 @@ } /* If it's not an FXO, forget about call wait */ - if ((p->sig != ANALOG_SIG_FXOKS) && (p->sig != ANALOG_SIG_FXOLS) && (p->sig != ANALOG_SIG_FXOGS)) + if ((p->sig != ANALOG_SIG_FXOKS) && (p->sig != ANALOG_SIG_FXOLS) && (p->sig != ANALOG_SIG_FXOGS)) { return 0; + } if (!p->callwaiting) { /* If they don't have call waiting enabled, then for sure they're unavailable at this point */ @@ -673,23 +689,27 @@ static int analog_stop_callwait(struct analog_pvt *p) { - if (p->callwaitingcallerid) + if (p->callwaitingcallerid) { p->callwaitcas = 0; + } - if (p->calls->stop_callwait) + if (p->calls->stop_callwait) { return p->calls->stop_callwait(p->chan_pvt); - else - return 0; + } + + return 0; } static int analog_callwait(struct analog_pvt *p) { - if (p->callwaitingcallerid) + if (p->callwaitingcallerid) { p->callwaitcas = 1; - if (p->calls->callwait) + } + if (p->calls->callwait) { return p->calls->callwait(p->chan_pvt); - else - return 0; + } + + return 0; } static void analog_set_cadence(struct analog_pvt *p, struct ast_channel *chan) @@ -731,8 +751,9 @@ p->dialednone = 0; mysig = p->sig; - if (p->outsigmod > -1) + if (p->outsigmod > -1) { mysig = p->outsigmod; + } switch (mysig) { case ANALOG_SIG_FXOLS: @@ -747,8 +768,9 @@ /* nick@dccinc.com 4/3/03 mods to allow for deferred dialing */ c = strchr(dest, '/'); - if (c) + if (c) { c++; + } if (c && (strlen(c) < p->stripmsd)) { ast_log(LOG_WARNING, "Number '%s' is shorter than stripmsd (%d)\n", c, p->stripmsd); c = NULL; @@ -767,34 +789,39 @@ } analog_set_dialing(p, 1); } else { - if (ast->connected.id.number) + if (ast->connected.id.number) { ast_copy_string(p->callwait_num, ast->connected.id.number, sizeof(p->callwait_num)); - else + } else { p->callwait_num[0] = '\0'; - if (ast->connected.id.name) + } + if (ast->connected.id.name) { ast_copy_string(p->callwait_name, ast->connected.id.name, sizeof(p->callwait_name)); - else + } else { p->callwait_name[0] = '\0'; + } /* Call waiting tone instead */ if (analog_callwait(p)) { return -1; } /* Make ring-back */ - if (analog_play_tone(p, ANALOG_SUB_CALLWAIT, ANALOG_TONE_RINGTONE)) + if (analog_play_tone(p, ANALOG_SUB_CALLWAIT, ANALOG_TONE_RINGTONE)) { ast_log(LOG_WARNING, "Unable to generate call-wait ring-back on channel %s\n", ast->name); + } } n = ast->connected.id.name; l = ast->connected.id.number; - if (l) + if (l) { ast_copy_string(p->lastcid_num, l, sizeof(p->lastcid_num)); - else + } else { p->lastcid_num[0] = '\0'; - if (n) + } + if (n) { ast_copy_string(p->lastcid_name, n, sizeof(p->lastcid_name)); - else + } else { p->lastcid_name[0] = '\0'; + } if (p->use_callerid) { p->callwaitcas = 0; @@ -832,10 +859,11 @@ case ANALOG_SIG_FEATDMF_TA: case ANALOG_SIG_SF_FEATB: c = strchr(dest, '/'); - if (c) + if (c) { c++; - else + } else { c = ""; + } if (strlen(c) < p->stripmsd) { ast_log(LOG_WARNING, "Number '%s' is shorter than stripmsd (%d)\n", c, p->stripmsd); return -1; @@ -854,17 +882,19 @@ switch (mysig) { case ANALOG_SIG_FEATD: l = ast->connected.id.number; - if (l) + if (l) { snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "T*%s*%s*", l, c); - else + } else { snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "T**%s*", c); + } break; case ANALOG_SIG_FEATDMF: l = ast->connected.id.number; - if (l) + if (l) { snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*00%s#*%s#", l, c); - else + } else { snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*02#*%s#", c); + } break; case ANALOG_SIG_FEATDMF_TA: { @@ -873,11 +903,13 @@ /* If you have to go through a Tandem Access point you need to use this */ #ifndef STANDALONE ozz = pbx_builtin_getvar_helper(p->owner, "FEATDMF_OZZ"); - if (!ozz) + if (!ozz) { ozz = analog_defaultozz; + } cic = pbx_builtin_getvar_helper(p->owner, "FEATDMF_CIC"); - if (!cic) + if (!cic) { cic = analog_defaultcic; + } #endif if (!ozz || !cic) { ast_log(LOG_WARNING, "Unable to dial channel of type feature group D MF tandem access without CIC or OZZ set\n"); @@ -899,10 +931,11 @@ snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*%s#", c); break; default: - if (p->pulse) + if (p->pulse) { snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "P%sw", c); - else + } else { snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "T%sw", c); + } break; } @@ -912,8 +945,9 @@ p->echorest[sizeof(p->echorest) - 1] = '\0'; p->echobreak = 1; p->dop.dialstr[strlen(p->dop.dialstr)-2] = '\0'; - } else + } else { p->echobreak = 0; + } if (!res) { if (analog_dial_digits(p, ANALOG_SUB_REAL, &p->dop)) { int saveerr = errno; @@ -922,11 +956,13 @@ ast_log(LOG_WARNING, "Dialing failed on channel %d: %s\n", p->channel, strerror(saveerr)); return -1; } - } else + } else { ast_debug(1, "Deferring dialing...\n"); + } analog_set_dialing(p, 1); - if (ast_strlen_zero(c)) + if (ast_strlen_zero(c)) { p->dialednone = 1; + } ast_setstate(ast, AST_STATE_DIALING); break; default: @@ -1002,10 +1038,12 @@ analog_swap_subs(p, ANALOG_SUB_CALLWAIT, ANALOG_SUB_REAL); analog_unalloc_sub(p, ANALOG_SUB_CALLWAIT); p->owner = p->subs[ANALOG_SUB_REAL].owner; - if (p->owner->_state != AST_STATE_UP) + if (p->owner->_state != AST_STATE_UP) { ast_queue_control(p->subs[ANALOG_SUB_REAL].owner, AST_CONTROL_ANSWER); - if (ast_bridged_channel(p->subs[ANALOG_SUB_REAL].owner)) + } + if (ast_bridged_channel(p->subs[ANALOG_SUB_REAL].owner)) { ast_queue_control(p->subs[ANALOG_SUB_REAL].owner, AST_CONTROL_UNHOLD); + } } else if (p->subs[ANALOG_SUB_THREEWAY].allocd) { analog_swap_subs(p, ANALOG_SUB_THREEWAY, ANALOG_SUB_REAL); analog_unalloc_sub(p, ANALOG_SUB_THREEWAY); @@ -1035,8 +1073,9 @@ /* Make it the call wait now */ analog_swap_subs(p, ANALOG_SUB_CALLWAIT, ANALOG_SUB_THREEWAY); analog_unalloc_sub(p, ANALOG_SUB_THREEWAY); - } else + } else { analog_unalloc_sub(p, ANALOG_SUB_CALLWAIT); + } } else if (index == ANALOG_SUB_THREEWAY) { if (p->subs[ANALOG_SUB_CALLWAIT].inthreeway) { /* The other party of the three way call is currently in a call-wait state. @@ -1075,10 +1114,11 @@ case ANALOG_SIG_FXOLS: case ANALOG_SIG_FXOKS: /* If they're off hook, try playing congestion */ - if (analog_is_off_hook(p)) + if (analog_is_off_hook(p)) { analog_play_tone(p, ANALOG_SUB_REAL, ANALOG_TONE_CONGESTION); - else + } else { analog_play_tone(p, ANALOG_SUB_REAL, -1); + } break; case ANALOG_SIG_FXSGS: case ANALOG_SIG_FXSLS: @@ -1094,7 +1134,6 @@ analog_play_tone(p, ANALOG_SUB_REAL, -1); } - analog_set_echocanceller(p, 0); x = 0; @@ -1124,8 +1163,9 @@ ast_log(LOG_DEBUG, "%s %d\n", __FUNCTION__, p->channel); ast_setstate(ast, AST_STATE_UP); index = analog_get_index(ast, p, 1); - if (index < 0) + if (index < 0) { index = ANALOG_SUB_REAL; + } switch (p->sig) { case ANALOG_SIG_FXSLS: case ANALOG_SIG_FXSGS: @@ -1230,17 +1270,18 @@ char c; *str = 0; /* start with empty output buffer */ - for (;;) - { + for (;;) { /* Wait for the first digit (up to specified ms). */ c = ast_waitfordigit(chan, ms); /* if timeout, hangup or error, return as such */ - if (c < 1) + if (c < 1) { return c; + } *str++ = c; *str = 0; - if (strchr(term, c)) + if (strchr(term, c)) { return 1; + } } } @@ -1250,8 +1291,7 @@ p->calls->handle_notify_message(chan, p->chan_pvt, cid_flags, neon_mwievent); return 0; } - else - return -1; + return -1; } static int analog_increase_ss_count(struct analog_pvt *p) @@ -1259,8 +1299,8 @@ if (p->calls->increase_ss_count) { p->calls->increase_ss_count(); return 0; - } else - return -1; + } + return -1; } static int analog_decrease_ss_count(struct analog_pvt *p) @@ -1268,16 +1308,16 @@ if (p->calls->decrease_ss_count) { p->calls->decrease_ss_count(); return 0; - } else - return -1; + } + return -1; } static int analog_distinctive_ring(struct ast_channel *chan, struct analog_pvt *p, int idx, int *ringdata) { if (p->calls->distinctive_ring) { return p->calls->distinctive_ring(chan, p->chan_pvt, idx, ringdata); - } else - return -1; + } + return -1; } @@ -1285,30 +1325,31 @@ { if (p->calls->set_linear_mode) { return p->calls->set_linear_mode(p->chan_pvt, index, linear_mode); - } else - return -1; + } + return -1; } static void analog_get_and_handle_alarms(struct analog_pvt *p) { - if (p->calls->get_and_handle_alarms) + if (p->calls->get_and_handle_alarms) { return p->calls->get_and_handle_alarms(p->chan_pvt); + } } static void *analog_get_bridged_channel(struct analog_pvt *p, struct ast_channel *chan) { - if (p->calls->get_sigpvt_bridged_channel) + if (p->calls->get_sigpvt_bridged_channel) { return p->calls->get_sigpvt_bridged_channel; - else - return NULL; + } + return NULL; } static int analog_get_sub_fd(struct analog_pvt *p, enum analog_sub sub) { if (p->calls->get_sub_fd) { return p->calls->get_sub_fd(p->chan_pvt, sub); - } else - return -1; + } + return -1; } #define ANALOG_NEED_MFDETECT(p) (((p)->sig == ANALOG_SIG_FEATDMF) || ((p)->sig == ANALOG_SIG_FEATDMF_TA) || ((p)->sig == ANALOG_SIG_E911) || ((p)->sig == ANALOG_SIG_FGC_CAMA) || ((p)->sig == ANALOG_SIG_FGC_CAMAMF) || ((p)->sig == ANALOG_SIG_FEATB)) @@ -1383,16 +1424,18 @@ if (ANALOG_NEED_MFDETECT(p)) { analog_dsp_set_digitmode(p, ANALOG_DIGITMODE_MF); - } else + } else { analog_dsp_set_digitmode(p, ANALOG_DIGITMODE_DTMF); + } memset(dtmfbuf, 0, sizeof(dtmfbuf)); /* Wait for the first digit only if immediate=no */ - if (!p->immediate) + if (!p->immediate) { /* Wait for the first digit (up to 5 seconds). */ res = ast_waitfordigit(chan, 5000); - else + } else { res = 0; + } if (res > 0) { /* save first char */ dtmfbuf[0] = res; @@ -1400,20 +1443,27 @@ case ANALOG_SIG_FEATD: case ANALOG_SIG_SF_FEATD: res = analog_my_getsigstr(chan, dtmfbuf + 1, "*", 3000); - if (res > 0) + if (res > 0) { res = analog_my_getsigstr(chan, dtmfbuf + strlen(dtmfbuf), "*", 3000); - if (res < 1) + } + if (res < 1) { analog_dsp_reset_and_flush_digits(p); + } break; case ANALOG_SIG_FEATDMF_TA: res = analog_my_getsigstr(chan, dtmfbuf + 1, "#", 3000); - if (res < 1) + if (res < 1) { analog_dsp_reset_and_flush_digits(p); - if (analog_wink(p, index)) goto quit; + } + if (analog_wink(p, index)) { + goto quit; + } dtmfbuf[0] = 0; /* Wait for the first digit (up to 5 seconds). */ res = ast_waitfordigit(chan, 5000); - if (res <= 0) break; + if (res <= 0) { + break; + } dtmfbuf[0] = res; /* fall through intentionally */ case ANALOG_SIG_FEATDMF: @@ -1422,30 +1472,37 @@ case ANALOG_SIG_SF_FEATDMF: res = analog_my_getsigstr(chan, dtmfbuf + 1, "#", 3000); /* if international caca, do it again to get real ANO */ - if ((p->sig == ANALOG_SIG_FEATDMF) && (dtmfbuf[1] != '0') && (strlen(dtmfbuf) != 14)) - { - if (analog_wink(p, index)) goto quit; + if ((p->sig == ANALOG_SIG_FEATDMF) && (dtmfbuf[1] != '0') + && (strlen(dtmfbuf) != 14)) { + if (analog_wink(p, index)) { + goto quit; + } dtmfbuf[0] = 0; /* Wait for the first digit (up to 5 seconds). */ res = ast_waitfordigit(chan, 5000); - if (res <= 0) break; + if (res <= 0) { + break; + } dtmfbuf[0] = res; res = analog_my_getsigstr(chan, dtmfbuf + 1, "#", 3000); } if (res > 0) { /* if E911, take off hook */ - if (p->sig == ANALOG_SIG_E911) + if (p->sig == ANALOG_SIG_E911) { analog_off_hook(p); + } res = analog_my_getsigstr(chan, dtmfbuf + strlen(dtmfbuf), "#", 3000); } - if (res < 1) + if (res < 1) { analog_dsp_reset_and_flush_digits(p); + } break; case ANALOG_SIG_FEATB: case ANALOG_SIG_SF_FEATB: res = analog_my_getsigstr(chan, dtmfbuf + 1, "#", 3000); - if (res < 1) + if (res < 1) { analog_dsp_reset_and_flush_digits(p); + } break; case ANALOG_SIG_EMWINK: /* if we received a '*', we are actually receiving Feature Group D @@ -1454,10 +1511,12 @@ */ if (res == '*') { res = analog_my_getsigstr(chan, dtmfbuf + 1, "*", 3000); - if (res > 0) + if (res > 0) { res = analog_my_getsigstr(chan, dtmfbuf + strlen(dtmfbuf), "*", 3000); - if (res < 1) + } + if (res < 1) { analog_dsp_reset_and_flush_digits(p); + } break; } default: @@ -1506,16 +1565,18 @@ analog_dsp_set_digitmode(p, ANALOG_DIGITMODE_MF); res = analog_my_getsigstr(chan, anibuf, "#", 10000); if ((res > 0) && (strlen(anibuf) > 2)) { - if (anibuf[strlen(anibuf) - 1] == '#') + if (anibuf[strlen(anibuf) - 1] == '#') { anibuf[strlen(anibuf) - 1] = 0; + } ast_set_callerid(chan, anibuf + 2, NULL, anibuf + 2); } analog_dsp_set_digitmode(p, ANALOG_DIGITMODE_DTMF); } ast_copy_string(exten, dtmfbuf, sizeof(exten)); - if (ast_strlen_zero(exten)) + if (ast_strlen_zero(exten)) { ast_copy_string(exten, "s", sizeof(exten)); + } if (p->sig == ANALOG_SIG_FEATD || p->sig == ANALOG_SIG_EMWINK) { /* Look for Feature Group D on all E&M Wink and Feature Group D trunks */ if (exten[0] == '*') { @@ -1526,15 +1587,18 @@ s1 = strsep(&stringp, "*"); s2 = strsep(&stringp, "*"); if (s2) { - if (!ast_strlen_zero(p->cid_num)) + if (!ast_strlen_zero(p->cid_num)) { ast_set_callerid(chan, p->cid_num, NULL, p->cid_num); - else + } else { ast_set_callerid(chan, s1, NULL, s1); + } ast_copy_string(exten, s2, sizeof(exten)); - } else + } else { ast_copy_string(exten, s1, sizeof(exten)); - } else if (p->sig == ANALOG_SIG_FEATD) + } + } else if (p->sig == ANALOG_SIG_FEATD) { ast_log(LOG_WARNING, "Got a non-Feature Group D input on channel %d. Assuming E&M Wink instead\n", p->channel); + } } if ((p->sig == ANALOG_SIG_FEATDMF) || (p->sig == ANALOG_SIG_FEATDMF_TA)) { if (exten[0] == '*') { @@ -1545,16 +1609,20 @@ s1 = strsep(&stringp, "#"); s2 = strsep(&stringp, "#"); if (s2) { - if (!ast_strlen_zero(p->cid_num)) + if (!ast_strlen_zero(p->cid_num)) { ast_set_callerid(chan, p->cid_num, NULL, p->cid_num); - else - if (*(s1 + 2)) + } else { + if (*(s1 + 2)) { ast_set_callerid(chan, s1 + 2, NULL, s1 + 2); + } + } ast_copy_string(exten, s2 + 1, sizeof(exten)); - } else + } else { ast_copy_string(exten, s1 + 2, sizeof(exten)); - } else + } + } else { ast_log(LOG_WARNING, "Got a non-Feature Group D input on channel %d. Assuming E&M Wink instead\n", p->channel); + } } if ((p->sig == ANALOG_SIG_E911) || (p->sig == ANALOG_SIG_FGC_CAMAMF)) { if (exten[0] == '*') { @@ -1565,13 +1633,18 @@ s1 = strsep(&stringp, "#"); s2 = strsep(&stringp, "#"); if (s2 && (*(s2 + 1) == '0')) { - if (*(s2 + 2)) + if (*(s2 + 2)) { ast_set_callerid(chan, s2 + 2, NULL, s2 + 2); + } } - if (s1) ast_copy_string(exten, s1, sizeof(exten)); - else ast_copy_string(exten, "911", sizeof(exten)); - } else + if (s1) { + ast_copy_string(exten, s1, sizeof(exten)); + } else { + ast_copy_string(exten, "911", sizeof(exten)); + } + } else { ast_log(LOG_WARNING, "Got a non-E911/FGC CAMA input on channel %d. Assuming E&M Wink instead\n", p->channel); + } } if (p->sig == ANALOG_SIG_FEATB) { if (exten[0] == '*') { @@ -1581,15 +1654,18 @@ stringp=exten2 +1; s1 = strsep(&stringp, "#"); ast_copy_string(exten, exten2 + 1, sizeof(exten)); - } else + } else { ast_log(LOG_WARNING, "Got a non-Feature Group B input on channel %d. Assuming E&M Wink instead\n", p->channel); + } } if ((p->sig == ANALOG_SIG_FEATDMF) || (p->sig == ANALOG_SIG_FEATDMF_TA)) { analog_wink(p, index); /* some switches require a minimum guard time between the last FGD wink and something that answers immediately. This ensures it */ - if (ast_safe_sleep(chan,100)) goto quit; + if (ast_safe_sleep(chan,100)) { + goto quit; + } } analog_set_echocanceller(p, 1); @@ -1608,13 +1684,15 @@ ast_verb(3, "Unknown extension '%s' in context '%s' requested\n", exten, chan->context); sleep(2); res = analog_play_tone(p, index, ANALOG_TONE_INFO); - if (res < 0) + if (res < 0) { ast_log(LOG_WARNING, "Unable to start special tone on %d\n", p->channel); - else + } else { sleep(1); + } res = ast_streamfile(chan, "ss-noservice", chan->language); - if (res >= 0) + if (res >= 0) { ast_waitstream(chan, ""); + } res = analog_play_tone(p, index, ANALOG_TONE_CONGESTION); ast_hangup(chan); goto quit; @@ -1627,29 +1705,32 @@ timeout = analog_firstdigittimeout; /* If starting a threeway call, never timeout on the first digit so someone can use flash-hook as a "hold" feature */ - if (p->subs[ANALOG_SUB_THREEWAY].owner) + if (p->subs[ANALOG_SUB_THREEWAY].owner) { timeout = 999999; + } while (len < AST_MAX_EXTENSION-1) { /* Read digit unless it's supposed to be immediate, in which case the only answer is 's' */ - if (p->immediate) + if (p->immediate) { res = 's'; - else + } else { res = ast_waitfordigit(chan, timeout); + } timeout = 0; if (res < 0) { ast_debug(1, "waitfordigit returned < 0...\n"); res = analog_play_tone(p, index, -1); ast_hangup(chan); goto quit; - } else if (res) { + } else if (res) { exten[len++]=res; exten[len] = '\0'; } - if (!ast_ignore_pattern(chan->context, exten)) + if (!ast_ignore_pattern(chan->context, exten)) { analog_play_tone(p, index, -1); - else + } else { analog_play_tone(p, index, ANALOG_TONE_DIALTONE); + } if (ast_exists_extension(chan, chan->context, exten, 1, p->cid_num) && strcmp(exten, ast_parking_ext())) { if (!res || !ast_matchmore_extension(chan, chan->context, exten, 1, p->cid_num)) { if (getforward) { @@ -1657,8 +1738,9 @@ ast_copy_string(p->call_forward, exten, sizeof(p->call_forward)); ast_verb(3, "Setting call forward to '%s' on channel %d\n", p->call_forward, p->channel); res = analog_play_tone(p, index, ANALOG_TONE_DIALRECALL); - if (res) + if (res) { break; + } usleep(500000); res = analog_play_tone(p, index, -1); sleep(1); @@ -1666,18 +1748,20 @@ res = analog_play_tone(p, index, ANALOG_TONE_DIALTONE); len = 0; getforward = 0; - } else { + } else { res = analog_play_tone(p, index, -1); ast_copy_string(chan->exten, exten, sizeof(chan->exten)); if (!ast_strlen_zero(p->cid_num)) { - if (!p->hidecallerid) + if (!p->hidecallerid) { ast_set_callerid(chan, p->cid_num, NULL, p->cid_num); - else + } else { ast_set_callerid(chan, NULL, NULL, p->cid_num); + } } if (!ast_strlen_zero(p->cid_name)) { - if (!p->hidecallerid) + if (!p->hidecallerid) { ast_set_callerid(chan, NULL, p->cid_name, NULL); + } } ast_setstate(chan, AST_STATE_RING); analog_set_echocanceller(p, 1); @@ -1743,11 +1827,13 @@ ast_verb(3, "Disabling Caller*ID on %s\n", chan->name); /* Disable Caller*ID if enabled */ p->hidecallerid = 1; - if (chan->cid.cid_num) + if (chan->cid.cid_num) { free(chan->cid.cid_num); + } chan->cid.cid_num = NULL; - if (chan->cid.cid_name) + if (chan->cid.cid_name) { free(chan->cid.cid_name); + } chan->cid.cid_name = NULL; res = analog_play_tone(p, index, ANALOG_TONE_DIALRECALL); if (res) { @@ -1762,8 +1848,9 @@ if (!ast_strlen_zero(p->lastcid_num)) { res = ast_say_digit_str(chan, p->lastcid_num, "", chan->language); } - if (!res) + if (!res) { res = analog_play_tone(p, index, ANALOG_TONE_DIALRECALL); + } break; } else if (!strcmp(exten, "*78")) { /* Do not disturb */ @@ -1819,11 +1906,13 @@ ast_verb(3, "Enabling Caller*ID on %s\n", chan->name); /* Enable Caller*ID if enabled */ p->hidecallerid = 0; - if (chan->cid.cid_num) + if (chan->cid.cid_num) { free(chan->cid.cid_num); + } chan->cid.cid_num = NULL; - if (chan->cid.cid_name) + if (chan->cid.cid_name) { free(chan->cid.cid_name); + } chan->cid.cid_name = NULL; ast_set_callerid(chan, p->cid_num, p->cid_name, NULL); res = analog_play_tone(p, index, ANALOG_TONE_DIALRECALL); @@ -1838,8 +1927,9 @@ struct ast_channel *nbridge = p->subs[ANALOG_SUB_THREEWAY].owner; struct analog_pvt *pbridge = NULL; /* set up the private struct of the bridged one, if any */ - if (nbridge && ast_bridged_channel(nbridge)) + if (nbridge && ast_bridged_channel(nbridge)) { pbridge = analog_get_bridged_channel(p, nbridge); + } if (nbridge && pbridge && (nbridge->tech == p->chan_tech) && (ast_bridged_channel(nbridge)->tech == p->chan_tech) && @@ -1854,8 +1944,9 @@ analog_swap_subs(p, ANALOG_SUB_REAL, ANALOG_SUB_THREEWAY); analog_unalloc_sub(p, ANALOG_SUB_THREEWAY); p->owner = p->subs[ANALOG_SUB_REAL].owner; - if (ast_bridged_channel(p->subs[ANALOG_SUB_REAL].owner)) + if (ast_bridged_channel(p->subs[ANALOG_SUB_REAL].owner)) { ast_queue_control(p->subs[ANALOG_SUB_REAL].owner, AST_CONTROL_UNHOLD); + } ast_hangup(chan); goto quit; } else { @@ -1873,10 +1964,12 @@ ast_debug(1, "Can't match %s from '%s' in context %s\n", exten, chan->cid.cid_num ? chan->cid.cid_num : "", chan->context); break; } - if (!timeout) + if (!timeout) { timeout = analog_gendigittimeout; - if (len && !ast_ignore_pattern(chan->context, exten)) + } + if (len && !ast_ignore_pattern(chan->context, exten)) { analog_play_tone(p, index, -1); + } } break; case ANALOG_SIG_FXSLS: @@ -1906,17 +1999,18 @@ ast_hangup(chan); goto quit; } - if (!(f = ast_read(chan))) + if (!(f = ast_read(chan))) { break; + } if (f->frametype == AST_FRAME_DTMF) { dtmfbuf[i++] = f->subclass; ast_debug(1, "CID got digit '%c'\n", f->subclass); res = 2000; } ast_frfree(f); - if (chan->_state == AST_STATE_RING || - chan->_state == AST_STATE_RINGING) + if (chan->_state == AST_STATE_RING || chan->_state == AST_STATE_RINGING) { break; /* Got ring */ + } } dtmfbuf[i] = '\0'; @@ -1928,10 +2022,11 @@ ast_debug(1, "CID is '%s', flags %d\n", dtmfcid, flags); /* If first byte is NULL, we have no cid */ - if (!ast_strlen_zero(dtmfcid)) + if (!ast_strlen_zero(dtmfcid)) { number = dtmfcid; - else + } else { number = NULL; + } /* If set to use V23 Signalling, launch our FSK gubbins and listen for it */ } else if ((p->cid_signalling == CID_SIG_V23) || (p->cid_signalling == CID_SIG_V23_JP)) { @@ -2000,14 +2095,16 @@ break; /* Got ring */ } - if (analog_distinctive_ring(chan, p, index, NULL)) + if (analog_distinctive_ring(chan, p, index, NULL)) { goto quit; + } if (res < 0) { ast_log(LOG_WARNING, "CallerID returned with error on channel '%s'\n", chan->name); } - } else + } else { ast_log(LOG_WARNING, "Unable to get caller ID space\n"); + } } else { ast_log(LOG_WARNING, "Channel %s in prering " @@ -2070,24 +2167,28 @@ analog_stop_cid_detect(p); - if (analog_distinctive_ring(chan, p, index, curRingData)) + if (analog_distinctive_ring(chan, p, index, curRingData)) { goto quit; + } if (res < 0) { ast_log(LOG_WARNING, "CallerID returned with error on channel '%s'\n", chan->name); } - } else + } else { ast_log(LOG_WARNING, "Unable to get caller ID space\n"); + } + } else { + cs = NULL; } - else - cs = NULL; - if (number) + if (number) { ast_shrink_phone_number(number); + } ast_set_callerid(chan, number, name, number); - if (cs) + if (cs) { callerid_free(cs); + } analog_handle_notify_message(chan, p, flags, -1); @@ -2105,8 +2206,9 @@ break; } res = analog_play_tone(p, index, ANALOG_TONE_CONGESTION); - if (res < 0) + if (res < 0) { ast_log(LOG_WARNING, "Unable to play congestion tone on channel %d\n", p->channel); + } ast_hangup(chan); quit: analog_decrease_ss_count(p); @@ -2134,8 +2236,9 @@ index = analog_get_index(ast, p, 0); mysig = p->sig; - if (p->outsigmod > -1) + if (p->outsigmod > -1) { mysig = p->outsigmod; + } p->subs[index].f.frametype = AST_FRAME_NULL; p->subs[index].f.subclass = 0; p->subs[index].f.datalen = 0; @@ -2146,8 +2249,9 @@ p->subs[index].f.data.ptr = NULL; f = &p->subs[index].f; - if (index < 0) + if (index < 0) { return &p->subs[index].f; + } if (index != ANALOG_SUB_REAL) { ast_log(LOG_ERROR, "We got an event on a non real sub. Fix it!\n"); @@ -2170,7 +2274,9 @@ analog_play_tone(p, ANALOG_SUB_REAL, -1); break; case ANALOG_EVENT_DIALCOMPLETE: - if (p->inalarm) break; + if (p->inalarm) { + break; + } x = analog_is_dialing(p, index); if (!x) { /* if not still dialing in driver */ analog_set_echocanceller(p, 1); @@ -2234,8 +2340,9 @@ analog_stop_callwait(p); p->owner = NULL; /* Don't start streaming audio yet if the incoming call isn't up yet */ - if (p->subs[ANALOG_SUB_REAL].owner->_state != AST_STATE_UP) + if (p->subs[ANALOG_SUB_REAL].owner->_state != AST_STATE_UP) { analog_set_dialing(p, 1); + } analog_ring(p); } else if (p->subs[ANALOG_SUB_THREEWAY].owner) { unsigned int mssinceflash; @@ -2263,8 +2370,9 @@ if (mssinceflash < MIN_MS_SINCE_FLASH) { /* It hasn't been long enough since the last flashook. This is probably a bounce on hanging up. Hangup both channels now */ - if (p->subs[ANALOG_SUB_THREEWAY].owner) + if (p->subs[ANALOG_SUB_THREEWAY].owner) { ast_queue_hangup_with_cause(p->subs[ANALOG_SUB_THREEWAY].owner, AST_CAUSE_NO_ANSWER); + } ast_softhangup_nolock(p->subs[ANALOG_SUB_THREEWAY].owner, AST_SOFTHANGUP_DEV); ast_debug(1, "Looks like a bounced flash, hanging up both calls on %d\n", p->channel); ast_channel_unlock(p->subs[ANALOG_SUB_THREEWAY].owner); @@ -2281,16 +2389,18 @@ } else { if ((res = analog_attempt_transfer(p)) < 0) { ast_softhangup_nolock(p->subs[ANALOG_SUB_THREEWAY].owner, AST_SOFTHANGUP_DEV); - if (p->subs[ANALOG_SUB_THREEWAY].owner) + if (p->subs[ANALOG_SUB_THREEWAY].owner) { ast_channel_unlock(p->subs[ANALOG_SUB_THREEWAY].owner); + } } else if (res) { /* this isn't a threeway call anymore */ p->subs[ANALOG_SUB_REAL].inthreeway = 0; p->subs[ANALOG_SUB_THREEWAY].inthreeway = 0; /* Don't actually hang up at this point */ - if (p->subs[ANALOG_SUB_THREEWAY].owner) + if (p->subs[ANALOG_SUB_THREEWAY].owner) { ast_channel_unlock(&p->subs[ANALOG_SUB_THREEWAY].owner); + } break; } } @@ -2299,8 +2409,9 @@ p->subs[ANALOG_SUB_THREEWAY].inthreeway = 0; } else { ast_softhangup_nolock(p->subs[ANALOG_SUB_THREEWAY].owner, AST_SOFTHANGUP_DEV); - if (p->subs[ANALOG_SUB_THREEWAY].owner) + if (p->subs[ANALOG_SUB_THREEWAY].owner) { ast_channel_unlock(p->subs[ANALOG_SUB_THREEWAY].owner); + } } } else { ast_cel_report_event(ast, AST_CEL_BLINDTRANSFER, NULL, ast->linkedid, NULL); @@ -2322,25 +2433,32 @@ } break; case ANALOG_EVENT_RINGOFFHOOK: - if (p->inalarm) break; + if (p->inalarm) { + break; + } /* for E911, its supposed to wait for offhook then dial the second half of the dial string */ if (((mysig == ANALOG_SIG_E911) || (mysig == ANALOG_SIG_FGC_CAMA) || (mysig == ANALOG_SIG_FGC_CAMAMF)) && (ast->_state == AST_STATE_DIALING_OFFHOOK)) { c = strchr(p->dialdest, '/'); - if (c) + if (c) { c++; - else + } else { c = p->dialdest; - if (*c) snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*0%s#", c); - else ast_copy_string(p->dop.dialstr,"M*2#", sizeof(p->dop.dialstr)); + } + if (*c) { + snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*0%s#", c); + } else { + ast_copy_string(p->dop.dialstr,"M*2#", sizeof(p->dop.dialstr)); + } if (strlen(p->dop.dialstr) > 4) { memset(p->echorest, 'w', sizeof(p->echorest) - 1); strcpy(p->echorest + (p->echotraining / 401) + 1, p->dop.dialstr + strlen(p->dop.dialstr) - 2); p->echorest[sizeof(p->echorest) - 1] = '\0'; p->echobreak = 1; p->dop.dialstr[strlen(p->dop.dialstr)-2] = '\0'; - } else + } else { p->echobreak = 0; + } if (analog_dial_digits(p, ANALOG_SUB_REAL, &p->dop)) { int saveerr = errno; analog_on_hook(p); @@ -2381,8 +2499,9 @@ } p->dop.dialstr[0] = '\0'; ast_setstate(ast, AST_STATE_DIALING); - } else + } else { ast_setstate(ast, AST_STATE_UP); + } return &p->subs[index].f; case AST_STATE_DOWN: ast_setstate(ast, AST_STATE_RING); @@ -2395,15 +2514,17 @@ /* Make sure it stops ringing */ analog_off_hook(p); /* Okay -- probably call waiting*/ - if (ast_bridged_channel(p->owner)) + if (ast_bridged_channel(p->owner)) { ast_queue_control(p->owner, AST_CONTROL_UNHOLD); + } break; case AST_STATE_RESERVED: /* Start up dialtone */ - if (analog_has_voicemail(p)) + if (analog_has_voicemail(p)) { res = analog_play_tone(p, ANALOG_SUB_REAL, ANALOG_TONE_STUTTER); - else + } else { res = analog_play_tone(p, ANALOG_SUB_REAL, ANALOG_TONE_DIALTONE); + } break; default: ast_log(LOG_WARNING, "FXO phone off hook in weird state %d??\n", ast->_state); @@ -2432,8 +2553,9 @@ case ANALOG_SIG_SF_FEATD: case ANALOG_SIG_SF_FEATDMF: case ANALOG_SIG_SF_FEATB: - if (ast->_state == AST_STATE_PRERING) + if (ast->_state == AST_STATE_PRERING) { ast_setstate(ast, AST_STATE_RING); + } if ((ast->_state == AST_STATE_DOWN) || (ast->_state == AST_STATE_RING)) { ast_debug(1, "Ring detected\n"); p->subs[index].f.frametype = AST_FRAME_CONTROL; @@ -2443,8 +2565,9 @@ p->subs[index].f.frametype = AST_FRAME_CONTROL; p->subs[index].f.subclass = AST_CONTROL_ANSWER; ast_setstate(ast, AST_STATE_UP); - } else if (ast->_state != AST_STATE_RING) + } else if (ast->_state != AST_STATE_RING) { ast_log(LOG_WARNING, "Ring/Off-hook in strange state %d on channel %d\n", ast->_state, p->channel); + } break; default: ast_log(LOG_WARNING, "Don't know how to handle ring/off hook for signalling %d\n", p->sig); @@ -2489,7 +2612,9 @@ } break; case ANALOG_EVENT_WINKFLASH: - if (p->inalarm) break; + if (p->inalarm) { + break; + } /* Remember last time we got a flash-hook */ gettimeofday(&p->flashtime, NULL); switch (mysig) { @@ -2543,10 +2668,12 @@ goto winkflashdone; } else if (!analog_check_for_conference(p)) { if (p->dahditrcallerid && p->owner) { - if (p->owner->cid.cid_num) + if (p->owner->cid.cid_num) { ast_copy_string(cid_num, p->owner->cid.cid_num, sizeof(cid_num)); - if (p->owner->cid.cid_name) + } + if (p->owner->cid.cid_name) { ast_copy_string(cid_name, p->owner->cid.cid_name, sizeof(cid_name)); + } } /* XXX This section needs much more error checking!!! XXX */ /* Start a 3-way call if feasible */ @@ -2563,10 +2690,12 @@ /* Make new channel */ chan = analog_new_ast_channel(p, AST_STATE_RESERVED, 0, ANALOG_SUB_THREEWAY, NULL); if (p->dahditrcallerid) { - if (!p->origcid_num) + if (!p->origcid_num) { p->origcid_num = ast_strdup(p->cid_num); - if (!p->origcid_name) + } + if (!p->origcid_name) { p->origcid_name = ast_strdup(p->cid_name); + } ast_copy_string(p->cid_num, cid_num, sizeof(p->cid_num)); ast_copy_string(p->cid_name, cid_name, sizeof(p->cid_name)); } @@ -2575,8 +2704,9 @@ /* Disable echo canceller for better dialing */ analog_set_echocanceller(p, 0); res = analog_play_tone(p, ANALOG_SUB_REAL, ANALOG_TONE_DIALRECALL); - if (res) + if (res) { ast_log(LOG_WARNING, "Unable to start dial recall tone on channel %d\n", p->channel); + } p->ss_astchan = p->owner = chan; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); @@ -2593,11 +2723,13 @@ if (!other) { other = ast_bridged_channel(p->subs[ANALOG_SUB_REAL].owner); - } else + } else { way3bridge = 1; + } - if (p->subs[ANALOG_SUB_THREEWAY].owner->cdr) + if (p->subs[ANALOG_SUB_THREEWAY].owner->cdr) { cdr3way = 1; + } ast_verb(3, "Started three way call on channel %d\n", p->channel); /* Start music on hold if appropriate */ @@ -2615,7 +2747,8 @@ /* Call is already up, drop the last person */ ast_debug(1, "Got flash with three way call up, dropping last call on %d\n", p->channel); /* If the primary call isn't answered yet, use it */ - if ((p->subs[ANALOG_SUB_REAL].owner->_state != AST_STATE_UP) && (p->subs[ANALOG_SUB_THREEWAY].owner->_state == AST_STATE_UP)) { + if ((p->subs[ANALOG_SUB_REAL].owner->_state != AST_STATE_UP) && + (p->subs[ANALOG_SUB_THREEWAY].owner->_state == AST_STATE_UP)) { /* Swap back -- we're dropping the real 3-way that isn't finished yet*/ analog_swap_subs(p, ANALOG_SUB_THREEWAY, ANALOG_SUB_REAL); p->owner = p->subs[ANALOG_SUB_REAL].owner; @@ -2628,18 +2761,20 @@ } else { /* Lets see what we're up to */ if (((ast->pbx) || (ast->_state == AST_STATE_UP)) && - (p->transfertobusy || (ast->_state != AST_STATE_BUSY))) { + (p->transfertobusy || (ast->_state != AST_STATE_BUSY))) { int otherindex = ANALOG_SUB_THREEWAY; struct ast_channel *other = ast_bridged_channel(p->subs[ANALOG_SUB_THREEWAY].owner); int way3bridge = 0, cdr3way = 0; if (!other) { other = ast_bridged_channel(p->subs[ANALOG_SUB_REAL].owner); - } else + } else { way3bridge = 1; + } - if (p->subs[ANALOG_SUB_THREEWAY].owner->cdr) + if (p->subs[ANALOG_SUB_THREEWAY].owner->cdr) { cdr3way = 1; + } ast_verb(3, "Building conference on call on %s and %s\n", p->subs[ANALOG_SUB_THREEWAY].owner->name, p->subs[ANALOG_SUB_REAL].owner->name); /* Put them in the threeway, and flip */ @@ -2649,8 +2784,9 @@ analog_swap_subs(p, ANALOG_SUB_THREEWAY, ANALOG_SUB_REAL); otherindex = ANALOG_SUB_REAL; } - if (p->subs[otherindex].owner && ast_bridged_channel(p->subs[otherindex].owner)) + if (p->subs[otherindex].owner && ast_bridged_channel(p->subs[otherindex].owner)) { ast_queue_control(p->subs[otherindex].owner, AST_CONTROL_UNHOLD); + } p->owner = p->subs[ANALOG_SUB_REAL].owner; if (ast->_state == AST_STATE_RINGING) { ast_debug(1, "Enabling ringtone on real and threeway\n"); @@ -2662,8 +2798,9 @@ analog_swap_subs(p, ANALOG_SUB_THREEWAY, ANALOG_SUB_REAL); ast_softhangup_nolock(p->subs[ANALOG_SUB_THREEWAY].owner, AST_SOFTHANGUP_DEV); p->owner = p->subs[ANALOG_SUB_REAL].owner; - if (p->subs[ANALOG_SUB_REAL].owner && ast_bridged_channel(p->subs[ANALOG_SUB_REAL].owner)) + if (p->subs[ANALOG_SUB_REAL].owner && ast_bridged_channel(p->subs[ANALOG_SUB_REAL].owner)) { ast_queue_control(p->subs[ANALOG_SUB_REAL].owner, AST_CONTROL_UNHOLD); + } analog_set_echocanceller(p, 1); } } @@ -2679,10 +2816,11 @@ case ANALOG_SIG_SF_FEATD: case ANALOG_SIG_FXSLS: case ANALOG_SIG_FXSGS: - if (p->dialing) + if (p->dialing) { ast_debug(1, "Ignoring wink on channel %d\n", p->channel); - else + } else { ast_debug(1, "Got wink in weird state %d on channel %d\n", ast->_state, p->channel); + } break; case ANALOG_SIG_FEATDMF_TA: switch (p->whichwink) { @@ -2714,8 +2852,9 @@ ast_log(LOG_WARNING, "Unable to initiate dialing on trunk channel %d: %s\n", p->channel, strerror(errno)); p->dop.dialstr[0] = '\0'; return NULL; - } else + } else { ast_debug(1, "Sent deferred digit string on channel %d: %s\n", p->channel, p->dop.dialstr); + } } p->dop.dialstr[0] = '\0'; break; @@ -2742,8 +2881,9 @@ ast_log(LOG_WARNING, "Unable to initiate dialing on trunk channel %d: %s\n", p->channel, strerror(errno)); p->dop.dialstr[0] = '\0'; return NULL; - } else + } else { ast_debug(1, "Sent deferred digit string on channel %d: %s\n", p->channel, p->dop.dialstr); + } } p->dop.dialstr[0] = '\0'; p->dop.op = ANALOG_DIAL_OP_REPLACE; @@ -2882,8 +3022,9 @@ (res != ANALOG_EVENT_HOOKCOMPLETE)) { ast_debug(1, "Restoring owner of channel %d on event %d\n", p->channel, res); p->owner = p->subs[ANALOG_SUB_REAL].owner; - if (p->owner && ast_bridged_channel(p->owner)) + if (p->owner && ast_bridged_channel(p->owner)) { ast_queue_control(p->owner, AST_CONTROL_UNHOLD); + } } switch (res) { case ANALOG_EVENT_ONHOOK: @@ -2892,8 +3033,9 @@ ast_verb(3, "Channel %s still has call, ringing phone\n", p->owner->name); analog_ring(p); analog_stop_callwait(p); - } else + } else { ast_log(LOG_WARNING, "Absorbed on hook, but nobody is left!?!?\n"); + } analog_update_conf(p); break; case ANALOG_EVENT_RINGOFFHOOK: @@ -2922,10 +3064,12 @@ ast_setstate(p->owner, AST_STATE_UP); } analog_stop_callwait(p); - if (ast_bridged_channel(p->owner)) + if (ast_bridged_channel(p->owner)) { ast_queue_control(p->owner, AST_CONTROL_UNHOLD); - } else + } + } else { ast_log(LOG_WARNING, "Absorbed on hook, but nobody is left!?!?\n"); + } analog_update_conf(p); break; default: @@ -2961,7 +3105,9 @@ switch (event) { case ANALOG_EVENT_WINKFLASH: case ANALOG_EVENT_RINGOFFHOOK: - if (i->inalarm) break; + if (i->inalarm) { + break; + } /* Got a ring/answer. What kind of channel are we? */ switch (i->sig) { case ANALOG_SIG_FXOLS: @@ -2969,8 +3115,9 @@ case ANALOG_SIG_FXOKS: res = analog_off_hook(i); i->fxsoffhookstate = 1; - if (res && (errno == EBUSY)) + if (res && (errno == EBUSY)) { break; + } if (i->immediate) { analog_set_echocanceller(i, 1); /* The channel is immediately up. Start right away */ @@ -2979,36 +3126,40 @@ if (!chan) { ast_log(LOG_WARNING, "Unable to start PBX on channel %d\n", i->channel); res = analog_play_tone(i, ANALOG_SUB_REAL, ANALOG_TONE_CONGESTION); - if (res < 0) + if (res < 0) { ast_log(LOG_WARNING, "Unable to play congestion tone on channel %d\n", i->channel); + } } } else { /* Check for callerid, digits, etc */ chan = analog_new_ast_channel(i, AST_STATE_RESERVED, 0, ANALOG_SUB_REAL, NULL); i->ss_astchan = chan; if (chan) { - if (analog_has_voicemail(i)) + if (analog_has_voicemail(i)) { res = analog_play_tone(i, ANALOG_SUB_REAL, ANALOG_TONE_STUTTER); - else + } else { res = analog_play_tone(i, ANALOG_SUB_REAL, ANALOG_TONE_DIALTONE); + } if (res < 0) ast_log(LOG_WARNING, "Unable to play dialtone on channel %d, do you have defaultzone and loadzone defined?\n", i->channel); if (ast_pthread_create(&threadid, &attr, __analog_ss_thread, i)) { ast_log(LOG_WARNING, "Unable to start simple switch thread on channel %d\n", i->channel); res = analog_play_tone(i, ANALOG_SUB_REAL, ANALOG_TONE_CONGESTION); - if (res < 0) + if (res < 0) { ast_log(LOG_WARNING, "Unable to play congestion tone on channel %d\n", i->channel); + } ast_hangup(chan); } - } else + } else { ast_log(LOG_WARNING, "Unable to create channel\n"); + } } break; case ANALOG_SIG_FXSLS: case ANALOG_SIG_FXSGS: case ANALOG_SIG_FXSKS: - i->ringt = i->ringt_base; - /* Fall through */ + i->ringt = i->ringt_base; + /* Fall through */ case ANALOG_SIG_EMWINK: case ANALOG_SIG_FEATD: case ANALOG_SIG_FEATDMF: @@ -3024,28 +3175,30 @@ case ANALOG_SIG_SF_FEATDMF: case ANALOG_SIG_SF_FEATB: case ANALOG_SIG_SF: - /* Check for callerid, digits, etc */ - if (i->cid_start == ANALOG_CID_START_POLARITY_IN) { - chan = analog_new_ast_channel(i, AST_STATE_PRERING, 0, ANALOG_SUB_REAL, NULL); - } else { - chan = analog_new_ast_channel(i, AST_STATE_RING, 0, ANALOG_SUB_REAL, NULL); + /* Check for callerid, digits, etc */ + if (i->cid_start == ANALOG_CID_START_POLARITY_IN) { + chan = analog_new_ast_channel(i, AST_STATE_PRERING, 0, ANALOG_SUB_REAL, NULL); + } else { + chan = analog_new_ast_channel(i, AST_STATE_RING, 0, ANALOG_SUB_REAL, NULL); + } + i->ss_astchan = chan; + if (chan && ast_pthread_create(&threadid, &attr, __analog_ss_thread, i)) { + ast_log(LOG_WARNING, "Unable to start simple switch thread on channel %d\n", i->channel); + res = analog_play_tone(i, ANALOG_SUB_REAL, ANALOG_TONE_CONGESTION); + if (res < 0) { + ast_log(LOG_WARNING, "Unable to play congestion tone on channel %d\n", i->channel); } - i->ss_astchan = chan; - if (chan && ast_pthread_create(&threadid, &attr, __analog_ss_thread, i)) { - ast_log(LOG_WARNING, "Unable to start simple switch thread on channel %d\n", i->channel); - res = analog_play_tone(i, ANALOG_SUB_REAL, ANALOG_TONE_CONGESTION); - if (res < 0) - ast_log(LOG_WARNING, "Unable to play congestion tone on channel %d\n", i->channel); - ast_hangup(chan); - } else if (!chan) { - ast_log(LOG_WARNING, "Cannot allocate new structure on channel %d\n", i->channel); - } - break; + ast_hangup(chan); + } else if (!chan) { + ast_log(LOG_WARNING, "Cannot allocate new structure on channel %d\n", i->channel); + } + break; default: ast_log(LOG_WARNING, "Don't know how to handle ring/answer with signalling %s on channel %d\n", analog_sigtype_to_str(i->sig), i->channel); res = analog_play_tone(i, ANALOG_SUB_REAL, ANALOG_TONE_CONGESTION); - if (res < 0) - ast_log(LOG_WARNING, "Unable to play congestion tone on channel %d\n", i->channel); + if (res < 0) { + ast_log(LOG_WARNING, "Unable to play congestion tone on channel %d\n", i->channel); + } return -1; } break; @@ -3118,8 +3271,9 @@ created, but it wasn't handled. We need polarity to be REV for remote hangup detection to work. At least in Spain */ - if (i->hanguponpolarityswitch) + if (i->hanguponpolarityswitch) { i->polarity = POLARITY_REV; + } if (i->cid_start == ANALOG_CID_START_POLARITY || i->cid_start == ANALOG_CID_START_POLARITY_IN) { i->polarity = POLARITY_REV; @@ -3157,8 +3311,9 @@ p = ast_calloc(1, sizeof(*p)); - if (!p) + if (!p) { return p; + } p->calls = c; p->outsigmod = ANALOG_SIG_NONE; @@ -3177,8 +3332,9 @@ int analog_config_complete(struct analog_pvt *p) { /* No call waiting on non FXS channels */ - if ((p->sig != ANALOG_SIG_FXOKS) && (p->sig != ANALOG_SIG_FXOLS) && (p->sig != ANALOG_SIG_FXOGS)) + if ((p->sig != ANALOG_SIG_FXOKS) && (p->sig != ANALOG_SIG_FXOLS) && (p->sig != ANALOG_SIG_FXOGS)) { p->permcallwaiting = 0; + } p->callwaiting = p->permcallwaiting; @@ -3199,10 +3355,11 @@ if (new_pvt->owner == oldchan) { new_pvt->owner = newchan; } - for (x = 0; x < 3; x++) + for (x = 0; x < 3; x++) { if (new_pvt->subs[x].owner == oldchan) { new_pvt->subs[x].owner = newchan; } + } analog_update_conf(new_pvt); return 0;