sip-lab 1.28.0 → 1.28.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.
package/README.md CHANGED
@@ -40,7 +40,7 @@ npm install sip-lab
40
40
 
41
41
  Then run some sample script from subfolder samples:
42
42
  ```
43
- node samples/simple.js
43
+ node node_modules/sip-lab/samples/simple.js
44
44
  ```
45
45
 
46
46
  The above script has detailed comments.
@@ -67,11 +67,11 @@ node src/App.bs.js
67
67
 
68
68
  Then you should be able to test with dtmf language:
69
69
  ```
70
- node samples_extra/ws_speech_server.dtmf.js
70
+ node node_modules/sip-lab/samples_extra/ws_speech_server.dtmf.js
71
71
  ```
72
72
  or with google speech service:
73
73
  ```
74
- node samples_extra/ws_speech_server.google.js
74
+ node node_modules/sip-lab/samples_extra/ws_speech_server.google.js
75
75
  ```
76
76
 
77
77
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sip-lab",
3
- "version": "1.28.0",
3
+ "version": "1.28.1",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "engines": {
@@ -44,6 +44,7 @@
44
44
  "README.md",
45
45
  "DEV.md",
46
46
  "samples",
47
+ "samples_extra",
47
48
  "prebuilds",
48
49
  "pocketsphinx",
49
50
  "runtests"
@@ -0,0 +1,194 @@
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
+ async function test() {
9
+ //sip.set_log_level(6)
10
+ sip.dtmf_aggregation_on(500)
11
+
12
+ sip.set_codecs("PCMU/8000/1:128")
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: 'tcp'})
22
+ t2 = sip.transport.create({address: "127.0.0.1", type: 'tcp'})
23
+
24
+ console.log("t1", t1)
25
+ console.log("t2", t2)
26
+
27
+ oc = sip.call.create(t1.id, {
28
+ from_uri: '"abc"<sip:alice@test.com>',
29
+ to_uri: `sip:bob@${t2.address}:${t2.port}`,
30
+ headers: {
31
+ 'X-MyHeader1': 'abc',
32
+ 'X-MyHeader2': 'def',
33
+ },
34
+ })
35
+
36
+ await z.wait([
37
+ {
38
+ event: "incoming_call",
39
+ call_id: m.collect("call_id"),
40
+ msg: sip_msg({
41
+ $rm: 'INVITE',
42
+ $fU: 'alice',
43
+ $fd: 'test.com',
44
+ $tU: 'bob',
45
+ '$hdr(X-MyHeader1)': 'abc',
46
+ 'hdr_x_myheader2': 'def',
47
+ }),
48
+ },
49
+ {
50
+ event: 'response',
51
+ call_id: oc.id,
52
+ method: 'INVITE',
53
+ msg: sip_msg({
54
+ $rs: '100',
55
+ $rr: 'Trying',
56
+ '$(hdrcnt(via))': 1,
57
+ 'hdr_call_id': m.collect('sip_call_id'),
58
+ $fU: 'alice',
59
+ $fd: 'test.com',
60
+ $tU: 'bob',
61
+ '$hdr(l)': '0',
62
+ }),
63
+ },
64
+ ], 1000)
65
+
66
+ ic = {
67
+ id: z.store.call_id,
68
+ sip_call_id: z.store.sip_call_id,
69
+ }
70
+
71
+ sip.call.respond(ic.id, {
72
+ code: 200,
73
+ reason:'OK',
74
+ headers: {
75
+ 'X-MyHeader3': 'ghi',
76
+ 'X-MyHeader4': 'jkl',
77
+ },
78
+ })
79
+
80
+ await z.wait([
81
+ {
82
+ event: 'media_update',
83
+ call_id: oc.id,
84
+ status: 'ok',
85
+ },
86
+ {
87
+ event: 'media_update',
88
+ call_id: ic.id,
89
+ status: 'ok',
90
+ },
91
+ {
92
+ event: 'response',
93
+ call_id: oc.id,
94
+ method: 'INVITE',
95
+ msg: sip_msg({
96
+ $rs: '200',
97
+ $rr: 'OK',
98
+ '$(hdrcnt(v))': 1,
99
+ $fU: 'alice',
100
+ $fd: 'test.com',
101
+ $tU: 'bob',
102
+ '$hdr(content-type)': 'application/sdp',
103
+ $rb: '!{_}a=sendrecv',
104
+ '$hdr(X-MyHeader3)': 'ghi',
105
+ '$hdr(X-MyHeader4)': 'jkl',
106
+ }),
107
+ },
108
+ ], 1000)
109
+
110
+ sip.call.start_record_wav(oc.id, {file: './oc.wav'})
111
+ sip.call.start_record_wav(ic.id, {file: './ic.wav'})
112
+
113
+ sip.call.start_speech_synth(oc.id, {server_url: 'ws://0.0.0.0:8080', engine: 'dtmf-gen', voice: 'dtmf', language: 'dtmf', text: 'abcd', times: 1})
114
+ sip.call.start_speech_synth(ic.id, {server_url: 'ws://0.0.0.0:8080', engine: 'dtmf-gen', voice: 'dtmf', language: 'dtmf', text: 'dcba', times: 1})
115
+
116
+ sip.call.start_speech_recog(oc.id, {server_url: 'ws://0.0.0.0:8080', engine: 'dtmf-det', language: 'dtmf'})
117
+ sip.call.start_speech_recog(ic.id, {server_url: 'ws://0.0.0.0:8080', engine: 'dtmf-det', language: 'dtmf'})
118
+
119
+ await z.wait([
120
+ {
121
+ event: 'speech_synth_complete',
122
+ call_id: ic.id,
123
+ },
124
+ {
125
+ event: 'speech_synth_complete',
126
+ call_id: oc.id,
127
+ },
128
+ {
129
+ event: 'dtmf',
130
+ call_id: oc.id,
131
+ digits: 'dcba',
132
+ mode: 1,
133
+ media_id: 0
134
+ },
135
+ {
136
+ event: 'dtmf',
137
+ call_id: ic.id,
138
+ digits: 'abcd',
139
+ mode: 1,
140
+ media_id: 0
141
+ },
142
+ {
143
+ event: 'speech',
144
+ call_id: oc.id,
145
+ transcript: 'dcba'
146
+ },
147
+ {
148
+ event: 'speech',
149
+ call_id: ic.id,
150
+ transcript: 'abcd'
151
+ },
152
+ ], 3000)
153
+
154
+ await z.sleep(1000)
155
+
156
+ sip.call.stop_record_wav(oc.id)
157
+ sip.call.stop_record_wav(ic.id)
158
+
159
+ sip.call.terminate(oc.id)
160
+
161
+ await z.wait([
162
+ {
163
+ event: 'call_ended',
164
+ call_id: oc.id,
165
+ },
166
+ {
167
+ event: 'call_ended',
168
+ call_id: ic.id,
169
+ },
170
+ {
171
+ event: 'response',
172
+ call_id: oc.id,
173
+ method: 'BYE',
174
+ msg: sip_msg({
175
+ $rs: '200',
176
+ $rr: 'OK',
177
+ }),
178
+ },
179
+ ], 1000)
180
+
181
+ await z.sleep(100)
182
+
183
+ console.log("Success")
184
+
185
+ sip.stop()
186
+ }
187
+
188
+
189
+ test()
190
+ .catch(e => {
191
+ console.error(e)
192
+ process.exit(1)
193
+ })
194
+
@@ -0,0 +1,190 @@
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
+ async function test() {
9
+ //sip.set_log_level(6)
10
+ sip.dtmf_aggregation_on(500)
11
+
12
+ sip.set_codecs("PCMU/8000/1:128")
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: 'tcp'})
22
+ t2 = sip.transport.create({address: "127.0.0.1", type: 'tcp'})
23
+
24
+ console.log("t1", t1)
25
+ console.log("t2", t2)
26
+
27
+ oc = sip.call.create(t1.id, {
28
+ from_uri: '"abc"<sip:alice@test.com>',
29
+ to_uri: `sip:bob@${t2.address}:${t2.port}`,
30
+ headers: {
31
+ 'X-MyHeader1': 'abc',
32
+ 'X-MyHeader2': 'def',
33
+ },
34
+ })
35
+
36
+ await z.wait([
37
+ {
38
+ event: "incoming_call",
39
+ call_id: m.collect("call_id"),
40
+ msg: sip_msg({
41
+ $rm: 'INVITE',
42
+ $fU: 'alice',
43
+ $fd: 'test.com',
44
+ $tU: 'bob',
45
+ '$hdr(X-MyHeader1)': 'abc',
46
+ 'hdr_x_myheader2': 'def',
47
+ }),
48
+ },
49
+ {
50
+ event: 'response',
51
+ call_id: oc.id,
52
+ method: 'INVITE',
53
+ msg: sip_msg({
54
+ $rs: '100',
55
+ $rr: 'Trying',
56
+ '$(hdrcnt(via))': 1,
57
+ 'hdr_call_id': m.collect('sip_call_id'),
58
+ $fU: 'alice',
59
+ $fd: 'test.com',
60
+ $tU: 'bob',
61
+ '$hdr(l)': '0',
62
+ }),
63
+ },
64
+ ], 1000)
65
+
66
+ ic = {
67
+ id: z.store.call_id,
68
+ sip_call_id: z.store.sip_call_id,
69
+ }
70
+
71
+ sip.call.respond(ic.id, {
72
+ code: 200,
73
+ reason:'OK',
74
+ headers: {
75
+ 'X-MyHeader3': 'ghi',
76
+ 'X-MyHeader4': 'jkl',
77
+ },
78
+ })
79
+
80
+ await z.wait([
81
+ {
82
+ event: 'media_update',
83
+ call_id: oc.id,
84
+ status: 'ok',
85
+ },
86
+ {
87
+ event: 'media_update',
88
+ call_id: ic.id,
89
+ status: 'ok',
90
+ },
91
+ {
92
+ event: 'response',
93
+ call_id: oc.id,
94
+ method: 'INVITE',
95
+ msg: sip_msg({
96
+ $rs: '200',
97
+ $rr: 'OK',
98
+ '$(hdrcnt(v))': 1,
99
+ $fU: 'alice',
100
+ $fd: 'test.com',
101
+ $tU: 'bob',
102
+ '$hdr(content-type)': 'application/sdp',
103
+ $rb: '!{_}a=sendrecv',
104
+ '$hdr(X-MyHeader3)': 'ghi',
105
+ '$hdr(X-MyHeader4)': 'jkl',
106
+ }),
107
+ },
108
+ ], 1000)
109
+
110
+ await z.sleep(200)
111
+
112
+ sip.call.start_record_wav(oc.id, {file: './oc.wav'})
113
+ sip.call.start_record_wav(ic.id, {file: './ic.wav'})
114
+
115
+ sip.call.start_speech_synth(oc.id, {server_url: 'ws://0.0.0.0:8080', engine: 'gss', voice: 'en-US-Standard-E', language: 'en-US', text: 'hello world', times: 1})
116
+ sip.call.start_speech_synth(ic.id, {server_url: 'ws://0.0.0.0:8080', engine: 'gss', voice: 'en-US-Standard-F', language: 'en-US', text: '<speak>Good morning<break time="2s"/>Good Afternoon</speak>', times: 1})
117
+
118
+ sip.call.start_speech_recog(oc.id, {server_url: 'ws://0.0.0.0:8080', engine: 'gsr', language: 'en-US'})
119
+ sip.call.start_speech_recog(ic.id, {server_url: 'ws://0.0.0.0:8080', engine: 'gsr', language: 'en-US'})
120
+
121
+ await z.wait([
122
+ {
123
+ event: 'speech_synth_complete',
124
+ call_id: ic.id,
125
+ },
126
+ {
127
+ event: 'speech_synth_complete',
128
+ call_id: oc.id,
129
+ },
130
+ {
131
+ event: 'speech',
132
+ call_id: oc.id,
133
+ transcript: 'good morning',
134
+ },
135
+ {
136
+ event: 'speech',
137
+ call_id: ic.id,
138
+ transcript: 'hello world',
139
+ },
140
+ ], 4000)
141
+
142
+ await z.wait([
143
+ {
144
+ event: 'speech',
145
+ call_id: oc.id,
146
+ transcript: ' good afternoon',
147
+ },
148
+ ], 4000)
149
+
150
+ await z.sleep(1000)
151
+
152
+ sip.call.stop_record_wav(oc.id)
153
+ sip.call.stop_record_wav(ic.id)
154
+
155
+ sip.call.terminate(oc.id)
156
+
157
+ await z.wait([
158
+ {
159
+ event: 'call_ended',
160
+ call_id: oc.id,
161
+ },
162
+ {
163
+ event: 'call_ended',
164
+ call_id: ic.id,
165
+ },
166
+ {
167
+ event: 'response',
168
+ call_id: oc.id,
169
+ method: 'BYE',
170
+ msg: sip_msg({
171
+ $rs: '200',
172
+ $rr: 'OK',
173
+ }),
174
+ },
175
+ ], 1000)
176
+
177
+ await z.sleep(100)
178
+
179
+ console.log("Success")
180
+
181
+ sip.stop()
182
+ }
183
+
184
+
185
+ test()
186
+ .catch(e => {
187
+ console.error(e)
188
+ process.exit(1)
189
+ })
190
+