diff options
author | Brian White <mscdex@mscdex.net> | 2019-01-10 15:52:27 -0500 |
---|---|---|
committer | Brian White <mscdex@mscdex.net> | 2019-08-23 17:05:52 -0400 |
commit | 8292b280ec9e6b8c2444cbe49350facc77f5fefa (patch) | |
tree | 2f40ac41f20b53b748a7039c4f00e419efb8784b /src/stream_base.h | |
parent | 9d21b0395cc248a0e5537a11cc84f61919eccca6 (diff) | |
download | android-node-v8-8292b280ec9e6b8c2444cbe49350facc77f5fefa.tar.gz android-node-v8-8292b280ec9e6b8c2444cbe49350facc77f5fefa.tar.bz2 android-node-v8-8292b280ec9e6b8c2444cbe49350facc77f5fefa.zip |
net: allow reading data into a static buffer
Co-Authored-By: Anna Henningsen <anna@addaleax.net>
PR-URL: https://github.com/nodejs/node/pull/25436
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Diffstat (limited to 'src/stream_base.h')
-rw-r--r-- | src/stream_base.h | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/stream_base.h b/src/stream_base.h index 3550233290..3bfdaedb79 100644 --- a/src/stream_base.h +++ b/src/stream_base.h @@ -180,6 +180,21 @@ class EmitToJSStreamListener : public ReportWritesToJSStreamListener { }; +// An alternative listener that uses a custom, user-provided buffer +// for reading data. +class CustomBufferJSListener : public ReportWritesToJSStreamListener { + public: + uv_buf_t OnStreamAlloc(size_t suggested_size) override; + void OnStreamRead(ssize_t nread, const uv_buf_t& buf) override; + void OnStreamDestroy() override { delete this; } + + explicit CustomBufferJSListener(uv_buf_t buffer) : buffer_(buffer) {} + + private: + uv_buf_t buffer_; +}; + + // A generic stream, comparable to JS land’s `Duplex` streams. // A stream is always controlled through one `StreamListener` instance. class StreamResource { @@ -273,9 +288,13 @@ class StreamBase : public StreamResource { virtual bool IsIPCPipe(); virtual int GetFD(); - void CallJSOnreadMethod(ssize_t nread, - v8::Local<v8::ArrayBuffer> ab, - size_t offset = 0); + enum StreamBaseJSChecks { DONT_SKIP_NREAD_CHECKS, SKIP_NREAD_CHECKS }; + + v8::MaybeLocal<v8::Value> CallJSOnreadMethod( + ssize_t nread, + v8::Local<v8::ArrayBuffer> ab, + size_t offset = 0, + StreamBaseJSChecks checks = DONT_SKIP_NREAD_CHECKS); // This is named `stream_env` to avoid name clashes, because a lot of // subclasses are also `BaseObject`s. @@ -323,6 +342,7 @@ class StreamBase : public StreamResource { int WriteBuffer(const v8::FunctionCallbackInfo<v8::Value>& args); template <enum encoding enc> int WriteString(const v8::FunctionCallbackInfo<v8::Value>& args); + int UseUserBuffer(const v8::FunctionCallbackInfo<v8::Value>& args); static void GetFD(const v8::FunctionCallbackInfo<v8::Value>& args); static void GetExternal(const v8::FunctionCallbackInfo<v8::Value>& args); |