diff options
author | murf <murf@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-08-10 20:53:43 +0000 |
---|---|---|
committer | murf <murf@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-08-10 20:53:43 +0000 |
commit | b7a054bff609d63d314dad402126c3a7b1cd257d (patch) | |
tree | 5c5aecc2496840f630e6439def7f3d08f38aa2bf | |
parent | d5c1d94491b46bf7314f9076159e1e2170d96234 (diff) |
From a user complaint on #asterisk, I have forced pbx_spool to explain what reason codes mean, when they are logged
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@79099 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | include/asterisk/channel.h | 10 | ||||
-rw-r--r-- | main/channel.c | 23 | ||||
-rw-r--r-- | pbx/pbx_spool.c | 2 |
3 files changed, 34 insertions, 1 deletions
diff --git a/include/asterisk/channel.h b/include/asterisk/channel.h index d54b30709..063d325ef 100644 --- a/include/asterisk/channel.h +++ b/include/asterisk/channel.h @@ -1365,6 +1365,16 @@ int ast_channel_whisper_feed(struct ast_channel *chan, struct ast_frame *f); */ void ast_channel_whisper_stop(struct ast_channel *chan); + + +/*! + \brief return an english explanation of the code returned thru __ast_request_and_dial's 'outstate' argument + \param reason The integer argument, usually taken from AST_CONTROL_ macros + \return char pointer explaining the code + */ +char *ast_channel_reason2str(int reason); + + #if defined(__cplusplus) || defined(c_plusplus) } #endif diff --git a/main/channel.c b/main/channel.c index e034eaa7d..8e12e1474 100644 --- a/main/channel.c +++ b/main/channel.c @@ -3034,6 +3034,29 @@ int ast_set_write_format(struct ast_channel *chan, int fmt) &chan->writetrans, 1); } +char *ast_channel_reason2str(int reason) +{ + switch (reason) /* the following appear to be the only ones actually returned by request_and_dial */ + { + case 0: + return "Call Failure (not BUSY, and not NO_ANSWER, maybe Circuit busy or down?)"; + case AST_CONTROL_HANGUP: + return "Hangup"; + case AST_CONTROL_RING: + return "Local Ring"; + case AST_CONTROL_RINGING: + return "Remote end Ringing"; + case AST_CONTROL_ANSWER: + return "Remote end has Answered"; + case AST_CONTROL_BUSY: + return "Remote end is Busy"; + case AST_CONTROL_CONGESTION: + return "Congestion (circuits busy)"; + default: + return "Unknown Reason!!"; + } +} + struct ast_channel *__ast_request_and_dial(const char *type, int format, void *data, int timeout, int *outstate, const char *cid_num, const char *cid_name, struct outgoing_helper *oh) { int dummy_outstate; diff --git a/pbx/pbx_spool.c b/pbx/pbx_spool.c index 853f6a359..fe29127ea 100644 --- a/pbx/pbx_spool.c +++ b/pbx/pbx_spool.c @@ -338,7 +338,7 @@ static void *attempt_thread(void *data) res = ast_pbx_outgoing_exten(o->tech, AST_FORMAT_SLINEAR, o->dest, o->waittime * 1000, o->context, o->exten, o->priority, &reason, 2 /* wait to finish */, o->cid_num, o->cid_name, o->vars, o->account, NULL); } if (res) { - ast_log(LOG_NOTICE, "Call failed to go through, reason %d\n", reason); + ast_log(LOG_NOTICE, "Call failed to go through, reason (%d) %s\n", reason, ast_channel_reason2str(reason)); if (o->retries >= o->maxretries + 1) { /* Max retries exceeded */ ast_log(LOG_EVENT, "Queued call to %s/%s expired without completion after %d attempt%s\n", o->tech, o->dest, o->retries - 1, ((o->retries - 1) != 1) ? "s" : ""); |