if ((ast_channel_state(chan) != AST_STATE_RING) ||
((p->sig != SIG_FXSKS) &&
(p->sig != SIG_FXSLS) &&
- (p->sig != SIG_FXSGS)))
- ast_setstate(chan, AST_STATE_RINGING);
+ (p->sig != SIG_FXSGS))) {
+ /* We're playing audible ringback tone on the channel,
+ * so set state to AST_STATE_RING, not AST_STATE_RINGING. */
+ ast_setstate(chan, AST_STATE_RING);
+ }
}
break;
case AST_CONTROL_INCOMPLETE:
AST_STATE_RESERVED, /*!< Channel is down, but reserved */
AST_STATE_OFFHOOK, /*!< Channel is off hook */
AST_STATE_DIALING, /*!< Digits (or equivalent) have been dialed */
- AST_STATE_RING, /*!< Line is ringing */
- AST_STATE_RINGING, /*!< Remote end is ringing */
+ AST_STATE_RING, /*!< Remote end is ringing (e.g. listening to audible ringback tone). Also often used for initial state for a new channel. */
+ AST_STATE_RINGING, /*!< Line is ringing */
AST_STATE_UP, /*!< Line is up */
AST_STATE_BUSY, /*!< Line is busy */
AST_STATE_DIALING_OFFHOOK, /*!< Digits (or equivalent) have been dialed while offhook */
{ AST_STATE_RESERVED, AST_DEVICE_INUSE },
{ AST_STATE_OFFHOOK, AST_DEVICE_INUSE },
{ AST_STATE_DIALING, AST_DEVICE_INUSE },
- { AST_STATE_RING, AST_DEVICE_INUSE },
- { AST_STATE_RINGING, AST_DEVICE_RINGING },
+ { AST_STATE_RING, AST_DEVICE_INUSE }, /* Audible ringback tone */
+ { AST_STATE_RINGING, AST_DEVICE_RINGING }, /* Actual ringing */
{ AST_STATE_UP, AST_DEVICE_INUSE },
{ AST_STATE_BUSY, AST_DEVICE_BUSY },
{ AST_STATE_DIALING_OFFHOOK, AST_DEVICE_INUSE },