sip-lab 1.4.0 → 1.7.1

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.
@@ -1,278 +1,290 @@
1
1
  var sip = require ('../index.js')
2
- var z = require('zester')
2
+ var Zester = require('zester')
3
+ var z = new Zester()
3
4
  var m = require('data-matching')
4
5
  var sip_msg = require('sip-matching')
5
6
 
6
- //sip.set_log_level(6)
7
- sip.dtmf_aggregation_on(500)
7
+ async function test() {
8
+ //sip.set_log_level(6)
9
+ sip.dtmf_aggregation_on(500)
10
+
11
+ z.trap_events(sip.event_source, 'event', (evt) => {
12
+ var e = evt.args[0]
13
+ return e
14
+ })
15
+
16
+ console.log(sip.start((data) => { console.log(data)} ))
17
+
18
+ t1 = sip.transport.create("127.0.0.1", 5090, 1)
19
+ t2 = sip.transport.create("127.0.0.1", 5092, 1)
20
+
21
+ console.log("t1", t1)
22
+ console.log("t2", t2)
23
+
24
+ flags = 1 // late negotiation
25
+
26
+ oc = sip.call.create(t1.id, flags, 'sip:a@t', 'sip:b@127.0.0.1:5092')
27
+
28
+ await z.wait([
29
+ {
30
+ event: "incoming_call",
31
+ call_id: m.collect("call_id"),
32
+ },
33
+ {
34
+ event: 'response',
35
+ call_id: oc.id,
36
+ method: 'INVITE',
37
+ msg: sip_msg({
38
+ $rs: '100',
39
+ $rr: 'Trying',
40
+ '$(hdrcnt(via))': 1,
41
+ '$hdr(call-id)': m.collect('sip_call_id'),
42
+ $fU: 'a',
43
+ $fd: 't',
44
+ $tU: 'b',
45
+ '$hdr(l)': '0',
46
+ }),
47
+ },
48
+ ], 1000)
49
+
50
+ ic = {
51
+ id: z.store.call_id,
52
+ sip_call_id: z.store.sip_call_id,
53
+ }
54
+
55
+ sip.call.respond(ic.id, 200, 'OK')
56
+
57
+ await z.wait([
58
+ {
59
+ event: 'media_status',
60
+ call_id: oc.id,
61
+ status: 'setup_ok',
62
+ local_mode: 'sendrecv',
63
+ remote_mode: 'sendrecv',
64
+ },
65
+ {
66
+ event: 'media_status',
67
+ call_id: ic.id,
68
+ status: 'setup_ok',
69
+ local_mode: 'sendrecv',
70
+ remote_mode: 'sendrecv',
71
+ },
72
+ {
73
+ event: 'response',
74
+ call_id: oc.id,
75
+ method: 'INVITE',
76
+ msg: sip_msg({
77
+ $rs: '200',
78
+ $rr: 'OK',
79
+ '$(hdrcnt(VIA))': 1,
80
+ $fU: 'a',
81
+ $fd: 't',
82
+ $tU: 'b',
83
+ '$hdr(content-type)': 'application/sdp',
84
+ $rb: '!{_}a=sendrecv',
85
+ }),
86
+ },
87
+ ], 1000)
88
+
89
+ sip.call.send_dtmf(oc.id, '1234', 0)
90
+ sip.call.send_dtmf(ic.id, '4321', 1)
91
+
92
+ await z.wait([
93
+ {
94
+ event: 'dtmf',
95
+ call_id: ic.id,
96
+ digits: '1234',
97
+ mode: 0,
98
+ },
99
+ {
100
+ event: 'dtmf',
101
+ call_id: oc.id,
102
+ digits: '4321',
103
+ mode: 1,
104
+ },
105
+ ], 2000)
106
+
107
+
108
+ sip.call.reinvite(oc.id, true, flags)
109
+
110
+ await z.wait([
111
+ {
112
+ event: 'response',
113
+ call_id: oc.id,
114
+ method: 'INVITE',
115
+ msg: sip_msg({
116
+ $rs: '200',
117
+ $rr: 'OK',
118
+ $rb: '!{_}a=sendrecv',
119
+ }),
120
+ },
121
+ {
122
+ event: 'media_status',
123
+ call_id: oc.id,
124
+ status: 'setup_ok',
125
+ local_mode: 'sendonly',
126
+ remote_mode: 'sendrecv',
127
+ },
128
+ {
129
+ event: 'media_status',
130
+ call_id: ic.id,
131
+ status: 'setup_ok',
132
+ local_mode: 'recvonly',
133
+ remote_mode: 'sendonly',
134
+ },
135
+ ], 500)
136
+
137
+ sip.call.send_dtmf(oc.id, '1234', 0)
138
+ sip.call.send_dtmf(ic.id, '4321', 1) // This will not generate event 'dtmf'
139
+
140
+ await z.wait([
141
+ {
142
+ event: 'dtmf',
143
+ call_id: ic.id,
144
+ digits: '1234',
145
+ mode: 0,
146
+ },
147
+ ], 2000)
148
+
149
+ sip.call.reinvite(ic.id, false, flags)
150
+
151
+ await z.wait([
152
+ {
153
+ event: 'response',
154
+ call_id: ic.id,
155
+ method: 'INVITE',
156
+ msg: sip_msg({
157
+ $rs: '200',
158
+ $rr: 'OK',
159
+ $rb: '!{_}a=sendonly',
160
+ }),
161
+ },
162
+ {
163
+ event: 'media_status',
164
+ call_id: oc.id,
165
+ status: 'setup_ok',
166
+ local_mode: 'sendonly',
167
+ remote_mode: 'recvonly',
168
+ },
169
+ {
170
+ event: 'media_status',
171
+ call_id: ic.id,
172
+ status: 'setup_ok',
173
+ local_mode: 'recvonly',
174
+ remote_mode: 'sendonly',
175
+ },
176
+ ], 500)
177
+
178
+ sip.call.send_dtmf(oc.id, '1234', 0)
179
+ sip.call.send_dtmf(ic.id, '4321', 1) // This will not generate event 'dtmf'
180
+
181
+ await z.wait([
182
+ {
183
+ event: 'dtmf',
184
+ call_id: ic.id,
185
+ digits: '1234',
186
+ mode: 0,
187
+ },
188
+ ], 2000)
189
+
190
+ sip.call.send_request(oc.id, 'INFO')
191
+
192
+ await z.wait([
193
+ {
194
+ event: 'request',
195
+ call_id: ic.id,
196
+ msg: sip_msg({
197
+ $rm: 'INFO',
198
+ }),
199
+ },
200
+ {
201
+ event: 'response',
202
+ call_id: oc.id,
203
+ method: 'INFO',
204
+ msg: sip_msg({
205
+ $rs: '200',
206
+ $rr: 'OK',
207
+ }),
208
+ },
209
+ ], 500)
210
+
211
+ await z.sleep(100)
212
+
213
+ sip.call.reinvite(oc.id, false, flags)
214
+
215
+ await z.wait([
216
+ {
217
+ event: 'response',
218
+ call_id: oc.id,
219
+ method: 'INVITE',
220
+ msg: sip_msg({
221
+ $rs: '200',
222
+ $rr: 'OK',
223
+ $rb: '!{_}a=recvonly',
224
+ }),
225
+ },
226
+ {
227
+ event: 'media_status',
228
+ call_id: oc.id,
229
+ status: 'setup_ok',
230
+ local_mode: 'sendonly',
231
+ remote_mode: 'recvonly',
232
+ },
233
+ {
234
+ event: 'media_status',
235
+ call_id: ic.id,
236
+ status: 'setup_ok',
237
+ local_mode: 'recvonly',
238
+ remote_mode: 'sendonly',
239
+ },
240
+ ], 500)
241
+
242
+
243
+ sip.call.send_dtmf(oc.id, '1234', 0)
244
+ sip.call.send_dtmf(ic.id, '4321', 1) // This will not generate event 'dtmf'
245
+
246
+ await z.wait([
247
+ {
248
+ event: 'dtmf',
249
+ call_id: ic.id,
250
+ digits: '1234',
251
+ mode: 0,
252
+ },
253
+ ], 2000)
254
+
255
+
256
+ sip.call.terminate(oc.id)
257
+
258
+ await z.wait([
259
+ {
260
+ event: 'call_ended',
261
+ call_id: oc.id,
262
+ },
263
+ {
264
+ event: 'call_ended',
265
+ call_id: ic.id,
266
+ },
267
+ {
268
+ event: 'response',
269
+ call_id: oc.id,
270
+ method: 'BYE',
271
+ msg: sip_msg({
272
+ $rs: '200',
273
+ $rr: 'OK',
274
+ }),
275
+ },
276
+ ], 1000)
277
+
278
+ await z.sleep(1000)
279
+
280
+ console.log("Success")
281
+
282
+ sip.stop()
283
+ }
8
284
 
9
- z.trap_events(sip.event_source, 'event', (evt) => {
10
- var e = evt.args[0]
11
- return e
285
+ test()
286
+ .catch(e => {
287
+ console.error(e)
288
+ process.exit(1)
12
289
  })
13
290
 
14
- console.log(sip.start((data) => { console.log(data)} ))
15
-
16
- t1 = sip.transport.create("127.0.0.1", 5090, 1)
17
- t2 = sip.transport.create("127.0.0.1", 5092, 1)
18
-
19
- console.log("t1", t1)
20
- console.log("t2", t2)
21
-
22
- flags = 1 // late negotiation
23
-
24
- oc = sip.call.create(t1.id, flags, 'sip:a@t', 'sip:b@127.0.0.1:5092')
25
-
26
- z.wait([
27
- {
28
- event: "incoming_call",
29
- call_id: m.collect("call_id"),
30
- },
31
- {
32
- event: 'response',
33
- call_id: oc.id,
34
- method: 'INVITE',
35
- msg: sip_msg({
36
- $rs: '100',
37
- $rr: 'Trying',
38
- '$(hdrcnt(via))': 1,
39
- '$hdr(call-id)': m.collect('sip_call_id'),
40
- $fU: 'a',
41
- $fd: 't',
42
- $tU: 'b',
43
- '$hdr(l)': '0',
44
- }),
45
- },
46
- ], 1000)
47
-
48
- ic = {
49
- id: z.store.call_id,
50
- sip_call_id: z.store.sip_call_id,
51
- }
52
-
53
- sip.call.respond(ic.id, 200, 'OK')
54
-
55
- z.wait([
56
- {
57
- event: 'media_status',
58
- call_id: oc.id,
59
- status: 'setup_ok',
60
- local_mode: 'sendrecv',
61
- remote_mode: 'sendrecv',
62
- },
63
- {
64
- event: 'media_status',
65
- call_id: ic.id,
66
- status: 'setup_ok',
67
- local_mode: 'sendrecv',
68
- remote_mode: 'sendrecv',
69
- },
70
- {
71
- event: 'response',
72
- call_id: oc.id,
73
- method: 'INVITE',
74
- msg: sip_msg({
75
- $rs: '200',
76
- $rr: 'OK',
77
- '$(hdrcnt(VIA))': 1,
78
- $fU: 'a',
79
- $fd: 't',
80
- $tU: 'b',
81
- '$hdr(content-type)': 'application/sdp',
82
- $rb: '!{_}a=sendrecv',
83
- }),
84
- },
85
- ], 1000)
86
-
87
- sip.call.send_dtmf(oc.id, '1234', 0)
88
- sip.call.send_dtmf(ic.id, '4321', 1)
89
-
90
- z.wait([
91
- {
92
- event: 'dtmf',
93
- call_id: ic.id,
94
- digits: '1234',
95
- mode: 0,
96
- },
97
- {
98
- event: 'dtmf',
99
- call_id: oc.id,
100
- digits: '4321',
101
- mode: 1,
102
- },
103
- ], 2000)
104
-
105
-
106
- sip.call.reinvite(oc.id, true, flags)
107
-
108
- z.wait([
109
- {
110
- event: 'response',
111
- call_id: oc.id,
112
- method: 'INVITE',
113
- msg: sip_msg({
114
- $rs: '200',
115
- $rr: 'OK',
116
- $rb: '!{_}a=sendrecv',
117
- }),
118
- },
119
- {
120
- event: 'media_status',
121
- call_id: oc.id,
122
- status: 'setup_ok',
123
- local_mode: 'sendonly',
124
- remote_mode: 'sendrecv',
125
- },
126
- {
127
- event: 'media_status',
128
- call_id: ic.id,
129
- status: 'setup_ok',
130
- local_mode: 'recvonly',
131
- remote_mode: 'sendonly',
132
- },
133
- ], 500)
134
-
135
- sip.call.send_dtmf(oc.id, '1234', 0)
136
- sip.call.send_dtmf(ic.id, '4321', 1) // This will not generate event 'dtmf'
137
-
138
- z.wait([
139
- {
140
- event: 'dtmf',
141
- call_id: ic.id,
142
- digits: '1234',
143
- mode: 0,
144
- },
145
- ], 2000)
146
-
147
- sip.call.reinvite(ic.id, false, flags)
148
-
149
- z.wait([
150
- {
151
- event: 'response',
152
- call_id: ic.id,
153
- method: 'INVITE',
154
- msg: sip_msg({
155
- $rs: '200',
156
- $rr: 'OK',
157
- $rb: '!{_}a=sendonly',
158
- }),
159
- },
160
- {
161
- event: 'media_status',
162
- call_id: oc.id,
163
- status: 'setup_ok',
164
- local_mode: 'sendonly',
165
- remote_mode: 'recvonly',
166
- },
167
- {
168
- event: 'media_status',
169
- call_id: ic.id,
170
- status: 'setup_ok',
171
- local_mode: 'recvonly',
172
- remote_mode: 'sendonly',
173
- },
174
- ], 500)
175
-
176
- sip.call.send_dtmf(oc.id, '1234', 0)
177
- sip.call.send_dtmf(ic.id, '4321', 1) // This will not generate event 'dtmf'
178
-
179
- z.wait([
180
- {
181
- event: 'dtmf',
182
- call_id: ic.id,
183
- digits: '1234',
184
- mode: 0,
185
- },
186
- ], 2000)
187
-
188
- sip.call.send_request(oc.id, 'INFO')
189
-
190
- z.wait([
191
- {
192
- event: 'request',
193
- call_id: ic.id,
194
- msg: sip_msg({
195
- $rm: 'INFO',
196
- }),
197
- },
198
- {
199
- event: 'response',
200
- call_id: oc.id,
201
- method: 'INFO',
202
- msg: sip_msg({
203
- $rs: '200',
204
- $rr: 'OK',
205
- }),
206
- },
207
- ], 500)
208
-
209
- z.sleep(100)
210
-
211
- sip.call.reinvite(oc.id, false, flags)
212
-
213
- z.wait([
214
- {
215
- event: 'response',
216
- call_id: oc.id,
217
- method: 'INVITE',
218
- msg: sip_msg({
219
- $rs: '200',
220
- $rr: 'OK',
221
- $rb: '!{_}a=recvonly',
222
- }),
223
- },
224
- {
225
- event: 'media_status',
226
- call_id: oc.id,
227
- status: 'setup_ok',
228
- local_mode: 'sendonly',
229
- remote_mode: 'recvonly',
230
- },
231
- {
232
- event: 'media_status',
233
- call_id: ic.id,
234
- status: 'setup_ok',
235
- local_mode: 'recvonly',
236
- remote_mode: 'sendonly',
237
- },
238
- ], 500)
239
-
240
-
241
- sip.call.send_dtmf(oc.id, '1234', 0)
242
- sip.call.send_dtmf(ic.id, '4321', 1) // This will not generate event 'dtmf'
243
-
244
- z.wait([
245
- {
246
- event: 'dtmf',
247
- call_id: ic.id,
248
- digits: '1234',
249
- mode: 0,
250
- },
251
- ], 2000)
252
-
253
-
254
- sip.call.terminate(oc.id)
255
-
256
- z.wait([
257
- {
258
- event: 'call_ended',
259
- call_id: oc.id,
260
- },
261
- {
262
- event: 'call_ended',
263
- call_id: ic.id,
264
- },
265
- {
266
- event: 'response',
267
- call_id: oc.id,
268
- method: 'BYE',
269
- msg: sip_msg({
270
- $rs: '200',
271
- $rr: 'OK',
272
- }),
273
- },
274
- ], 1000)
275
-
276
- z.sleep(1000)
277
-
278
- sip.stop()
@@ -0,0 +1,138 @@
1
+ var sip = require ('../index.js')
2
+ var Zester = require('zester')
3
+ var z = new Zester()
4
+ var m = require('data-matching')
5
+ var sip_msg = require('sip-matching')
6
+
7
+ async function test() {
8
+ //sip.set_log_level(6)
9
+ sip.dtmf_aggregation_on(500)
10
+
11
+ z.trap_events(sip.event_source, 'event', (evt) => {
12
+ var e = evt.args[0]
13
+ return e
14
+ })
15
+
16
+ console.log(sip.start((data) => { console.log(data)} ))
17
+
18
+ t1 = sip.transport.create("127.0.0.1", 5090, 1)
19
+ t2 = sip.transport.create("127.0.0.1", 5092, 1)
20
+
21
+ console.log("t1", t1)
22
+ console.log("t2", t2)
23
+
24
+ var server = `${t2.ip}:${t2.port}`
25
+ var domain = 'test1.com'
26
+
27
+ var a1 = sip.account.create(t1.id, domain, server, 'user1', 'pass1')
28
+
29
+ sip.account.register(a1, true)
30
+
31
+ await z.wait([
32
+ {
33
+ event: 'non_dialog_request',
34
+ msg: sip_msg({
35
+ $rm: 'REGISTER',
36
+ $fU: 'user1',
37
+ $fd: domain,
38
+ $tU: 'user1',
39
+ $td: domain,
40
+ }),
41
+ },
42
+ ], 1000)
43
+
44
+ // sip-lab automatically replies with '200 OK' to non_dialog_request.
45
+
46
+ await z.wait([
47
+ {
48
+ event: 'registration_status',
49
+ account_id: a1.id,
50
+ code: 200,
51
+ reason: 'OK',
52
+ expires: 60
53
+ },
54
+ ], 1000)
55
+
56
+ const s1 = sip.subscription_create(t1.id, 'dialog', 'application/dialog-info+xml', '<sip:user1@test1.com>', '<sip:user1@test1.com>', 'sip:park1@test1.com', `sip:${server}`, 'test1.com', 'user1', 'user1')
57
+
58
+ sip.subscription_subscribe(s1, 120)
59
+
60
+ await z.wait([
61
+ {
62
+ event: 'request',
63
+ subscriber_id: m.collect('subscriber_id'),
64
+ msg: sip_msg({
65
+ $rm: 'SUBSCRIBE',
66
+ $ru: 'sip:park1@test1.com',
67
+ $fU: 'user1',
68
+ $fd: domain,
69
+ '$hdr(Event)': 'dialog',
70
+ '$hdr(Accept)': 'application/dialog-info+xml',
71
+ '$hdr(Allow-Events)': 'refer, dialog',
72
+ })
73
+ },
74
+ ], 1000)
75
+
76
+ var subscriber_id = z.store.subscriber_id
77
+
78
+ await z.wait([
79
+ {
80
+ event: 'response',
81
+ subscription_id: subscriber_id,
82
+ method: 'SUBSCRIBE',
83
+ msg: sip_msg({
84
+ $rs: '200',
85
+ $rr: 'OK',
86
+ })
87
+ },
88
+ ], 1000)
89
+
90
+ await z.wait([
91
+ {
92
+ subscription_id: s1,
93
+ msg: sip_msg({
94
+ $rm: 'NOTIFY',
95
+ '$hdr(Event)': 'dialog',
96
+ '$hdr(Subscription-State)': 'active;expires=120',
97
+ '$hdr(Allow-Events)': 'refer, dialog',
98
+ }),
99
+ },
100
+ ], 1000)
101
+
102
+ sip.account.unregister(a1)
103
+
104
+ await z.wait([
105
+ {
106
+ event: 'non_dialog_request',
107
+ msg: sip_msg({
108
+ $rm: 'REGISTER',
109
+ $fU: 'user1',
110
+ $fd: domain,
111
+ $tU: 'user1',
112
+ $td: domain,
113
+ }),
114
+ },
115
+ ], 1000)
116
+
117
+ await z.wait([
118
+ {
119
+ event: 'registration_status',
120
+ account_id: a1.id,
121
+ code: 200,
122
+ reason: 'OK',
123
+ expires: 0,
124
+ },
125
+ ], 1000)
126
+
127
+ console.log("Success")
128
+
129
+ sip.stop()
130
+ }
131
+
132
+
133
+ test()
134
+ .catch(e => {
135
+ console.error(e)
136
+ process.exit(1)
137
+ })
138
+