@@ -17,36 +17,58 @@ using namespace node;
17
17
using namespace v8 ;
18
18
19
19
#define THROW_BAD_ARGS \
20
- NanThrowTypeError (" Bad argument" )
20
+ Nan::ThrowTypeError (" Bad argument" )
21
+
22
+ #define LOCAL_STRING_HANDLE (text ) \
23
+ Nan::New<String>(text).ToLocalChecked()
21
24
22
25
#define PERSISTENT_STRING (id, text ) \
23
- NanAssignPersistent<String>(id, NanNew<String>(text))
26
+ id.Reset(LOCAL_STRING_HANDLE(text))
27
+
28
+ #define IS_STRING_PROP (obj, key ) \
29
+ Nan::Get (obj, key).ToLocalChecked()->IsString()
30
+
31
+ #define IS_NUMBER_PROP (obj, key ) \
32
+ Nan::Get (obj, key).ToLocalChecked()->IsNumber()
33
+
34
+ #define HAS_STRING_PROP (obj, key ) \
35
+ Nan::Has (obj, key).FromJust() && IS_STRING_PROP(obj, key)
36
+
37
+ #define HAS_NUMBER_PROP (obj, key ) \
38
+ Nan::Has (obj, key).FromJust() && IS_NUMBER_PROP(obj, key)
39
+
40
+ #define GET_STRING_PROP (obj, key ) \
41
+ Nan::Get (obj, key).ToLocalChecked()->ToString()
42
+
43
+ #define GET_INT_PROP (obj, key ) \
44
+ Nan::Get (obj, key).ToLocalChecked()->IntegerValue()
24
45
25
46
typedef std::vector<char> buff_t;
26
47
27
- class CurlLib : ObjectWrap {
48
+ class CurlLib : Nan:: ObjectWrap {
28
49
private:
29
50
static std::string buffer;
30
51
static std::vector<std::string> headers;
31
- static Persistent<String> sym_body_length;
32
- static Persistent<String> sym_headers;
33
- static Persistent<String> sym_timedout;
34
- static Persistent<String> sym_error;
52
+ static Nan:: Persistent<String> sym_body_length;
53
+ static Nan:: Persistent<String> sym_headers;
54
+ static Nan:: Persistent<String> sym_timedout;
55
+ static Nan:: Persistent<String> sym_error;
35
56
36
57
public:
37
- static Persistent<Function> s_constructor;
58
+ static Nan:: Persistent<Function> s_constructor;
38
59
static void Init (Handle<Object> target) {
39
- Local<FunctionTemplate> t = NanNew<FunctionTemplate>(New);
60
+ Local<FunctionTemplate> t = Nan::New<FunctionTemplate>(New);
61
+ Local<String> className = LOCAL_STRING_HANDLE (" CurlLib" );
40
62
41
63
t->InstanceTemplate ()->SetInternalFieldCount (1 );
42
- t->SetClassName (NanNew<String>( " CurlLib " ) );
64
+ t->SetClassName (className );
43
65
44
- NODE_SET_PROTOTYPE_METHOD (t, " run" , Run);
45
- NODE_SET_PROTOTYPE_METHOD (t, " body" , Body);
66
+ Nan::SetPrototypeMethod (t, " run" , Run);
67
+ Nan::SetPrototypeMethod (t, " body" , Body);
46
68
47
- NanAssignPersistent <Function>(s_constructor, t-> GetFunction () );
48
- target-> Set (NanNew<String>( " CurlLib " ),
49
- t-> GetFunction () );
69
+ Local <Function> tFunction = Nan:: GetFunction (t). ToLocalChecked ( );
70
+ s_constructor. Reset (tFunction);
71
+ Nan::Set (target, className, tFunction );
50
72
51
73
PERSISTENT_STRING (sym_body_length, " body_length" );
52
74
PERSISTENT_STRING (sym_headers, " headers" );
@@ -58,10 +80,9 @@ class CurlLib : ObjectWrap {
58
80
~CurlLib () { }
59
81
60
82
static NAN_METHOD (New) {
61
- NanScope ();
62
83
CurlLib* curllib = new CurlLib ();
63
- curllib->Wrap (args .This ());
64
- NanReturnValue (args .This ());
84
+ curllib->Wrap (info .This ());
85
+ info. GetReturnValue (). Set (info .This ());
65
86
}
66
87
67
88
static size_t write_data (void *ptr, size_t size,
@@ -80,134 +101,135 @@ class CurlLib : ObjectWrap {
80
101
}
81
102
82
103
static NAN_METHOD (Body) {
83
- NanScope ();
84
104
85
- if (args .Length () < 1 || !Buffer::HasInstance (args [0 ])) {
105
+ if (info .Length () < 1 || !Buffer::HasInstance (info [0 ])) {
86
106
return THROW_BAD_ARGS;
87
107
}
88
108
89
- Local<Object> buffer_obj = args [0 ]->ToObject ();
109
+ Local<Object> buffer_obj = info [0 ]->ToObject ();
90
110
char *buffer_data = Buffer::Data (buffer_obj);
91
111
size_t buffer_length = Buffer::Length (buffer_obj);
92
112
93
113
if (buffer_length < buffer.size ()) {
94
- return NanThrowTypeError (" Insufficient Buffer Length" );
114
+ return Nan::ThrowTypeError (" Insufficient Buffer Length" );
95
115
}
96
116
97
117
if (!buffer.empty ()) {
98
118
memcpy (buffer_data, buffer.data (), buffer.size ());
99
119
}
100
120
buffer.clear ();
101
- NanReturnValue (buffer_obj);
121
+ info. GetReturnValue (). Set (buffer_obj);
102
122
}
103
123
104
124
static NAN_METHOD (Run) {
105
- NanScope ();
106
125
107
- if (args .Length () < 1 ) {
126
+ if (info .Length () < 1 ) {
108
127
return THROW_BAD_ARGS;
109
128
}
110
129
111
- Local<String> key_method = NanNew<String> (" method" );
112
- Local<String> key_url = NanNew<String> (" url" );
113
- Local<String> key_headers = NanNew<String> (" headers" );
114
- Local<String> key_body = NanNew<String> (" body" );
115
- Local<String> key_connect_timeout_ms = NanNew<String> (" connect_timeout_ms" );
116
- Local<String> key_timeout_ms = NanNew<String> (" timeout_ms" );
117
- Local<String> key_rejectUnauthorized = NanNew<String> (" rejectUnauthorized" );
118
- Local<String> key_caCert = NanNew<String> (" ca" );
119
- Local<String> key_clientCert = NanNew<String> (" cert" );
120
- Local<String> key_pfx = NanNew<String> (" pfx" );
121
- Local<String> key_clientKey = NanNew<String> (" key" );
122
- Local<String> key_clientKeyPhrase = NanNew<String> (" passphrase" );
123
-
124
- static const Local<String> PFXFORMAT = NanNew<String> (" P12" );
125
-
126
- Local<Array> opt = Local<Array>::Cast (args [0 ]);
127
-
128
- if (!opt-> Has (key_method) ||
129
- !opt-> Has (key_url) ||
130
- !opt-> Has (key_headers)) {
130
+ Local<String> key_method = LOCAL_STRING_HANDLE (" method" );
131
+ Local<String> key_url = LOCAL_STRING_HANDLE (" url" );
132
+ Local<String> key_headers = LOCAL_STRING_HANDLE (" headers" );
133
+ Local<String> key_body = LOCAL_STRING_HANDLE (" body" );
134
+ Local<String> key_connect_timeout_ms = LOCAL_STRING_HANDLE (" connect_timeout_ms" );
135
+ Local<String> key_timeout_ms = LOCAL_STRING_HANDLE (" timeout_ms" );
136
+ Local<String> key_rejectUnauthorized = LOCAL_STRING_HANDLE (" rejectUnauthorized" );
137
+ Local<String> key_caCert = LOCAL_STRING_HANDLE (" ca" );
138
+ Local<String> key_clientCert = LOCAL_STRING_HANDLE (" cert" );
139
+ Local<String> key_pfx = LOCAL_STRING_HANDLE (" pfx" );
140
+ Local<String> key_clientKey = LOCAL_STRING_HANDLE (" key" );
141
+ Local<String> key_clientKeyPhrase = LOCAL_STRING_HANDLE (" passphrase" );
142
+
143
+ static const Local<String> PFXFORMAT = LOCAL_STRING_HANDLE (" P12" );
144
+
145
+ Local<Array> opt = Local<Array>::Cast (info [0 ]);
146
+
147
+ if (!Nan:: Has (opt, key_method). FromJust ( ) ||
148
+ !Nan:: Has (opt, key_url). FromJust ( ) ||
149
+ !Nan:: Has (opt, key_headers). FromJust ( )) {
131
150
return THROW_BAD_ARGS;
132
151
}
133
152
134
- if (!opt-> Get ( key_method)-> IsString ( ) ||
135
- !opt-> Get ( key_url)-> IsString ( )) {
153
+ if (!IS_STRING_PROP (opt, key_method) ||
154
+ !IS_STRING_PROP (opt, key_url)) {
136
155
return THROW_BAD_ARGS;
137
156
}
138
157
139
- Local<String> method = Local<String>:: Cast (opt-> Get ( key_method) );
140
- Local<String> url = Local<String>:: Cast (opt-> Get ( key_url) );
141
- Local<Array> reqh = Local <Array>::Cast (opt-> Get (key_headers));
142
- Local<String> body = NanNew<String>(( const char *) " " , 0 );
143
- Local<String> caCert = NanNew<String>(( const char *) " " , 0 );
144
- Local<String> clientCert = NanNew<String>(( const char *) " " , 0 );
145
- Local<String> clientCertFormat = NanNew<String>(( const char *) " " , 0 );
146
- Local<String> clientKey = NanNew<String>(( const char *) " " , 0 );
147
- Local<String> clientKeyPhrase = NanNew<String>(( const char *) " " , 0 );
158
+ Local<String> method = GET_STRING_PROP (opt, key_method);
159
+ Local<String> url = GET_STRING_PROP (opt, key_url);
160
+ Local<Array> reqh = Handle <Array>::Cast (Nan:: Get (opt, key_headers). ToLocalChecked ( ));
161
+ Local<String> body = Nan::EmptyString ( );
162
+ Local<String> caCert = Nan::EmptyString ( );
163
+ Local<String> clientCert = Nan::EmptyString ( );
164
+ Local<String> clientCertFormat = Nan::EmptyString ( );
165
+ Local<String> clientKey = Nan::EmptyString ( );
166
+ Local<String> clientKeyPhrase = Nan::EmptyString ( );
148
167
long connect_timeout_ms = 1 * 60 * 60 * 1000 ; /* 1 hr in msec */
149
168
long timeout_ms = 1 * 60 * 60 * 1000 ; /* 1 hr in msec */
150
169
bool rejectUnauthorized = false ;
151
170
152
- if (opt-> Has (key_caCert) && opt-> Get ( key_caCert)-> IsString ( )) {
153
- caCert = opt-> Get ( key_caCert)-> ToString ( );
171
+ if (HAS_STRING_PROP ( opt, key_caCert)) {
172
+ caCert = GET_STRING_PROP (opt, key_caCert);
154
173
}
155
174
156
- if (opt-> Has (key_clientKey) && opt-> Get ( key_clientKey)-> IsString ( )) {
157
- clientKey = opt-> Get ( key_clientKey)-> ToString ( );
175
+ if (HAS_STRING_PROP ( opt, key_clientKey)) {
176
+ clientKey = GET_STRING_PROP (opt, key_clientKey);
158
177
}
159
178
160
- if (opt-> Has (key_clientKeyPhrase) && opt-> Get ( key_clientKeyPhrase)-> IsString ( )) {
161
- clientKeyPhrase = opt-> Get ( key_clientKeyPhrase)-> ToString ( );
179
+ if (HAS_STRING_PROP ( opt, key_clientKeyPhrase)) {
180
+ clientKeyPhrase = GET_STRING_PROP (opt, key_clientKeyPhrase);
162
181
}
163
182
164
- if (opt-> Has (key_clientCert) && opt-> Get ( key_clientCert)-> IsString ( )) {
165
- clientCert = opt-> Get ( key_clientCert)-> ToString ( );
166
- } else if (opt-> Has (key_pfx) && opt-> Get ( key_pfx)-> IsString ( )) {
167
- clientCert = opt-> Get ( key_pfx)-> ToString ( );
183
+ if (HAS_STRING_PROP ( opt, key_clientCert)) {
184
+ clientCert = GET_STRING_PROP (opt, key_clientCert);
185
+ } else if (HAS_STRING_PROP ( opt, key_pfx)) {
186
+ clientCert = GET_STRING_PROP (opt, key_pfx);
168
187
clientCertFormat = PFXFORMAT;
169
188
}
170
189
171
- if (opt-> Has (key_body) && opt-> Get ( key_body)-> IsString ( )) {
172
- body = opt-> Get ( key_body)-> ToString ( );
190
+ if (HAS_STRING_PROP ( opt, key_body)) {
191
+ body = GET_STRING_PROP (opt, key_body);
173
192
}
174
193
175
- if (opt-> Has (key_connect_timeout_ms) && opt-> Get ( key_connect_timeout_ms)-> IsNumber ( )) {
176
- connect_timeout_ms = opt-> Get ( key_connect_timeout_ms)-> IntegerValue ( );
194
+ if (HAS_NUMBER_PROP ( opt, key_connect_timeout_ms)) {
195
+ connect_timeout_ms = GET_INT_PROP (opt, key_connect_timeout_ms);
177
196
}
178
197
179
- if (opt-> Has (key_timeout_ms) && opt-> Get ( key_timeout_ms)-> IsNumber ( )) {
180
- timeout_ms = opt-> Get ( key_timeout_ms)-> IntegerValue ( );
198
+ if (HAS_NUMBER_PROP ( opt, key_timeout_ms)) {
199
+ timeout_ms = GET_INT_PROP (opt, key_timeout_ms);
181
200
}
182
201
183
- if (opt->Has (key_rejectUnauthorized)) {
202
+ if (Nan::Has (opt, key_rejectUnauthorized).FromJust ()) {
203
+ Local<Value> rejectUnauthorizedValue =
204
+ Nan::Get (opt, key_rejectUnauthorized).ToLocalChecked ();
205
+
184
206
// std::cerr<<"has reject unauth"<<std::endl;
185
- if (opt-> Get (key_rejectUnauthorized) ->IsBoolean ()) {
186
- rejectUnauthorized = opt-> Get (key_rejectUnauthorized) ->BooleanValue ();
187
- } else if (opt-> Get (key_rejectUnauthorized) ->IsBooleanObject ()) {
188
- rejectUnauthorized = opt-> Get (key_rejectUnauthorized)
207
+ if (rejectUnauthorizedValue ->IsBoolean ()) {
208
+ rejectUnauthorized = rejectUnauthorizedValue ->BooleanValue ();
209
+ } else if (rejectUnauthorizedValue ->IsBooleanObject ()) {
210
+ rejectUnauthorized = rejectUnauthorizedValue
189
211
->ToBoolean ()
190
212
->BooleanValue ();
191
213
}
192
214
}
193
215
194
216
// std::cerr<<"rejectUnauthorized: " << rejectUnauthorized << std::endl;
195
217
196
- NanUtf8String _body (body);
197
- NanUtf8String _method (method);
198
- NanUtf8String _url (url);
199
- NanUtf8String _cacert (caCert);
200
- NanUtf8String _clientcert (clientCert);
201
- NanUtf8String _clientcertformat (clientCertFormat);
202
- NanUtf8String _clientkeyphrase (clientKeyPhrase);
203
- NanUtf8String _clientkey (clientKey);
218
+ Nan::Utf8String _body (body);
219
+ Nan::Utf8String _method (method);
220
+ Nan::Utf8String _url (url);
221
+ Nan::Utf8String _cacert (caCert);
222
+ Nan::Utf8String _clientcert (clientCert);
223
+ Nan::Utf8String _clientcertformat (clientCertFormat);
224
+ Nan::Utf8String _clientkeyphrase (clientKeyPhrase);
225
+ Nan::Utf8String _clientkey (clientKey);
204
226
205
227
std::vector<std::string> _reqh;
206
228
for (size_t i = 0 ; i < reqh->Length (); ++i) {
207
- _reqh.push_back (*NanUtf8String (reqh-> Get (i )));
229
+ _reqh.push_back (*Nan::Utf8String ( Nan:: Get (reqh, i). ToLocalChecked ( )));
208
230
}
209
231
210
- // CurlLib* curllib = ObjectWrap::Unwrap<CurlLib>(args .This());
232
+ // CurlLib* curllib = Nan:: ObjectWrap::Unwrap<CurlLib>(info .This());
211
233
212
234
buffer.clear ();
213
235
headers.clear ();
@@ -283,34 +305,34 @@ class CurlLib : ObjectWrap {
283
305
284
306
// std::cerr<<"error_buffer: "<<error_buffer<<std::endl;
285
307
286
- Local<Object> result = NanNew <Object>();
308
+ Local<Object> result = Nan::New <Object>();
287
309
288
310
if (!res) {
289
- result-> Set (NanNew (sym_body_length), NanNew <Integer>((int32_t )buffer.size ()));
290
- Local<Array> _h = NanNew <Array>();
311
+ Nan:: Set (result, Nan::New (sym_body_length), Nan::New <Integer>((int32_t )buffer.size ()));
312
+ Local<Array> _h = Nan::New <Array>();
291
313
for (size_t i = 0 ; i < headers.size (); ++i) {
292
- _h-> Set (i, NanNew <String>(headers[i].c_str ()));
314
+ Nan:: Set (_h, i, Nan::New <String>(headers[i].c_str ()). ToLocalChecked ( ));
293
315
}
294
- result-> Set (NanNew (sym_headers), _h);
316
+ Nan:: Set (result, Nan::New<String> (sym_headers), _h);
295
317
}
296
318
else if (res == CURLE_OPERATION_TIMEDOUT) {
297
- result-> Set ( NanNew ( sym_timedout), NanNew <Integer>(1 ));
319
+ Nan::Set ( result, Nan::New<String>( sym_timedout), Nan::New <Integer>(1 ));
298
320
} else {
299
- result-> Set (NanNew (sym_error), NanNew <String>(curl_easy_strerror (res)));
321
+ Nan:: Set (result, Nan::New <String>(sym_error), LOCAL_STRING_HANDLE (curl_easy_strerror (res)));
300
322
}
301
323
302
324
headers.clear ();
303
- NanReturnValue (result);
325
+ info. GetReturnValue (). Set (result);
304
326
}
305
327
};
306
328
307
- Persistent<Function> CurlLib::s_constructor;
329
+ Nan:: Persistent<Function> CurlLib::s_constructor;
308
330
std::string CurlLib::buffer;
309
331
std::vector<std::string> CurlLib::headers;
310
- Persistent<String> CurlLib::sym_body_length;
311
- Persistent<String> CurlLib::sym_headers;
312
- Persistent<String> CurlLib::sym_timedout;
313
- Persistent<String> CurlLib::sym_error;
332
+ Nan:: Persistent<String> CurlLib::sym_body_length;
333
+ Nan:: Persistent<String> CurlLib::sym_headers;
334
+ Nan:: Persistent<String> CurlLib::sym_timedout;
335
+ Nan:: Persistent<String> CurlLib::sym_error;
314
336
315
337
extern " C" {
316
338
static void init (Handle<Object> target) {
0 commit comments