summaryrefslogtreecommitdiff
path: root/src/tcp_wrap.cc
diff options
context:
space:
mode:
authorTrevor Norris <trev.norris@gmail.com>2014-12-09 05:29:47 +0100
committerBert Belder <bertbelder@gmail.com>2014-12-09 17:57:15 +0100
commit819690fd983d61f90cdf05714a30782fe3b553cd (patch)
treed4dad55e559776cb72e7e79fb55586393e396a21 /src/tcp_wrap.cc
parent8f41db6104deca82d74f55501a7f2689357fb45d (diff)
downloadandroid-node-v8-819690fd983d61f90cdf05714a30782fe3b553cd.tar.gz
android-node-v8-819690fd983d61f90cdf05714a30782fe3b553cd.tar.bz2
android-node-v8-819690fd983d61f90cdf05714a30782fe3b553cd.zip
src: all wraps now use actual FunctionTemplate
Instead of simply creating a new v8::Object to contain the connection information, instantiate a new instance of a FunctionTemplate. This will allow future improvements for debugging and performance probes. Additionally, the "provider" argument in the ReqWrap constructor is no longer optional. PR-URL: https://github.com/joyent/node/pull/8110 Signed-off-by: Trevor Norris <trev.norris@gmail.com> Reviewed-by: Fedor Indutny <fedor@indutny.com> Reviewed-by: Alexis Campailla <alexis@janeasystems.com> Reviewed-by: Julien Gilli <julien.gilli@joyent.com>
Diffstat (limited to 'src/tcp_wrap.cc')
-rw-r--r--src/tcp_wrap.cc35
1 files changed, 27 insertions, 8 deletions
diff --git a/src/tcp_wrap.cc b/src/tcp_wrap.cc
index 4da37ab66f..f17ebcef8a 100644
--- a/src/tcp_wrap.cc
+++ b/src/tcp_wrap.cc
@@ -52,7 +52,22 @@ using v8::String;
using v8::Undefined;
using v8::Value;
-typedef class ReqWrap<uv_connect_t> ConnectWrap;
+
+class TCPConnectWrap : public ReqWrap<uv_connect_t> {
+ public:
+ TCPConnectWrap(Environment* env, Local<Object> req_wrap_obj);
+};
+
+
+TCPConnectWrap::TCPConnectWrap(Environment* env, Local<Object> req_wrap_obj)
+ : ReqWrap(env, req_wrap_obj, AsyncWrap::PROVIDER_TCPWRAP) {
+ Wrap<TCPConnectWrap>(req_wrap_obj, this);
+}
+
+
+static void NewTCPConnectWrap(const FunctionCallbackInfo<Value>& args) {
+ CHECK(args.IsConstructCall());
+}
Local<Object> TCPWrap::Instantiate(Environment* env) {
@@ -129,6 +144,14 @@ void TCPWrap::Initialize(Handle<Object> target,
target->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "TCP"), t->GetFunction());
env->set_tcp_constructor_template(t);
+
+ // Create FunctionTemplate for TCPConnectWrap.
+ Local<FunctionTemplate> cwt =
+ FunctionTemplate::New(env->isolate(), NewTCPConnectWrap);
+ cwt->InstanceTemplate()->SetInternalFieldCount(1);
+ cwt->SetClassName(FIXED_ONE_BYTE_STRING(env->isolate(), "TCPConnectWrap"));
+ target->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "TCPConnectWrap"),
+ cwt->GetFunction());
}
@@ -319,7 +342,7 @@ void TCPWrap::OnConnection(uv_stream_t* handle, int status) {
void TCPWrap::AfterConnect(uv_connect_t* req, int status) {
- ConnectWrap* req_wrap = static_cast<ConnectWrap*>(req->data);
+ TCPConnectWrap* req_wrap = static_cast<TCPConnectWrap*>(req->data);
TCPWrap* wrap = static_cast<TCPWrap*>(req->handle->data);
CHECK_EQ(req_wrap->env(), wrap->env());
Environment* env = wrap->env();
@@ -363,9 +386,7 @@ void TCPWrap::Connect(const FunctionCallbackInfo<Value>& args) {
int err = uv_ip4_addr(*ip_address, port, &addr);
if (err == 0) {
- ConnectWrap* req_wrap = new ConnectWrap(env,
- req_wrap_obj,
- AsyncWrap::PROVIDER_CONNECTWRAP);
+ TCPConnectWrap* req_wrap = new TCPConnectWrap(env, req_wrap_obj);
err = uv_tcp_connect(&req_wrap->req_,
&wrap->handle_,
reinterpret_cast<const sockaddr*>(&addr),
@@ -396,9 +417,7 @@ void TCPWrap::Connect6(const FunctionCallbackInfo<Value>& args) {
int err = uv_ip6_addr(*ip_address, port, &addr);
if (err == 0) {
- ConnectWrap* req_wrap = new ConnectWrap(env,
- req_wrap_obj,
- AsyncWrap::PROVIDER_CONNECTWRAP);
+ TCPConnectWrap* req_wrap = new TCPConnectWrap(env, req_wrap_obj);
err = uv_tcp_connect(&req_wrap->req_,
&wrap->handle_,
reinterpret_cast<const sockaddr*>(&addr),