aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/asterisk/channel.h5
-rw-r--r--main/channel.c10
-rw-r--r--main/pbx.c14
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, {