diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 5c6d04d..4637577 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -7,7 +7,27 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [18.x, 20.x, 22.x] + node-version: [14.x, 16.x, 18.x] + + steps: + - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + - name: npm install, build, and test + run: | + npm ci + npm run build --if-present + npm test + env: + CI: true + + build-windows: + runs-on: windows-2019 + strategy: + matrix: + node-version: [18.x] steps: - uses: actions/checkout@v3 diff --git a/package-lock.json b/package-lock.json index bf91413..5d21949 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@eyevinn/srt", - "version": "0.8.3", + "version": "0.7.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@eyevinn/srt", - "version": "0.8.3", + "version": "0.7.0", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 8ee47dd..7df3aa2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@eyevinn/srt", - "version": "0.8.3", + "version": "0.7.0", "description": "Nodejs bindings for Secure Reliable Transport SDK", "main": "index.js", "scripts": { diff --git a/scripts/build-srt-sdk.js b/scripts/build-srt-sdk.js index 9bd557f..3aa60ca 100755 --- a/scripts/build-srt-sdk.js +++ b/scripts/build-srt-sdk.js @@ -13,7 +13,7 @@ const os = require('os'); const env = process.env; const SRT_REPO = env.NODE_SRT_REPO || "https://github.com/Haivision/srt.git"; -const SRT_CHECKOUT = "v1.5.4"; +const SRT_CHECKOUT = "v1.4.4"; const srtRepoPath = env.NODE_SRT_LOCAL_REPO ? `file://${path.join(__dirname, env.NODE_SRT_LOCAL_REPO)}` : SRT_REPO; const srtCheckout = env.NODE_SRT_CHECKOUT || SRT_CHECKOUT; diff --git a/src/async.js b/src/async.js index 1f56349..511ddba 100644 --- a/src/async.js +++ b/src/async.js @@ -6,7 +6,6 @@ const debug = require('debug')('srt-async'); const { traceCallToString, extractTransferListFromParams } = require('./async-helpers'); const { SRT } = require('../build/Release/node_srt.node'); -const EventEmitter = require('events'); const DEFAULT_PROMISE_TIMEOUT_MS = 3000; @@ -16,7 +15,7 @@ const DEBUG = false; const WORK_ID_GEN_MOD = 0xFFF; */ -class AsyncSRT extends EventEmitter { +class AsyncSRT { /** * @static @@ -25,7 +24,7 @@ class AsyncSRT extends EventEmitter { static TimeoutMs = DEFAULT_PROMISE_TIMEOUT_MS; constructor() { - super() + DEBUG && debug('Creating task-runner worker instance'); this._worker = new Worker(path.resolve(__dirname, './async-worker.js')); @@ -68,7 +67,6 @@ class AsyncSRT extends EventEmitter { '\n Binding call:', traceCallToString(data.call.method, data.call.args), //'\n Stacktrace:', data.err.stack ); - this.emit('error', data.err.message) return; } diff --git a/src/node-srt.cc b/src/node-srt.cc index 1dbd457..4f8dd4f 100644 --- a/src/node-srt.cc +++ b/src/node-srt.cc @@ -177,7 +177,7 @@ Napi::Value NodeSRT::Accept(const Napi::CallbackInfo& info) { Napi::Error::New(env, srt_getlasterror_str()).ThrowAsJavaScriptException(); return Napi::Number::New(env, SRT_ERROR); } - + srt_close(socketValue); socketValue = Napi::Number::New(env, SRT_INVALID_SOCK); return Napi::Number::New(env, their_fd); } diff --git a/src/srt-enums.h b/src/srt-enums.h index e2ba493..475c2ea 100644 --- a/src/srt-enums.h +++ b/src/srt-enums.h @@ -1,73 +1,66 @@ -#define ENUM(E,F) StaticValue(#E,Napi::Number::New(env,F)) +#define ENUM(E) StaticValue(#E, Napi::Number::New(env, E)) + +// egrep '^\s+SRTO' srtcore/srt.h | sed 's/^.*\(SRTO_[^, ]*\)[, ].*$/ ENUM\(\1\), \\/' #define SOCKET_OPTIONS \ - ENUM(SRTO_MSS, 0), \ - ENUM(SRTO_SNDSYN, 1), \ - ENUM(SRTO_RCVSYN, 2), \ - ENUM(SRTO_ISN, 3), \ - ENUM(SRTO_FC, 4), \ - ENUM(SRTO_SNDBUF, 5), \ - ENUM(SRTO_RCVBUF, 6), \ - ENUM(SRTO_LINGER, 7), \ - ENUM(SRTO_UDP_SNDBUF, 8), \ - ENUM(SRTO_UDP_RCVBUF, 9), \ - ENUM(SRTO_RENDEZVOUS, 12), \ - ENUM(SRTO_SNDTIMEO, 13), \ - ENUM(SRTO_RCVTIMEO, 14), \ - ENUM(SRTO_REUSEADDR, 15), \ - ENUM(SRTO_MAXBW, 16), \ - ENUM(SRTO_STATE, 17), \ - ENUM(SRTO_EVENT, 18), \ - ENUM(SRTO_SNDDATA, 19), \ - ENUM(SRTO_RCVDATA, 20), \ - ENUM(SRTO_SENDER, 21), \ - ENUM(SRTO_TSBPDMODE, 22), \ - ENUM(SRTO_LATENCY, 23), \ - ENUM(SRTO_INPUTBW, 24), \ - ENUM(SRTO_OHEADBW, 25), \ - ENUM(SRTO_PASSPHRASE, 26), \ - ENUM(SRTO_PBKEYLEN, 27), \ - ENUM(SRTO_KMSTATE, 28), \ - ENUM(SRTO_IPTTL, 29), \ - ENUM(SRTO_IPTOS, 30), \ - ENUM(SRTO_TLPKTDROP, 31), \ - ENUM(SRTO_SNDDROPDELAY, 32), \ - ENUM(SRTO_NAKREPORT, 33), \ - ENUM(SRTO_VERSION, 34), \ - ENUM(SRTO_PEERVERSION, 35), \ - ENUM(SRTO_CONNTIMEO, 36), \ - ENUM(SRTO_DRIFTTRACER, 37), \ - ENUM(SRTO_MININPUTBW, 38), \ - ENUM(SRTO_SNDKMSTATE, 40), \ - ENUM(SRTO_RCVKMSTATE, 41), \ - ENUM(SRTO_LOSSMAXTTL, 42), \ - ENUM(SRTO_RCVLATENCY, 43), \ - ENUM(SRTO_PEERLATENCY, 44), \ - ENUM(SRTO_MINVERSION, 45), \ - ENUM(SRTO_STREAMID, 46), \ - ENUM(SRTO_CONGESTION, 47), \ - ENUM(SRTO_MESSAGEAPI, 48), \ - ENUM(SRTO_PAYLOADSIZE, 49), \ - ENUM(SRTO_TRANSTYPE, 50), \ - ENUM(SRTO_KMREFRESHRATE, 51), \ - ENUM(SRTO_KMPREANNOUNCE, 52), \ - ENUM(SRTO_ENFORCEDENCRYPTION, 53), \ - ENUM(SRTO_IPV6ONLY, 54), \ - ENUM(SRTO_PEERIDLETIMEO, 55), \ - ENUM(SRTO_BINDTODEVICE, 56), \ - ENUM(SRTO_GROUPCONNECT, 57), \ - ENUM(SRTO_GROUPMINSTABLETIMEO, 58), \ - ENUM(SRTO_GROUPTYPE, 59), \ - ENUM(SRTO_PACKETFILTER, 60), \ - ENUM(SRTO_RETRANSMITALGO, 61) - + ENUM(SRTO_MSS), \ + ENUM(SRTO_SNDSYN), \ + ENUM(SRTO_RCVSYN), \ + ENUM(SRTO_ISN), \ + ENUM(SRTO_FC), \ + ENUM(SRTO_SNDBUF), \ + ENUM(SRTO_RCVBUF), \ + ENUM(SRTO_LINGER), \ + ENUM(SRTO_UDP_SNDBUF), \ + ENUM(SRTO_UDP_RCVBUF), \ + ENUM(SRTO_RENDEZVOUS), \ + ENUM(SRTO_SNDTIMEO), \ + ENUM(SRTO_RCVTIMEO), \ + ENUM(SRTO_REUSEADDR), \ + ENUM(SRTO_MAXBW), \ + ENUM(SRTO_STATE), \ + ENUM(SRTO_EVENT), \ + ENUM(SRTO_SNDDATA), \ + ENUM(SRTO_RCVDATA), \ + ENUM(SRTO_SENDER), \ + ENUM(SRTO_TSBPDMODE), \ + ENUM(SRTO_INPUTBW), \ + ENUM(SRTO_OHEADBW), \ + ENUM(SRTO_PASSPHRASE), \ + ENUM(SRTO_PBKEYLEN), \ + ENUM(SRTO_KMSTATE), \ + ENUM(SRTO_IPTTL), \ + ENUM(SRTO_IPTOS), \ + ENUM(SRTO_TLPKTDROP), \ + ENUM(SRTO_SNDDROPDELAY), \ + ENUM(SRTO_NAKREPORT), \ + ENUM(SRTO_VERSION), \ + ENUM(SRTO_PEERVERSION), \ + ENUM(SRTO_CONNTIMEO), \ + ENUM(SRTO_SNDKMSTATE), \ + ENUM(SRTO_RCVKMSTATE), \ + ENUM(SRTO_LOSSMAXTTL), \ + ENUM(SRTO_RCVLATENCY), \ + ENUM(SRTO_PEERLATENCY), \ + ENUM(SRTO_MINVERSION), \ + ENUM(SRTO_STREAMID), \ + ENUM(SRTO_CONGESTION), \ + ENUM(SRTO_MESSAGEAPI), \ + ENUM(SRTO_PAYLOADSIZE), \ + ENUM(SRTO_TRANSTYPE), \ + ENUM(SRTO_KMREFRESHRATE), \ + ENUM(SRTO_KMPREANNOUNCE), \ + ENUM(SRTO_ENFORCEDENCRYPTION), \ + ENUM(SRTO_IPV6ONLY), \ + ENUM(SRTO_PEERIDLETIMEO), \ + ENUM(SRTO_PACKETFILTER) + #define SOCKET_STATUS \ - ENUM(SRTS_INIT, 1), \ - ENUM(SRTS_OPENED, 2), \ - ENUM(SRTS_LISTENING, 3), \ - ENUM(SRTS_CONNECTING, 4), \ - ENUM(SRTS_CONNECTED, 5), \ - ENUM(SRTS_BROKEN, 6), \ - ENUM(SRTS_CLOSING, 7), \ - ENUM(SRTS_CLOSED, 8), \ - ENUM(SRTS_NONEXIST, 9) + ENUM(SRTS_INIT), \ + ENUM(SRTS_OPENED), \ + ENUM(SRTS_LISTENING), \ + ENUM(SRTS_CONNECTING), \ + ENUM(SRTS_CONNECTED), \ + ENUM(SRTS_BROKEN), \ + ENUM(SRTS_CLOSING), \ + ENUM(SRTS_CLOSED) diff --git a/src/srt-server.js b/src/srt-server.js index 92f5b10..3f72fa2 100644 --- a/src/srt-server.js +++ b/src/srt-server.js @@ -99,7 +99,7 @@ class SRTConnection extends EventEmitter { this.emit('closing'); const result = await asyncSrt.close(this.fd); this.emit('closed', result); - this.removeAllListeners(); + this.off(); return result; } @@ -113,14 +113,6 @@ class SRTConnection extends EventEmitter { this._gotFirstData = true; } } - - async getSocketOpt(opt) { - return await this._asyncSrt.getSockOpt(this.fd, opt); - } - - async setSocketOpt(opt, val) { - return await this._asyncSrt.setSockOpt(this.fd, opt, val); - } } /** diff --git a/types/srt-api-async.d.ts b/types/srt-api-async.d.ts index 7f000f9..40b56f9 100644 --- a/types/srt-api-async.d.ts +++ b/types/srt-api-async.d.ts @@ -1,11 +1,11 @@ -import { EventEmitter } from "events"; + import { SRTLoggingLevel, SRTResult, SRTSockOpt, SRTSockStatus } from "../src/srt-api-enums"; import { SRTReadReturn, SRTFileDescriptor, SRTEpollEvent, SRTSockOptValue, SRTStats } from "./srt-api" export type AsyncSRTCallback = (result: T) => void; -export class AsyncSRT extends EventEmitter { +export class AsyncSRT { static TimeoutMs: number; diff --git a/types/srt-server.d.ts b/types/srt-server.d.ts index 339c7ac..39996a2 100644 --- a/types/srt-server.d.ts +++ b/types/srt-server.d.ts @@ -30,9 +30,6 @@ export class SRTConnection extends EventEmitter { onData(): void; getReaderWriter(): AsyncReaderWriter; - - getSocketOpt(opt: number): Promise; - setSocketOpt(opt: number, val: number|boolean|string): Promise; } export class SRTServer extends EventEmitter /**/ {