// Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to permit // persons to whom the Software is furnished to do so, subject to the // following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. #include "env-inl.h" #include "node_constants.h" #include "node_internals.h" #include "util-inl.h" #include "zlib.h" #if !defined(_MSC_VER) #include #endif #include #include #include #if HAVE_OPENSSL #include #include #ifndef OPENSSL_NO_ENGINE #include #endif // !OPENSSL_NO_ENGINE #endif // HAVE_OPENSSL #if defined(__POSIX__) #include #endif #include #include #include namespace node { using v8::Local; using v8::Object; namespace { void DefineErrnoConstants(Local target) { #ifdef E2BIG NODE_DEFINE_CONSTANT(target, E2BIG); #endif #ifdef EACCES NODE_DEFINE_CONSTANT(target, EACCES); #endif #ifdef EADDRINUSE NODE_DEFINE_CONSTANT(target, EADDRINUSE); #endif #ifdef EADDRNOTAVAIL NODE_DEFINE_CONSTANT(target, EADDRNOTAVAIL); #endif #ifdef EAFNOSUPPORT NODE_DEFINE_CONSTANT(target, EAFNOSUPPORT); #endif #ifdef EAGAIN NODE_DEFINE_CONSTANT(target, EAGAIN); #endif #ifdef EALREADY NODE_DEFINE_CONSTANT(target, EALREADY); #endif #ifdef EBADF NODE_DEFINE_CONSTANT(target, EBADF); #endif #ifdef EBADMSG NODE_DEFINE_CONSTANT(target, EBADMSG); #endif #ifdef EBUSY NODE_DEFINE_CONSTANT(target, EBUSY); #endif #ifdef ECANCELED NODE_DEFINE_CONSTANT(target, ECANCELED); #endif #ifdef ECHILD NODE_DEFINE_CONSTANT(target, ECHILD); #endif #ifdef ECONNABORTED NODE_DEFINE_CONSTANT(target, ECONNABORTED); #endif #ifdef ECONNREFUSED NODE_DEFINE_CONSTANT(target, ECONNREFUSED); #endif #ifdef ECONNRESET NODE_DEFINE_CONSTANT(target, ECONNRESET); #endif #ifdef EDEADLK NODE_DEFINE_CONSTANT(target, EDEADLK); #endif #ifdef EDESTADDRREQ NODE_DEFINE_CONSTANT(target, EDESTADDRREQ); #endif #ifdef EDOM NODE_DEFINE_CONSTANT(target, EDOM); #endif #ifdef EDQUOT NODE_DEFINE_CONSTANT(target, EDQUOT); #endif #ifdef EEXIST NODE_DEFINE_CONSTANT(target, EEXIST); #endif #ifdef EFAULT NODE_DEFINE_CONSTANT(target, EFAULT); #endif #ifdef EFBIG NODE_DEFINE_CONSTANT(target, EFBIG); #endif #ifdef EHOSTUNREACH NODE_DEFINE_CONSTANT(target, EHOSTUNREACH); #endif #ifdef EIDRM NODE_DEFINE_CONSTANT(target, EIDRM); #endif #ifdef EILSEQ NODE_DEFINE_CONSTANT(target, EILSEQ); #endif #ifdef EINPROGRESS NODE_DEFINE_CONSTANT(target, EINPROGRESS); #endif #ifdef EINTR NODE_DEFINE_CONSTANT(target, EINTR); #endif #ifdef EINVAL NODE_DEFINE_CONSTANT(target, EINVAL); #endif #ifdef EIO NODE_DEFINE_CONSTANT(target, EIO); #endif #ifdef EISCONN NODE_DEFINE_CONSTANT(target, EISCONN); #endif #ifdef EISDIR NODE_DEFINE_CONSTANT(target, EISDIR); #endif #ifdef ELOOP NODE_DEFINE_CONSTANT(target, ELOOP); #endif #ifdef EMFILE NODE_DEFINE_CONSTANT(target, EMFILE); #endif #ifdef EMLINK NODE_DEFINE_CONSTANT(target, EMLINK); #endif #ifdef EMSGSIZE NODE_DEFINE_CONSTANT(target, EMSGSIZE); #endif #ifdef EMULTIHOP NODE_DEFINE_CONSTANT(target, EMULTIHOP); #endif #ifdef ENAMETOOLONG NODE_DEFINE_CONSTANT(target, ENAMETOOLONG); #endif #ifdef ENETDOWN NODE_DEFINE_CONSTANT(target, ENETDOWN); #endif #ifdef ENETRESET NODE_DEFINE_CONSTANT(target, ENETRESET); #endif #ifdef ENETUNREACH NODE_DEFINE_CONSTANT(target, ENETUNREACH); #endif #ifdef ENFILE NODE_DEFINE_CONSTANT(target, ENFILE); #endif #ifdef ENOBUFS NODE_DEFINE_CONSTANT(target, ENOBUFS); #endif #ifdef ENODATA NODE_DEFINE_CONSTANT(target, ENODATA); #endif #ifdef ENODEV NODE_DEFINE_CONSTANT(target, ENODEV); #endif #ifdef ENOENT NODE_DEFINE_CONSTANT(target, ENOENT); #endif #ifdef ENOEXEC NODE_DEFINE_CONSTANT(target, ENOEXEC); #endif #ifdef ENOLCK NODE_DEFINE_CONSTANT(target, ENOLCK); #endif #ifdef ENOLINK NODE_DEFINE_CONSTANT(target, ENOLINK); #endif #ifdef ENOMEM NODE_DEFINE_CONSTANT(target, ENOMEM); #endif #ifdef ENOMSG NODE_DEFINE_CONSTANT(target, ENOMSG); #endif #ifdef ENOPROTOOPT NODE_DEFINE_CONSTANT(target, ENOPROTOOPT); #endif #ifdef ENOSPC NODE_DEFINE_CONSTANT(target, ENOSPC); #endif #ifdef ENOSR NODE_DEFINE_CONSTANT(target, ENOSR); #endif #ifdef ENOSTR NODE_DEFINE_CONSTANT(target, ENOSTR); #endif #ifdef ENOSYS NODE_DEFINE_CONSTANT(target, ENOSYS); #endif #ifdef ENOTCONN NODE_DEFINE_CONSTANT(target, ENOTCONN); #endif #ifdef ENOTDIR NODE_DEFINE_CONSTANT(target, ENOTDIR); #endif #ifdef ENOTEMPTY NODE_DEFINE_CONSTANT(target, ENOTEMPTY); #endif #ifdef ENOTSOCK NODE_DEFINE_CONSTANT(target, ENOTSOCK); #endif #ifdef ENOTSUP NODE_DEFINE_CONSTANT(target, ENOTSUP); #endif #ifdef ENOTTY NODE_DEFINE_CONSTANT(target, ENOTTY); #endif #ifdef ENXIO NODE_DEFINE_CONSTANT(target, ENXIO); #endif #ifdef EOPNOTSUPP NODE_DEFINE_CONSTANT(target, EOPNOTSUPP); #endif #ifdef EOVERFLOW NODE_DEFINE_CONSTANT(target, EOVERFLOW); #endif #ifdef EPERM NODE_DEFINE_CONSTANT(target, EPERM); #endif #ifdef EPIPE NODE_DEFINE_CONSTANT(target, EPIPE); #endif #ifdef EPROTO NODE_DEFINE_CONSTANT(target, EPROTO); #endif #ifdef EPROTONOSUPPORT NODE_DEFINE_CONSTANT(target, EPROTONOSUPPORT); #endif #ifdef EPROTOTYPE NODE_DEFINE_CONSTANT(target, EPROTOTYPE); #endif #ifdef ERANGE NODE_DEFINE_CONSTANT(target, ERANGE); #endif #ifdef EROFS NODE_DEFINE_CONSTANT(target, EROFS); #endif #ifdef ESPIPE NODE_DEFINE_CONSTANT(target, ESPIPE); #endif #ifdef ESRCH NODE_DEFINE_CONSTANT(target, ESRCH); #endif #ifdef ESTALE NODE_DEFINE_CONSTANT(target, ESTALE); #endif #ifdef ETIME NODE_DEFINE_CONSTANT(target, ETIME); #endif #ifdef ETIMEDOUT NODE_DEFINE_CONSTANT(target, ETIMEDOUT); #endif #ifdef ETXTBSY NODE_DEFINE_CONSTANT(target, ETXTBSY); #endif #ifdef EWOULDBLOCK NODE_DEFINE_CONSTANT(target, EWOULDBLOCK); #endif #ifdef EXDEV NODE_DEFINE_CONSTANT(target, EXDEV); #endif } void DefineWindowsErrorConstants(Local target) { #ifdef WSAEINTR NODE_DEFINE_CONSTANT(target, WSAEINTR); #endif #ifdef WSAEBADF NODE_DEFINE_CONSTANT(target, WSAEBADF); #endif #ifdef WSAEACCES NODE_DEFINE_CONSTANT(target, WSAEACCES); #endif #ifdef WSAEFAULT NODE_DEFINE_CONSTANT(target, WSAEFAULT); #endif #ifdef WSAEINVAL NODE_DEFINE_CONSTANT(target, WSAEINVAL); #endif #ifdef WSAEMFILE NODE_DEFINE_CONSTANT(target, WSAEMFILE); #endif #ifdef WSAEWOULDBLOCK NODE_DEFINE_CONSTANT(target, WSAEWOULDBLOCK); #endif #ifdef WSAEINPROGRESS NODE_DEFINE_CONSTANT(target, WSAEINPROGRESS); #endif #ifdef WSAEALREADY NODE_DEFINE_CONSTANT(target, WSAEALREADY); #endif #ifdef WSAENOTSOCK NODE_DEFINE_CONSTANT(target, WSAENOTSOCK); #endif #ifdef WSAEDESTADDRREQ NODE_DEFINE_CONSTANT(target, WSAEDESTADDRREQ); #endif #ifdef WSAEMSGSIZE NODE_DEFINE_CONSTANT(target, WSAEMSGSIZE); #endif #ifdef WSAEPROTOTYPE NODE_DEFINE_CONSTANT(target, WSAEPROTOTYPE); #endif #ifdef WSAENOPROTOOPT NODE_DEFINE_CONSTANT(target, WSAENOPROTOOPT); #endif #ifdef WSAEPROTONOSUPPORT NODE_DEFINE_CONSTANT(target, WSAEPROTONOSUPPORT); #endif #ifdef WSAESOCKTNOSUPPORT NODE_DEFINE_CONSTANT(target, WSAESOCKTNOSUPPORT); #endif #ifdef WSAEOPNOTSUPP NODE_DEFINE_CONSTANT(target, WSAEOPNOTSUPP); #endif #ifdef WSAEPFNOSUPPORT NODE_DEFINE_CONSTANT(target, WSAEPFNOSUPPORT); #endif #ifdef WSAEAFNOSUPPORT NODE_DEFINE_CONSTANT(target, WSAEAFNOSUPPORT); #endif #ifdef WSAEADDRINUSE NODE_DEFINE_CONSTANT(target, WSAEADDRINUSE); #endif #ifdef WSAEADDRNOTAVAIL NODE_DEFINE_CONSTANT(target, WSAEADDRNOTAVAIL); #endif #ifdef WSAENETDOWN NODE_DEFINE_CONSTANT(target, WSAENETDOWN); #endif #ifdef WSAENETUNREACH NODE_DEFINE_CONSTANT(target, WSAENETUNREACH); #endif #ifdef WSAENETRESET NODE_DEFINE_CONSTANT(target, WSAENETRESET); #endif #ifdef WSAECONNABORTED NODE_DEFINE_CONSTANT(target, WSAECONNABORTED); #endif #ifdef WSAECONNRESET NODE_DEFINE_CONSTANT(target, WSAECONNRESET); #endif #ifdef WSAENOBUFS NODE_DEFINE_CONSTANT(target, WSAENOBUFS); #endif #ifdef WSAEISCONN NODE_DEFINE_CONSTANT(target, WSAEISCONN); #endif #ifdef WSAENOTCONN NODE_DEFINE_CONSTANT(target, WSAENOTCONN); #endif #ifdef WSAESHUTDOWN NODE_DEFINE_CONSTANT(target, WSAESHUTDOWN); #endif #ifdef WSAETOOMANYREFS NODE_DEFINE_CONSTANT(target, WSAETOOMANYREFS); #endif #ifdef WSAETIMEDOUT NODE_DEFINE_CONSTANT(target, WSAETIMEDOUT); #endif #ifdef WSAECONNREFUSED NODE_DEFINE_CONSTANT(target, WSAECONNREFUSED); #endif #ifdef WSAELOOP NODE_DEFINE_CONSTANT(target, WSAELOOP); #endif #ifdef WSAENAMETOOLONG NODE_DEFINE_CONSTANT(target, WSAENAMETOOLONG); #endif #ifdef WSAEHOSTDOWN NODE_DEFINE_CONSTANT(target, WSAEHOSTDOWN); #endif #ifdef WSAEHOSTUNREACH NODE_DEFINE_CONSTANT(target, WSAEHOSTUNREACH); #endif #ifdef WSAENOTEMPTY NODE_DEFINE_CONSTANT(target, WSAENOTEMPTY); #endif #ifdef WSAEPROCLIM NODE_DEFINE_CONSTANT(target, WSAEPROCLIM); #endif #ifdef WSAEUSERS NODE_DEFINE_CONSTANT(target, WSAEUSERS); #endif #ifdef WSAEDQUOT NODE_DEFINE_CONSTANT(target, WSAEDQUOT); #endif #ifdef WSAESTALE NODE_DEFINE_CONSTANT(target, WSAESTALE); #endif #ifdef WSAEREMOTE NODE_DEFINE_CONSTANT(target, WSAEREMOTE); #endif #ifdef WSASYSNOTREADY NODE_DEFINE_CONSTANT(target, WSASYSNOTREADY); #endif #ifdef WSAVERNOTSUPPORTED NODE_DEFINE_CONSTANT(target, WSAVERNOTSUPPORTED); #endif #ifdef WSANOTINITIALISED NODE_DEFINE_CONSTANT(target, WSANOTINITIALISED); #endif #ifdef WSAEDISCON NODE_DEFINE_CONSTANT(target, WSAEDISCON); #endif #ifdef WSAENOMORE NODE_DEFINE_CONSTANT(target, WSAENOMORE); #endif #ifdef WSAECANCELLED NODE_DEFINE_CONSTANT(target, WSAECANCELLED); #endif #ifdef WSAEINVALIDPROCTABLE NODE_DEFINE_CONSTANT(target, WSAEINVALIDPROCTABLE); #endif #ifdef WSAEINVALIDPROVIDER NODE_DEFINE_CONSTANT(target, WSAEINVALIDPROVIDER); #endif #ifdef WSAEPROVIDERFAILEDINIT NODE_DEFINE_CONSTANT(target, WSAEPROVIDERFAILEDINIT); #endif #ifdef WSASYSCALLFAILURE NODE_DEFINE_CONSTANT(target, WSASYSCALLFAILURE); #endif #ifdef WSASERVICE_NOT_FOUND NODE_DEFINE_CONSTANT(target, WSASERVICE_NOT_FOUND); #endif #ifdef WSATYPE_NOT_FOUND NODE_DEFINE_CONSTANT(target, WSATYPE_NOT_FOUND); #endif #ifdef WSA_E_NO_MORE NODE_DEFINE_CONSTANT(target, WSA_E_NO_MORE); #endif #ifdef WSA_E_CANCELLED NODE_DEFINE_CONSTANT(target, WSA_E_CANCELLED); #endif #ifdef WSAEREFUSED NODE_DEFINE_CONSTANT(target, WSAEREFUSED); #endif } void DefineSignalConstants(Local target) { #ifdef SIGHUP NODE_DEFINE_CONSTANT(target, SIGHUP); #endif #ifdef SIGINT NODE_DEFINE_CONSTANT(target, SIGINT); #endif #ifdef SIGQUIT NODE_DEFINE_CONSTANT(target, SIGQUIT); #endif #ifdef SIGILL NODE_DEFINE_CONSTANT(target, SIGILL); #endif #ifdef SIGTRAP NODE_DEFINE_CONSTANT(target, SIGTRAP); #endif #ifdef SIGABRT NODE_DEFINE_CONSTANT(target, SIGABRT); #endif #ifdef SIGIOT NODE_DEFINE_CONSTANT(target, SIGIOT); #endif #ifdef SIGBUS NODE_DEFINE_CONSTANT(target, SIGBUS); #endif #ifdef SIGFPE NODE_DEFINE_CONSTANT(target, SIGFPE); #endif #ifdef SIGKILL NODE_DEFINE_CONSTANT(target, SIGKILL); #endif #ifdef SIGUSR1 NODE_DEFINE_CONSTANT(target, SIGUSR1); #endif #ifdef SIGSEGV NODE_DEFINE_CONSTANT(target, SIGSEGV); #endif #ifdef SIGUSR2 NODE_DEFINE_CONSTANT(target, SIGUSR2); #endif #ifdef SIGPIPE NODE_DEFINE_CONSTANT(target, SIGPIPE); #endif #ifdef SIGALRM NODE_DEFINE_CONSTANT(target, SIGALRM); #endif NODE_DEFINE_CONSTANT(target, SIGTERM); #ifdef SIGCHLD NODE_DEFINE_CONSTANT(target, SIGCHLD); #endif #ifdef SIGSTKFLT NODE_DEFINE_CONSTANT(target, SIGSTKFLT); #endif #ifdef SIGCONT NODE_DEFINE_CONSTANT(target, SIGCONT); #endif #ifdef SIGSTOP NODE_DEFINE_CONSTANT(target, SIGSTOP); #endif #ifdef SIGTSTP NODE_DEFINE_CONSTANT(target, SIGTSTP); #endif #ifdef SIGBREAK NODE_DEFINE_CONSTANT(target, SIGBREAK); #endif #ifdef SIGTTIN NODE_DEFINE_CONSTANT(target, SIGTTIN); #endif #ifdef SIGTTOU NODE_DEFINE_CONSTANT(target, SIGTTOU); #endif #ifdef SIGURG NODE_DEFINE_CONSTANT(target, SIGURG); #endif #ifdef SIGXCPU NODE_DEFINE_CONSTANT(target, SIGXCPU); #endif #ifdef SIGXFSZ NODE_DEFINE_CONSTANT(target, SIGXFSZ); #endif #ifdef SIGVTALRM NODE_DEFINE_CONSTANT(target, SIGVTALRM); #endif #ifdef SIGPROF NODE_DEFINE_CONSTANT(target, SIGPROF); #endif #ifdef SIGWINCH NODE_DEFINE_CONSTANT(target, SIGWINCH); #endif #ifdef SIGIO NODE_DEFINE_CONSTANT(target, SIGIO); #endif #ifdef SIGPOLL NODE_DEFINE_CONSTANT(target, SIGPOLL); #endif #ifdef SIGLOST NODE_DEFINE_CONSTANT(target, SIGLOST); #endif #ifdef SIGPWR NODE_DEFINE_CONSTANT(target, SIGPWR); #endif #ifdef SIGINFO NODE_DEFINE_CONSTANT(target, SIGINFO); #endif #ifdef SIGSYS NODE_DEFINE_CONSTANT(target, SIGSYS); #endif #ifdef SIGUNUSED NODE_DEFINE_CONSTANT(target, SIGUNUSED); #endif } void DefinePriorityConstants(Local target) { #ifdef UV_PRIORITY_LOW # define PRIORITY_LOW UV_PRIORITY_LOW NODE_DEFINE_CONSTANT(target, PRIORITY_LOW); # undef PRIORITY_LOW #endif #ifdef UV_PRIORITY_BELOW_NORMAL # define PRIORITY_BELOW_NORMAL UV_PRIORITY_BELOW_NORMAL NODE_DEFINE_CONSTANT(target, PRIORITY_BELOW_NORMAL); # undef PRIORITY_BELOW_NORMAL #endif #ifdef UV_PRIORITY_NORMAL # define PRIORITY_NORMAL UV_PRIORITY_NORMAL NODE_DEFINE_CONSTANT(target, PRIORITY_NORMAL); # undef PRIORITY_NORMAL #endif #ifdef UV_PRIORITY_ABOVE_NORMAL # define PRIORITY_ABOVE_NORMAL UV_PRIORITY_ABOVE_NORMAL NODE_DEFINE_CONSTANT(target, PRIORITY_ABOVE_NORMAL); # undef PRIORITY_ABOVE_NORMAL #endif #ifdef UV_PRIORITY_HIGH # define PRIORITY_HIGH UV_PRIORITY_HIGH NODE_DEFINE_CONSTANT(target, PRIORITY_HIGH); # undef PRIORITY_HIGH #endif #ifdef UV_PRIORITY_HIGHEST # define PRIORITY_HIGHEST UV_PRIORITY_HIGHEST NODE_DEFINE_CONSTANT(target, PRIORITY_HIGHEST); # undef PRIORITY_HIGHEST #endif } void DefineCryptoConstants(Local target) { #ifdef OPENSSL_VERSION_NUMBER NODE_DEFINE_CONSTANT(target, OPENSSL_VERSION_NUMBER); #endif #ifdef SSL_OP_ALL NODE_DEFINE_CONSTANT(target, SSL_OP_ALL); #endif #ifdef SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION NODE_DEFINE_CONSTANT(target, SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION); #endif #ifdef SSL_OP_CIPHER_SERVER_PREFERENCE NODE_DEFINE_CONSTANT(target, SSL_OP_CIPHER_SERVER_PREFERENCE); #endif #ifdef SSL_OP_CISCO_ANYCONNECT NODE_DEFINE_CONSTANT(target, SSL_OP_CISCO_ANYCONNECT); #endif #ifdef SSL_OP_COOKIE_EXCHANGE NODE_DEFINE_CONSTANT(target, SSL_OP_COOKIE_EXCHANGE); #endif #ifdef SSL_OP_CRYPTOPRO_TLSEXT_BUG NODE_DEFINE_CONSTANT(target, SSL_OP_CRYPTOPRO_TLSEXT_BUG); #endif #ifdef SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS NODE_DEFINE_CONSTANT(target, SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS); #endif #ifdef SSL_OP_EPHEMERAL_RSA NODE_DEFINE_CONSTANT(target, SSL_OP_EPHEMERAL_RSA); #endif #ifdef SSL_OP_LEGACY_SERVER_CONNECT NODE_DEFINE_CONSTANT(target, SSL_OP_LEGACY_SERVER_CONNECT); #endif #ifdef SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER NODE_DEFINE_CONSTANT(target, SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER); #endif #ifdef SSL_OP_MICROSOFT_SESS_ID_BUG NODE_DEFINE_CONSTANT(target, SSL_OP_MICROSOFT_SESS_ID_BUG); #endif #ifdef SSL_OP_MSIE_SSLV2_RSA_PADDING NODE_DEFINE_CONSTANT(target, SSL_OP_MSIE_SSLV2_RSA_PADDING); #endif #ifdef SSL_OP_NETSCAPE_CA_DN_BUG NODE_DEFINE_CONSTANT(target, SSL_OP_NETSCAPE_CA_DN_BUG); #endif #ifdef SSL_OP_NETSCAPE_CHALLENGE_BUG NODE_DEFINE_CONSTANT(target, SSL_OP_NETSCAPE_CHALLENGE_BUG); #endif #ifdef SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG NODE_DEFINE_CONSTANT(target, SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG); #endif #ifdef SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG NODE_DEFINE_CONSTANT(target, SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG); #endif #ifdef SSL_OP_NO_COMPRESSION NODE_DEFINE_CONSTANT(target, SSL_OP_NO_COMPRESSION); #endif #ifdef SSL_OP_NO_QUERY_MTU NODE_DEFINE_CONSTANT(target, SSL_OP_NO_QUERY_MTU); #endif #ifdef SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION NODE_DEFINE_CONSTANT(target, SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); #endif #ifdef SSL_OP_NO_SSLv2 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_SSLv2); #endif #ifdef SSL_OP_NO_SSLv3 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_SSLv3); #endif #ifdef SSL_OP_NO_TICKET NODE_DEFINE_CONSTANT(target, SSL_OP_NO_TICKET); #endif #ifdef SSL_OP_NO_TLSv1 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_TLSv1); #endif #ifdef SSL_OP_NO_TLSv1_1 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_TLSv1_1); #endif #ifdef SSL_OP_NO_TLSv1_2 NODE_DEFINE_CONSTANT(target, SSL_OP_NO_TLSv1_2); #endif #ifdef SSL_OP_PKCS1_CHECK_1 NODE_DEFINE_CONSTANT(target, SSL_OP_PKCS1_CHECK_1); #endif #ifdef SSL_OP_PKCS1_CHECK_2 NODE_DEFINE_CONSTANT(target, SSL_OP_PKCS1_CHECK_2); #endif #ifdef SSL_OP_SINGLE_DH_USE NODE_DEFINE_CONSTANT(target, SSL_OP_SINGLE_DH_USE); #endif #ifdef SSL_OP_SINGLE_ECDH_USE NODE_DEFINE_CONSTANT(target, SSL_OP_SINGLE_ECDH_USE); #endif #ifdef SSL_OP_SSLEAY_080_CLIENT_DH_BUG NODE_DEFINE_CONSTANT(target, SSL_OP_SSLEAY_080_CLIENT_DH_BUG); #endif #ifdef SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG NODE_DEFINE_CONSTANT(target, SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG); #endif #ifdef SSL_OP_TLS_BLOCK_PADDING_BUG NODE_DEFINE_CONSTANT(target, SSL_OP_TLS_BLOCK_PADDING_BUG); #endif #ifdef SSL_OP_TLS_D5_BUG NODE_DEFINE_CONSTANT(target, SSL_OP_TLS_D5_BUG); #endif #ifdef SSL_OP_TLS_ROLLBACK_BUG NODE_DEFINE_CONSTANT(target, SSL_OP_TLS_ROLLBACK_BUG); #endif # ifndef OPENSSL_NO_ENGINE # ifdef ENGINE_METHOD_RSA NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_RSA); # endif # ifdef ENGINE_METHOD_DSA NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_DSA); # endif # ifdef ENGINE_METHOD_DH NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_DH); # endif # ifdef ENGINE_METHOD_RAND NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_RAND); # endif # ifdef ENGINE_METHOD_EC NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_EC); # endif # ifdef ENGINE_METHOD_CIPHERS NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_CIPHERS); # endif # ifdef ENGINE_METHOD_DIGESTS NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_DIGESTS); # endif # ifdef ENGINE_METHOD_PKEY_METHS NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_PKEY_METHS); # endif # ifdef ENGINE_METHOD_PKEY_ASN1_METHS NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_PKEY_ASN1_METHS); # endif # ifdef ENGINE_METHOD_ALL NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_ALL); # endif # ifdef ENGINE_METHOD_NONE NODE_DEFINE_CONSTANT(target, ENGINE_METHOD_NONE); # endif # endif // !OPENSSL_NO_ENGINE #ifdef DH_CHECK_P_NOT_SAFE_PRIME NODE_DEFINE_CONSTANT(target, DH_CHECK_P_NOT_SAFE_PRIME); #endif #ifdef DH_CHECK_P_NOT_PRIME NODE_DEFINE_CONSTANT(target, DH_CHECK_P_NOT_PRIME); #endif #ifdef DH_UNABLE_TO_CHECK_GENERATOR NODE_DEFINE_CONSTANT(target, DH_UNABLE_TO_CHECK_GENERATOR); #endif #ifdef DH_NOT_SUITABLE_GENERATOR NODE_DEFINE_CONSTANT(target, DH_NOT_SUITABLE_GENERATOR); #endif #ifdef TLSEXT_TYPE_application_layer_protocol_negotiation #define ALPN_ENABLED 1 NODE_DEFINE_CONSTANT(target, ALPN_ENABLED); #endif #ifdef RSA_PKCS1_PADDING NODE_DEFINE_CONSTANT(target, RSA_PKCS1_PADDING); #endif #ifdef RSA_SSLV23_PADDING NODE_DEFINE_CONSTANT(target, RSA_SSLV23_PADDING); #endif #ifdef RSA_NO_PADDING NODE_DEFINE_CONSTANT(target, RSA_NO_PADDING); #endif #ifdef RSA_PKCS1_OAEP_PADDING NODE_DEFINE_CONSTANT(target, RSA_PKCS1_OAEP_PADDING); #endif #ifdef RSA_X931_PADDING NODE_DEFINE_CONSTANT(target, RSA_X931_PADDING); #endif #ifdef RSA_PKCS1_PSS_PADDING NODE_DEFINE_CONSTANT(target, RSA_PKCS1_PSS_PADDING); #endif #ifdef RSA_PSS_SALTLEN_DIGEST NODE_DEFINE_CONSTANT(target, RSA_PSS_SALTLEN_DIGEST); #endif #ifdef RSA_PSS_SALTLEN_MAX_SIGN NODE_DEFINE_CONSTANT(target, RSA_PSS_SALTLEN_MAX_SIGN); #endif #ifdef RSA_PSS_SALTLEN_AUTO NODE_DEFINE_CONSTANT(target, RSA_PSS_SALTLEN_AUTO); #endif #ifdef DEFAULT_CIPHER_LIST_CORE NODE_DEFINE_STRING_CONSTANT(target, "defaultCoreCipherList", DEFAULT_CIPHER_LIST_CORE); #endif #ifdef TLS1_VERSION NODE_DEFINE_CONSTANT(target, TLS1_VERSION); #endif #ifdef TLS1_1_VERSION NODE_DEFINE_CONSTANT(target, TLS1_1_VERSION); #endif #ifdef TLS1_2_VERSION NODE_DEFINE_CONSTANT(target, TLS1_2_VERSION); #endif #ifdef TLS1_3_VERSION NODE_DEFINE_CONSTANT(target, TLS1_3_VERSION); #endif #if HAVE_OPENSSL // NOTE: These are not defines NODE_DEFINE_CONSTANT(target, POINT_CONVERSION_COMPRESSED); NODE_DEFINE_CONSTANT(target, POINT_CONVERSION_UNCOMPRESSED); NODE_DEFINE_CONSTANT(target, POINT_CONVERSION_HYBRID); NODE_DEFINE_STRING_CONSTANT( target, "defaultCipherList", per_process::cli_options->tls_cipher_list.c_str()); #endif } void DefineSystemConstants(Local target) { NODE_DEFINE_CONSTANT(target, UV_FS_SYMLINK_DIR); NODE_DEFINE_CONSTANT(target, UV_FS_SYMLINK_JUNCTION); // file access modes NODE_DEFINE_CONSTANT(target, O_RDONLY); NODE_DEFINE_CONSTANT(target, O_WRONLY); NODE_DEFINE_CONSTANT(target, O_RDWR); // file types from readdir NODE_DEFINE_CONSTANT(target, UV_DIRENT_UNKNOWN); NODE_DEFINE_CONSTANT(target, UV_DIRENT_FILE); NODE_DEFINE_CONSTANT(target, UV_DIRENT_DIR); NODE_DEFINE_CONSTANT(target, UV_DIRENT_LINK); NODE_DEFINE_CONSTANT(target, UV_DIRENT_FIFO); NODE_DEFINE_CONSTANT(target, UV_DIRENT_SOCKET); NODE_DEFINE_CONSTANT(target, UV_DIRENT_CHAR); NODE_DEFINE_CONSTANT(target, UV_DIRENT_BLOCK); NODE_DEFINE_CONSTANT(target, S_IFMT); NODE_DEFINE_CONSTANT(target, S_IFREG); NODE_DEFINE_CONSTANT(target, S_IFDIR); NODE_DEFINE_CONSTANT(target, S_IFCHR); #ifdef S_IFBLK NODE_DEFINE_CONSTANT(target, S_IFBLK); #endif #ifdef S_IFIFO NODE_DEFINE_CONSTANT(target, S_IFIFO); #endif #ifdef S_IFLNK NODE_DEFINE_CONSTANT(target, S_IFLNK); #endif #ifdef S_IFSOCK NODE_DEFINE_CONSTANT(target, S_IFSOCK); #endif #ifdef O_CREAT NODE_DEFINE_CONSTANT(target, O_CREAT); #endif #ifdef O_EXCL NODE_DEFINE_CONSTANT(target, O_EXCL); #endif NODE_DEFINE_CONSTANT(target, UV_FS_O_FILEMAP); #ifdef O_NOCTTY NODE_DEFINE_CONSTANT(target, O_NOCTTY); #endif #ifdef O_TRUNC NODE_DEFINE_CONSTANT(target, O_TRUNC); #endif #ifdef O_APPEND NODE_DEFINE_CONSTANT(target, O_APPEND); #endif #ifdef O_DIRECTORY NODE_DEFINE_CONSTANT(target, O_DIRECTORY); #endif #ifdef O_EXCL NODE_DEFINE_CONSTANT(target, O_EXCL); #endif #ifdef O_NOATIME NODE_DEFINE_CONSTANT(target, O_NOATIME); #endif #ifdef O_NOFOLLOW NODE_DEFINE_CONSTANT(target, O_NOFOLLOW); #endif #ifdef O_SYNC NODE_DEFINE_CONSTANT(target, O_SYNC); #endif #ifdef O_DSYNC NODE_DEFINE_CONSTANT(target, O_DSYNC); #endif #ifdef O_SYMLINK NODE_DEFINE_CONSTANT(target, O_SYMLINK); #endif #ifdef O_DIRECT NODE_DEFINE_CONSTANT(target, O_DIRECT); #endif #ifdef O_NONBLOCK NODE_DEFINE_CONSTANT(target, O_NONBLOCK); #endif #ifdef S_IRWXU NODE_DEFINE_CONSTANT(target, S_IRWXU); #endif #ifdef S_IRUSR NODE_DEFINE_CONSTANT(target, S_IRUSR); #endif #ifdef S_IWUSR NODE_DEFINE_CONSTANT(target, S_IWUSR); #endif #ifdef S_IXUSR NODE_DEFINE_CONSTANT(target, S_IXUSR); #endif #ifdef S_IRWXG NODE_DEFINE_CONSTANT(target, S_IRWXG); #endif #ifdef S_IRGRP NODE_DEFINE_CONSTANT(target, S_IRGRP); #endif #ifdef S_IWGRP NODE_DEFINE_CONSTANT(target, S_IWGRP); #endif #ifdef S_IXGRP NODE_DEFINE_CONSTANT(target, S_IXGRP); #endif #ifdef S_IRWXO NODE_DEFINE_CONSTANT(target, S_IRWXO); #endif #ifdef S_IROTH NODE_DEFINE_CONSTANT(target, S_IROTH); #endif #ifdef S_IWOTH NODE_DEFINE_CONSTANT(target, S_IWOTH); #endif #ifdef S_IXOTH NODE_DEFINE_CONSTANT(target, S_IXOTH); #endif #ifdef F_OK NODE_DEFINE_CONSTANT(target, F_OK); #endif #ifdef R_OK NODE_DEFINE_CONSTANT(target, R_OK); #endif #ifdef W_OK NODE_DEFINE_CONSTANT(target, W_OK); #endif #ifdef X_OK NODE_DEFINE_CONSTANT(target, X_OK); #endif #ifdef UV_FS_COPYFILE_EXCL # define COPYFILE_EXCL UV_FS_COPYFILE_EXCL NODE_DEFINE_CONSTANT(target, UV_FS_COPYFILE_EXCL); NODE_DEFINE_CONSTANT(target, COPYFILE_EXCL); # undef COPYFILE_EXCL #endif #ifdef UV_FS_COPYFILE_FICLONE # define COPYFILE_FICLONE UV_FS_COPYFILE_FICLONE NODE_DEFINE_CONSTANT(target, UV_FS_COPYFILE_FICLONE); NODE_DEFINE_CONSTANT(target, COPYFILE_FICLONE); # undef COPYFILE_FICLONE #endif #ifdef UV_FS_COPYFILE_FICLONE_FORCE # define COPYFILE_FICLONE_FORCE UV_FS_COPYFILE_FICLONE_FORCE NODE_DEFINE_CONSTANT(target, UV_FS_COPYFILE_FICLONE_FORCE); NODE_DEFINE_CONSTANT(target, COPYFILE_FICLONE_FORCE); # undef COPYFILE_FICLONE_FORCE #endif } void DefineDLOpenConstants(Local target) { #ifdef RTLD_LAZY NODE_DEFINE_CONSTANT(target, RTLD_LAZY); #endif #ifdef RTLD_NOW NODE_DEFINE_CONSTANT(target, RTLD_NOW); #endif #ifdef RTLD_GLOBAL NODE_DEFINE_CONSTANT(target, RTLD_GLOBAL); #endif #ifdef RTLD_LOCAL NODE_DEFINE_CONSTANT(target, RTLD_LOCAL); #endif #ifdef RTLD_DEEPBIND NODE_DEFINE_CONSTANT(target, RTLD_DEEPBIND); #endif } void DefineTraceConstants(Local target) { NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_BEGIN); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_END); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_COMPLETE); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_INSTANT); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_ASYNC_BEGIN); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_ASYNC_STEP_INTO); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_ASYNC_STEP_PAST); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_ASYNC_END); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_NESTABLE_ASYNC_END); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_NESTABLE_ASYNC_INSTANT); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_FLOW_BEGIN); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_FLOW_STEP); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_FLOW_END); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_METADATA); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_COUNTER); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_SAMPLE); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_CREATE_OBJECT); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_SNAPSHOT_OBJECT); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_DELETE_OBJECT); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_MEMORY_DUMP); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_MARK); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_CLOCK_SYNC); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_ENTER_CONTEXT); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_LEAVE_CONTEXT); NODE_DEFINE_CONSTANT(target, TRACE_EVENT_PHASE_LINK_IDS); } } // anonymous namespace void DefineConstants(v8::Isolate* isolate, Local target) { Environment* env = Environment::GetCurrent(isolate); Local os_constants = Object::New(isolate); CHECK(os_constants->SetPrototype(env->context(), Null(env->isolate())).FromJust()); Local err_constants = Object::New(isolate); CHECK(err_constants->SetPrototype(env->context(), Null(env->isolate())).FromJust()); Local sig_constants = Object::New(isolate); CHECK(sig_constants->SetPrototype(env->context(), Null(env->isolate())).FromJust()); Local priority_constants = Object::New(isolate); CHECK(priority_constants->SetPrototype(env->context(), Null(env->isolate())).FromJust()); Local fs_constants = Object::New(isolate); CHECK(fs_constants->SetPrototype(env->context(), Null(env->isolate())).FromJust()); Local crypto_constants = Object::New(isolate); CHECK(crypto_constants->SetPrototype(env->context(), Null(env->isolate())).FromJust()); Local zlib_constants = Object::New(isolate); CHECK(zlib_constants->SetPrototype(env->context(), Null(env->isolate())).FromJust()); Local dlopen_constants = Object::New(isolate); CHECK(dlopen_constants->SetPrototype(env->context(), Null(env->isolate())).FromJust()); Local trace_constants = Object::New(isolate); CHECK(trace_constants->SetPrototype(env->context(), Null(env->isolate())).FromJust()); DefineErrnoConstants(err_constants); DefineWindowsErrorConstants(err_constants); DefineSignalConstants(sig_constants); DefinePriorityConstants(priority_constants); DefineSystemConstants(fs_constants); DefineCryptoConstants(crypto_constants); DefineZlibConstants(zlib_constants); DefineDLOpenConstants(dlopen_constants); DefineTraceConstants(trace_constants); // Define libuv constants. NODE_DEFINE_CONSTANT(os_constants, UV_UDP_REUSEADDR); os_constants->Set(env->context(), OneByteString(isolate, "dlopen"), dlopen_constants).Check(); os_constants->Set(env->context(), OneByteString(isolate, "errno"), err_constants).Check(); os_constants->Set(env->context(), OneByteString(isolate, "signals"), sig_constants).Check(); os_constants->Set(env->context(), OneByteString(isolate, "priority"), priority_constants).Check(); target->Set(env->context(), OneByteString(isolate, "os"), os_constants).Check(); target->Set(env->context(), OneByteString(isolate, "fs"), fs_constants).Check(); target->Set(env->context(), OneByteString(isolate, "crypto"), crypto_constants).Check(); target->Set(env->context(), OneByteString(isolate, "zlib"), zlib_constants).Check(); target->Set(env->context(), OneByteString(isolate, "trace"), trace_constants).Check(); } } // namespace node