stream_base: introduce StreamBase
authorFedor Indutny <fedor@indutny.com>
Sun, 22 Feb 2015 18:59:07 +0000 (21:59 +0300)
committerFedor Indutny <fedor@indutny.com>
Sun, 22 Feb 2015 19:31:57 +0000 (22:31 +0300)
commitb9686233fc0be679d7ba1262b611711629ee334e
tree9dbf94288a1faeaa956867b3a30f0d257747cd52
parent97b424365a883f3b8de18b3ec3f256307a92ad09
stream_base: introduce StreamBase

StreamBase is an improved way to write C++ streams. The class itself is
for separting `StreamWrap` (with the methods like `.writeAsciiString`,
`.writeBuffer`, `.writev`, etc) from the `HandleWrap` class, making
possible to write abstract C++ streams that are not bound to any uv
socket.

The following methods are important part of the abstraction (which
mimics libuv's stream API):

* Events:
  * `OnAlloc(size_t size, uv_buf_t*)`
  * `OnRead(ssize_t nread, const uv_buf_t*, uv_handle_type pending)`
  * `OnAfterWrite(WriteWrap*)`
* Wrappers:
  * `DoShutdown(ShutdownWrap*)`
  * `DoTryWrite(uv_buf_t** bufs, size_t* count)`
  * `DoWrite(WriteWrap*, uv_buf_t*, size_t count, uv_stream_t* handle)`
  * `Error()`
  * `ClearError()`

The implementation should provide all of these methods, thus providing
the access to the underlying resource (be it uv handle, TLS socket, or
anything else).

A C++ stream may consume the input of another stream by replacing the
event callbacks and proxying the writes. This kind of API is actually
used now for the TLSWrap implementation, making it possible to wrap TLS
stream into another TLS stream. Thus legacy API calls are no longer
required in `_tls_wrap.js`.

PR-URL: https://github.com/iojs/io.js/pull/840
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
Reviewed-By: Chris Dickinson <christopher.s.dickinson@gmail.com>
21 files changed:
lib/_tls_legacy.js
lib/_tls_wrap.js
lib/net.js
node.gyp
src/env.h
src/js_stream.cc [new file with mode: 0644]
src/js_stream.h [new file with mode: 0644]
src/node_crypto.cc
src/node_wrap.h
src/pipe_wrap.cc
src/stream_base.cc [new file with mode: 0644]
src/stream_base.h [new file with mode: 0644]
src/stream_wrap.cc
src/stream_wrap.h
src/tcp_wrap.cc
src/tls_wrap.cc
src/tls_wrap.h
src/tty_wrap.cc
test/parallel/test-tls-client-default-ciphers.js
test/parallel/test-tls-close-notify.js
test/parallel/test-tls-multi-key.js