diff options
author | file <file@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-05-25 20:51:27 +0000 |
---|---|---|
committer | file <file@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-05-25 20:51:27 +0000 |
commit | 08fc2908d3a3edc75807a73189c78761a8bae7d7 (patch) | |
tree | 5ac581e56a5a8e0205acf238973b2f80852a4ee1 /channel.c | |
parent | 2aa960bb03bb82858b18123a180a9524880bea39 (diff) |
Merge in branch which gives you the ability to set the hangup causecode using the Hangup application. (issue #7160 reported by kmilitzer branch by jcollie)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@30390 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channel.c')
-rw-r--r-- | channel.c | 101 |
1 files changed, 57 insertions, 44 deletions
@@ -116,52 +116,53 @@ static AST_LIST_HEAD_STATIC(channels, ast_channel); /*! map AST_CAUSE's to readable string representations */ const struct ast_cause { int cause; + const char *name; const char *desc; } causes[] = { - { AST_CAUSE_UNALLOCATED, "Unallocated (unassigned) number" }, - { AST_CAUSE_NO_ROUTE_TRANSIT_NET, "No route to specified transmit network" }, - { AST_CAUSE_NO_ROUTE_DESTINATION, "No route to destination" }, - { AST_CAUSE_CHANNEL_UNACCEPTABLE, "Channel unacceptable" }, - { AST_CAUSE_CALL_AWARDED_DELIVERED, "Call awarded and being delivered in an established channel" }, - { AST_CAUSE_NORMAL_CLEARING, "Normal Clearing" }, - { AST_CAUSE_USER_BUSY, "User busy" }, - { AST_CAUSE_NO_USER_RESPONSE, "No user responding" }, - { AST_CAUSE_NO_ANSWER, "User alerting, no answer" }, - { AST_CAUSE_CALL_REJECTED, "Call Rejected" }, - { AST_CAUSE_NUMBER_CHANGED, "Number changed" }, - { AST_CAUSE_DESTINATION_OUT_OF_ORDER, "Destination out of order" }, - { AST_CAUSE_INVALID_NUMBER_FORMAT, "Invalid number format" }, - { AST_CAUSE_FACILITY_REJECTED, "Facility rejected" }, - { AST_CAUSE_RESPONSE_TO_STATUS_ENQUIRY, "Response to STATus ENQuiry" }, - { AST_CAUSE_NORMAL_UNSPECIFIED, "Normal, unspecified" }, - { AST_CAUSE_NORMAL_CIRCUIT_CONGESTION, "Circuit/channel congestion" }, - { AST_CAUSE_NETWORK_OUT_OF_ORDER, "Network out of order" }, - { AST_CAUSE_NORMAL_TEMPORARY_FAILURE, "Temporary failure" }, - { AST_CAUSE_SWITCH_CONGESTION, "Switching equipment congestion" }, - { AST_CAUSE_ACCESS_INFO_DISCARDED, "Access information discarded" }, - { AST_CAUSE_REQUESTED_CHAN_UNAVAIL, "Requested channel not available" }, - { AST_CAUSE_PRE_EMPTED, "Pre-empted" }, - { AST_CAUSE_FACILITY_NOT_SUBSCRIBED, "Facility not subscribed" }, - { AST_CAUSE_OUTGOING_CALL_BARRED, "Outgoing call barred" }, - { AST_CAUSE_INCOMING_CALL_BARRED, "Incoming call barred" }, - { AST_CAUSE_BEARERCAPABILITY_NOTAUTH, "Bearer capability not authorized" }, - { AST_CAUSE_BEARERCAPABILITY_NOTAVAIL, "Bearer capability not available" }, - { AST_CAUSE_BEARERCAPABILITY_NOTIMPL, "Bearer capability not implemented" }, - { AST_CAUSE_CHAN_NOT_IMPLEMENTED, "Channel not implemented" }, - { AST_CAUSE_FACILITY_NOT_IMPLEMENTED, "Facility not implemented" }, - { AST_CAUSE_INVALID_CALL_REFERENCE, "Invalid call reference value" }, - { AST_CAUSE_INCOMPATIBLE_DESTINATION, "Incompatible destination" }, - { AST_CAUSE_INVALID_MSG_UNSPECIFIED, "Invalid message unspecified" }, - { AST_CAUSE_MANDATORY_IE_MISSING, "Mandatory information element is missing" }, - { AST_CAUSE_MESSAGE_TYPE_NONEXIST, "Message type nonexist." }, - { AST_CAUSE_WRONG_MESSAGE, "Wrong message" }, - { AST_CAUSE_IE_NONEXIST, "Info. element nonexist or not implemented" }, - { AST_CAUSE_INVALID_IE_CONTENTS, "Invalid information element contents" }, - { AST_CAUSE_WRONG_CALL_STATE, "Message not compatible with call state" }, - { AST_CAUSE_RECOVERY_ON_TIMER_EXPIRE, "Recover on timer expiry" }, - { AST_CAUSE_MANDATORY_IE_LENGTH_ERROR, "Mandatory IE length error" }, - { AST_CAUSE_PROTOCOL_ERROR, "Protocol error, unspecified" }, - { AST_CAUSE_INTERWORKING, "Interworking, unspecified" }, + { AST_CAUSE_UNALLOCATED, "UNALLOCATED", "Unallocated (unassigned) number" }, + { AST_CAUSE_NO_ROUTE_TRANSIT_NET, "NO_ROUTE_TRANSIT_NET", "No route to specified transmit network" }, + { AST_CAUSE_NO_ROUTE_DESTINATION, "NO_ROUTE_DESTINATION", "No route to destination" }, + { AST_CAUSE_CHANNEL_UNACCEPTABLE, "CHANNEL_UNACCEPTABLE", "Channel unacceptable" }, + { AST_CAUSE_CALL_AWARDED_DELIVERED, "CALL_AWARDED_DELIVERED", "Call awarded and being delivered in an established channel" }, + { AST_CAUSE_NORMAL_CLEARING, "NORMAL_CLEARING", "Normal Clearing" }, + { AST_CAUSE_USER_BUSY, "USER_BUSY", "User busy" }, + { AST_CAUSE_NO_USER_RESPONSE, "NO_USER_RESPONSE", "No user responding" }, + { AST_CAUSE_NO_ANSWER, "NO_ANSWER", "User alerting, no answer" }, + { AST_CAUSE_CALL_REJECTED, "CALL_REJECTED", "Call Rejected" }, + { AST_CAUSE_NUMBER_CHANGED, "NUMBER_CHANGED", "Number changed" }, + { AST_CAUSE_DESTINATION_OUT_OF_ORDER, "DESTINATION_OUT_OF_ORDER", "Destination out of order" }, + { AST_CAUSE_INVALID_NUMBER_FORMAT, "INVALID_NUMBER_FORMAT", "Invalid number format" }, + { AST_CAUSE_FACILITY_REJECTED, "FACILITY_REJECTED", "Facility rejected" }, + { AST_CAUSE_RESPONSE_TO_STATUS_ENQUIRY, "RESPONSE_TO_STATUS_ENQUIRY", "Response to STATus ENQuiry" }, + { AST_CAUSE_NORMAL_UNSPECIFIED, "NORMAL_UNSPECIFIED", "Normal, unspecified" }, + { AST_CAUSE_NORMAL_CIRCUIT_CONGESTION, "NORMAL_CIRCUIT_CONGESTION", "Circuit/channel congestion" }, + { AST_CAUSE_NETWORK_OUT_OF_ORDER, "NETWORK_OUT_OF_ORDER", "Network out of order" }, + { AST_CAUSE_NORMAL_TEMPORARY_FAILURE, "NORMAL_TEMPORARY_FAILURE", "Temporary failure" }, + { AST_CAUSE_SWITCH_CONGESTION, "SWITCH_CONGESTION", "Switching equipment congestion" }, + { AST_CAUSE_ACCESS_INFO_DISCARDED, "ACCESS_INFO_DISCARDED", "Access information discarded" }, + { AST_CAUSE_REQUESTED_CHAN_UNAVAIL, "REQUESTED_CHAN_UNAVAIL", "Requested channel not available" }, + { AST_CAUSE_PRE_EMPTED, "PRE_EMPTED", "Pre-empted" }, + { AST_CAUSE_FACILITY_NOT_SUBSCRIBED, "FACILITY_NOT_SUBSCRIBED", "Facility not subscribed" }, + { AST_CAUSE_OUTGOING_CALL_BARRED, "OUTGOING_CALL_BARRED", "Outgoing call barred" }, + { AST_CAUSE_INCOMING_CALL_BARRED, "INCOMING_CALL_BARRED", "Incoming call barred" }, + { AST_CAUSE_BEARERCAPABILITY_NOTAUTH, "BEARERCAPABILITY_NOTAUTH", "Bearer capability not authorized" }, + { AST_CAUSE_BEARERCAPABILITY_NOTAVAIL, "BEARERCAPABILITY_NOTAVAIL", "Bearer capability not available" }, + { AST_CAUSE_BEARERCAPABILITY_NOTIMPL, "BEARERCAPABILITY_NOTIMPL", "Bearer capability not implemented" }, + { AST_CAUSE_CHAN_NOT_IMPLEMENTED, "CHAN_NOT_IMPLEMENTED", "Channel not implemented" }, + { AST_CAUSE_FACILITY_NOT_IMPLEMENTED, "FACILITY_NOT_IMPLEMENTED", "Facility not implemented" }, + { AST_CAUSE_INVALID_CALL_REFERENCE, "INVALID_CALL_REFERENCE", "Invalid call reference value" }, + { AST_CAUSE_INCOMPATIBLE_DESTINATION, "INCOMPATIBLE_DESTINATION", "Incompatible destination" }, + { AST_CAUSE_INVALID_MSG_UNSPECIFIED, "INVALID_MSG_UNSPECIFIED", "Invalid message unspecified" }, + { AST_CAUSE_MANDATORY_IE_MISSING, "MANDATORY_IE_MISSING", "Mandatory information element is missing" }, + { AST_CAUSE_MESSAGE_TYPE_NONEXIST, "MESSAGE_TYPE_NONEXIST", "Message type nonexist." }, + { AST_CAUSE_WRONG_MESSAGE, "WRONG_MESSAGE", "Wrong message" }, + { AST_CAUSE_IE_NONEXIST, "IE_NONEXIST", "Info. element nonexist or not implemented" }, + { AST_CAUSE_INVALID_IE_CONTENTS, "INVALID_IE_CONTENTS", "Invalid information element contents" }, + { AST_CAUSE_WRONG_CALL_STATE, "WRONG_CALL_STATE", "Message not compatible with call state" }, + { AST_CAUSE_RECOVERY_ON_TIMER_EXPIRE, "RECOVERY_ON_TIMER_EXPIRE", "Recover on timer expiry" }, + { AST_CAUSE_MANDATORY_IE_LENGTH_ERROR, "MANDATORY_IE_LENGTH_ERROR", "Mandatory IE length error" }, + { AST_CAUSE_PROTOCOL_ERROR, "PROTOCOL_ERROR", "Protocol error, unspecified" }, + { AST_CAUSE_INTERWORKING, "INTERWORKING", "Interworking, unspecified" }, }; @@ -477,6 +478,18 @@ const char *ast_cause2str(int cause) return "Unknown"; } +/*! \brief Convert a symbolic hangup cause to number */ +int ast_str2cause(const char *name) +{ + int x; + + for (x = 0; x < sizeof(causes) / sizeof(causes[0]); x++) + if (strncasecmp(causes[x].name, name, strlen(causes[x].name)) == 0) + return causes[x].cause; + + return -1; +} + /*! \brief Gives the string form of a given channel state */ char *ast_state2str(int state) { |