diff --git a/lib/RTCSession.d.ts b/lib/RTCSession.d.ts index edff17102..8b262944c 100644 --- a/lib/RTCSession.d.ts +++ b/lib/RTCSession.d.ts @@ -176,6 +176,11 @@ export interface IncomingAckEvent { ack: IncomingRequest; } +export interface SipEvent { + event: string; + request: IncomingRequest; +} + // listener export type PeerConnectionListener = (event: PeerConnectionEvent) => void; export type ConnectingListener = (event: ConnectingEvent) => void; @@ -200,6 +205,7 @@ export type UpdateListener = ReInviteListener; export type ReferListener = (event: ReferEvent) => void; export type SDPListener = (event: SDPEvent) => void; export type IceCandidateListener = (event: IceCandidateEvent) => void; +export type SipEventListener = (event: SipEvent) => void; export interface RTCSessionEventMap { 'peerconnection': PeerConnectionListener; @@ -227,6 +233,7 @@ export interface RTCSessionEventMap { 'peerconnection:createanswerfailed': Listener; 'peerconnection:setlocaldescriptionfailed': Listener; 'peerconnection:setremotedescriptionfailed': Listener; + 'sipEvent': SipEventListener; } declare enum SessionStatus { diff --git a/lib/RTCSession.js b/lib/RTCSession.js index df9e50a56..83c1870af 100644 --- a/lib/RTCSession.js +++ b/lib/RTCSession.js @@ -1598,7 +1598,7 @@ module.exports = class RTCSession extends EventEmitter } break; case JsSIP_C.NOTIFY: - if (this._status === C.STATUS_CONFIRMED) + if (this._status === C.STATUS_CONFIRMED || this._status === C.STATUS_WAITING_FOR_ANSWER) { this._receiveNotify(request); } @@ -2540,6 +2540,14 @@ module.exports = class RTCSession extends EventEmitter break; } + case 'talk': { + request.reply(200); + this.emit('sipEvent', { + event: request.event, + request: request + }); + break; + } default: { request.reply(489);