1 // Copyright Joyent, Inc. and other Node contributors.
2 //
3 // Permission is hereby granted, free of charge, to any person obtaining a
4 // copy of this software and associated documentation files (the
5 // "Software"), to deal in the Software without restriction, including
6 // without limitation the rights to use, copy, modify, merge, publish,
7 // distribute, sublicense, and/or sell copies of the Software, and to permit
8 // persons to whom the Software is furnished to do so, subject to the
9 // following conditions:
10 //
11 // The above copyright notice and this permission notice shall be included
12 // in all copies or substantial portions of the Software.
13 //
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
17 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 // USE OR OTHER DEALINGS IN THE SOFTWARE.
21
22 #include "env-inl.h"
23 #include "node_constants.h"
24 #include "node_internals.h"
25 #include "util-inl.h"
26
27 #include "zlib.h"
28
29 #if !defined(_MSC_VER)
30 #include <unistd.h>
31 #endif
32
33 #include <fcntl.h>
34 #include <sys/types.h>
35 #include <sys/stat.h>
36
37
38 #if HAVE_OPENSSL
39 #include <openssl/ec.h>
40 #include <openssl/ssl.h>
41 #ifndef OPENSSL_NO_ENGINE
42 #include <openssl/engine.h>
43 #endif // !OPENSSL_NO_ENGINE
44 #endif // HAVE_OPENSSL
45
46 #if defined(__POSIX__)
47 #include <dlfcn.h>
48 #endif
49
50 #include <cerrno>
51 #include <csignal>
52 #include <limits>
53
54 namespace node {
55
56 using v8::Local;
57 using v8::Object;
58
59 namespace {
60
DefineErrnoConstants(Local<Object> target)61 void DefineErrnoConstants(Local<Object> target) {
62 #ifdef E2BIG
63 NODE_DEFINE_CONSTANT(target, E2BIG);
64 #endif
65
66 #ifdef EACCES
67 NODE_DEFINE_CONSTANT(target, EACCES);
68 #endif
69
70 #ifdef EADDRINUSE
71 NODE_DEFINE_CONSTANT(target, EADDRINUSE);
72 #endif
73
74 #ifdef EADDRNOTAVAIL
75 NODE_DEFINE_CONSTANT(target, EADDRNOTAVAIL);
76 #endif
77
78 #ifdef EAFNOSUPPORT
79 NODE_DEFINE_CONSTANT(target, EAFNOSUPPORT);
80 #endif
81
82 #ifdef EAGAIN
83 NODE_DEFINE_CONSTANT(target, EAGAIN);
84 #endif
85
86 #ifdef EALREADY
87 NODE_DEFINE_CONSTANT(target, EALREADY);
88 #endif
89
90 #ifdef EBADF
91 NODE_DEFINE_CONSTANT(target, EBADF);
92 #endif
93
94 #ifdef EBADMSG
95 NODE_DEFINE_CONSTANT(target, EBADMSG);
96 #endif
97
98 #ifdef EBUSY
99 NODE_DEFINE_CONSTANT(target, EBUSY);
100 #endif
101
102 #ifdef ECANCELED
103 NODE_DEFINE_CONSTANT(target, ECANCELED);
104 #endif
105
106 #ifdef ECHILD
107 NODE_DEFINE_CONSTANT(target, ECHILD);
108 #endif
109
110 #ifdef ECONNABORTED
111 NODE_DEFINE_CONSTANT(target, ECONNABORTED);
112 #endif
113
114 #ifdef ECONNREFUSED
115 NODE_DEFINE_CONSTANT(target, ECONNREFUSED);
116 #endif
117
118 #ifdef ECONNRESET
119 NODE_DEFINE_CONSTANT(target, ECONNRESET);
120 #endif
121
122 #ifdef EDEADLK
123 NODE_DEFINE_CONSTANT(target, EDEADLK);
124 #endif
125
126 #ifdef EDESTADDRREQ
127 NODE_DEFINE_CONSTANT(target, EDESTADDRREQ);
128 #endif
129
130 #ifdef EDOM
131 NODE_DEFINE_CONSTANT(target, EDOM);
132 #endif
133
134 #ifdef EDQUOT
135 NODE_DEFINE_CONSTANT(target, EDQUOT);
136 #endif
137
138 #ifdef EEXIST
139 NODE_DEFINE_CONSTANT(target, EEXIST);
140 #endif
141
142 #ifdef EFAULT
143 NODE_DEFINE_CONSTANT(target, EFAULT);
144 #endif
145
146 #ifdef EFBIG
147 NODE_DEFINE_CONSTANT(target, EFBIG);
148 #endif
149
150 #ifdef EHOSTUNREACH
151 NODE_DEFINE_CONSTANT(target, EHOSTUNREACH);
152 #endif
153
154 #ifdef EIDRM
155 NODE_DEFINE_CONSTANT(target, EIDRM);
156 #endif
157
158 #ifdef EILSEQ
159 NODE_DEFINE_CONSTANT(target, EILSEQ);
160 #endif
161
162 #ifdef EINPROGRESS
163 NODE_DEFINE_CONSTANT(target, EINPROGRESS);
164 #endif
165
166 #ifdef EINTR
167 NODE_DEFINE_CONSTANT(target, EINTR);
168 #endif
169
170 #ifdef EINVAL
171 NODE_DEFINE_CONSTANT(target, EINVAL);
172 #endif
173
174 #ifdef EIO
175 NODE_DEFINE_CONSTANT(target, EIO);
176 #endif
177
178 #ifdef EISCONN
179 NODE_DEFINE_CONSTANT(target, EISCONN);
180 #endif
181
182 #ifdef EISDIR
183 NODE_DEFINE_CONSTANT(target, EISDIR);
184 #endif
185
186 #ifdef ELOOP
187 NODE_DEFINE_CONSTANT(target, ELOOP);
188 #endif
189
190 #ifdef EMFILE
191 NODE_DEFINE_CONSTANT(target, EMFILE);
192 #endif
193
194 #ifdef EMLINK
195 NODE_DEFINE_CONSTANT(target, EMLINK);
196 #endif
197
198 #ifdef EMSGSIZE
199 NODE_DEFINE_CONSTANT(target, EMSGSIZE);
200 #endif
201
202 #ifdef EMULTIHOP
203 NODE_DEFINE_CONSTANT(target, EMULTIHOP);
204 #endif
205
206 #ifdef ENAMETOOLONG
207 NODE_DEFINE_CONSTANT(target, ENAMETOOLONG);
208 #endif
209
210 #ifdef ENETDOWN
211 NODE_DEFINE_CONSTANT(target, ENETDOWN);
212 #endif
213
214 #ifdef ENETRESET
215 NODE_DEFINE_CONSTANT(target, ENETRESET);
216 #endif
217
218 #ifdef ENETUNREACH
219 NODE_DEFINE_CONSTANT(target, ENETUNREACH);
220 #endif
221
222 #ifdef ENFILE
223 NODE_DEFINE_CONSTANT(target, ENFILE);
224 #endif
225
226 #ifdef ENOBUFS
227 NODE_DEFINE_CONSTANT(target, ENOBUFS);
228 #endif
229
230 #ifdef ENODATA
231 NODE_DEFINE_CONSTANT(target, ENODATA);
232 #endif
233
234 #ifdef ENODEV
235 NODE_DEFINE_CONSTANT(target, ENODEV);
236 #endif
237
238 #ifdef ENOENT
239 NODE_DEFINE_CONSTANT(target, ENOENT);
240 #endif
241
242 #ifdef ENOEXEC
243 NODE_DEFINE_CONSTANT(target, ENOEXEC);
244 #endif
245
246 #ifdef ENOLCK
247 NODE_DEFINE_CONSTANT(target, ENOLCK);
248 #endif
249
250 #ifdef ENOLINK
251 NODE_DEFINE_CONSTANT(target, ENOLINK);
252 #endif
253
254 #ifdef ENOMEM
255 NODE_DEFINE_CONSTANT(target, ENOMEM);
256 #endif
257
258 #ifdef ENOMSG
259 NODE_DEFINE_CONSTANT(target, ENOMSG);
260 #endif
261
262 #ifdef ENOPROTOOPT
263 NODE_DEFINE_CONSTANT(target, ENOPROTOOPT);
264 #endif
265
266 #ifdef ENOSPC
267 NODE_DEFINE_CONSTANT(target, ENOSPC);
268 #endif
269
270 #ifdef ENOSR
271 NODE_DEFINE_CONSTANT(target, ENOSR);
272 #endif
273
274 #ifdef ENOSTR
275 NODE_DEFINE_CONSTANT(target, ENOSTR);
276 #endif
277
278 #ifdef ENOSYS
279 NODE_DEFINE_CONSTANT(target, ENOSYS);
280 #endif
281
282 #ifdef ENOTCONN
283 NODE_DEFINE_CONSTANT(target, ENOTCONN);
284 #endif
285
286 #ifdef ENOTDIR
287 NODE_DEFINE_CONSTANT(target, ENOTDIR);
288 #endif
289
290 #ifdef ENOTEMPTY
291 NODE_DEFINE_CONSTANT(target, ENOTEMPTY);
292 #endif
293
294 #ifdef ENOTSOCK
295 NODE_DEFINE_CONSTANT(target, ENOTSOCK);
296 #endif
297
298 #ifdef ENOTSUP
299 NODE_DEFINE_CONSTANT(target, ENOTSUP);
300 #endif
301
302 #ifdef ENOTTY
303 NODE_DEFINE_CONSTANT(target, ENOTTY);
304 #endif
305
306 #ifdef ENXIO
307 NODE_DEFINE_CONSTANT(target, ENXIO);
308 #endif
309
310 #ifdef EOPNOTSUPP
311 NODE_DEFINE_CONSTANT(target, EOPNOTSUPP);
312 #endif
313
314 #ifdef EOVERFLOW
315 NODE_DEFINE_CONSTANT(target, EOVERFLOW);
316 #endif
317
318 #ifdef EPERM
319 NODE_DEFINE_CONSTANT(target, EPERM);
320 #endif
321
322 #ifdef EPIPE
323 NODE_DEFINE_CONSTANT(target, EPIPE);
324 #endif
325
326 #ifdef EPROTO
327 NODE_DEFINE_CONSTANT(target, EPROTO);
328 #endif
329
330 #ifdef EPROTONOSUPPORT
331 NODE_DEFINE_CONSTANT(target, EPROTONOSUPPORT);
332 #endif
333
334 #ifdef EPROTOTYPE
335 NODE_DEFINE_CONSTANT(target, EPROTOTYPE);
336 #endif
337
338 #ifdef ERANGE
339 NODE_DEFINE_CONSTANT(target, ERANGE);
340 #endif
341
342 #ifdef EROFS
343 NODE_DEFINE_CONSTANT(target, EROFS);
344 #endif
345
346 #ifdef ESPIPE
347 NODE_DEFINE_CONSTANT(target, ESPIPE);
348 #endif
349
350 #ifdef ESRCH
351 NODE_DEFINE_CONSTANT(target, ESRCH);
352 #endif
353
354 #ifdef ESTALE
355 NODE_DEFINE_CONSTANT(target, ESTALE);
356 #endif
357
358 #ifdef ETIME
359 NODE_DEFINE_CONSTANT(target, ETIME);
360 #endif
361
362 #ifdef ETIMEDOUT
363 NODE_DEFINE_CONSTANT(target, ETIMEDOUT);
364 #endif
365
366 #ifdef ETXTBSY
367 NODE_DEFINE_CONSTANT(target, ETXTBSY);
368 #endif
369
370 #ifdef EWOULDBLOCK
371 NODE_DEFINE_CONSTANT(target, EWOULDBLOCK);
372 #endif
373
374 #ifdef EXDEV
375 NODE_DEFINE_CONSTANT(target, EXDEV);
376 #endif
377 }
378
DefineWindowsErrorConstants(Local<Object> target)379 void DefineWindowsErrorConstants(Local<Object> target) {
380 #ifdef WSAEINTR
381 NODE_DEFINE_CONSTANT(target, WSAEINTR);
382 #endif
383
384 #ifdef WSAEBADF
385 NODE_DEFINE_CONSTANT(target, WSAEBADF);
386 #endif
387
388 #ifdef WSAEACCES
389 NODE_DEFINE_CONSTANT(target, WSAEACCES);
390 #endif
391
392 #ifdef WSAEFAULT
393 NODE_DEFINE_CONSTANT(target, WSAEFAULT);
394 #endif
395
396 #ifdef WSAEINVAL
397 NODE_DEFINE_CONSTANT(target, WSAEINVAL);
398 #endif
399
400 #ifdef WSAEMFILE
401 NODE_DEFINE_CONSTANT(target, WSAEMFILE);
402 #endif
403
404 #ifdef WSAEWOULDBLOCK
405 NODE_DEFINE_CONSTANT(target, WSAEWOULDBLOCK);
406 #endif
407
408 #ifdef WSAEINPROGRESS
409 NODE_DEFINE_CONSTANT(target, WSAEINPROGRESS);
410 #endif
411
412 #ifdef WSAEALREADY
413 NODE_DEFINE_CONSTANT(target, WSAEALREADY);
414 #endif
415
416 #ifdef WSAENOTSOCK
417 NODE_DEFINE_CONSTANT(target, WSAENOTSOCK);
418 #endif
419
420 #ifdef WSAEDESTADDRREQ
421 NODE_DEFINE_CONSTANT(target, WSAEDESTADDRREQ);
422 #endif
423
424 #ifdef WSAEMSGSIZE
425 NODE_DEFINE_CONSTANT(target, WSAEMSGSIZE);
426 #endif
427
428 #ifdef WSAEPROTOTYPE
429 NODE_DEFINE_CONSTANT(target, WSAEPROTOTYPE);
430 #endif
431
432 #ifdef WSAENOPROTOOPT
433 NODE_DEFINE_CONSTANT(target, WSAENOPROTOOPT);
434 #endif
435
436 #ifdef WSAEPROTONOSUPPORT
437 NODE_DEFINE_CONSTANT(target, WSAEPROTONOSUPPORT);
438 #endif
439
440 #ifdef WSAESOCKTNOSUPPORT
441 NODE_DEFINE_CONSTANT(target, WSAESOCKTNOSUPPORT);
442 #endif
443
444 #ifdef WSAEOPNOTSUPP
445 NODE_DEFINE_CONSTANT(target, WSAEOPNOTSUPP);
446 #endif
447
448 #ifdef WSAEPFNOSUPPORT
449 NODE_DEFINE_CONSTANT(target, WSAEPFNOSUPPORT);
450 #endif
451
452 #ifdef WSAEAFNOSUPPORT
453 NODE_DEFINE_CONSTANT(target, WSAEAFNOSUPPORT);
454 #endif
455
456 #ifdef WSAEADDRINUSE
457 NODE_DEFINE_CONSTANT(target, WSAEADDRINUSE);
458 #endif
459
460 #ifdef WSAEADDRNOTAVAIL
461 NODE_DEFINE_CONSTANT(target, WSAEADDRNOTAVAIL);
462 #endif
463
464 #ifdef WSAENETDOWN
465 NODE_DEFINE_CONSTANT(target, WSAENETDOWN);
466 #endif
467
468 #ifdef WSAENETUNREACH
469 NODE_DEFINE_CONSTANT(target, WSAENETUNREACH);
470 #endif
471
472 #ifdef WSAENETRESET
473 NODE_DEFINE_CONSTANT(target, WSAENETRESET);
474 #endif
475
476 #ifdef WSAECONNABORTED
477 NODE_DEFINE_CONSTANT(target, WSAECONNABORTED);
478 #endif
479
480 #ifdef WSAECONNRESET
481 NODE_DEFINE_CONSTANT(target, WSAECONNRESET);
482 #endif
483
484 #ifdef WSAENOBUFS
485 NODE_DEFINE_CONSTANT(target, WSAENOBUFS);
486 #endif
487
488 #ifdef WSAEISCONN
489 NODE_DEFINE_CONSTANT(target, WSAEISCONN);
490 #endif
491
492 #ifdef WSAENOTCONN
493 NODE_DEFINE_CONSTANT(target, WSAENOTCONN);
494 #endif
495
496 #ifdef WSAESHUTDOWN
497 NODE_DEFINE_CONSTANT(target, WSAESHUTDOWN);
498 #endif
499
500 #ifdef WSAETOOMANYREFS
501 NODE_DEFINE_CONSTANT(target, WSAETOOMANYREFS);
502 #endif
503
504 #ifdef WSAETIMEDOUT
505 NODE_DEFINE_CONSTANT(target, WSAETIMEDOUT);
506 #endif
507
508 #ifdef WSAECONNREFUSED
509 NODE_DEFINE_CONSTANT(target, WSAECONNREFUSED);
510 #endif
511
512 #ifdef WSAELOOP
513 NODE_DEFINE_CONSTANT(target, WSAELOOP);
514 #endif
515
516 #ifdef WSAENAMETOOLONG
517 NODE_DEFINE_CONSTANT(target, WSAENAMETOOLONG);
518 #endif
519
520 #ifdef WSAEHOSTDOWN
521 NODE_DEFINE_CONSTANT(target, WSAEHOSTDOWN);
522 #endif
523
524 #ifdef WSAEHOSTUNREACH
525 NODE_DEFINE_CONSTANT(target, WSAEHOSTUNREACH);
526 #endif
527
528 #ifdef WSAENOTEMPTY
529 NODE_DEFINE_CONSTANT(target, WSAENOTEMPTY);
530 #endif
531
532 #ifdef WSAEPROCLIM
533 NODE_DEFINE_CONSTANT(target, WSAEPROCLIM);
534 #endif
535
536 #ifdef WSAEUSERS
537 NODE_DEFINE_CONSTANT(target, WSAEUSERS);
538 #endif
539
540 #ifdef WSAEDQUOT
541 NODE_DEFINE_CONSTANT(target, WSAEDQUOT);
542 #endif
543
544 #ifdef WSAESTALE
545 NODE_DEFINE_CONSTANT(target, WSAESTALE);
546 #endif
547
548 #ifdef WSAEREMOTE
549 NODE_DEFINE_CONSTANT(target, WSAEREMOTE);
550 #endif
551
552 #ifdef WSASYSNOTREADY
553 NODE_DEFINE_CONSTANT(target, WSASYSNOTREADY);
554 #endif
555
556 #ifdef WSAVERNOTSUPPORTED
557 NODE_DEFINE_CONSTANT(target, WSAVERNOTSUPPORTED);
558 #endif
559
560 #ifdef WSANOTINITIALISED
561 NODE_DEFINE_CONSTANT(target, WSANOTINITIALISED);
562 #endif
563
564 #ifdef WSAEDISCON
565 NODE_DEFINE_CONSTANT(target, WSAEDISCON);
566 #endif
567
568 #ifdef WSAENOMORE
569 NODE_DEFINE_CONSTANT(target, WSAENOMORE);
570 #endif
571
572 #ifdef WSAECANCELLED
573 NODE_DEFINE_CONSTANT(target, WSAECANCELLED);
574 #endif
575
576 #ifdef WSAEINVALIDPROCTABLE
577 NODE_DEFINE_CONSTANT(target, WSAEINVALIDPROCTABLE);
578 #endif
579
580 #ifdef WSAEINVALIDPROVIDER
581 NODE_DEFINE_CONSTANT(target, WSAEINVALIDPROVIDER);
582 #endif
583
584 #ifdef WSAEPROVIDERFAILEDINIT
585 NODE_DEFINE_CONSTANT(target, WSAEPROVIDERFAILEDINIT);
586 #endif
587
588 #ifdef WSASYSCALLFAILURE
589 NODE_DEFINE_CONSTANT(target, WSASYSCALLFAILURE);
590 #endif
591
592 #ifdef WSASERVICE_NOT_FOUND
593 NODE_DEFINE_CONSTANT(target, WSASERVICE_NOT_FOUND);
594 #endif
595
596 #ifdef WSATYPE_NOT_FOUND
597 NODE_DEFINE_CONSTANT(target, WSATYPE_NOT_FOUND);
598 #endif
599
600 #ifdef WSA_E_NO_MORE
601 NODE_DEFINE_CONSTANT(target, WSA_E_NO_MORE);
602 #endif
603
604 #ifdef WSA_E_CANCELLED
605 NODE_DEFINE_CONSTANT(target, WSA_E_CANCELLED);
606 #endif
607
608 #ifdef WSAEREFUSED
609 NODE_DEFINE_CONSTANT(target, WSAEREFUSED);
610 #endif
611 }
612
DefineSignalConstants(Local<Object> target)613 void DefineSignalConstants(Local<Object> target) {
614 #ifdef SIGHUP
615 NODE_DEFINE_CONSTANT(target, SIGHUP);
616 #endif
617
618 #ifdef SIGINT
619 NODE_DEFINE_CONSTANT(target, SIGINT);
620 #endif
621
622 #ifdef SIGQUIT
623 NODE_DEFINE_CONSTANT(target, SIGQUIT);
624 #endif
625
626 #ifdef SIGILL
627 NODE_DEFINE_CONSTANT(target, SIGILL);
628 #endif
629
630 #ifdef SIGTRAP
631 NODE_DEFINE_CONSTANT(target, SIGTRAP);
632 #endif
633
634 #ifdef SIGABRT
635 NODE_DEFINE_CONSTANT(target, SIGABRT);
636 #endif
637
638 #ifdef SIGIOT
639 NODE_DEFINE_CONSTANT(target, SIGIOT);
640 #endif
641
642 #ifdef SIGBUS
643 NODE_DEFINE_CONSTANT(target, SIGBUS);
644 #endif
645
646 #ifdef SIGFPE
647 NODE_DEFINE_CONSTANT(target, SIGFPE);
648 #endif
649
650 #ifdef SIGKILL
651 NODE_DEFINE_CONSTANT(target, SIGKILL);
652 #endif
653
654 #ifdef SIGUSR1
655 NODE_DEFINE_CONSTANT(target, SIGUSR1);
656 #endif
657
658 #ifdef SIGSEGV
659 NODE_DEFINE_CONSTANT(target, SIGSEGV);
660 #endif
661
662 #ifdef SIGUSR2
663 NODE_DEFINE_CONSTANT(target, SIGUSR2);
664 #endif
665
666 #ifdef SIGPIPE
667 NODE_DEFINE_CONSTANT(target, SIGPIPE);
668 #endif
669
670 #ifdef SIGALRM
671 NODE_DEFINE_CONSTANT(target, SIGALRM);
672 #endif
673
674 NODE_DEFINE_CONSTANT(target, SIGTERM);
675
676 #ifdef SIGCHLD
677 NODE_DEFINE_CONSTANT(target, SIGCHLD);
678 #endif
679
680 #ifdef SIGSTKFLT
681 NODE_DEFINE_CONSTANT(target, SIGSTKFLT);
682 #endif
683
684
685 #ifdef SIGCONT
686 NODE_DEFINE_CONSTANT(target, SIGCONT);
687 #endif
688
689 #ifdef SIGSTOP
690 NODE_DEFINE_CONSTANT(target, SIGSTOP);
691 #endif
692
693 #ifdef SIGTSTP
694 NODE_DEFINE_CONSTANT(target, SIGTSTP);
695 #endif
696
697 #ifdef SIGBREAK
698 NODE_DEFINE_CONSTANT(target, SIGBREAK);
699 #endif
700
701 #ifdef SIGTTIN
702 NODE_DEFINE_CONSTANT(target, SIGTTIN);
703 #endif
704
705 #ifdef SIGTTOU
706 NODE_DEFINE_CONSTANT(target, SIGTTOU);
707 #endif
708
709 #ifdef SIGURG
710 NODE_DEFINE_CONSTANT(target, SIGURG);
711 #endif
712
713 #ifdef SIGXCPU
714 NODE_DEFINE_CONSTANT(target, SIGXCPU);
715 #endif
716
717 #ifdef SIGXFSZ
718 NODE_DEFINE_CONSTANT(target, SIGXFSZ);
719 #endif
720
721 #ifdef SIGVTALRM
722 NODE_DEFINE_CONSTANT(target, SIGVTALRM);
723 #endif
724
725 #ifdef SIGPROF
726 NODE_DEFINE_CONSTANT(target, SIGPROF);
727 #endif
728
729 #ifdef SIGWINCH
730 NODE_DEFINE_CONSTANT(target, SIGWINCH);
731 #endif
732
733 #ifdef SIGIO
734 NODE_DEFINE_CONSTANT(target, SIGIO);
735 #endif
736
737 #ifdef SIGPOLL
738 NODE_DEFINE_CONSTANT(target, SIGPOLL);
739 #endif
740
741 #ifdef SIGLOST
742 NODE_DEFINE_CONSTANT(target, SIGLOST);
743 #endif
744
745 #ifdef SIGPWR
746 NODE_DEFINE_CONSTANT(target, SIGPWR);
747 #endif
748
749 #ifdef SIGINFO
750 NODE_DEFINE_CONSTANT(target, SIGINFO);
751 #endif
752
753 #ifdef SIGSYS
754 NODE_DEFINE_CONSTANT(target, SIGSYS);
755 #endif
756
757 #ifdef SIGUNUSED
758 NODE_DEFINE_CONSTANT(target, SIGUNUSED);
759 #endif
760 }
761
DefinePriorityConstants(Local<Object> target)762 void DefinePriorityConstants(Local<Object> target) {
763 #ifdef UV_PRIORITY_LOW
764 # define PRIORITY_LOW UV_PRIORITY_LOW
765 NODE_DEFINE_CONSTANT(target, PRIORITY_LOW);
766 # undef PRIORITY_LOW
767 #endif
768
769 #ifdef UV_PRIORITY_BELOW_NORMAL
770 # define PRIORITY_BELOW_NORMAL UV_PRIORITY_BELOW_NORMAL
771 NODE_DEFINE_CONSTANT(target, PRIORITY_BELOW_NORMAL);
772 # undef PRIORITY_BELOW_NORMAL
773 #endif
774
775 #ifdef UV_PRIORITY_NORMAL
776 # define PRIORITY_NORMAL UV_PRIORITY_NORMAL
777 NODE_DEFINE_CONSTANT(target, PRIORITY_NORMAL);
778 # undef PRIORITY_NORMAL
779 #endif
780
781 #ifdef UV_PRIORITY_ABOVE_NORMAL
782 # define PRIORITY_ABOVE_NORMAL UV_PRIORITY_ABOVE_NORMAL
783 NODE_DEFINE_CONSTANT(target, PRIORITY_ABOVE_NORMAL);
784 # undef PRIORITY_ABOVE_NORMAL
785 #endif
786
787 #ifdef UV_PRIORITY_HIGH
788 # define PRIORITY_HIGH UV_PRIORITY_HIGH
789 NODE_DEFINE_CONSTANT(target, PRIORITY_HIGH);
790 # undef PRIORITY_HIGH
791 #endif
792
793 #ifdef UV_PRIORITY_HIGHEST
794 # define PRIORITY_HIGHEST UV_PRIORITY_HIGHEST
795 NODE_DEFINE_CONSTANT(target, PRIORITY_HIGHEST);
796 # undef PRIORITY_HIGHEST
797 #endif
798 }
799
DefineCryptoConstants(Local<Object> target)800 void DefineCryptoConstants(Local<Object> target) {
801 #ifdef OPENSSL_VERSION_NUMBER
802 NODE_DEFINE_CONSTANT(target, OPENSSL_VERSION_NUMBER);
803 #endif
804
805 #ifdef SSL_OP_ALL
806 NODE_DEFINE_CONSTANT(target, SSL_OP_ALL);
807 #endif
808
809 #ifdef SSL_OP_ALLOW_NO_DHE_KEX
810 NODE_DEFINE_CONSTANT(target, SSL_OP_ALLOW_NO_DHE_KEX);
811 #endif
812
813 #ifdef SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
814 NODE_DEFINE_CONSTANT(target, SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION);
815 #endif
816
817 #ifdef SSL_OP_CIPHER_SERVER_PREFERENCE
818 NODE_DEFINE_CONSTANT(target, SSL_OP_CIPHER_SERVER_PREFERENCE);
819 #endif
820
821 #ifdef SSL_OP_CISCO_ANYCONNECT
822 NODE_DEFINE_CONSTANT(target, SSL_OP_CISCO_ANYCONNECT);
823 #endif
824
825 #ifdef SSL_OP_COOKIE_EXCHANGE
826 NODE_DEFINE_CONSTANT(target, SSL_OP_COOKIE_EXCHANGE);
827 #endif
828
829 #ifdef SSL_OP_CRYPTOPRO_TLSEXT_BUG
830 NODE_DEFINE_CONSTANT(target, SSL_OP_CRYPTOPRO_TLSEXT_BUG);
831 #endif
832
833 #ifdef SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
834 NODE_DEFINE_CONSTANT(target, SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS);
835 #endif
836
837 #ifdef SSL_OP_EPHEMERAL_RSA
838 NODE_DEFINE_CONSTANT(target, SSL_OP_EPHEMERAL_RSA);
839 #endif
840
841 #ifdef SSL_OP_LEGACY_SERVER_CONNECT
842 NODE_DEFINE_CONSTANT(target, SSL_OP_LEGACY_SERVER_CONNECT);
843 #endif
844
845 #ifdef SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER
846 NODE_DEFINE_CONSTANT(target, SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER);
847 #endif
848
849 #ifdef SSL_OP_MICROSOFT_SESS_ID_BUG
850 NODE_DEFINE_CONSTANT(target, SSL_OP_MICROSOFT_SESS_ID_BUG);
851 #endif
852
853 #ifdef SSL_OP_MSIE_SSLV2_RSA_PADDING
854 NODE_DEFINE_CONSTANT(target, SSL_OP_MSIE_SSLV2_RSA_PADDING);
855 #endif
856
857 #ifdef SSL_OP_NETSCAPE_CA_DN_BUG
858 NODE_DEFINE_CONSTANT(target, SSL_OP_NETSCAPE_CA_DN_BUG);
859 #endif
860
861 #ifdef SSL_OP_NETSCAPE_CHALLENGE_BUG
862 NODE_DEFINE_CONSTANT(target, SSL_OP_NETSCAPE_CHALLENGE_BUG);
863 #endif
864
865 #ifdef SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG
866 NODE_DEFINE_CONSTANT(target, SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG);
867 #endif
868
869 #ifdef SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
870 NODE_DEFINE_CONSTANT(target, SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG);
871 #endif
872
873 #ifdef SSL_OP_NO_COMPRESSION
874 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_COMPRESSION);
875 #endif
876
877 #ifdef SSL_OP_NO_ENCRYPT_THEN_MAC
878 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_ENCRYPT_THEN_MAC);
879 #endif
880
881 #ifdef SSL_OP_NO_QUERY_MTU
882 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_QUERY_MTU);
883 #endif
884
885 #ifdef SSL_OP_NO_RENEGOTIATION
886 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_RENEGOTIATION);
887 #endif
888
889 #ifdef SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
890 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION);
891 #endif
892
893 #ifdef SSL_OP_NO_SSLv2
894 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_SSLv2);
895 #endif
896
897 #ifdef SSL_OP_NO_SSLv3
898 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_SSLv3);
899 #endif
900
901 #ifdef SSL_OP_NO_TICKET
902 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_TICKET);
903 #endif
904
905 #ifdef SSL_OP_NO_TLSv1
906 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_TLSv1);
907 #endif
908
909 #ifdef SSL_OP_NO_TLSv1_1
910 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_TLSv1_1);
911 #endif
912
913 #ifdef SSL_OP_NO_TLSv1_2
914 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_TLSv1_2);
915 #endif
916
917 #ifdef SSL_OP_NO_TLSv1_3
918 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_TLSv1_3);
919 #endif
920
921 #ifdef SSL_OP_PKCS1_CHECK_1
922 NODE_DEFINE_CONSTANT(target, SSL_OP_PKCS1_CHECK_1);
923 #endif
924
925 #ifdef SSL_OP_PKCS1_CHECK_2
926 NODE_DEFINE_CONSTANT(target, SSL_OP_PKCS1_CHECK_2);
927 #endif
928
929 #ifdef SSL_OP_PRIORITIZE_CHACHA
930 NODE_DEFINE_CONSTANT(target, SSL_OP_PRIORITIZE_CHACHA);
931 #endif
932
933 #ifdef SSL_OP_SINGLE_DH_USE
934 NODE_DEFINE_CONSTANT(target, SSL_OP_SINGLE_DH_USE);
935 #endif
936
937 #ifdef SSL_OP_SINGLE_ECDH_USE
938 NODE_DEFINE_CONSTANT(target, SSL_OP_SINGLE_ECDH_USE);
939 #endif
940
941 #ifdef SSL_OP_SSLEAY_080_CLIENT_DH_BUG
942 NODE_DEFINE_CONSTANT(target, SSL_OP_SSLEAY_080_CLIENT_DH_BUG);
943 #endif
944
945 #ifdef SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG
946 NODE_DEFINE_CONSTANT(target, SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG);
947 #endif
948
949 #ifdef SSL_OP_TLS_BLOCK_PADDING_BUG
950 NODE_DEFINE_CONSTANT(target, SSL_OP_TLS_BLOCK_PADDING_BUG);
951 #endif
952
953 #ifdef SSL_OP_TLS_D5_BUG
954 NODE_DEFINE_CONSTANT(target, SSL_OP_TLS_D5_BUG);
955 #endif
956
957 #ifdef SSL_OP_TLS_ROLLBACK_BUG
958 NODE_DEFINE_CONSTANT(target, SSL_OP_TLS_ROLLBACK_BUG);
959 #endif
960
961 # ifndef OPENSSL_NO_ENGINE
962
963 # ifdef ENGINE_METHOD_RSA
964 NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_RSA);
965 # endif
966
967 # ifdef ENGINE_METHOD_DSA
968 NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_DSA);
969 # endif
970
971 # ifdef ENGINE_METHOD_DH
972 NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_DH);
973 # endif
974
975 # ifdef ENGINE_METHOD_RAND
976 NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_RAND);
977 # endif
978
979 # ifdef ENGINE_METHOD_EC
980 NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_EC);
981 # endif
982
983 # ifdef ENGINE_METHOD_CIPHERS
984 NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_CIPHERS);
985 # endif
986
987 # ifdef ENGINE_METHOD_DIGESTS
988 NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_DIGESTS);
989 # endif
990
991 # ifdef ENGINE_METHOD_PKEY_METHS
992 NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_PKEY_METHS);
993 # endif
994
995 # ifdef ENGINE_METHOD_PKEY_ASN1_METHS
996 NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_PKEY_ASN1_METHS);
997 # endif
998
999 # ifdef ENGINE_METHOD_ALL
1000 NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_ALL);
1001 # endif
1002
1003 # ifdef ENGINE_METHOD_NONE
1004 NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_NONE);
1005 # endif
1006
1007 # endif // !OPENSSL_NO_ENGINE
1008
1009 #ifdef DH_CHECK_P_NOT_SAFE_PRIME
1010 NODE_DEFINE_CONSTANT(target, DH_CHECK_P_NOT_SAFE_PRIME);
1011 #endif
1012
1013 #ifdef DH_CHECK_P_NOT_PRIME
1014 NODE_DEFINE_CONSTANT(target, DH_CHECK_P_NOT_PRIME);
1015 #endif
1016
1017 #ifdef DH_UNABLE_TO_CHECK_GENERATOR
1018 NODE_DEFINE_CONSTANT(target, DH_UNABLE_TO_CHECK_GENERATOR);
1019 #endif
1020
1021 #ifdef DH_NOT_SUITABLE_GENERATOR
1022 NODE_DEFINE_CONSTANT(target, DH_NOT_SUITABLE_GENERATOR);
1023 #endif
1024
1025 #ifdef TLSEXT_TYPE_application_layer_protocol_negotiation
1026 #define ALPN_ENABLED 1
1027 NODE_DEFINE_CONSTANT(target, ALPN_ENABLED);
1028 #endif
1029
1030 #ifdef RSA_PKCS1_PADDING
1031 NODE_DEFINE_CONSTANT(target, RSA_PKCS1_PADDING);
1032 #endif
1033
1034 #ifdef RSA_SSLV23_PADDING
1035 NODE_DEFINE_CONSTANT(target, RSA_SSLV23_PADDING);
1036 #endif
1037
1038 #ifdef RSA_NO_PADDING
1039 NODE_DEFINE_CONSTANT(target, RSA_NO_PADDING);
1040 #endif
1041
1042 #ifdef RSA_PKCS1_OAEP_PADDING
1043 NODE_DEFINE_CONSTANT(target, RSA_PKCS1_OAEP_PADDING);
1044 #endif
1045
1046 #ifdef RSA_X931_PADDING
1047 NODE_DEFINE_CONSTANT(target, RSA_X931_PADDING);
1048 #endif
1049
1050 #ifdef RSA_PKCS1_PSS_PADDING
1051 NODE_DEFINE_CONSTANT(target, RSA_PKCS1_PSS_PADDING);
1052 #endif
1053
1054 #ifdef RSA_PSS_SALTLEN_DIGEST
1055 NODE_DEFINE_CONSTANT(target, RSA_PSS_SALTLEN_DIGEST);
1056 #endif
1057
1058 #ifdef RSA_PSS_SALTLEN_MAX_SIGN
1059 NODE_DEFINE_CONSTANT(target, RSA_PSS_SALTLEN_MAX_SIGN);
1060 #endif
1061
1062 #ifdef RSA_PSS_SALTLEN_AUTO
1063 NODE_DEFINE_CONSTANT(target, RSA_PSS_SALTLEN_AUTO);
1064 #endif
1065
1066 #ifdef DEFAULT_CIPHER_LIST_CORE
1067 NODE_DEFINE_STRING_CONSTANT(target,
1068 "defaultCoreCipherList",
1069 DEFAULT_CIPHER_LIST_CORE);
1070 #endif
1071
1072 #ifdef TLS1_VERSION
1073 NODE_DEFINE_CONSTANT(target, TLS1_VERSION);
1074 #endif
1075
1076 #ifdef TLS1_1_VERSION
1077 NODE_DEFINE_CONSTANT(target, TLS1_1_VERSION);
1078 #endif
1079
1080 #ifdef TLS1_2_VERSION
1081 NODE_DEFINE_CONSTANT(target, TLS1_2_VERSION);
1082 #endif
1083
1084 #ifdef TLS1_3_VERSION
1085 NODE_DEFINE_CONSTANT(target, TLS1_3_VERSION);
1086 #endif
1087
1088 #if HAVE_OPENSSL
1089 // NOTE: These are not defines
1090 NODE_DEFINE_CONSTANT(target, POINT_CONVERSION_COMPRESSED);
1091
1092 NODE_DEFINE_CONSTANT(target, POINT_CONVERSION_UNCOMPRESSED);
1093
1094 NODE_DEFINE_CONSTANT(target, POINT_CONVERSION_HYBRID);
1095 #endif
1096 }
1097
DefineSystemConstants(Local<Object> target)1098 void DefineSystemConstants(Local<Object> target) {
1099 NODE_DEFINE_CONSTANT(target, UV_FS_SYMLINK_DIR);
1100 NODE_DEFINE_CONSTANT(target, UV_FS_SYMLINK_JUNCTION);
1101 // file access modes
1102 NODE_DEFINE_CONSTANT(target, O_RDONLY);
1103 NODE_DEFINE_CONSTANT(target, O_WRONLY);
1104 NODE_DEFINE_CONSTANT(target, O_RDWR);
1105
1106 // file types from readdir
1107 NODE_DEFINE_CONSTANT(target, UV_DIRENT_UNKNOWN);
1108 NODE_DEFINE_CONSTANT(target, UV_DIRENT_FILE);
1109 NODE_DEFINE_CONSTANT(target, UV_DIRENT_DIR);
1110 NODE_DEFINE_CONSTANT(target, UV_DIRENT_LINK);
1111 NODE_DEFINE_CONSTANT(target, UV_DIRENT_FIFO);
1112 NODE_DEFINE_CONSTANT(target, UV_DIRENT_SOCKET);
1113 NODE_DEFINE_CONSTANT(target, UV_DIRENT_CHAR);
1114 NODE_DEFINE_CONSTANT(target, UV_DIRENT_BLOCK);
1115
1116 NODE_DEFINE_CONSTANT(target, S_IFMT);
1117 NODE_DEFINE_CONSTANT(target, S_IFREG);
1118 NODE_DEFINE_CONSTANT(target, S_IFDIR);
1119 NODE_DEFINE_CONSTANT(target, S_IFCHR);
1120 #ifdef S_IFBLK
1121 NODE_DEFINE_CONSTANT(target, S_IFBLK);
1122 #endif
1123
1124 #ifdef S_IFIFO
1125 NODE_DEFINE_CONSTANT(target, S_IFIFO);
1126 #endif
1127
1128 #ifdef S_IFLNK
1129 NODE_DEFINE_CONSTANT(target, S_IFLNK);
1130 #endif
1131
1132 #ifdef S_IFSOCK
1133 NODE_DEFINE_CONSTANT(target, S_IFSOCK);
1134 #endif
1135
1136 #ifdef O_CREAT
1137 NODE_DEFINE_CONSTANT(target, O_CREAT);
1138 #endif
1139
1140 #ifdef O_EXCL
1141 NODE_DEFINE_CONSTANT(target, O_EXCL);
1142 #endif
1143
1144 NODE_DEFINE_CONSTANT(target, UV_FS_O_FILEMAP);
1145
1146 #ifdef O_NOCTTY
1147 NODE_DEFINE_CONSTANT(target, O_NOCTTY);
1148 #endif
1149
1150 #ifdef O_TRUNC
1151 NODE_DEFINE_CONSTANT(target, O_TRUNC);
1152 #endif
1153
1154 #ifdef O_APPEND
1155 NODE_DEFINE_CONSTANT(target, O_APPEND);
1156 #endif
1157
1158 #ifdef O_DIRECTORY
1159 NODE_DEFINE_CONSTANT(target, O_DIRECTORY);
1160 #endif
1161
1162 #ifdef O_EXCL
1163 NODE_DEFINE_CONSTANT(target, O_EXCL);
1164 #endif
1165
1166 #ifdef O_NOATIME
1167 NODE_DEFINE_CONSTANT(target, O_NOATIME);
1168 #endif
1169
1170 #ifdef O_NOFOLLOW
1171 NODE_DEFINE_CONSTANT(target, O_NOFOLLOW);
1172 #endif
1173
1174 #ifdef O_SYNC
1175 NODE_DEFINE_CONSTANT(target, O_SYNC);
1176 #endif
1177
1178 #ifdef O_DSYNC
1179 NODE_DEFINE_CONSTANT(target, O_DSYNC);
1180 #endif
1181
1182
1183 #ifdef O_SYMLINK
1184 NODE_DEFINE_CONSTANT(target, O_SYMLINK);
1185 #endif
1186
1187 #ifdef O_DIRECT
1188 NODE_DEFINE_CONSTANT(target, O_DIRECT);
1189 #endif
1190
1191 #ifdef O_NONBLOCK
1192 NODE_DEFINE_CONSTANT(target, O_NONBLOCK);
1193 #endif
1194
1195 #ifdef S_IRWXU
1196 NODE_DEFINE_CONSTANT(target, S_IRWXU);
1197 #endif
1198
1199 #ifdef S_IRUSR
1200 NODE_DEFINE_CONSTANT(target, S_IRUSR);
1201 #endif
1202
1203 #ifdef S_IWUSR
1204 NODE_DEFINE_CONSTANT(target, S_IWUSR);
1205 #endif
1206
1207 #ifdef S_IXUSR
1208 NODE_DEFINE_CONSTANT(target, S_IXUSR);
1209 #endif
1210
1211 #ifdef S_IRWXG
1212 NODE_DEFINE_CONSTANT(target, S_IRWXG);
1213 #endif
1214
1215 #ifdef S_IRGRP
1216 NODE_DEFINE_CONSTANT(target, S_IRGRP);
1217 #endif
1218
1219 #ifdef S_IWGRP
1220 NODE_DEFINE_CONSTANT(target, S_IWGRP);
1221 #endif
1222
1223 #ifdef S_IXGRP
1224 NODE_DEFINE_CONSTANT(target, S_IXGRP);
1225 #endif
1226
1227 #ifdef S_IRWXO
1228 NODE_DEFINE_CONSTANT(target, S_IRWXO);
1229 #endif
1230
1231 #ifdef S_IROTH
1232 NODE_DEFINE_CONSTANT(target, S_IROTH);
1233 #endif
1234
1235 #ifdef S_IWOTH
1236 NODE_DEFINE_CONSTANT(target, S_IWOTH);
1237 #endif
1238
1239 #ifdef S_IXOTH
1240 NODE_DEFINE_CONSTANT(target, S_IXOTH);
1241 #endif
1242
1243 #ifdef F_OK
1244 NODE_DEFINE_CONSTANT(target, F_OK);
1245 #endif
1246
1247 #ifdef R_OK
1248 NODE_DEFINE_CONSTANT(target, R_OK);
1249 #endif
1250
1251 #ifdef W_OK
1252 NODE_DEFINE_CONSTANT(target, W_OK);
1253 #endif
1254
1255 #ifdef X_OK
1256 NODE_DEFINE_CONSTANT(target, X_OK);
1257 #endif
1258
1259 #ifdef UV_FS_COPYFILE_EXCL
1260 # define COPYFILE_EXCL UV_FS_COPYFILE_EXCL
1261 NODE_DEFINE_CONSTANT(target, UV_FS_COPYFILE_EXCL);
1262 NODE_DEFINE_CONSTANT(target, COPYFILE_EXCL);
1263 # undef COPYFILE_EXCL
1264 #endif
1265
1266 #ifdef UV_FS_COPYFILE_FICLONE
1267 # define COPYFILE_FICLONE UV_FS_COPYFILE_FICLONE
1268 NODE_DEFINE_CONSTANT(target, UV_FS_COPYFILE_FICLONE);
1269 NODE_DEFINE_CONSTANT(target, COPYFILE_FICLONE);
1270 # undef COPYFILE_FICLONE
1271 #endif
1272
1273 #ifdef UV_FS_COPYFILE_FICLONE_FORCE
1274 # define COPYFILE_FICLONE_FORCE UV_FS_COPYFILE_FICLONE_FORCE
1275 NODE_DEFINE_CONSTANT(target, UV_FS_COPYFILE_FICLONE_FORCE);
1276 NODE_DEFINE_CONSTANT(target, COPYFILE_FICLONE_FORCE);
1277 # undef COPYFILE_FICLONE_FORCE
1278 #endif
1279 }
1280
DefineDLOpenConstants(Local<Object> target)1281 void DefineDLOpenConstants(Local<Object> target) {
1282 #ifdef RTLD_LAZY
1283 NODE_DEFINE_CONSTANT(target, RTLD_LAZY);
1284 #endif
1285
1286 #ifdef RTLD_NOW
1287 NODE_DEFINE_CONSTANT(target, RTLD_NOW);
1288 #endif
1289
1290 #ifdef RTLD_GLOBAL
1291 NODE_DEFINE_CONSTANT(target, RTLD_GLOBAL);
1292 #endif
1293
1294 #ifdef RTLD_LOCAL
1295 NODE_DEFINE_CONSTANT(target, RTLD_LOCAL);
1296 #endif
1297
1298 #ifdef RTLD_DEEPBIND
1299 NODE_DEFINE_CONSTANT(target, RTLD_DEEPBIND);
1300 #endif
1301 }
1302
DefineTraceConstants(Local<Object> target)1303 void DefineTraceConstants(Local<Object> target) {
1304 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_BEGIN);
1305 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_END);
1306 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_COMPLETE);
1307 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_INSTANT);
1308 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_ASYNC_BEGIN);
1309 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_ASYNC_STEP_INTO);
1310 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_ASYNC_STEP_PAST);
1311 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_ASYNC_END);
1312 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN);
1313 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_NESTABLE_ASYNC_END);
1314 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_NESTABLE_ASYNC_INSTANT);
1315 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_FLOW_BEGIN);
1316 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_FLOW_STEP);
1317 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_FLOW_END);
1318 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_METADATA);
1319 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_COUNTER);
1320 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_SAMPLE);
1321 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_CREATE_OBJECT);
1322 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_SNAPSHOT_OBJECT);
1323 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_DELETE_OBJECT);
1324 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_MEMORY_DUMP);
1325 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_MARK);
1326 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_CLOCK_SYNC);
1327 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_ENTER_CONTEXT);
1328 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_LEAVE_CONTEXT);
1329 NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_LINK_IDS);
1330 }
1331
1332 } // anonymous namespace
1333
DefineConstants(v8::Isolate * isolate,Local<Object> target)1334 void DefineConstants(v8::Isolate* isolate, Local<Object> target) {
1335 Environment* env = Environment::GetCurrent(isolate);
1336
1337 Local<Object> os_constants = Object::New(isolate);
1338 CHECK(os_constants->SetPrototype(env->context(),
1339 Null(env->isolate())).FromJust());
1340
1341 Local<Object> err_constants = Object::New(isolate);
1342 CHECK(err_constants->SetPrototype(env->context(),
1343 Null(env->isolate())).FromJust());
1344
1345 Local<Object> sig_constants = Object::New(isolate);
1346 CHECK(sig_constants->SetPrototype(env->context(),
1347 Null(env->isolate())).FromJust());
1348
1349 Local<Object> priority_constants = Object::New(isolate);
1350 CHECK(priority_constants->SetPrototype(env->context(),
1351 Null(env->isolate())).FromJust());
1352
1353 Local<Object> fs_constants = Object::New(isolate);
1354 CHECK(fs_constants->SetPrototype(env->context(),
1355 Null(env->isolate())).FromJust());
1356
1357 Local<Object> crypto_constants = Object::New(isolate);
1358 CHECK(crypto_constants->SetPrototype(env->context(),
1359 Null(env->isolate())).FromJust());
1360
1361 Local<Object> zlib_constants = Object::New(isolate);
1362 CHECK(zlib_constants->SetPrototype(env->context(),
1363 Null(env->isolate())).FromJust());
1364
1365 Local<Object> dlopen_constants = Object::New(isolate);
1366 CHECK(dlopen_constants->SetPrototype(env->context(),
1367 Null(env->isolate())).FromJust());
1368
1369 Local<Object> trace_constants = Object::New(isolate);
1370 CHECK(trace_constants->SetPrototype(env->context(),
1371 Null(env->isolate())).FromJust());
1372
1373 DefineErrnoConstants(err_constants);
1374 DefineWindowsErrorConstants(err_constants);
1375 DefineSignalConstants(sig_constants);
1376 DefinePriorityConstants(priority_constants);
1377 DefineSystemConstants(fs_constants);
1378 DefineCryptoConstants(crypto_constants);
1379 DefineZlibConstants(zlib_constants);
1380 DefineDLOpenConstants(dlopen_constants);
1381 DefineTraceConstants(trace_constants);
1382
1383 // Define libuv constants.
1384 NODE_DEFINE_CONSTANT(os_constants, UV_UDP_REUSEADDR);
1385
1386 os_constants->Set(env->context(),
1387 OneByteString(isolate, "dlopen"),
1388 dlopen_constants).Check();
1389 os_constants->Set(env->context(),
1390 OneByteString(isolate, "errno"),
1391 err_constants).Check();
1392 os_constants->Set(env->context(),
1393 OneByteString(isolate, "signals"),
1394 sig_constants).Check();
1395 os_constants->Set(env->context(),
1396 OneByteString(isolate, "priority"),
1397 priority_constants).Check();
1398 target->Set(env->context(),
1399 OneByteString(isolate, "os"),
1400 os_constants).Check();
1401 target->Set(env->context(),
1402 OneByteString(isolate, "fs"),
1403 fs_constants).Check();
1404 target->Set(env->context(),
1405 OneByteString(isolate, "crypto"),
1406 crypto_constants).Check();
1407 target->Set(env->context(),
1408 OneByteString(isolate, "zlib"),
1409 zlib_constants).Check();
1410 target->Set(env->context(),
1411 OneByteString(isolate, "trace"),
1412 trace_constants).Check();
1413 }
1414
1415 } // namespace node
1416