ringcentral-softphone 0.8.3 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/dist/call-session/inbound.d.ts +0 -8
- package/dist/call-session/inbound.js +0 -48
- package/dist/call-session/inbound.js.map +0 -1
- package/dist/call-session/index.d.ts +0 -24
- package/dist/call-session/index.js +0 -113
- package/dist/call-session/index.js.map +0 -1
- package/dist/call-session/outbound.d.ts +0 -9
- package/dist/call-session/outbound.js +0 -52
- package/dist/call-session/outbound.js.map +0 -1
- package/dist/dtmf.d.ts +0 -8
- package/dist/dtmf.js +0 -25
- package/dist/dtmf.js.map +0 -1
- package/dist/inbound-call-session.d.ts +0 -21
- package/dist/inbound-call-session.js +0 -191
- package/dist/inbound-call-session.js.map +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -96
- package/dist/index.js.map +0 -1
- package/dist/sip-message/inbound/index.d.ts +0 -5
- package/dist/sip-message/inbound/index.js +0 -23
- package/dist/sip-message/inbound/index.js.map +0 -1
- package/dist/sip-message/index.d.ts +0 -5
- package/dist/sip-message/index.js +0 -17
- package/dist/sip-message/index.js.map +0 -1
- package/dist/sip-message/outbound/index.d.ts +0 -5
- package/dist/sip-message/outbound/index.js +0 -15
- package/dist/sip-message/outbound/index.js.map +0 -1
- package/dist/sip-message/outbound/request-message.d.ts +0 -7
- package/dist/sip-message/outbound/request-message.js +0 -59
- package/dist/sip-message/outbound/request-message.js.map +0 -1
- package/dist/sip-message/outbound/request.d.ts +0 -7
- package/dist/sip-message/outbound/request.js +0 -29
- package/dist/sip-message/outbound/request.js.map +0 -1
- package/dist/sip-message/outbound/response-message.d.ts +0 -6
- package/dist/sip-message/outbound/response-message.js +0 -54
- package/dist/sip-message/outbound/response-message.js.map +0 -1
- package/dist/sip-message/outbound/response.d.ts +0 -6
- package/dist/sip-message/outbound/response.js +0 -22
- package/dist/sip-message/outbound/response.js.map +0 -1
- package/dist/sip-message/response-codes.d.ts +0 -4
- package/dist/sip-message/response-codes.js +0 -84
- package/dist/sip-message/response-codes.js.map +0 -1
- package/dist/sip-message/sip-message.d.ts +0 -10
- package/dist/sip-message/sip-message.js +0 -26
- package/dist/sip-message/sip-message.js.map +0 -1
- package/dist/softphone.d.ts +0 -26
- package/dist/softphone.js +0 -175
- package/dist/softphone.js.map +0 -1
- package/dist/utils.d.ts +0 -6
- package/dist/utils.js +0 -37
- package/dist/utils.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ringcentral-softphone",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.4",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/softphone.js",
|
|
6
6
|
"types": "dist/softphone.d.ts",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"lint": "eslint --fix '**/*.{ts,tsx,js,jsx}' && prettier --write . && sort-package-json",
|
|
9
9
|
"in": "rm -rf *.raw && tsx -r dotenv-override-true/config demos/inbound-call.ts",
|
|
10
10
|
"out": "rm -rf *.raw && tsx -r dotenv-override-true/config demos/outbound-call.ts",
|
|
11
|
-
"prepublishOnly": "rm -rf *.raw && yarn tsc"
|
|
11
|
+
"prepublishOnly": "rm -rf *.raw && rm -rf dist && yarn tsc"
|
|
12
12
|
},
|
|
13
13
|
"homepage": "https://github.com/ringcentral/ringcentral-softphone-ts",
|
|
14
14
|
"devDependencies": {
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { type InboundMessage } from '../sip-message';
|
|
2
|
-
import type Softphone from '../softphone';
|
|
3
|
-
import CallSession from '.';
|
|
4
|
-
declare class InboundCallSession extends CallSession {
|
|
5
|
-
constructor(softphone: Softphone, inviteMessage: InboundMessage);
|
|
6
|
-
answer(): Promise<void>;
|
|
7
|
-
}
|
|
8
|
-
export default InboundCallSession;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const sip_message_1 = require("../sip-message");
|
|
16
|
-
const utils_1 = require("../utils");
|
|
17
|
-
const _1 = __importDefault(require("."));
|
|
18
|
-
class InboundCallSession extends _1.default {
|
|
19
|
-
constructor(softphone, inviteMessage) {
|
|
20
|
-
super(softphone, inviteMessage);
|
|
21
|
-
this.localPeer = inviteMessage.headers.To;
|
|
22
|
-
this.remotePeer = inviteMessage.headers.From;
|
|
23
|
-
}
|
|
24
|
-
answer() {
|
|
25
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
-
const answerSDP = `
|
|
27
|
-
v=0
|
|
28
|
-
o=- ${(0, utils_1.randomInt)()} 0 IN IP4 127.0.0.1
|
|
29
|
-
s=rc-softphone-ts
|
|
30
|
-
c=IN IP4 127.0.0.1
|
|
31
|
-
t=0 0
|
|
32
|
-
m=audio ${(0, utils_1.randomInt)()} RTP/AVP 0 101
|
|
33
|
-
a=rtpmap:0 PCMU/8000
|
|
34
|
-
a=rtpmap:101 telephone-event/8000
|
|
35
|
-
a=fmtp:101 0-15
|
|
36
|
-
a=sendrecv
|
|
37
|
-
a=ssrc:${(0, utils_1.randomInt)()} cname:${(0, utils_1.uuid)()}
|
|
38
|
-
`.trim();
|
|
39
|
-
const newMessage = new sip_message_1.ResponseMessage(this.sipMessage, 200, {
|
|
40
|
-
'Content-Type': 'application/sdp',
|
|
41
|
-
}, answerSDP);
|
|
42
|
-
this.softphone.send(newMessage);
|
|
43
|
-
this.startLocalServices();
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
exports.default = InboundCallSession;
|
|
48
|
-
//# sourceMappingURL=inbound.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inbound.js","sourceRoot":"","sources":["../../src/call-session/inbound.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,gDAAsE;AACtE,oCAA2C;AAE3C,yCAA4B;AAE5B,MAAM,kBAAmB,SAAQ,UAAW;IAC1C,YAAmB,SAAoB,EAAE,aAA6B;QACpE,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;IAC/C,CAAC;IAEY,MAAM;;YACjB,MAAM,SAAS,GAAG;;MAEhB,IAAA,iBAAS,GAAE;;;;UAIP,IAAA,iBAAS,GAAE;;;;;SAKZ,IAAA,iBAAS,GAAE,UAAU,IAAA,YAAI,GAAE;CACnC,CAAC,IAAI,EAAE,CAAC;YACL,MAAM,UAAU,GAAG,IAAI,6BAAe,CACpC,IAAI,CAAC,UAAU,EACf,GAAG,EACH;gBACE,cAAc,EAAE,iBAAiB;aAClC,EACD,SAAS,CACV,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEhC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5B,CAAC;KAAA;CACF;AAED,kBAAe,kBAAkB,CAAC"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
/// <reference types="node" />
|
|
3
|
-
/// <reference types="node" />
|
|
4
|
-
import EventEmitter from 'events';
|
|
5
|
-
import dgram from 'dgram';
|
|
6
|
-
import { type InboundMessage } from '../sip-message';
|
|
7
|
-
import type Softphone from '../softphone';
|
|
8
|
-
declare abstract class CallSession extends EventEmitter {
|
|
9
|
-
softphone: Softphone;
|
|
10
|
-
sipMessage: InboundMessage;
|
|
11
|
-
socket: dgram.Socket;
|
|
12
|
-
localPeer: string;
|
|
13
|
-
remotePeer: string;
|
|
14
|
-
remoteIP: string;
|
|
15
|
-
remotePort: number;
|
|
16
|
-
constructor(softphone: Softphone, sipMessage: InboundMessage);
|
|
17
|
-
get callId(): string;
|
|
18
|
-
send(data: string | Buffer): void;
|
|
19
|
-
hangup(): Promise<void>;
|
|
20
|
-
sendDTMF(char: '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '*' | '#'): Promise<void>;
|
|
21
|
-
protected startLocalServices(): Promise<void>;
|
|
22
|
-
private dispose;
|
|
23
|
-
}
|
|
24
|
-
export default CallSession;
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const events_1 = __importDefault(require("events"));
|
|
16
|
-
const dgram_1 = __importDefault(require("dgram"));
|
|
17
|
-
const werift_rtp_1 = require("werift-rtp");
|
|
18
|
-
const sip_message_1 = require("../sip-message");
|
|
19
|
-
const utils_1 = require("../utils");
|
|
20
|
-
const dtmf_1 = __importDefault(require("../dtmf"));
|
|
21
|
-
class CallSession extends events_1.default {
|
|
22
|
-
constructor(softphone, sipMessage) {
|
|
23
|
-
super();
|
|
24
|
-
this.softphone = softphone;
|
|
25
|
-
this.sipMessage = sipMessage;
|
|
26
|
-
this.remoteIP = this.sipMessage.body.match(/c=IN IP4 ([\d.]+)/)[1];
|
|
27
|
-
this.remotePort = parseInt(this.sipMessage.body.match(/m=audio (\d+) /)[1], 10);
|
|
28
|
-
}
|
|
29
|
-
get callId() {
|
|
30
|
-
return this.sipMessage.headers['Call-Id'];
|
|
31
|
-
}
|
|
32
|
-
send(data) {
|
|
33
|
-
this.socket.send(data, this.remotePort, this.remoteIP);
|
|
34
|
-
}
|
|
35
|
-
hangup() {
|
|
36
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
-
const requestMessage = new sip_message_1.RequestMessage(`BYE sip:${this.softphone.sipInfo.domain} SIP/2.0`, {
|
|
38
|
-
'Call-Id': this.callId,
|
|
39
|
-
From: this.localPeer,
|
|
40
|
-
To: this.remotePeer,
|
|
41
|
-
Via: `SIP/2.0/TCP ${this.softphone.fakeDomain};branch=${(0, utils_1.uuid)()}`,
|
|
42
|
-
});
|
|
43
|
-
this.softphone.send(requestMessage);
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
sendDTMF(char) {
|
|
47
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
-
const timestamp = Math.floor(Date.now() / 1000);
|
|
49
|
-
let sequenceNumber = timestamp % 65536;
|
|
50
|
-
const rtpHeader = new werift_rtp_1.RtpHeader({
|
|
51
|
-
version: 2,
|
|
52
|
-
padding: false,
|
|
53
|
-
paddingSize: 0,
|
|
54
|
-
extension: false,
|
|
55
|
-
marker: false,
|
|
56
|
-
payloadOffset: 12,
|
|
57
|
-
payloadType: 101,
|
|
58
|
-
sequenceNumber,
|
|
59
|
-
timestamp,
|
|
60
|
-
ssrc: (0, utils_1.randomInt)(),
|
|
61
|
-
csrcLength: 0,
|
|
62
|
-
csrc: [],
|
|
63
|
-
extensionProfile: 48862,
|
|
64
|
-
extensionLength: undefined,
|
|
65
|
-
extensions: [],
|
|
66
|
-
});
|
|
67
|
-
for (const payload of dtmf_1.default.charToPayloads(char)) {
|
|
68
|
-
rtpHeader.sequenceNumber = sequenceNumber++;
|
|
69
|
-
const rtpPacket = new werift_rtp_1.RtpPacket(rtpHeader, payload);
|
|
70
|
-
this.send(rtpPacket.serialize());
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
startLocalServices() {
|
|
75
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
-
this.socket = dgram_1.default.createSocket('udp4');
|
|
77
|
-
this.socket.on('message', (message) => {
|
|
78
|
-
const rtpPacket = werift_rtp_1.RtpPacket.deSerialize(message);
|
|
79
|
-
this.emit('rtpPacket', rtpPacket);
|
|
80
|
-
if (rtpPacket.header.payloadType === 101) {
|
|
81
|
-
this.emit('dtmfPacket', rtpPacket);
|
|
82
|
-
const char = dtmf_1.default.payloadToChar(rtpPacket.payload);
|
|
83
|
-
if (char) {
|
|
84
|
-
this.emit('dtmf', char);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
this.emit('audioPacket', rtpPacket);
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
this.socket.bind();
|
|
92
|
-
// send a message to remote server so that it knows where to reply
|
|
93
|
-
this.send('hello');
|
|
94
|
-
const byeHandler = (inboundMessage) => {
|
|
95
|
-
if (inboundMessage.headers['Call-Id'] !== this.callId) {
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
if (inboundMessage.headers.CSeq.endsWith(' BYE')) {
|
|
99
|
-
this.softphone.off('message', byeHandler);
|
|
100
|
-
this.dispose();
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
this.softphone.on('message', byeHandler);
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
dispose() {
|
|
107
|
-
this.emit('disposed');
|
|
108
|
-
this.socket.removeAllListeners();
|
|
109
|
-
this.socket.close();
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
exports.default = CallSession;
|
|
113
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/call-session/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { type InboundMessage } from '../sip-message';
|
|
2
|
-
import type Softphone from '../softphone';
|
|
3
|
-
import CallSession from '.';
|
|
4
|
-
declare class OutboundCallSession extends CallSession {
|
|
5
|
-
constructor(softphone: Softphone, answerMessage: InboundMessage);
|
|
6
|
-
init(): Promise<void>;
|
|
7
|
-
cancel(): Promise<void>;
|
|
8
|
-
}
|
|
9
|
-
export default OutboundCallSession;
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const sip_message_1 = require("../sip-message");
|
|
16
|
-
const _1 = __importDefault(require("."));
|
|
17
|
-
const utils_1 = require("../utils");
|
|
18
|
-
class OutboundCallSession extends _1.default {
|
|
19
|
-
constructor(softphone, answerMessage) {
|
|
20
|
-
super(softphone, answerMessage);
|
|
21
|
-
this.localPeer = answerMessage.headers.From;
|
|
22
|
-
this.remotePeer = answerMessage.headers.To;
|
|
23
|
-
this.init();
|
|
24
|
-
}
|
|
25
|
-
init() {
|
|
26
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
-
// wait for user to answer the call
|
|
28
|
-
const answerHandler = (message) => {
|
|
29
|
-
if (message.headers.CSeq === this.sipMessage.headers.CSeq) {
|
|
30
|
-
this.softphone.off('message', answerHandler);
|
|
31
|
-
this.emit('answered');
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
this.softphone.on('message', answerHandler);
|
|
35
|
-
this.once('answered', () => __awaiter(this, void 0, void 0, function* () { return this.startLocalServices(); }));
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
cancel() {
|
|
39
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
40
|
-
const requestMessage = new sip_message_1.RequestMessage(`CANCEL ${(0, utils_1.extractAddress)(this.remotePeer)} SIP/2.0`, {
|
|
41
|
-
'Call-Id': this.callId,
|
|
42
|
-
From: this.localPeer,
|
|
43
|
-
To: (0, utils_1.withoutTag)(this.remotePeer),
|
|
44
|
-
Via: this.sipMessage.headers.Via,
|
|
45
|
-
CSeq: this.sipMessage.headers.CSeq.replace(' INVITE', ' CANCEL'),
|
|
46
|
-
});
|
|
47
|
-
this.softphone.send(requestMessage);
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
exports.default = OutboundCallSession;
|
|
52
|
-
//# sourceMappingURL=outbound.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"outbound.js","sourceRoot":"","sources":["../../src/call-session/outbound.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,gDAAqE;AAErE,yCAA4B;AAC5B,oCAAsD;AAEtD,MAAM,mBAAoB,SAAQ,UAAW;IAC3C,YAAmB,SAAoB,EAAE,aAA6B;QACpE,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;QAC5C,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEY,IAAI;;YACf,mCAAmC;YACnC,MAAM,aAAa,GAAG,CAAC,OAAuB,EAAE,EAAE;gBAChD,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBAC1D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;oBAC7C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YAE5C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAS,EAAE,gDAAC,OAAA,IAAI,CAAC,kBAAkB,EAAE,CAAA,GAAA,CAAC,CAAC;QAC/D,CAAC;KAAA;IAEY,MAAM;;YACjB,MAAM,cAAc,GAAG,IAAI,4BAAc,CAAC,UAAU,IAAA,sBAAc,EAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;gBAC7F,SAAS,EAAE,IAAI,CAAC,MAAM;gBACtB,IAAI,EAAE,IAAI,CAAC,SAAS;gBACpB,EAAE,EAAE,IAAA,kBAAU,EAAC,IAAI,CAAC,UAAU,CAAC;gBAC/B,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG;gBAChC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;aACjE,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtC,CAAC;KAAA;CACF;AAED,kBAAe,mBAAmB,CAAC"}
|
package/dist/dtmf.d.ts
DELETED
package/dist/dtmf.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
class DTMF {
|
|
4
|
-
}
|
|
5
|
-
DTMF.phoneChars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '*', '#'];
|
|
6
|
-
DTMF.payloads = [0x00060000, 0x000600a0, 0x00060140, 0x00860320, 0x00860320, 0x00860320];
|
|
7
|
-
DTMF.charToPayloads = (char) => {
|
|
8
|
-
const index = DTMF.phoneChars.indexOf(char[0]);
|
|
9
|
-
if (index === -1) {
|
|
10
|
-
throw new Error('invalid phone char');
|
|
11
|
-
}
|
|
12
|
-
return DTMF.payloads.map((payload) => {
|
|
13
|
-
const temp = payload + index * 0x01000000;
|
|
14
|
-
const buffer = Buffer.alloc(4);
|
|
15
|
-
buffer.writeIntBE(temp, 0, 4);
|
|
16
|
-
return buffer;
|
|
17
|
-
});
|
|
18
|
-
};
|
|
19
|
-
DTMF.payloadToChar = (payload) => {
|
|
20
|
-
const intBE = payload.readIntBE(0, 4);
|
|
21
|
-
const index = (intBE - 0x00060000) / 0x01000000;
|
|
22
|
-
return DTMF.phoneChars[index];
|
|
23
|
-
};
|
|
24
|
-
exports.default = DTMF;
|
|
25
|
-
//# sourceMappingURL=dtmf.js.map
|
package/dist/dtmf.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dtmf.js","sourceRoot":"","sources":["../src/dtmf.ts"],"names":[],"mappings":";;AAAA,MAAM,IAAI;;AACe,eAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACzE,aAAQ,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAE9F,mBAAc,GAAG,CAAC,IAAY,EAAE,EAAE;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACnC,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,GAAG,UAAU,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEY,kBAAa,GAAG,CAAC,OAAe,EAAE,EAAE;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC;IAChD,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC,CAAC;AAGJ,kBAAe,IAAI,CAAC"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import EventEmitter from 'events';
|
|
3
|
-
import { type InboundMessage } from './sip-message';
|
|
4
|
-
import type Softphone from './softphone';
|
|
5
|
-
declare class InboundCallSession extends EventEmitter {
|
|
6
|
-
disposed: boolean;
|
|
7
|
-
inviteMessage: InboundMessage;
|
|
8
|
-
softphone: Softphone;
|
|
9
|
-
private socket;
|
|
10
|
-
private remoteIP;
|
|
11
|
-
private remotePort;
|
|
12
|
-
private rtpPort;
|
|
13
|
-
constructor(softphone: Softphone, inviteMessage: InboundMessage);
|
|
14
|
-
get callId(): string;
|
|
15
|
-
answer(): Promise<void>;
|
|
16
|
-
hangup(): Promise<void>;
|
|
17
|
-
sendDTMF(char: '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '*' | '#'): Promise<void>;
|
|
18
|
-
private dispose;
|
|
19
|
-
private send;
|
|
20
|
-
}
|
|
21
|
-
export default InboundCallSession;
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
if (typeof b !== "function" && b !== null)
|
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
-
extendStatics(d, b);
|
|
13
|
-
function __() { this.constructor = d; }
|
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
-
};
|
|
16
|
-
})();
|
|
17
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
-
});
|
|
25
|
-
};
|
|
26
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
27
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
28
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
29
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
30
|
-
function step(op) {
|
|
31
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
32
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
33
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
34
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
35
|
-
switch (op[0]) {
|
|
36
|
-
case 0: case 1: t = op; break;
|
|
37
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
38
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
39
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
40
|
-
default:
|
|
41
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
42
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
43
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
44
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
45
|
-
if (t[2]) _.ops.pop();
|
|
46
|
-
_.trys.pop(); continue;
|
|
47
|
-
}
|
|
48
|
-
op = body.call(thisArg, _);
|
|
49
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
50
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
54
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
55
|
-
};
|
|
56
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
-
var get_port_1 = __importDefault(require("get-port"));
|
|
58
|
-
var werift_rtp_1 = require("werift-rtp");
|
|
59
|
-
var events_1 = __importDefault(require("events"));
|
|
60
|
-
var dgram_1 = __importDefault(require("dgram"));
|
|
61
|
-
var sip_message_1 = require("./sip-message");
|
|
62
|
-
var utils_1 = require("./utils");
|
|
63
|
-
var dtmf_1 = __importDefault(require("./dtmf"));
|
|
64
|
-
var InboundCallSession = /** @class */ (function (_super) {
|
|
65
|
-
__extends(InboundCallSession, _super);
|
|
66
|
-
function InboundCallSession(softphone, inviteMessage) {
|
|
67
|
-
var _this = _super.call(this) || this;
|
|
68
|
-
_this.disposed = false;
|
|
69
|
-
_this.softphone = softphone;
|
|
70
|
-
_this.inviteMessage = inviteMessage;
|
|
71
|
-
_this.remoteIP = _this.inviteMessage.body.match(/c=IN IP4 ([\d.]+)/)[1];
|
|
72
|
-
_this.remotePort = parseInt(_this.inviteMessage.body.match(/m=audio (\d+) /)[1], 10);
|
|
73
|
-
return _this;
|
|
74
|
-
}
|
|
75
|
-
Object.defineProperty(InboundCallSession.prototype, "callId", {
|
|
76
|
-
get: function () {
|
|
77
|
-
return this.inviteMessage.headers['Call-Id'];
|
|
78
|
-
},
|
|
79
|
-
enumerable: false,
|
|
80
|
-
configurable: true
|
|
81
|
-
});
|
|
82
|
-
InboundCallSession.prototype.answer = function () {
|
|
83
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
84
|
-
var _a, answerSDP, newMessage, byeHandler;
|
|
85
|
-
var _this = this;
|
|
86
|
-
return __generator(this, function (_b) {
|
|
87
|
-
switch (_b.label) {
|
|
88
|
-
case 0:
|
|
89
|
-
_a = this;
|
|
90
|
-
return [4 /*yield*/, (0, get_port_1.default)()];
|
|
91
|
-
case 1:
|
|
92
|
-
_a.rtpPort = _b.sent();
|
|
93
|
-
this.socket = dgram_1.default.createSocket('udp4');
|
|
94
|
-
this.socket.on('message', function (message) {
|
|
95
|
-
var rtpPacket = werift_rtp_1.RtpPacket.deSerialize(message);
|
|
96
|
-
_this.emit('rtpPacket', rtpPacket);
|
|
97
|
-
if (rtpPacket.header.payloadType === 101) {
|
|
98
|
-
_this.emit('dtmfPacket', rtpPacket);
|
|
99
|
-
var char = dtmf_1.default.payloadToChar(rtpPacket.payload);
|
|
100
|
-
if (char) {
|
|
101
|
-
_this.emit('dtmf', char);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
_this.emit('audioPacket', rtpPacket);
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
this.socket.bind(this.rtpPort);
|
|
109
|
-
// send a message to remote server so that it knows where to reply
|
|
110
|
-
this.send('hello');
|
|
111
|
-
answerSDP = "\nv=0\no=- ".concat(this.rtpPort, " 0 IN IP4 127.0.0.1\ns=rc-softphone-ts\nc=IN IP4 127.0.0.1\nt=0 0\nm=audio ").concat(this.rtpPort, " RTP/AVP 0 101\na=rtpmap:0 PCMU/8000\na=rtpmap:101 telephone-event/8000\na=fmtp:101 0-15\na=sendrecv\na=ssrc:").concat(this.rtpPort, " cname:").concat((0, utils_1.uuid)(), "\n").trim();
|
|
112
|
-
newMessage = new sip_message_1.ResponseMessage(this.inviteMessage, 200, {
|
|
113
|
-
'Content-Type': 'application/sdp',
|
|
114
|
-
}, answerSDP);
|
|
115
|
-
this.softphone.send(newMessage);
|
|
116
|
-
byeHandler = function (inboundMessage) {
|
|
117
|
-
if (inboundMessage.headers['Call-Id'] !== _this.callId) {
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
if (inboundMessage.headers.CSeq.endsWith(' BYE')) {
|
|
121
|
-
_this.softphone.off('message', byeHandler);
|
|
122
|
-
_this.dispose();
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
this.softphone.on('message', byeHandler);
|
|
126
|
-
return [2 /*return*/];
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
};
|
|
131
|
-
InboundCallSession.prototype.hangup = function () {
|
|
132
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
133
|
-
var requestMessage;
|
|
134
|
-
return __generator(this, function (_a) {
|
|
135
|
-
requestMessage = new sip_message_1.RequestMessage("BYE sip:".concat(this.softphone.sipInfo.domain, " SIP/2.0"), {
|
|
136
|
-
'Call-Id': this.callId,
|
|
137
|
-
From: this.inviteMessage.headers.To,
|
|
138
|
-
To: this.inviteMessage.headers.From,
|
|
139
|
-
Via: "SIP/2.0/TCP ".concat(this.softphone.fakeDomain, ";branch=").concat((0, utils_1.uuid)()),
|
|
140
|
-
});
|
|
141
|
-
this.softphone.send(requestMessage);
|
|
142
|
-
return [2 /*return*/];
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
};
|
|
146
|
-
InboundCallSession.prototype.sendDTMF = function (char) {
|
|
147
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
148
|
-
var timestamp, sequenceNumber, rtpHeader, _i, _a, payload, rtpPacket;
|
|
149
|
-
return __generator(this, function (_b) {
|
|
150
|
-
timestamp = Math.floor(Date.now() / 1000);
|
|
151
|
-
sequenceNumber = timestamp % 65536;
|
|
152
|
-
rtpHeader = new werift_rtp_1.RtpHeader({
|
|
153
|
-
version: 2,
|
|
154
|
-
padding: false,
|
|
155
|
-
paddingSize: 0,
|
|
156
|
-
extension: false,
|
|
157
|
-
marker: false,
|
|
158
|
-
payloadOffset: 12,
|
|
159
|
-
payloadType: 101,
|
|
160
|
-
sequenceNumber: sequenceNumber,
|
|
161
|
-
timestamp: timestamp,
|
|
162
|
-
ssrc: this.rtpPort,
|
|
163
|
-
csrcLength: 0,
|
|
164
|
-
csrc: [],
|
|
165
|
-
extensionProfile: 48862,
|
|
166
|
-
extensionLength: undefined,
|
|
167
|
-
extensions: [],
|
|
168
|
-
});
|
|
169
|
-
for (_i = 0, _a = dtmf_1.default.charToPayloads(char); _i < _a.length; _i++) {
|
|
170
|
-
payload = _a[_i];
|
|
171
|
-
rtpHeader.sequenceNumber = sequenceNumber++;
|
|
172
|
-
rtpPacket = new werift_rtp_1.RtpPacket(rtpHeader, payload);
|
|
173
|
-
this.send(rtpPacket.serialize());
|
|
174
|
-
}
|
|
175
|
-
return [2 /*return*/];
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
};
|
|
179
|
-
InboundCallSession.prototype.dispose = function () {
|
|
180
|
-
this.disposed = true;
|
|
181
|
-
this.emit('disposed');
|
|
182
|
-
this.socket.removeAllListeners();
|
|
183
|
-
this.socket.close();
|
|
184
|
-
};
|
|
185
|
-
InboundCallSession.prototype.send = function (data) {
|
|
186
|
-
this.socket.send(data, this.remotePort, this.remoteIP);
|
|
187
|
-
};
|
|
188
|
-
return InboundCallSession;
|
|
189
|
-
}(events_1.default));
|
|
190
|
-
exports.default = InboundCallSession;
|
|
191
|
-
//# sourceMappingURL=inbound-call-session.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-call-session.js","sourceRoot":"","sources":["../src/inbound-call-session.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|