summaryrefslogtreecommitdiff
path: root/src/stream_base.h
diff options
context:
space:
mode:
authorBrian White <mscdex@mscdex.net>2019-01-10 15:52:27 -0500
committerBrian White <mscdex@mscdex.net>2019-08-23 17:05:52 -0400
commit8292b280ec9e6b8c2444cbe49350facc77f5fefa (patch)
tree2f40ac41f20b53b748a7039c4f00e419efb8784b /src/stream_base.h
parent9d21b0395cc248a0e5537a11cc84f61919eccca6 (diff)
downloadandroid-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.h26
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);