JsSIP提供了一组原因,以便让用户知道是什么导致请求或会话失败。JsSIP中定义了此处暴露的所有原因。格式为JsSIP.C.causes.XXX,因此,在提供原因字段的事件中接收到的任何原因都可以与其进行比较。
例子:
var target = 'sip:bob@example.com';
var eventHandlers = {
'failed': function(data) {
if (data.cause === JsSIP.C.causes.BUSY) {
coolPhone.sendMessage(target, 'Please, call me later!');
}
}
}
coolPhone.call(target, useAudio, useVideo, eventHandlers, views);
常见原因
常数 | 值 | 描述 |
CONNECTION_ERROR | ‘Connection Error’ | 出现WebSocket连接错误 |
REQUEST_TIMEOUT | ‘Request Timeout’ | 未收到响应,客户端事务的超时已过期 |
SIP_FAILURE_CODE | ‘SIP Failure Code’ | 收到一个否定的SIP响应,该响应不属于“SIP错误原因”中定义的任何组 |
INTERNAL_ERROR | ‘Internal Error’ | 意外错误 |
SIP错误原因
SIP响应状态代码分为以下原因:
常数 | 值 | SIP状态code值 |
BUSY | ‘Busy’ | 486,600 |
REJECTED | ‘Rejected’ | 403,603 |
REDIRECTED | ‘Redirected’ | 300,301,302,305,380 |
UNAVAILABLE | ‘Unavailable’ | 480,410,408,430 |
NOT_FOUND | ‘Not Found’ | 404,604 |
ADDRESS_INCOMPLETE | ‘Address Incomplete’ | 484 |
INCOMPATIBLE_SDP | ‘Incompatible SDP’ | 488,606 |
MISSING_SDP | ’Received a request/response that should have SDP body but did not.‘ | |
AUTHENTICATION_ERROR | ‘Authentication Error’ | 401,407 |
RTCSession原因
以下原因适用于音频/视频会话:
常数 | 值 | 描述 |
BYE | ‘Terminated’ | RTCSession由本地或远程对等方正常终止。 |
CANCELED | ‘Canceled’ | RTCSession已被本地或远程对等方取消 |
NO_ANSWER | ‘No Answer’ | 传入呼叫未在配置no_answer_timeout参数中给定的时间内得到应答 |
EXPIRES | ‘Expires’ | 传入呼叫包含Expires标头,而本地用户未在标头中给定的时间内应答 |
NO_ACK | ‘No ACK’ | 收到的INVITE回复为2XX状态码,但未收到ACK |
DIALOG_ERROR | ‘Dialog Error’ | 对话中的请求接收到408或481 SIP错误 |
USER_DENIED_MEDIA_ACCESS | ‘User Denied Media Access’ | 当提示输入音频/视频设备时,本地用户拒绝访问媒体 |
BAD_MEDIA_DESCRIPTION | ‘Bad Media Description’ | 收到的SDP错误 |
RTP_TIMEOUT | ‘RTP Timeout’ | 由于RTP丢失,会话已结束。 |
DOM异常
JsSIP中的某些函数在某些情况下可能引发异常(请参阅W3C定义的DOMException)。以下是JsSIP中的DOMException列表:
code | 常数 | 描述 |
1 | CONFIGURATION_ERROR | UA配置对象加载过程中出错。 |
2 | INVALID_TARGET_ERROR | 目标不是有效的SIP URI,或者无法转换为有效的SIP URI。 |
3 | INVALID_STATE_ERROR | 对象处于不适合执行给定操作的状态。 |