*/
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
return res;
}
-int ast_answer(struct ast_channel *chan)
+int __ast_answer(struct ast_channel *chan, unsigned int delay)
{
int res = 0;
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);
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);
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, {