diff options
-rw-r--r-- | include/asterisk/channel.h | 5 | ||||
-rw-r--r-- | main/channel.c | 10 | ||||
-rw-r--r-- | main/pbx.c | 14 |
3 files changed, 13 insertions, 16 deletions
diff --git a/include/asterisk/channel.h b/include/asterisk/channel.h index 0d07b5d62..60b68feb2 100644 --- a/include/asterisk/channel.h +++ b/include/asterisk/channel.h @@ -758,13 +758,14 @@ int ast_channel_cmpwhentohangup(struct ast_channel *chan, time_t offset); */ void ast_channel_setwhentohangup(struct ast_channel *chan, time_t offset); -/*! \brief Answer a ringing call +/*! \brief Answer a channel * \param chan channel to answer * This function answers a channel and handles all necessary call * setup functions. - * \return Returns 0 on success, -1 on failure + * \return Returns 0 on success, non-zero on failure */ int ast_answer(struct ast_channel *chan); +int __ast_answer(struct ast_channel *chan, unsigned int delay); /*! \brief Make a call * \param chan which channel to make the call on diff --git a/main/channel.c b/main/channel.c index 42bca18bd..dcdecdfdc 100644 --- a/main/channel.c +++ b/main/channel.c @@ -1612,7 +1612,7 @@ int ast_hangup(struct ast_channel *chan) return res; } -int ast_answer(struct ast_channel *chan) +int __ast_answer(struct ast_channel *chan, unsigned int delay) { int res = 0; @@ -1637,7 +1637,8 @@ int ast_answer(struct ast_channel *chan) res = chan->tech->answer(chan); ast_setstate(chan, AST_STATE_UP); ast_cdr_answer(chan->cdr); - ast_safe_sleep(chan, 500); + if (delay) + ast_safe_sleep(chan, delay); break; case AST_STATE_UP: ast_cdr_answer(chan->cdr); @@ -1651,6 +1652,11 @@ int ast_answer(struct ast_channel *chan) return res; } +int ast_answer(struct ast_channel *chan) +{ + return __ast_answer(chan, 500); +} + void ast_deactivate_generator(struct ast_channel *chan) { ast_channel_lock(chan); diff --git a/main/pbx.c b/main/pbx.c index 10c9911ad..1f656adea 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -5326,21 +5326,11 @@ static int pbx_builtin_congestion(struct ast_channel *chan, void *data) static int pbx_builtin_answer(struct ast_channel *chan, void *data) { int delay = 0; - int res; - if (chan->_state == AST_STATE_UP) - delay = 0; - else if (!ast_strlen_zero(data)) + if ((chan->_state != AST_STATE_UP) && !ast_strlen_zero(data)) delay = atoi(data); - res = ast_answer(chan); - if (res) - return res; - - if (delay) - res = ast_safe_sleep(chan, delay); - - return res; + return __ast_answer(chan, delay); } AST_APP_OPTIONS(resetcdr_opts, { |