mirror of
https://github.com/nodejs/node.git
synced 2026-11-09 15:11:11 -05:00
This introduces TLS1.3 support and makes it the default max protocol,
but also supports CLI/NODE_OPTIONS switches to disable it if necessary.
TLS1.3 is a major update to the TLS protocol, with many security
enhancements. It should be preferred over TLS1.2 whenever possible.
TLS1.3 is different enough that even though the OpenSSL APIs are
technically API/ABI compatible, that when TLS1.3 is negotiated, the
timing of protocol records and of callbacks broke assumptions hard-coded
into the 'tls' module.
This change introduces no API incompatibilities when TLS1.2 is
negotiated. It is the intention that it be backported to current and LTS
release lines with the default maximum TLS protocol reset to 'TLSv1.2'.
This will allow users of those lines to explicitly enable TLS1.3 if they
want.
API incompatibilities between TLS1.2 and TLS1.3 are:
- Renegotiation is not supported by TLS1.3 protocol, attempts to call
`.renegotiate()` will always fail.
- Compiling against a system OpenSSL lower than 1.1.1 is no longer
supported (OpenSSL-1.1.0 used to be supported with configure flags).
- Variations of `conn.write('data'); conn.destroy()` have undefined
behaviour according to the streams API. They may or may not send the
'data', and may or may not cause a ERR_STREAM_DESTROYED error to be
emitted. This has always been true, but conditions under which the write
suceeds is slightly but observably different when TLS1.3 is negotiated
vs when TLS1.2 or below is negotiated.
- If TLS1.3 is negotiated, and a server calls `conn.end()` in its
'secureConnection' listener without any data being written, the client
will not receive session tickets (no 'session' events will be emitted,
and `conn.getSession()` will never return a resumable session).
- The return value of `conn.getSession()` API may not return a resumable
session if called right after the handshake. The effect will be that
clients using the legacy `getSession()` API will resume sessions if
TLS1.2 is negotiated, but will do full handshakes if TLS1.3 is
negotiated. See https://github.com/nodejs/node/pull/25831 for more
information.
PR-URL: https://github.com/nodejs/node/pull/26209
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Rod Vagg <rod@vagg.org>
1389 lines
30 KiB
C++
1389 lines
30 KiB
C++
// 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 "node_constants.h"
|
|
#include "node_internals.h"
|
|
|
|
#include "zlib.h"
|
|
|
|
#if !defined(_MSC_VER)
|
|
#include <unistd.h>
|
|
#endif
|
|
|
|
#include <fcntl.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
|
|
|
|
#if HAVE_OPENSSL
|
|
#include <openssl/ec.h>
|
|
#include <openssl/ssl.h>
|
|
#ifndef OPENSSL_NO_ENGINE
|
|
#include <openssl/engine.h>
|
|
#endif // !OPENSSL_NO_ENGINE
|
|
#endif // HAVE_OPENSSL
|
|
|
|
#if defined(__POSIX__)
|
|
#include <dlfcn.h>
|
|
#endif
|
|
|
|
#include <cerrno>
|
|
#include <csignal>
|
|
#include <limits>
|
|
|
|
namespace node {
|
|
|
|
using v8::Local;
|
|
using v8::Object;
|
|
|
|
namespace {
|
|
|
|
void DefineErrnoConstants(Local<Object> 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<Object> 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<Object> 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<Object> 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 DefineOpenSSLConstants(Local<Object> 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
|
|
|
|
#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);
|
|
#endif
|
|
}
|
|
|
|
void DefineSystemConstants(Local<Object> 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
|
|
|
|
#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 DefineCryptoConstants(Local<Object> target) {
|
|
#if HAVE_OPENSSL
|
|
NODE_DEFINE_STRING_CONSTANT(target,
|
|
"defaultCoreCipherList",
|
|
DEFAULT_CIPHER_LIST_CORE);
|
|
NODE_DEFINE_STRING_CONSTANT(
|
|
target,
|
|
"defaultCipherList",
|
|
per_process::cli_options->tls_cipher_list.c_str());
|
|
|
|
NODE_DEFINE_CONSTANT(target, TLS1_VERSION);
|
|
NODE_DEFINE_CONSTANT(target, TLS1_1_VERSION);
|
|
NODE_DEFINE_CONSTANT(target, TLS1_2_VERSION);
|
|
NODE_DEFINE_CONSTANT(target, TLS1_3_VERSION);
|
|
#endif
|
|
NODE_DEFINE_CONSTANT(target, INT_MAX);
|
|
}
|
|
|
|
void DefineDLOpenConstants(Local<Object> 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<Object> 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<Object> target) {
|
|
Environment* env = Environment::GetCurrent(isolate);
|
|
|
|
Local<Object> os_constants = Object::New(isolate);
|
|
CHECK(os_constants->SetPrototype(env->context(),
|
|
Null(env->isolate())).FromJust());
|
|
|
|
Local<Object> err_constants = Object::New(isolate);
|
|
CHECK(err_constants->SetPrototype(env->context(),
|
|
Null(env->isolate())).FromJust());
|
|
|
|
Local<Object> sig_constants = Object::New(isolate);
|
|
CHECK(sig_constants->SetPrototype(env->context(),
|
|
Null(env->isolate())).FromJust());
|
|
|
|
Local<Object> priority_constants = Object::New(isolate);
|
|
CHECK(priority_constants->SetPrototype(env->context(),
|
|
Null(env->isolate())).FromJust());
|
|
|
|
Local<Object> fs_constants = Object::New(isolate);
|
|
CHECK(fs_constants->SetPrototype(env->context(),
|
|
Null(env->isolate())).FromJust());
|
|
|
|
Local<Object> crypto_constants = Object::New(isolate);
|
|
CHECK(crypto_constants->SetPrototype(env->context(),
|
|
Null(env->isolate())).FromJust());
|
|
|
|
Local<Object> zlib_constants = Object::New(isolate);
|
|
CHECK(zlib_constants->SetPrototype(env->context(),
|
|
Null(env->isolate())).FromJust());
|
|
|
|
Local<Object> dlopen_constants = Object::New(isolate);
|
|
CHECK(dlopen_constants->SetPrototype(env->context(),
|
|
Null(env->isolate())).FromJust());
|
|
|
|
Local<Object> 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);
|
|
DefineOpenSSLConstants(crypto_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).FromJust();
|
|
os_constants->Set(env->context(),
|
|
OneByteString(isolate, "errno"),
|
|
err_constants).FromJust();
|
|
os_constants->Set(env->context(),
|
|
OneByteString(isolate, "signals"),
|
|
sig_constants).FromJust();
|
|
os_constants->Set(env->context(),
|
|
OneByteString(isolate, "priority"),
|
|
priority_constants).FromJust();
|
|
target->Set(env->context(),
|
|
OneByteString(isolate, "os"),
|
|
os_constants).FromJust();
|
|
target->Set(env->context(),
|
|
OneByteString(isolate, "fs"),
|
|
fs_constants).FromJust();
|
|
target->Set(env->context(),
|
|
OneByteString(isolate, "crypto"),
|
|
crypto_constants).FromJust();
|
|
target->Set(env->context(),
|
|
OneByteString(isolate, "zlib"),
|
|
zlib_constants).FromJust();
|
|
target->Set(env->context(),
|
|
OneByteString(isolate, "trace"),
|
|
trace_constants).FromJust();
|
|
}
|
|
|
|
} // namespace node
|