forked from LeenkxTeam/LNXSDK
432 lines
13 KiB
Haxe
432 lines
13 KiB
Haxe
/*
|
|
* Copyright (C)2014-2020 Haxe Foundation
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
package js.node;
|
|
|
|
import haxe.extern.EitherType;
|
|
#if haxe4
|
|
import js.lib.Error;
|
|
#else
|
|
import js.Error;
|
|
#end
|
|
|
|
/**
|
|
Enumeration of possible Int `options` values for `Dns.lookup`.
|
|
**/
|
|
@:enum abstract DnsAddressFamily(Int) from Int to Int {
|
|
var IPv4 = 4;
|
|
var IPv6 = 6;
|
|
}
|
|
|
|
/**
|
|
Type of the `options` argument for `Dns.lookup`.
|
|
**/
|
|
typedef DnsLookupOptions = {
|
|
/**
|
|
The record family. If not provided, both IP v4 and v6 addresses are accepted.
|
|
**/
|
|
@:optional var family:DnsAddressFamily;
|
|
|
|
/**
|
|
If present, it should be one or more of the supported `getaddrinfo` flags.
|
|
If hints is not provided, then no flags are passed to `getaddrinfo`.
|
|
Multiple flags can be passed through hints by logically ORing their values.
|
|
**/
|
|
@:optional var hints:Int;
|
|
|
|
/**
|
|
When true, the callback returns all resolved addresses in an array, otherwise returns a single address.
|
|
Defaults to false.
|
|
**/
|
|
@:optional var all:Bool;
|
|
}
|
|
|
|
/**
|
|
Enumeration of possible `rrtype` value for `Dns.resolve`.
|
|
**/
|
|
@:enum abstract DnsRrtype(String) from String to String {
|
|
/**
|
|
IPV4 addresses, default
|
|
**/
|
|
var A = "A";
|
|
|
|
/**
|
|
IPV6 addresses
|
|
**/
|
|
var AAAA = "AAAA";
|
|
|
|
/**
|
|
mail exchange records
|
|
**/
|
|
var MX = "MX";
|
|
|
|
/**
|
|
text records
|
|
**/
|
|
var TXT = "TXT";
|
|
|
|
/**
|
|
SRV records
|
|
**/
|
|
var SRV = "SRV";
|
|
|
|
/**
|
|
used for reverse IP lookups
|
|
**/
|
|
var PTR = "PTR";
|
|
|
|
/**
|
|
name server records
|
|
**/
|
|
var NS = "NS";
|
|
|
|
/**
|
|
canonical name records
|
|
**/
|
|
var CNAME = "CNAME";
|
|
|
|
/**
|
|
start of authority record
|
|
**/
|
|
var SOA = "SOA";
|
|
}
|
|
|
|
/**
|
|
Types of address data returned by `resolve` functions.
|
|
**/
|
|
typedef DnsResolvedAddressMX = {priority:Int, exchange:String};
|
|
|
|
typedef DnsResolvedAddressSRV = {priority:Int, weight:Int, port:Int, name:String};
|
|
typedef DnsResolvedAddressSOA = {nsname:String, hostmaster:String, serial:Int, refresh:Int, retry:Int, expire:Int, minttl:Int};
|
|
typedef DnsResolvedAddress = EitherType<String, EitherType<DnsResolvedAddressMX, EitherType<DnsResolvedAddressSOA, DnsResolvedAddressSRV>>>;
|
|
|
|
/**
|
|
Error objects returned by dns lookups are of this type
|
|
**/
|
|
extern class DnsError extends Error {
|
|
/**
|
|
Values for error codes are listed in `Dns` class.
|
|
**/
|
|
var code(default, null):DnsErrorCode;
|
|
}
|
|
|
|
/**
|
|
Each DNS query can return one of the following error codes
|
|
**/
|
|
@:jsRequire("dns")
|
|
@:enum extern abstract DnsErrorCode(String) {
|
|
/**
|
|
DNS server returned answer with no data.
|
|
**/
|
|
var NODATA;
|
|
|
|
/**
|
|
DNS server claims query was misformatted.
|
|
**/
|
|
var FORMERR;
|
|
|
|
/**
|
|
DNS server returned general failure.
|
|
**/
|
|
var SERVFAIL;
|
|
|
|
/**
|
|
Domain name not found.
|
|
**/
|
|
var NOTFOUND;
|
|
|
|
/**
|
|
DNS server does not implement requested operation.
|
|
**/
|
|
var NOTIMP;
|
|
|
|
/**
|
|
DNS server refused query.
|
|
**/
|
|
var REFUSED;
|
|
|
|
/**
|
|
Misformatted DNS query.
|
|
**/
|
|
var BADQUERY;
|
|
|
|
/**
|
|
Misformatted domain name.
|
|
**/
|
|
var BADNAME;
|
|
|
|
/**
|
|
Unsupported address family.
|
|
**/
|
|
var BADFAMILY;
|
|
|
|
/**
|
|
Misformatted DNS reply.
|
|
**/
|
|
var BADRESP;
|
|
|
|
/**
|
|
Could not contact DNS servers.
|
|
**/
|
|
var CONNREFUSED;
|
|
|
|
/**
|
|
Timeout while contacting DNS servers.
|
|
**/
|
|
var TIMEOUT;
|
|
|
|
/**
|
|
End of file.
|
|
**/
|
|
var EOF;
|
|
|
|
/**
|
|
Error reading file.
|
|
**/
|
|
var FILE;
|
|
|
|
/**
|
|
Out of memory.
|
|
**/
|
|
var NOMEM;
|
|
|
|
/**
|
|
Channel is being destroyed.
|
|
**/
|
|
var DESTRUCTION;
|
|
|
|
/**
|
|
Misformatted string.
|
|
**/
|
|
var BADSTR;
|
|
|
|
/**
|
|
Illegal flags specified.
|
|
**/
|
|
var BADFLAGS;
|
|
|
|
/**
|
|
Given hostname is not numeric.
|
|
**/
|
|
var NONAME;
|
|
|
|
/**
|
|
Illegal hints flags specified.
|
|
**/
|
|
var BADHINTS;
|
|
|
|
/**
|
|
c-ares library initialization not yet performed.
|
|
**/
|
|
var NOTINITIALIZED;
|
|
|
|
/**
|
|
Error loading iphlpapi.dll.
|
|
**/
|
|
var LOADIPHLPAPI;
|
|
|
|
/**
|
|
Could not find GetNetworkParams function.
|
|
**/
|
|
var ADDRGETNETWORKPARAMS;
|
|
|
|
/**
|
|
DNS query cancelled.
|
|
**/
|
|
var CANCELLED;
|
|
}
|
|
|
|
typedef DnsLookupCallbackSingle = #if (haxe_ver >= 4) (err : DnsError, address : String, family : DnsAddressFamily) -> Void; #else DnsError->String->
|
|
DnsAddressFamily->Void #end
|
|
typedef DnsLookupCallbackAll = #if (haxe_ver >= 4) (err : DnsError, addresses : Array<DnsLookupCallbackAllEntry>) -> Void; #else DnsError->
|
|
Array<DnsLookupCallbackAllEntry>->Void; #end
|
|
typedef DnsLookupCallbackAllEntry = {address:String, family:DnsAddressFamily};
|
|
|
|
/**
|
|
This module contains functions that belong to two different categories:
|
|
|
|
1) Functions that use the underlying operating system facilities to perform name resolution,
|
|
and that do not necessarily do any network communication. This category contains only one function: `lookup`.
|
|
Developers looking to perform name resolution in the same way that other applications on the same operating
|
|
system behave should use `lookup`.
|
|
|
|
2) Functions that connect to an actual DNS server to perform name resolution,
|
|
and that always use the network to perform DNS queries. This category contains all functions in the dns module but `lookup`.
|
|
These functions do not use the same set of configuration files than what `lookup` uses. For instance,
|
|
they do not use the configuration from /etc/hosts. These functions should be used by developers who do not want
|
|
to use the underlying operating system's facilities for name resolution, and instead want to always perform DNS queries.
|
|
**/
|
|
@:jsRequire("dns")
|
|
extern class Dns {
|
|
/**
|
|
Resolves a `hostname` (e.g. 'google.com') into the first found A (IPv4) or AAAA (IPv6) record.
|
|
|
|
If `options` is not provided, then IP v4 and v6 addresses are both valid.
|
|
|
|
The `family` can be the integer 4 or 6. Defaults to null that indicates both Ip v4 and v6 address family.
|
|
|
|
The `callback` has arguments (err, address, family).
|
|
The `address` argument is a string representation of a IP v4 or v6 address.
|
|
The `family` argument is either the integer 4 or 6 and denotes the family
|
|
of address (not necessarily the value initially passed to lookup).
|
|
|
|
With the `all` option set, the arguments change to (err, addresses), with addresses being an array of objects
|
|
with the properties `address` and `family`.
|
|
|
|
Keep in mind that `err.code` will be set to 'ENOENT' not only when the hostname does not exist but
|
|
also when the lookup fails in other ways such as no available file descriptors.
|
|
|
|
`lookup` doesn't necessarily have anything to do with the DNS protocol. It's only an operating system facility
|
|
that can associate name with addresses, and vice versa.
|
|
**/
|
|
@:overload(function(hostname:String, options:EitherType<DnsAddressFamily, DnsLookupOptions>,
|
|
callback:EitherType<DnsLookupCallbackSingle, DnsLookupCallbackAll>):Void {})
|
|
static function lookup(hostname:String, callback:DnsLookupCallbackSingle):Void;
|
|
|
|
/**
|
|
A flag passed in the `hints` argument of `lookup` method.
|
|
|
|
Returned address types are determined by the types of addresses supported by the current system.
|
|
For example, IPv4 addresses are only returned if the current system has at least one IPv4 address configured.
|
|
Loopback addresses are not considered.
|
|
**/
|
|
static var ADDRCONFIG(default, null):Int;
|
|
|
|
/**
|
|
A flag passed in the `hints` argument of `lookup` method.
|
|
|
|
If the IPv6 family was specified, but no IPv6 addresses were found, then return IPv4 mapped IPv6 addresses.
|
|
Note that it is not supported on some operating systems (e.g FreeBSD 10.1).
|
|
**/
|
|
static var V4MAPPED(default, null):Int;
|
|
|
|
/**
|
|
Resolves the given `address` and `port` into a hostname and service using `getnameinfo`.
|
|
|
|
The `callback` has arguments (err, hostname, service).
|
|
The `hostname` and `service` arguments are strings (e.g. 'localhost' and 'http' respectively).
|
|
|
|
On error, `err` is an Error object, where `err.code` is the error code.
|
|
**/
|
|
static function lookupService(address:String, port:Int, callback:DnsError->String->String->Void):Void;
|
|
|
|
/**
|
|
Resolves a `hostname` (e.g. 'google.com') into an array of the record types specified by `rrtype`.
|
|
|
|
The `callback` has arguments (err, addresses).
|
|
The type of each item in `addresses` is determined by the record type,
|
|
and described in the documentation for the corresponding lookup methods below.
|
|
|
|
On error, `err` is an Error object, where `err.code` is the error code.
|
|
**/
|
|
@:overload(function(hostname:String, callback:DnsError->Array<DnsResolvedAddress>->Void):Void {})
|
|
static function resolve(hostname:String, rrtype:DnsRrtype, callback:DnsError->Array<DnsResolvedAddress>->Void):Void;
|
|
|
|
/**
|
|
The same as `resolve`, but only for IPv4 queries (A records).
|
|
`addresses` is an array of IPv4 addresses (e.g. ['74.125.79.104', '74.125.79.105', '74.125.79.106']).
|
|
**/
|
|
static function resolve4(hostname:String, callback:DnsError->Array<String>->Void):Void;
|
|
|
|
/**
|
|
The same as `resolve4` except for IPv6 queries (an AAAA query).
|
|
**/
|
|
static function resolve6(hostname:String, callback:DnsError->Array<String>->Void):Void;
|
|
|
|
/**
|
|
The same as `resolve`, but only for mail exchange queries (MX records).
|
|
`addresses` is an array of MX records, each with a priority
|
|
and an exchange attribute (e.g. [{'priority': 10, 'exchange': 'mx.example.com'},...]).
|
|
**/
|
|
static function resolveMx(hostname:String, callback:DnsError->Array<DnsResolvedAddressMX>->Void):Void;
|
|
|
|
/**
|
|
The same as `resolve`, but only for text queries (TXT records).
|
|
`addresses` is a 2-d array of the text records available for hostname (e.g., [ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]).
|
|
Each sub-array contains TXT chunks of one record. Depending on the use case, the could be either joined together
|
|
or treated separately.
|
|
**/
|
|
static function resolveTxt(hostname:String, callback:DnsError->Array<Array<String>>->Void):Void;
|
|
|
|
/**
|
|
The same as `resolve`, but only for service records (SRV records).
|
|
`addresses` is an array of the SRV records available for `hostname`.
|
|
Properties of SRV records are priority, weight, port, and name
|
|
(e.g., [{'priority': 10, 'weight': 5, 'port': 21223, 'name': 'service.example.com'}, ...]).
|
|
**/
|
|
static function resolveSrv(hostname:String, callback:DnsError->Array<DnsResolvedAddressSRV>->Void):Void;
|
|
|
|
/**
|
|
Uses the DNS protocol to resolve pointer records (PTR records) for the `hostname`.
|
|
The addresses argument passed to the callback function will be an array of strings containing the reply records.
|
|
**/
|
|
static function resolvePtr(hostname:String, callback:DnsError->Array<String>->Void):Void;
|
|
|
|
/**
|
|
The same as `resolve`, but only for start of authority record queries (SOA record).
|
|
|
|
`addresses` is an object with the following structure:
|
|
{
|
|
nsname: 'ns.example.com',
|
|
hostmaster: 'root.example.com',
|
|
serial: 2013101809,
|
|
refresh: 10000,
|
|
retry: 2400,
|
|
expire: 604800,
|
|
minttl: 3600
|
|
}
|
|
**/
|
|
static function resolveSoa(hostname:String, callback:DnsError->DnsResolvedAddressSOA->Void):Void;
|
|
|
|
/**
|
|
The same as `resolve`, but only for name server records (NS records).
|
|
`addresses` is an array of the name server records available for hostname (e.g., ['ns1.example.com', 'ns2.example.com']).
|
|
**/
|
|
static function resolveNs(hostname:String, callback:DnsError->Array<String>->Void):Void;
|
|
|
|
/**
|
|
The same as `resolve`, but only for canonical name records (CNAME records).
|
|
`addresses` is an array of the canonical name records available for hostname (e.g., ['bar.example.com']).
|
|
**/
|
|
static function resolveCname(hostname:String, callback:DnsError->Array<String>->Void):Void;
|
|
|
|
/**
|
|
Reverse resolves an `ip` address to an array of hostnames.
|
|
The `callback` has arguments (err, hostname).
|
|
**/
|
|
static function reverse(ip:String, callback:DnsError->Array<String>->Void):Void;
|
|
|
|
/**
|
|
Returns an array of IP addresses as strings that are currently being used for resolution.
|
|
**/
|
|
static function getServers():Array<String>;
|
|
|
|
/**
|
|
Given an array of IP addresses as strings, set them as the servers to use for resolving.
|
|
|
|
If you specify a port with the address it will be stripped, as the underlying library doesn't support that.
|
|
|
|
This will throw if you pass invalid input.
|
|
**/
|
|
static function setServers(servers:Array<String>):Void;
|
|
}
|