Asterisk status code

From 탱이의 잡동사니
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Overview

Asterisk code 정리.

Originate result

원문은 이곳<ref>https://wiki.asterisk.org/wiki/display/AST/Hangup+Cause+Mappings</ref>에서 확인할 수 있다.

Originate 를 하게 되면(cli: Dial()) Originate 에 대한 결과를 받아오게 된다. 성공, 혹은 실패. 그리고 실패에 대해서는 왜 실패했는지에 대한 사유가 있다.

<source lang=c>

  1. define AST_CAUSE_UNALLOCATED 1
  2. define AST_CAUSE_NO_ROUTE_TRANSIT_NET 2
  3. define AST_CAUSE_NO_ROUTE_DESTINATION 3
  4. define AST_CAUSE_MISDIALLED_TRUNK_PREFIX 5
  5. define AST_CAUSE_CHANNEL_UNACCEPTABLE 6
  6. define AST_CAUSE_CALL_AWARDED_DELIVERED 7
  7. define AST_CAUSE_PRE_EMPTED 8
  8. define AST_CAUSE_NUMBER_PORTED_NOT_HERE 14
  9. define AST_CAUSE_NORMAL_CLEARING 16
  10. define AST_CAUSE_USER_BUSY 17
  11. define AST_CAUSE_NO_USER_RESPONSE 18
  12. define AST_CAUSE_NO_ANSWER 19
  13. define AST_CAUSE_SUBSCRIBER_ABSENT 20
  14. define AST_CAUSE_CALL_REJECTED 21
  15. define AST_CAUSE_NUMBER_CHANGED 22
  16. define AST_CAUSE_REDIRECTED_TO_NEW_DESTINATION 23
  17. define AST_CAUSE_ANSWERED_ELSEWHERE 26
  18. define AST_CAUSE_DESTINATION_OUT_OF_ORDER 27
  19. define AST_CAUSE_INVALID_NUMBER_FORMAT 28
  20. define AST_CAUSE_FACILITY_REJECTED 29
  21. define AST_CAUSE_RESPONSE_TO_STATUS_ENQUIRY 30
  22. define AST_CAUSE_NORMAL_UNSPECIFIED 31
  23. define AST_CAUSE_NORMAL_CIRCUIT_CONGESTION 34
  24. define AST_CAUSE_NETWORK_OUT_OF_ORDER 38
  25. define AST_CAUSE_NORMAL_TEMPORARY_FAILURE 41
  26. define AST_CAUSE_SWITCH_CONGESTION 42
  27. define AST_CAUSE_ACCESS_INFO_DISCARDED 43
  28. define AST_CAUSE_REQUESTED_CHAN_UNAVAIL 44
  29. define AST_CAUSE_FACILITY_NOT_SUBSCRIBED 50
  30. define AST_CAUSE_OUTGOING_CALL_BARRED 52
  31. define AST_CAUSE_INCOMING_CALL_BARRED 54
  32. define AST_CAUSE_BEARERCAPABILITY_NOTAUTH 57
  33. define AST_CAUSE_BEARERCAPABILITY_NOTAVAIL 58
  34. define AST_CAUSE_BEARERCAPABILITY_NOTIMPL 65
  35. define AST_CAUSE_CHAN_NOT_IMPLEMENTED 66
  36. define AST_CAUSE_FACILITY_NOT_IMPLEMENTED 69
  37. define AST_CAUSE_INVALID_CALL_REFERENCE 81
  38. define AST_CAUSE_INCOMPATIBLE_DESTINATION 88
  39. define AST_CAUSE_INVALID_MSG_UNSPECIFIED 95
  40. define AST_CAUSE_MANDATORY_IE_MISSING 96
  41. define AST_CAUSE_MESSAGE_TYPE_NONEXIST 97
  42. define AST_CAUSE_WRONG_MESSAGE 98
  43. define AST_CAUSE_IE_NONEXIST 99
  44. define AST_CAUSE_INVALID_IE_CONTENTS 100
  45. define AST_CAUSE_WRONG_CALL_STATE 101
  46. define AST_CAUSE_RECOVERY_ON_TIMER_EXPIRE 102
  47. define AST_CAUSE_MANDATORY_IE_LENGTH_ERROR 103
  48. define AST_CAUSE_PROTOCOL_ERROR 111
  49. define AST_CAUSE_INTERWORKING 127

/* Special Asterisk aliases */

  1. define AST_CAUSE_BUSY AST_CAUSE_USER_BUSY
  2. define AST_CAUSE_FAILURE AST_CAUSE_NETWORK_OUT_OF_ORDER
  3. define AST_CAUSE_NORMAL AST_CAUSE_NORMAL_CLEARING
  4. define AST_CAUSE_NOANSWER AST_CAUSE_NO_ANSWER
  5. define AST_CAUSE_CONGESTION AST_CAUSE_NORMAL_CIRCUIT_CONGESTION
  6. define AST_CAUSE_UNREGISTERED AST_CAUSE_SUBSCRIBER_ABSENT
  7. define AST_CAUSE_NOTDEFINED 0
  8. define AST_CAUSE_NOSUCHDRIVER AST_CAUSE_CHAN_NOT_IMPLEMENTED

</source>

Originate response reason

Originate Response AMI Event 에는 Result 사유에 대한 Reason 코드를 설정하도록 되어 있다.

Reason code 내용은 다음과 같다(asterisk/frame.h).

AST_CONTROL_HANGUP = 1,			/*!< Other end has hungup */
AST_CONTROL_RING = 2,			/*!< Local ring */
AST_CONTROL_RINGING = 3,		/*!< Remote end is ringing */
AST_CONTROL_ANSWER = 4,			/*!< Remote end has answered */
AST_CONTROL_BUSY = 5,			/*!< Remote end is busy */
AST_CONTROL_TAKEOFFHOOK = 6,	/*!< Make it go off hook */
AST_CONTROL_OFFHOOK = 7,		/*!< Line is off hook */
AST_CONTROL_CONGESTION = 8,		/*!< Congestion (circuits busy) */
AST_CONTROL_FLASH = 9,			/*!< Flash hook */
AST_CONTROL_WINK = 10,			/*!< Wink */
AST_CONTROL_OPTION = 11,		/*!< Set a low-level option */
AST_CONTROL_RADIO_KEY = 12,		/*!< Key Radio */
AST_CONTROL_RADIO_UNKEY = 13,	/*!< Un-Key Radio */
AST_CONTROL_PROGRESS = 14,		/*!< Indicate PROGRESS */
AST_CONTROL_PROCEEDING = 15,	/*!< Indicate CALL PROCEEDING */
AST_CONTROL_HOLD = 16,			/*!< Indicate call is placed on hold */
AST_CONTROL_UNHOLD = 17,		/*!< Indicate call is left from hold */
AST_CONTROL_VIDUPDATE = 18,		/*!< Indicate video frame update */
_XXX_AST_CONTROL_T38 = 19,		/*!< T38 state change request/notification \deprecated This is no longer supported. Use AST_CONTROL_T38_PARAMETERS instead. */
AST_CONTROL_SRCUPDATE = 20,		/*!< Indicate source of media has changed */
AST_CONTROL_TRANSFER = 21,		/*!< Indicate status of a transfer request */
AST_CONTROL_CONNECTED_LINE = 22,/*!< Indicate connected line has changed */
AST_CONTROL_REDIRECTING = 23,	/*!< Indicate redirecting id has changed */
AST_CONTROL_T38_PARAMETERS = 24,/*!< T38 state change request/notification with parameters */
AST_CONTROL_CC = 25,			/*!< Indication that Call completion service is possible */
AST_CONTROL_SRCCHANGE = 26,		/*!< Media source has changed and requires a new RTP SSRC */
AST_CONTROL_READ_ACTION = 27,	/*!< Tell ast_read to take a specific action */
AST_CONTROL_AOC = 28,			/*!< Advice of Charge with encoded generic AOC payload */
AST_CONTROL_END_OF_Q = 29,		/*!< Indicate that this position was the end of the channel queue for a softhangup. */
AST_CONTROL_INCOMPLETE = 30,	/*!< Indication that the extension dialed is incomplete */
AST_CONTROL_MCID = 31,			/*!< Indicate that the caller is being malicious. */
AST_CONTROL_UPDATE_RTP_PEER = 32, /*!< Interrupt the bridge and have it update the peer */
AST_CONTROL_PVT_CAUSE_CODE = 33, /*!< Contains an update to the protocol-specific cause-code stored for branching dials */
AST_CONTROL_MASQUERADE_NOTIFY = 34,	/*!< A masquerade is about to begin/end. (Never sent as a frame but directly with ast_indicate_data().) */

/*
  * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
  *
  * IAX2 sends these values out over the wire.  To prevent future
  * incompatibilities, pick the next value in the enum from whatever
  * is on the current trunk.  If you lose the merge race you need to
  * fix the previous branches to match what is on trunk.  In addition
  * you need to change chan_iax2 to explicitly allow the control
  * frame over the wire if it makes sense for the frame to be passed
  * to another Asterisk instance.
  *
  * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
  */

/* Control frames used to manipulate a stream on a channel. The values for these
  * must be greater than the allowed value for a 8-bit char, so that they avoid
  * conflicts with DTMF values. */
AST_CONTROL_STREAM_STOP = 1000,		/*!< Indicate to a channel in playback to stop the stream */
AST_CONTROL_STREAM_SUSPEND = 1001,	/*!< Indicate to a channel in playback to suspend the stream */
AST_CONTROL_STREAM_RESTART = 1002,	/*!< Indicate to a channel in playback to restart the stream */
AST_CONTROL_STREAM_REVERSE = 1003,	/*!< Indicate to a channel in playback to rewind */
AST_CONTROL_STREAM_FORWARD = 1004,	/*!< Indicate to a channel in playback to fast forward */
/* Control frames to manipulate recording on a channel. */
AST_CONTROL_RECORD_CANCEL = 1100,	/*!< Indicated to a channel in record to stop recording and discard the file */
AST_CONTROL_RECORD_STOP = 1101,	/*!< Indicated to a channel in record to stop recording */
AST_CONTROL_RECORD_SUSPEND = 1102,	/*!< Indicated to a channel in record to suspend/unsuspend recording */
AST_CONTROL_RECORD_MUTE = 1103,	/*!< Indicated to a channel in record to mute/unmute (i.e. write silence) recording */

Channel status

Asterisk 에서 관리되는 모든 채널들은 다음 중 하나의 상태를 가진다.

  • 상태 코드 정의

0부터 시작한다. <source lang=c> /*!

* \brief ast_channel states
*
* \note Bits 0-15 of state are reserved for the state (up/down) of the line
*       Bits 16-32 of state are reserved for flags
*/

enum ast_channel_state {

   AST_STATE_DOWN,             /*!< Channel is down and available */
   AST_STATE_RESERVED,         /*!< Channel is down, but reserved */
   AST_STATE_OFFHOOK,          /*!< Channel is off hook */
   AST_STATE_DIALING,          /*!< Digits (or equivalent) have been dialed */
   AST_STATE_RING,             /*!< Line is ringing */
   AST_STATE_RINGING,          /*!< Remote end is ringing */
   AST_STATE_UP,               /*!< Line is up */
   AST_STATE_BUSY,             /*!< Line is busy */
   AST_STATE_DIALING_OFFHOOK,  /*!< Digits (or equivalent) have been dialed while offhook */
   AST_STATE_PRERING,          /*!< Channel has detected an incoming call and is waiting for ring */
   AST_STATE_MUTE = (1 << 16), /*!< Do not transmit voice data */

}; </source>

  • 매뉴얼

원문은 이곳<ref>https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+ManagerEvent_Newstate</ref>에서 확인할 수 있다.

Newstate 이벤트 메시지에 정의된 상태 코드를 가져왔다. 코드 번호와 내용은 위와 동일하다. 하지만 StateDesc로 표시되는 문자열 내용이 아래와 같이 설정된다. 원문은 이곳<ref>https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+ManagerEvent_Newstate</ref>에서 확인할 수 있다.

Down
Rsrvd
OffHook
Dialing
Ring
Ringing
Up
Busy
Dialing Offhook
Pre-ring
Unknown

Device status

Asterisk 에서 관리되는 모든 디바이스(Device)들은 다음 중 하나의 상태를 가진다.

status define

0부터 시작한다. <source lang=c> /*! \brief Device States

*  \note The order of these states may not change because they are included
*        in Asterisk events which may be transmitted across the network to
*        other servers.
*/

enum ast_device_state { AST_DEVICE_UNKNOWN, /*!< Device is valid but channel didn't know state */ AST_DEVICE_NOT_INUSE, /*!< Device is not used */ AST_DEVICE_INUSE, /*!< Device is in use */ AST_DEVICE_BUSY, /*!< Device is busy */ AST_DEVICE_INVALID, /*!< Device is invalid */ AST_DEVICE_UNAVAILABLE, /*!< Device is unavailable */ AST_DEVICE_RINGING, /*!< Device is ringing */ AST_DEVICE_RINGINUSE, /*!< Device is ringing *and* in use */ AST_DEVICE_ONHOLD, /*!< Device is on hold */ AST_DEVICE_TOTAL, /*!< Total num of device states, used for testing */ }; </source>

Hangup code

Hangup 시, 사용되는 상태 코드 정리.

채널이 Hangup 된 사유를 나타낸다.

include/asterisk/causes.h

#define AST_CAUSE_UNALLOCATED                    1
#define AST_CAUSE_NO_ROUTE_TRANSIT_NET           2
#define AST_CAUSE_NO_ROUTE_DESTINATION           3
#define AST_CAUSE_MISDIALLED_TRUNK_PREFIX        5
#define AST_CAUSE_CHANNEL_UNACCEPTABLE           6
#define AST_CAUSE_CALL_AWARDED_DELIVERED         7
#define AST_CAUSE_PRE_EMPTED                     8
#define AST_CAUSE_NUMBER_PORTED_NOT_HERE        14
#define AST_CAUSE_NORMAL_CLEARING               16
#define AST_CAUSE_USER_BUSY                     17
#define AST_CAUSE_NO_USER_RESPONSE              18
#define AST_CAUSE_NO_ANSWER                     19
#define AST_CAUSE_SUBSCRIBER_ABSENT             20
#define AST_CAUSE_CALL_REJECTED                 21
#define AST_CAUSE_NUMBER_CHANGED                22
#define AST_CAUSE_REDIRECTED_TO_NEW_DESTINATION 23
#define AST_CAUSE_ANSWERED_ELSEWHERE            26
#define AST_CAUSE_DESTINATION_OUT_OF_ORDER      27
#define AST_CAUSE_INVALID_NUMBER_FORMAT         28
#define AST_CAUSE_FACILITY_REJECTED             29
#define AST_CAUSE_RESPONSE_TO_STATUS_ENQUIRY    30
#define AST_CAUSE_NORMAL_UNSPECIFIED            31
#define AST_CAUSE_NORMAL_CIRCUIT_CONGESTION     34
#define AST_CAUSE_NETWORK_OUT_OF_ORDER          38
#define AST_CAUSE_NORMAL_TEMPORARY_FAILURE      41
#define AST_CAUSE_SWITCH_CONGESTION             42
#define AST_CAUSE_ACCESS_INFO_DISCARDED         43
#define AST_CAUSE_REQUESTED_CHAN_UNAVAIL        44
#define AST_CAUSE_FACILITY_NOT_SUBSCRIBED       50
#define AST_CAUSE_OUTGOING_CALL_BARRED          52
#define AST_CAUSE_INCOMING_CALL_BARRED          54
#define AST_CAUSE_BEARERCAPABILITY_NOTAUTH      57
#define AST_CAUSE_BEARERCAPABILITY_NOTAVAIL     58
#define AST_CAUSE_BEARERCAPABILITY_NOTIMPL      65
#define AST_CAUSE_CHAN_NOT_IMPLEMENTED          66
#define AST_CAUSE_FACILITY_NOT_IMPLEMENTED      69
#define AST_CAUSE_INVALID_CALL_REFERENCE        81
#define AST_CAUSE_INCOMPATIBLE_DESTINATION      88
#define AST_CAUSE_INVALID_MSG_UNSPECIFIED       95
#define AST_CAUSE_MANDATORY_IE_MISSING          96
#define AST_CAUSE_MESSAGE_TYPE_NONEXIST         97
#define AST_CAUSE_WRONG_MESSAGE                 98
#define AST_CAUSE_IE_NONEXIST                   99
#define AST_CAUSE_INVALID_IE_CONTENTS          100
#define AST_CAUSE_WRONG_CALL_STATE             101
#define AST_CAUSE_RECOVERY_ON_TIMER_EXPIRE     102
#define AST_CAUSE_MANDATORY_IE_LENGTH_ERROR    103
#define AST_CAUSE_PROTOCOL_ERROR               111
#define AST_CAUSE_INTERWORKING                 127

/* Special Asterisk aliases */
#define AST_CAUSE_BUSY          AST_CAUSE_USER_BUSY
#define AST_CAUSE_FAILURE       AST_CAUSE_NETWORK_OUT_OF_ORDER
#define AST_CAUSE_NORMAL        AST_CAUSE_NORMAL_CLEARING
#define AST_CAUSE_NOANSWER      AST_CAUSE_NO_ANSWER
#define AST_CAUSE_CONGESTION    AST_CAUSE_NORMAL_CIRCUIT_CONGESTION
#define AST_CAUSE_UNREGISTERED  AST_CAUSE_SUBSCRIBER_ABSENT
#define AST_CAUSE_NOTDEFINED    0
#define AST_CAUSE_NOSUCHDRIVER  AST_CAUSE_CHAN_NOT_IMPLEMENTED

References

<references/>