25 #include "node_provider.h" 30 #define NODE_HTTP_SERVER_REQUEST(arg0, arg1) 31 #define NODE_HTTP_SERVER_REQUEST_ENABLED() (0) 32 #define NODE_HTTP_SERVER_RESPONSE(arg0) 33 #define NODE_HTTP_SERVER_RESPONSE_ENABLED() (0) 34 #define NODE_HTTP_CLIENT_REQUEST(arg0, arg1) 35 #define NODE_HTTP_CLIENT_REQUEST_ENABLED() (0) 36 #define NODE_HTTP_CLIENT_RESPONSE(arg0) 37 #define NODE_HTTP_CLIENT_RESPONSE_ENABLED() (0) 38 #define NODE_NET_SERVER_CONNECTION(arg0) 39 #define NODE_NET_SERVER_CONNECTION_ENABLED() (0) 40 #define NODE_NET_STREAM_END(arg0) 41 #define NODE_NET_STREAM_END_ENABLED() (0) 42 #define NODE_GC_START(arg0, arg1, arg2) 43 #define NODE_GC_DONE(arg0, arg1, arg2) 55 using v8::FunctionCallbackInfo;
56 using v8::GCCallbackFlags;
58 using v8::HandleScope;
65 #define SLURP_STRING(obj, member, valp) \ 66 if (!(obj)->IsObject()) { \ 67 return env->ThrowError( \ 68 "expected object for " #obj " to contain string member " #member); \ 70 node::Utf8Value _##member(env->isolate(), \ 71 obj->Get(OneByteString(env->isolate(), #member))); \ 72 if ((*(const char **)valp = *_##member) == nullptr) \ 73 *(const char **)valp = "<unknown>"; 75 #define SLURP_INT(obj, member, valp) \ 76 if (!(obj)->IsObject()) { \ 77 return env->ThrowError( \ 78 "expected object for " #obj " to contain integer member " #member); \ 80 *valp = obj->Get(OneByteString(env->isolate(), #member)) \ 83 #define SLURP_OBJECT(obj, member, valp) \ 84 if (!(obj)->IsObject()) { \ 85 return env->ThrowError( \ 86 "expected object for " #obj " to contain object member " #member); \ 88 *valp = Local<Object>::Cast(obj->Get(OneByteString(env->isolate(), #member))); 90 #define SLURP_CONNECTION(arg, conn) \ 91 if (!(arg)->IsObject()) { \ 92 return env->ThrowError( \ 93 "expected argument " #arg " to be a connection object"); \ 95 node_dtrace_connection_t conn; \ 96 Local<Object> _##conn = Local<Object>::Cast(arg); \ 97 Local<Value> _handle = \ 98 (_##conn)->Get(FIXED_ONE_BYTE_STRING(env->isolate(), "_handle")); \ 99 if (_handle->IsObject()) { \ 100 SLURP_INT(_handle.As<Object>(), fd, &conn.fd); \ 104 SLURP_STRING(_##conn, remoteAddress, &conn.remote); \ 105 SLURP_INT(_##conn, remotePort, &conn.port); \ 106 SLURP_INT(_##conn, bufferSize, &conn.buffered); 108 #define SLURP_CONNECTION_HTTP_CLIENT(arg, conn) \ 109 if (!(arg)->IsObject()) { \ 110 return env->ThrowError( \ 111 "expected argument " #arg " to be a connection object"); \ 113 node_dtrace_connection_t conn; \ 114 Local<Object> _##conn = Local<Object>::Cast(arg); \ 115 SLURP_INT(_##conn, fd, &conn.fd); \ 116 SLURP_STRING(_##conn, host, &conn.remote); \ 117 SLURP_INT(_##conn, port, &conn.port); \ 118 SLURP_INT(_##conn, bufferSize, &conn.buffered); 120 #define SLURP_CONNECTION_HTTP_CLIENT_RESPONSE(arg0, arg1, conn) \ 121 if (!(arg0)->IsObject()) { \ 122 return env->ThrowError( \ 123 "expected argument " #arg0 " to be a connection object"); \ 125 if (!(arg1)->IsObject()) { \ 126 return env->ThrowError( \ 127 "expected argument " #arg1 " to be a connection object"); \ 129 node_dtrace_connection_t conn; \ 130 Local<Object> _##conn = Local<Object>::Cast(arg0); \ 131 SLURP_INT(_##conn, fd, &conn.fd); \ 132 SLURP_INT(_##conn, bufferSize, &conn.buffered); \ 133 _##conn = Local<Object>::Cast(arg1); \ 134 SLURP_STRING(_##conn, host, &conn.remote); \ 135 SLURP_INT(_##conn, port, &conn.port); 141 Environment* env = Environment::GetCurrent(args);
150 Environment* env = Environment::GetCurrent(args);
161 Environment* env = Environment::GetCurrent(args);
162 HandleScope scope(env->isolate());
163 Local<Object> arg0 = Local<Object>::Cast(args[0]);
164 Local<Object> headers;
166 memset(&req, 0,
sizeof(req));
172 if (!(headers)->IsObject()) {
173 return env->ThrowError(
174 "expected object for request to contain string member headers");
177 Local<Value> strfwdfor = headers->Get(env->x_forwarded_string());
178 node::Utf8Value fwdfor(env->isolate(), strfwdfor);
180 if (!strfwdfor->IsString() || (req.forwardedFor = *fwdfor) ==
nullptr)
181 req.forwardedFor =
const_cast<char*
>(
"");
192 Environment* env = Environment::GetCurrent(args);
205 Environment* env = Environment::GetCurrent(args);
206 HandleScope scope(env->isolate());
214 Local<Object> arg0 = Local<Object>::Cast(args[0]);
219 while (*header !=
'\0' && *header !=
' ')
227 while (*header !=
'\0' && *header !=
' ')
241 Environment* env = Environment::GetCurrent(args);
262 HandleScope scope(env->isolate());
266 void (*
func)(
const FunctionCallbackInfo<Value>&);
268 #define NODE_PROBE(name) #name, name 278 for (
size_t i = 0; i < arraysize(tab); i++) {
279 Local<String> key = OneByteString(env->isolate(), tab[i].name);
280 Local<Value> val = env->NewFunctionTemplate(tab[i].
func)->GetFunction();
281 target->Set(key, val);
288 #if defined HAVE_DTRACE || defined HAVE_ETW #define NODE_HTTP_CLIENT_RESPONSE(arg0)
#define NODE_NET_STREAM_END_ENABLED()
void DTRACE_HTTP_CLIENT_RESPONSE(const FunctionCallbackInfo< Value > &args)
#define SLURP_CONNECTION(arg, conn)
#define NODE_NET_STREAM_END(arg0)
void dtrace_gc_done(Isolate *isolate, GCType type, GCCallbackFlags flags)
void InitDTrace(Environment *env, Local< Object > target)
#define NODE_GC_DONE(arg0, arg1, arg2)
void dtrace_gc_start(Isolate *isolate, GCType type, GCCallbackFlags flags)
#define SLURP_CONNECTION_HTTP_CLIENT(arg, conn)
void DTRACE_NET_SERVER_CONNECTION(const FunctionCallbackInfo< Value > &args)
void DTRACE_NET_STREAM_END(const FunctionCallbackInfo< Value > &args)
#define NODE_HTTP_CLIENT_REQUEST(arg0, arg1)
#define NODE_HTTP_SERVER_REQUEST_ENABLED()
#define NODE_NET_SERVER_CONNECTION_ENABLED()
#define NODE_HTTP_CLIENT_REQUEST_ENABLED()
#define NODE_HTTP_SERVER_RESPONSE_ENABLED()
#define NODE_HTTP_CLIENT_RESPONSE_ENABLED()
void DTRACE_HTTP_SERVER_REQUEST(const FunctionCallbackInfo< Value > &args)
void DTRACE_HTTP_CLIENT_REQUEST(const FunctionCallbackInfo< Value > &args)
#define SLURP_CONNECTION_HTTP_CLIENT_RESPONSE(arg0, arg1, conn)
#define SLURP_STRING(obj, member, valp)
#define NODE_NET_SERVER_CONNECTION(arg0)
#define NODE_GC_START(arg0, arg1, arg2)
void DTRACE_HTTP_SERVER_RESPONSE(const FunctionCallbackInfo< Value > &args)
#define SLURP_OBJECT(obj, member, valp)
#define NODE_HTTP_SERVER_RESPONSE(arg0)
#define NODE_HTTP_SERVER_REQUEST(arg0, arg1)