Call End Causes
A telephone call can fail or end abnormally. To express the cause of a call end each protocol has its own way of encoding it, usually by a protocol specific numeric value.
Call end causes and errors
To provide protocol independence Yate translates the cause codes in keywords that attempt to be protocol agnostic. When the keyword is translated back into protocol specific codes hopefully an adequate translation is choosen.
Many of the cause codes are protocol specific and have no equivalent in other protocols. For telephony the most important encoding is Q.850 defining cause and location codes for ISDN.
You should also note that some of these call termination codes are not errors but part of normal operation of one or another protocol. Some of these codes are also used for operations after the call is established.
|Keyword||SIP||H.323||IAX||ISDN||SS7||Description||Default Error in|
|noroute||404||3||?||?||?||No route to destination could be found||routing|
|noconn||503||34||?||?||?||Could not connect to outgoing channel or network||call.execute|
|noauth||401||21||?||?||?||Caller is not authenticated|
|nomedia||415||65||?||?||?||Failed to negotiate media channel|
|noanswer||487||19||?||?||?||Called party did not answer|
|busy||486||17||?||?||?||Called party is busy|
|congestion||480||42||?||?||?||Temporary network congestion|
|offline||404||44||?||?||?||Called party or network is offline|
|rejected||406||31||?||?||?||Call rejected by called party or network|
|forbidden||403||47||?||?||?||Call is not authorized|
|incomplete||484||1||?||?||?||Called party number or address is incomplete|
|looping||483||98||?||?||?||Call loop detected|
|failure||500||127||?||?||?||Generic local server or interoperation failure|
|During the call|
|timeout||BYE||102||?||?||?||Call duration exceeded limit|
|nocall||481||100||?||?||?||Referenced call could not be found on server|
|pending||491||111||?||?||?||Another operation is in progress on the same call|
After the INVITE completes successfully the codes are sent in the Reason: header of the BYE transaction.
The H.323 protocol stack has several ways of sending codes at different layers. Not always a Q.850 code is available - for example if the TCP/IP communication cannot be established.
There are no cause codes in IAX, only textual messages sent with the REJECT or HANGUP packet.