sip-lab 1.38.0 → 1.40.0

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.
@@ -0,0 +1,230 @@
1
+ var sip = require ('../index.js')
2
+ var Zeq = require('@mayama/zeq')
3
+ var z = new Zeq()
4
+ var m = require('data-matching')
5
+ var sip_msg = require('sip-matching')
6
+ var sdp = require('sdp-matching')
7
+
8
+ var assert = require('assert')
9
+
10
+ async function test() {
11
+ //sip.set_log_level(6)
12
+ sip.dtmf_aggregation_on(500)
13
+
14
+ z.trap_events(sip.event_source, 'event', (evt) => {
15
+ var e = evt.args[0]
16
+ return e
17
+ })
18
+
19
+ console.log(sip.start((data) => { console.log(data)} ))
20
+
21
+ t1 = sip.transport.create({address: "127.0.0.1", type: 'udp'})
22
+ t2 = sip.transport.create({address: "127.0.0.1", type: 'udp'})
23
+
24
+ console.log("t1", t1)
25
+ console.log("t2", t2)
26
+
27
+ assert(sip.get_codecs().indexOf("iLBC/8000/1") > 0)
28
+
29
+ sip.set_codecs("iLBC/8000/1:128")
30
+
31
+ flags = 0
32
+
33
+ oc = sip.call.create(t1.id, {from_uri: 'sip:alice@test.com', to_uri: `sip:bob@${t2.address}:${t2.port}`})
34
+
35
+ await z.wait([
36
+ {
37
+ event: "incoming_call",
38
+ call_id: m.collect("call_id"),
39
+ },
40
+ {
41
+ event: 'response',
42
+ call_id: oc.id,
43
+ method: 'INVITE',
44
+ msg: sip_msg({
45
+ $rs: '100',
46
+ $rr: 'Trying',
47
+ }),
48
+ },
49
+ ], 1000)
50
+
51
+ ic = {
52
+ id: z.$call_id,
53
+ sip_call_id: z.$sip_call_id,
54
+ }
55
+
56
+ sip.call.respond(ic.id, {code: 200, reason: 'OK'})
57
+
58
+ await z.wait([
59
+ {
60
+ event: 'media_update',
61
+ call_id: oc.id,
62
+ status: 'ok',
63
+ },
64
+ {
65
+ event: 'media_update',
66
+ call_id: ic.id,
67
+ status: 'ok',
68
+ },
69
+ {
70
+ event: 'response',
71
+ call_id: oc.id,
72
+ method: 'INVITE',
73
+ msg: sip_msg({
74
+ $rs: '200',
75
+ $rr: 'OK',
76
+ 'hdr_content_type': 'application/sdp',
77
+ $rb: '!{_}a=sendrecv!{_}',
78
+ }),
79
+ },
80
+ ], 1000)
81
+
82
+ sip.call.start_record_wav(oc.id, {file: './oc.wav'})
83
+ sip.call.start_record_wav(ic.id, {file: './ic.wav'})
84
+
85
+ sip.call.start_play_wav(oc.id, {file: 'samples/artifacts/hello_good_morning.wav', end_of_file_event: true, no_loop: true})
86
+ sip.call.start_play_wav(ic.id, {file: 'samples/artifacts/hello_good_morning.wav', end_of_file_event: true, no_loop: true})
87
+
88
+ await z.wait([
89
+ {
90
+ event: 'end_of_file',
91
+ call_id: oc.id,
92
+ },
93
+ {
94
+ event: 'end_of_file',
95
+ call_id: ic.id,
96
+ },
97
+ ], 5000)
98
+
99
+ sip.call.reinvite(oc.id)
100
+
101
+ await z.wait([
102
+ {
103
+ event: 'reinvite',
104
+ call_id: ic.id
105
+ },
106
+ ], 1000)
107
+
108
+ sip.call.respond(ic.id, {code: 200, reason: 'OK'})
109
+
110
+ await z.wait([
111
+ {
112
+ event: 'response',
113
+ call_id: oc.id,
114
+ method: 'INVITE',
115
+ msg: sip_msg({
116
+ $rs: '100',
117
+ }),
118
+ },
119
+ {
120
+ event: 'response',
121
+ call_id: oc.id,
122
+ method: 'INVITE',
123
+ msg: sip_msg({
124
+ $rs: '200',
125
+ $rr: 'OK',
126
+ $rb: '!{_}a=sendrecv!{_}',
127
+ }),
128
+ },
129
+ {
130
+ event: 'media_update',
131
+ call_id: oc.id,
132
+ status: 'ok',
133
+ },
134
+ {
135
+ event: 'media_update',
136
+ call_id: ic.id,
137
+ status: 'ok',
138
+ },
139
+ ], 500)
140
+
141
+ sip.call.reinvite(oc.id, false, 0)
142
+
143
+ await z.wait([
144
+ {
145
+ event: 'reinvite',
146
+ call_id: ic.id
147
+ },
148
+ ], 1000)
149
+
150
+ sip.call.respond(ic.id, {code: 200, reason: 'OK'})
151
+
152
+ await z.wait([
153
+ {
154
+ event: 'response',
155
+ call_id: oc.id,
156
+ method: 'INVITE',
157
+ msg: sip_msg({
158
+ $rs: '100',
159
+ }),
160
+ },
161
+ {
162
+ event: 'response',
163
+ call_id: oc.id,
164
+ method: 'INVITE',
165
+ msg: sip_msg({
166
+ $rs: '200',
167
+ $rr: 'OK',
168
+ $rb: '!{_}a=sendrecv!{_}',
169
+ }),
170
+ },
171
+ {
172
+ event: 'media_update',
173
+ call_id: oc.id,
174
+ status: 'ok',
175
+ },
176
+ {
177
+ event: 'media_update',
178
+ call_id: ic.id,
179
+ status: 'ok',
180
+ },
181
+ ], 500)
182
+
183
+ oc_stat = sip.call.get_stream_stat(oc.id, {media_id: 0})
184
+ ic_stat = sip.call.get_stream_stat(ic.id, {media_id: 0})
185
+
186
+ console.log(oc_stat)
187
+ console.log(ic_stat)
188
+
189
+ oc_stat = JSON.parse(oc_stat)
190
+ ic_stat = JSON.parse(ic_stat)
191
+
192
+ assert(oc_stat.CodecInfo == 'iLBC/8000/1')
193
+ assert(ic_stat.CodecInfo == 'iLBC/8000/1')
194
+
195
+ sip.call.stop_record_wav(oc.id)
196
+ sip.call.stop_record_wav(ic.id)
197
+
198
+ sip.call.terminate(oc.id)
199
+
200
+ await z.wait([
201
+ {
202
+ event: 'call_ended',
203
+ call_id: oc.id,
204
+ },
205
+ {
206
+ event: 'call_ended',
207
+ call_id: ic.id,
208
+ },
209
+ {
210
+ event: 'response',
211
+ call_id: oc.id,
212
+ method: 'BYE',
213
+ msg: sip_msg({
214
+ $rs: '200',
215
+ $rr: 'OK',
216
+ }),
217
+ },
218
+ ], 1000)
219
+
220
+ console.log("Success")
221
+
222
+ sip.stop()
223
+ process.exit(0)
224
+ }
225
+
226
+ test()
227
+ .catch(e => {
228
+ console.error(e)
229
+ process.exit(1)
230
+ })
@@ -0,0 +1,254 @@
1
+ var sip = require ('../index.js')
2
+ var Zeq = require('@mayama/zeq')
3
+ var z = new Zeq()
4
+ var m = require('data-matching')
5
+ var sip_msg = require('sip-matching')
6
+ var sdp = require('sdp-matching')
7
+ var mrcp = require('mrcp')
8
+ var mrcp_msg = require('mrcp-matching')
9
+
10
+ async function test() {
11
+ sip.set_log_level(9)
12
+
13
+ //sip.set_log_level(6)
14
+ sip.dtmf_aggregation_on(500)
15
+
16
+ z.trap_events(sip.event_source, 'event', (evt) => {
17
+ var e = evt.args[0]
18
+ return e
19
+ })
20
+
21
+ console.log(sip.start((data) => { console.log(data)} ))
22
+
23
+ var t1 = sip.transport.create({address: "127.0.0.1", type: 'udp'})
24
+ var t2 = sip.transport.create({address: "127.0.0.1", type: 'udp'})
25
+
26
+ console.log("t1", t1)
27
+ console.log("t2", t2)
28
+
29
+ var client_media = [
30
+ {
31
+ type: 'mrcp',
32
+ fields: [
33
+ 'a=setup:active',
34
+ 'a=connection:new',
35
+ 'a=resource:speechsynth',
36
+ 'a=cmid:1',
37
+ ],
38
+ },
39
+ {
40
+ type: 'audio',
41
+ fields: [
42
+ 'a=recvonly',
43
+ 'a=mid:1',
44
+ ],
45
+ },
46
+ ]
47
+
48
+ var server_media = [
49
+ {
50
+ type: 'mrcp',
51
+ fields: [
52
+ 'a=setup:passive',
53
+ 'a=connection:new',
54
+ 'a=channel:32AECB234338@speechsynth',
55
+ 'a=cmid:1',
56
+ ],
57
+ },
58
+ {
59
+ type: 'audio',
60
+ fields: [
61
+ 'a=sendonly',
62
+ ],
63
+ },
64
+ ]
65
+
66
+ oc = sip.call.create(t1.id, {
67
+ from_uri: 'sip:alice@test.com',
68
+ to_uri: `sip:bob@${t2.address}:${t2.port}`,
69
+ media: client_media,
70
+ })
71
+
72
+ await z.wait([
73
+ {
74
+ event: "incoming_call",
75
+ call_id: m.collect("call_id"),
76
+ },
77
+ {
78
+ event: 'response',
79
+ call_id: oc.id,
80
+ method: 'INVITE',
81
+ msg: sip_msg({
82
+ $rs: '100',
83
+ $rr: 'Trying',
84
+ '$hdr(call-id)': m.collect('sip_call_id'),
85
+ }),
86
+ },
87
+ ], 1000)
88
+
89
+ ic = {
90
+ id: z.$call_id,
91
+ sip_call_id: z.$sip_call_id,
92
+ }
93
+
94
+ sip.call.respond(ic.id, {
95
+ code: 200,
96
+ reason: 'OK',
97
+ media: server_media,
98
+ })
99
+
100
+ await z.wait([
101
+ {
102
+ event: 'response',
103
+ call_id: oc.id,
104
+ method: 'INVITE',
105
+ msg: sip_msg({
106
+ $rs: '200',
107
+ $rr: 'OK',
108
+ '$hdr(content-type)': 'application/sdp',
109
+ $rb: sdp.jsonpath_matcher({
110
+ '$.media[?(@.desc.type=="application")].val_attrs.channel': [m.collect('mrcp_channel')],
111
+ }),
112
+ }),
113
+ },
114
+ {
115
+ event: 'media_update',
116
+ call_id: oc.id,
117
+ status: 'ok',
118
+ media: [
119
+ {
120
+ type: 'mrcp',
121
+ local: {
122
+ port: 9
123
+ },
124
+ remote: {
125
+ port: m.collect('mrcp_server_port'),
126
+ },
127
+ },
128
+ {
129
+ type: 'audio',
130
+ local: {
131
+ mode: 'recvonly'
132
+ },
133
+ remote: {
134
+ mode: 'sendonly'
135
+ }
136
+ }
137
+ ],
138
+ },
139
+ {
140
+ event: 'media_update',
141
+ call_id: ic.id,
142
+ status: 'ok',
143
+ media: [
144
+ {
145
+ type: 'mrcp',
146
+ local: {
147
+ port: m.collect('mrcp_server_port'),
148
+ },
149
+ remote: {
150
+ port: 9
151
+ }
152
+ },
153
+ {
154
+ type: 'audio',
155
+ local: {
156
+ mode: 'sendonly'
157
+ },
158
+ remote: {
159
+ mode: 'recvonly'
160
+ }
161
+ }
162
+ ],
163
+ },
164
+ ], 1000)
165
+
166
+ var mrcp_channel = z.$mrcp_channel
167
+ var request_id = 1;
168
+ var msg = mrcp.builder.build_request('SPEAK', request_id, {'channel-identifier': mrcp_channel, 'content-type': 'application/xml'}, "<root>test</root>")
169
+
170
+ sip.call.send_mrcp_msg(oc.id, {msg})
171
+
172
+ await z.wait([
173
+ {
174
+ event: 'mrcp_msg',
175
+ call_id: ic.id,
176
+ msg: mrcp_msg({
177
+ type: 'request',
178
+ version: '2.0',
179
+ method: 'SPEAK',
180
+ request_id: 1,
181
+ headers: {
182
+ 'content-type': 'application/xml',
183
+ },
184
+ body: '<root>test</root>',
185
+ }),
186
+ },
187
+ ], 1000)
188
+
189
+ msg = mrcp.builder.build_response(request_id, 200, 'IN-PROGRESS', {'channel-identifier': mrcp_channel})
190
+ sip.call.send_mrcp_msg(ic.id, {msg})
191
+
192
+ msg = mrcp.builder.build_event('SPEAK-COMPLETE', request_id, 'COMPLETE', {'channel-identifier': mrcp_channel})
193
+ sip.call.send_mrcp_msg(ic.id, {msg})
194
+
195
+ await z.wait([
196
+ {
197
+ event: 'mrcp_msg',
198
+ call_id: oc.id,
199
+ msg: mrcp_msg({
200
+ type: 'response',
201
+ version: '2.0',
202
+ request_id: 1,
203
+ status_code: 200,
204
+ request_state: 'IN-PROGRESS',
205
+ }),
206
+ },
207
+ {
208
+ event: 'mrcp_msg',
209
+ call_id: oc.id,
210
+ msg: mrcp_msg({
211
+ type: 'event',
212
+ version: '2.0',
213
+ request_id: 1,
214
+ event_name: 'SPEAK-COMPLETE',
215
+ request_state: 'COMPLETE',
216
+ }),
217
+ },
218
+ ], 1000)
219
+
220
+ sip.call.terminate(oc.id)
221
+
222
+ await z.wait([
223
+ {
224
+ event: 'call_ended',
225
+ call_id: oc.id,
226
+ },
227
+ {
228
+ event: 'call_ended',
229
+ call_id: ic.id,
230
+ },
231
+ {
232
+ event: 'response',
233
+ call_id: oc.id,
234
+ method: 'BYE',
235
+ msg: sip_msg({
236
+ $rs: '200',
237
+ $rr: 'OK',
238
+ }),
239
+ },
240
+ ], 1000)
241
+
242
+ console.log("Success")
243
+
244
+ sip.stop()
245
+ process.exit(0)
246
+ }
247
+
248
+
249
+ test()
250
+ .catch(e => {
251
+ console.error(e)
252
+ process.exit(1)
253
+ })
254
+