initial commit
This commit is contained in:
commit
0024f44c80
34 changed files with 1991 additions and 0 deletions
103
backend/baresip.mjs
Normal file
103
backend/baresip.mjs
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
import p from 'path'
|
||||
import split2 from 'split2'
|
||||
import { Readable } from 'streamx'
|
||||
import { spawn } from 'child_process'
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
import BaresipWrapper from './lib/baresip-wrapper.mjs'
|
||||
|
||||
const __dirname = p.dirname(fileURLToPath(import.meta.url))
|
||||
|
||||
import { action, STREAM_STATUS, LOG_MESSAGE } from './state.mjs'
|
||||
|
||||
export class Baresip {
|
||||
constructor (opts = {}) {
|
||||
this.command = opts.command || 'baresip'
|
||||
this.config = opts.config || p.join(__dirname, '..', 'etc', 'baresip')
|
||||
this.stream = new Readable()
|
||||
this.log = []
|
||||
this.stream.on('data', row => this.log.push(row))
|
||||
this.id = 'baresip'
|
||||
this.destinationNumber = opts.destination || 901
|
||||
}
|
||||
|
||||
restart () {
|
||||
if (!this.baresip) return this.start()
|
||||
this.stop(() => {
|
||||
process.nextTick(() => {
|
||||
this.start()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
stop (cb) {
|
||||
// this.process.kill()
|
||||
if (!this.baresip) return
|
||||
this.baresip.kill(() => {
|
||||
this.stream.push(action(STREAM_STATUS, { id: this.id, status: 'stopped' }))
|
||||
if (cb) cb()
|
||||
})
|
||||
}
|
||||
|
||||
_onready () {
|
||||
console.log('baresip onready')
|
||||
}
|
||||
|
||||
_oncallestablished (number) {
|
||||
console.log('call established to', number)
|
||||
this.stream.push(action(STREAM_STATUS, { id: this.id, status: 'started' }))
|
||||
}
|
||||
|
||||
_onhangup (number) {
|
||||
console.log('remote hangup', number)
|
||||
this.stream.push(action(STREAM_STATUS, { id: this.id, status: 'stopped' }))
|
||||
}
|
||||
|
||||
_onserverconnected (...args) {
|
||||
console.log('onserverconnected', args)
|
||||
setTimeout(() => {
|
||||
this.baresip.dial(this.destinationNumber)
|
||||
}, 1000)
|
||||
}
|
||||
|
||||
start () {
|
||||
const args = ['-f', this.config]
|
||||
this.baresip = new BaresipWrapper({
|
||||
command: this.command,
|
||||
args,
|
||||
callbacks: {
|
||||
ready: this._onready.bind(this),
|
||||
hangUp: this._onhangup.bind(this),
|
||||
callEstablished: this._oncallestablished.bind(this),
|
||||
serverConnected: this._onserverconnected.bind(this)
|
||||
}
|
||||
})
|
||||
this.baresip.stream.on('data', message => {
|
||||
// console.log('BARESIP', message)
|
||||
this.stream.push(action(LOG_MESSAGE, { id: this.id, type: 'stdout', message }))
|
||||
})
|
||||
this.baresip.connect()
|
||||
// if (this.process) return
|
||||
// const args = ['-c', this.config, '-v', this.logLevel]
|
||||
// this.process = spawn(this.command, args)
|
||||
// this.process.stdout.pipe(split2()).on('data', message => {
|
||||
// this.stream.push(action(LOG_MESSAGE, { id: this.id, type: 'stdout', message }))
|
||||
// // this.stream.push({ type: 'stdout', data })
|
||||
// })
|
||||
// this.process.stderr.pipe(split2()).on('data', message => {
|
||||
// this.stream.push(action(LOG_MESSAGE, { id: this.id, type: 'stdout', message }))
|
||||
// // this.stream.push({ type: 'stderr', data })
|
||||
// })
|
||||
|
||||
// this.process.on('close', () => {
|
||||
// this.stream.push(action(STREAM_STATUS, { id: this.id, status: 'stopped' }))
|
||||
// this.process = null
|
||||
// })
|
||||
|
||||
// this.stream.push(action(STREAM_STATUS, { id: this.id, status: 'started' }))
|
||||
|
||||
// return new Promise((resolve, reject) => {
|
||||
// resolve()
|
||||
// })
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue