aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authorrmudgett <rmudgett@f38db490-d61c-443f-a65b-d21fe96a405b>2010-09-15 18:29:21 +0000
committerrmudgett <rmudgett@f38db490-d61c-443f-a65b-d21fe96a405b>2010-09-15 18:29:21 +0000
commit875423271150e62e0c6d568fd54abb1c87f5c3f8 (patch)
treef96186204d5cdc83bce8dc47a4f9f472bfb5e0cc /channels
parent6f8acde22bfce939e74af124c7dffef4ede42c84 (diff)
Simplify some code in sig_analog.
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.8@286905 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r--channels/sig_analog.c36
1 files changed, 23 insertions, 13 deletions
diff --git a/channels/sig_analog.c b/channels/sig_analog.c
index 868159337..7bb3c293c 100644
--- a/channels/sig_analog.c
+++ b/channels/sig_analog.c
@@ -2810,29 +2810,39 @@ static struct ast_frame *__analog_handle_event(struct analog_pvt *p, struct ast_
case ANALOG_SIG_SF_FEATD:
case ANALOG_SIG_SF_FEATDMF:
case ANALOG_SIG_SF_FEATB:
- if (ast->_state == AST_STATE_PRERING) {
+ switch (ast->_state) {
+ case AST_STATE_PRERING:
ast_setstate(ast, AST_STATE_RING);
- }
- if ((ast->_state == AST_STATE_DOWN) || (ast->_state == AST_STATE_RING)) {
+ /* Fall through */
+ case AST_STATE_DOWN:
+ case AST_STATE_RING:
ast_debug(1, "Ring detected\n");
p->subs[index].f.frametype = AST_FRAME_CONTROL;
p->subs[index].f.subclass.integer = AST_CONTROL_RING;
- } else if (p->outgoing && ((ast->_state == AST_STATE_RINGING) || (ast->_state == AST_STATE_DIALING))) {
- ast_debug(1, "Line answered\n");
- if (analog_check_confirmanswer(p)) {
- p->subs[index].f.frametype = AST_FRAME_NULL;
- p->subs[index].f.subclass.integer = 0;
- } else {
- p->subs[index].f.frametype = AST_FRAME_CONTROL;
- p->subs[index].f.subclass.integer = AST_CONTROL_ANSWER;
- ast_setstate(ast, AST_STATE_UP);
+ break;
+ case AST_STATE_RINGING:
+ case AST_STATE_DIALING:
+ if (p->outgoing) {
+ ast_debug(1, "Line answered\n");
+ if (analog_check_confirmanswer(p)) {
+ p->subs[index].f.frametype = AST_FRAME_NULL;
+ p->subs[index].f.subclass.integer = 0;
+ } else {
+ p->subs[index].f.frametype = AST_FRAME_CONTROL;
+ p->subs[index].f.subclass.integer = AST_CONTROL_ANSWER;
+ ast_setstate(ast, AST_STATE_UP);
+ }
+ break;
}
- } else if (ast->_state != AST_STATE_RING) {
+ /* Fall through */
+ default:
ast_log(LOG_WARNING, "Ring/Off-hook in strange state %d on channel %d\n", ast->_state, p->channel);
+ break;
}
break;
default:
ast_log(LOG_WARNING, "Don't know how to handle ring/off hook for signalling %d\n", p->sig);
+ break;
}
break;
#ifdef ANALOG_EVENT_RINGBEGIN