diff --git a/spec/srt_spec.js b/spec/srt_spec.js index e2a26c6..836d593 100644 --- a/spec/srt_spec.js +++ b/spec/srt_spec.js @@ -18,6 +18,13 @@ describe("SRT library", () => { expect(socket).not.toEqual(SRT.ERROR); }); + it("can get socket state", () => { + const srt = new SRT(); + const socket = srt.createSocket(); + const state = srt.getSockState(socket); + expect(state).toEqual(SRT.SRTS_INIT); + }); + it("can set SRT sockopt SRTO_MSS", () => { const srt = new SRT(); const socket = srt.createSocket(); diff --git a/src/node-srt.cc b/src/node-srt.cc index 811f7c9..389045f 100644 --- a/src/node-srt.cc +++ b/src/node-srt.cc @@ -23,14 +23,33 @@ Napi::Object NodeSRT::Init(Napi::Env env, Napi::Object exports) { InstanceMethod("write", &NodeSRT::Write), InstanceMethod("setSockOpt", &NodeSRT::SetSockOpt), InstanceMethod("getSockOpt", &NodeSRT::GetSockOpt), + InstanceMethod("getSockState", &NodeSRT::GetSockState), + InstanceMethod("epollCreate", &NodeSRT::EpollCreate), + InstanceMethod("epollAddUsock", &NodeSRT::EpollAddUsock), + InstanceMethod("epollWait", &NodeSRT::EpollWait), - StaticValue("ERROR", Napi::Number::New(env, -1)), - StaticValue("INVALID_SOCK", Napi::Number::New(env, -1)), + StaticValue("ERROR", Napi::Number::New(env, SRT_ERROR)), + StaticValue("INVALID_SOCK", Napi::Number::New(env, SRT_INVALID_SOCK)), - StaticValue("SRTO_MSS", Napi::Number::New(env, 0)), - StaticValue("SRTO_SNDSYN", Napi::Number::New(env, 1)), - StaticValue("SRTO_RCVSYN", Napi::Number::New(env, 2)), + // Socket options + StaticValue("SRTO_MSS", Napi::Number::New(env, SRTO_MSS)), + StaticValue("SRTO_SNDSYN", Napi::Number::New(env, SRTO_SNDSYN)), + StaticValue("SRTO_RCVSYN", Napi::Number::New(env, SRTO_RCVSYN)), + // Socket status + StaticValue("SRTS_INIT", Napi::Number::New(env, SRTS_INIT)), + StaticValue("SRTS_OPENED", Napi::Number::New(env, SRTS_OPENED)), + StaticValue("SRTS_LISTENING", Napi::Number::New(env, SRTS_LISTENING)), + StaticValue("SRTS_CONNECTING", Napi::Number::New(env, SRTS_CONNECTING)), + StaticValue("SRTS_CONNECTED", Napi::Number::New(env, SRTS_CONNECTED)), + StaticValue("SRTS_BROKEN", Napi::Number::New(env, SRTS_BROKEN)), + StaticValue("SRTS_NONEXIST", Napi::Number::New(env, SRTS_NONEXIST)), + + // Epoll options + StaticValue("EPOLL_IN", Napi::Number::New(env, SRT_EPOLL_IN)), + StaticValue("EPOLL_OUT", Napi::Number::New(env, SRT_EPOLL_OUT)), + StaticValue("EPOLL_ERR", Napi::Number::New(env, SRT_EPOLL_ERR)), + StaticValue("EPOLL_ET", Napi::Number::New(env, SRT_EPOLL_ET)), }); constructor = Napi::Persistent(func); @@ -277,4 +296,24 @@ Napi::Value NodeSRT::GetSockOpt(const Napi::CallbackInfo& info) { return empty; } return empty; -} \ No newline at end of file +} + +Napi::Value NodeSRT::GetSockState(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + Napi::Number socketValue = info[0].As(); + return Napi::Number::New(env, srt_getsockstate(socketValue)); +} + +Napi::Value NodeSRT::EpollCreate(const Napi::CallbackInfo& info) { + +} + +Napi::Value NodeSRT::EpollAddUsock(const Napi::CallbackInfo& info) { + +} + +Napi::Value NodeSRT::EpollWait(const Napi::CallbackInfo& info) { + +} diff --git a/src/node-srt.h b/src/node-srt.h index da7a531..ce0c2d0 100644 --- a/src/node-srt.h +++ b/src/node-srt.h @@ -18,4 +18,9 @@ class NodeSRT : public Napi::ObjectWrap { Napi::Value Write(const Napi::CallbackInfo& info); Napi::Value SetSockOpt(const Napi::CallbackInfo& info); Napi::Value GetSockOpt(const Napi::CallbackInfo& info); + Napi::Value GetSockState(const Napi::CallbackInfo& info); + + Napi::Value EpollCreate(const Napi::CallbackInfo& info); + Napi::Value EpollAddUsock(const Napi::CallbackInfo& info); + Napi::Value EpollWait(const Napi::CallbackInfo& info); };