diff --git a/include/asterisk/devicestate.h b/include/asterisk/devicestate.h index 5c053d0cac..9b11519242 100644 --- a/include/asterisk/devicestate.h +++ b/include/asterisk/devicestate.h @@ -255,7 +255,7 @@ struct ast_devstate_aggregate { unsigned int all_unavail:1; unsigned int all_busy:1; unsigned int all_free:1; - unsigned int all_on_hold:1; + unsigned int on_hold:1; unsigned int busy:1; unsigned int in_use:1; unsigned int ring:1; diff --git a/main/devicestate.c b/main/devicestate.c index 4503be4444..c100731161 100644 --- a/main/devicestate.c +++ b/main/devicestate.c @@ -764,7 +764,6 @@ void ast_devstate_aggregate_init(struct ast_devstate_aggregate *agg) agg->all_unavail = 1; agg->all_busy = 1; agg->all_free = 1; - agg->all_on_hold = 1; } void ast_devstate_aggregate_add(struct ast_devstate_aggregate *agg, enum ast_device_state state) @@ -773,21 +772,18 @@ void ast_devstate_aggregate_add(struct ast_devstate_aggregate *agg, enum ast_dev case AST_DEVICE_NOT_INUSE: agg->all_unavail = 0; agg->all_busy = 0; - agg->all_on_hold = 0; break; case AST_DEVICE_INUSE: agg->in_use = 1; agg->all_busy = 0; agg->all_unavail = 0; agg->all_free = 0; - agg->all_on_hold = 0; break; case AST_DEVICE_RINGING: agg->ring = 1; agg->all_busy = 0; agg->all_unavail = 0; agg->all_free = 0; - agg->all_on_hold = 0; break; case AST_DEVICE_RINGINUSE: agg->in_use = 1; @@ -795,23 +791,22 @@ void ast_devstate_aggregate_add(struct ast_devstate_aggregate *agg, enum ast_dev agg->all_busy = 0; agg->all_unavail = 0; agg->all_free = 0; - agg->all_on_hold = 0; break; case AST_DEVICE_ONHOLD: agg->all_unavail = 0; agg->all_free = 0; + agg->on_hold = 1; break; case AST_DEVICE_BUSY: agg->all_unavail = 0; agg->all_free = 0; - agg->all_on_hold = 0; agg->busy = 1; + agg->in_use = 1; break; case AST_DEVICE_UNAVAILABLE: case AST_DEVICE_INVALID: agg->all_busy = 0; agg->all_free = 0; - agg->all_on_hold = 0; break; case AST_DEVICE_UNKNOWN: break; @@ -822,25 +817,25 @@ enum ast_device_state ast_devstate_aggregate_result(struct ast_devstate_aggregat { if (agg->all_free) return AST_DEVICE_NOT_INUSE; - - if (agg->all_on_hold) - return AST_DEVICE_ONHOLD; - + + if ((agg->in_use || agg->on_hold) && agg->ring) + return AST_DEVICE_RINGINUSE; + if (agg->all_busy) return AST_DEVICE_BUSY; - if (agg->all_unavail) - return AST_DEVICE_UNAVAILABLE; - - if (agg->ring) - return agg->in_use ? AST_DEVICE_RINGINUSE : AST_DEVICE_RINGING; - if (agg->in_use) return AST_DEVICE_INUSE; - if (agg->busy) - return AST_DEVICE_BUSY; - + if (agg->ring) + return AST_DEVICE_RINGING; + + if (agg->on_hold) + return AST_DEVICE_ONHOLD; + + if (agg->all_unavail) + return AST_DEVICE_UNAVAILABLE; + return AST_DEVICE_NOT_INUSE; }