Skip to content

Commit

Permalink
Merge pull request #4 from sipcapture/feature-tcp-transport
Browse files Browse the repository at this point in the history
TCP Transport
  • Loading branch information
Dletta authored Dec 27, 2024
2 parents 8f684af + f69b14c commit d1a87b6
Showing 1 changed file with 81 additions and 31 deletions.
112 changes: 81 additions & 31 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
/*
* expsue HEP (I spit HEP) is a simulator for calls.
* HEPsim (HEP simulator) is a simulator for calls to generate metrics and
* Semi-realistic SIP flows for demonstration purposes
* AGPLv3, 2024 - Jachen Duschletta
*/
/*
* Imports
*/

import hepJs, * as HEP from 'hep-js'
import hepJs from 'hep-js'
import * as fs from 'node:fs'
import * as dgram from 'node:dgram'
import { resolve } from 'node:path'


/*
* Globals
Expand Down Expand Up @@ -88,28 +91,85 @@ const senderModule = {}

senderModule.receiver = process.env.HEP_ADDRESS || '127.0.0.1'
senderModule.port = parseInt(process.env.PORT) || 9060
senderModule.transport = process.env.TRANSPORT || 'udp4'
senderModule.socket = null
senderModule.sendData = ()=>{}

senderModule.establishConnection = async function () {
console.log(senderModule.receiver, senderModule.port)
senderModule.socket = dgram.createSocket('udp4')
senderModule.socket.connect(senderModule.port, senderModule.receiver)
senderModule.socket.on('error', (err) => {
console.log('Error sending HEP Packet')
console.log(err)
})

senderModule.socket.on('close', () => {
console.log('Connection to HEP Server closed')
senderModule.socket = null
})

return new Promise((resolve, reject) => {
senderModule.socket.on('connect', () => {
console.log('Connected to HEP Server', senderModule.receiver, senderModule.port)
resolve()
if (senderModule.transport === 'udp4') {
console.log(senderModule.receiver, senderModule.port)
senderModule.socket = dgram.createSocket('udp4')
senderModule.socket.connect(senderModule.port, senderModule.receiver)
senderModule.socket.on('error', (err) => {
console.log('Error sending HEP Packet')
console.log(err)
})

senderModule.socket.on('close', () => {
console.log('Connection to HEP Server closed')
senderModule.socket = null
})

senderModule.sendData = function (hepPacket) {
return new Promise((resolve, reject) => {
senderModule.socket.send(hepPacket, (err) => {
if (err) {
console.log('Error sending HEP Packet')
console.log(err)
reject(err)
}
resolve()
})
})
}

return new Promise((resolve, reject) => {
senderModule.socket.on('connect', () => {
console.log('Connected to HEP Server', senderModule.receiver, senderModule.port)
resolve()
})
})
} else if (senderModule.transport === 'tcp') {
console.log(`Opening TCP connection to ${senderModule.receiver}:${senderModule.port}`)
senderModule.socket = await Bun.connect({
hostname: senderModule.receiver,
port: senderModule.port,

socket: {
data (data) {
console.log('Received Data')
console.log(data)
},
open (socket) {
resolve(socket)
},
drain (socket) {
console.log('Draining')
},
connectError(_, error) {
console.log('Connection Error')
console.log(error)
reject()
}, // connection failed
end() {
console.log('Connection to HEP Server closed')
senderModule.socket = null
}, // connection closed by server
timeout() {
console.log('Connection to HEP Server timed-out')
senderModule.socket = null
}, // connection timed out
},
})
})

senderModule.sendData = function (hepPacket) {
return senderModule.socket.write(hepPacket)
}

return senderModule.socket
} else {
console.log('Invalid Transport')
}
}

senderModule.send = async function (hepPacket) {
Expand All @@ -119,17 +179,7 @@ senderModule.send = async function (hepPacket) {
await senderModule.establishConnection()
await new Promise((resolve) => setTimeout(resolve, 100))
}

return new Promise((resolve, reject) => {
senderModule.socket.send(hepPacket, (err) => {
if (err) {
console.log('Error sending HEP Packet')
console.log(err)
reject(err)
}
resolve()
})
})
return senderModule.sendData(hepPacket)
}

/*
Expand Down

0 comments on commit d1a87b6

Please sign in to comment.