205 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			205 lines
		
	
	
		
			8.6 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.http;
 | 
						|
 | 
						|
import js.node.Buffer;
 | 
						|
import js.node.events.EventEmitter.Event;
 | 
						|
import js.node.net.Socket;
 | 
						|
#if haxe4
 | 
						|
import js.lib.Error;
 | 
						|
#else
 | 
						|
import js.Error;
 | 
						|
#end
 | 
						|
 | 
						|
/**
 | 
						|
	Enumeration of events emitted by `http.Server` class in addition to
 | 
						|
	its parent `net.Server` class.
 | 
						|
**/
 | 
						|
@:enum abstract ServerEvent<T:haxe.Constraints.Function>(Event<T>) to Event<T> {
 | 
						|
	/**
 | 
						|
		Emitted each time a request with an HTTP Expect: `100-continue` is received.
 | 
						|
		If this event is not listened for, the server will automatically respond with a `100 Continue` as appropriate.
 | 
						|
 | 
						|
		Handling this event involves calling `response.writeContinue` if the client should continue
 | 
						|
		to send the request body, or generating an appropriate HTTP response (e.g. 400 Bad Request) if the client
 | 
						|
		should not continue to send the request body.
 | 
						|
 | 
						|
		When this event is emitted and handled, the 'request' event will not be emitted.
 | 
						|
	**/
 | 
						|
	#if haxe4
 | 
						|
	var CheckContinue:ServerEvent<(request:IncomingMessage, response:ServerResponse) -> Void> = "checkContinue";
 | 
						|
	#else
 | 
						|
	var CheckContinue:ServerEvent<IncomingMessage->ServerResponse->Void> = "checkContinue";
 | 
						|
	#end
 | 
						|
 | 
						|
	/**
 | 
						|
		Emitted each time a request with an HTTP `Expect` header is received, where the value is not `100-continue`.
 | 
						|
		If this event is not listened for, the server will automatically respond with a `417 Expectation Failed` as appropriate.
 | 
						|
 | 
						|
		When this event is emitted and handled, the `'request'` event will not be emitted.
 | 
						|
	**/
 | 
						|
	#if haxe4
 | 
						|
	var CheckExpectation:ServerEvent<(request:IncomingMessage, response:ServerResponse) -> Void> = "checkExpectation";
 | 
						|
	#else
 | 
						|
	var CheckExpectation:ServerEvent<IncomingMessage->ServerResponse->Void> = "checkExpectation";
 | 
						|
	#end
 | 
						|
 | 
						|
	/**
 | 
						|
		If a client connection emits an `'error'` event, it will be forwarded here.
 | 
						|
		Listener of this event is responsible for closing/destroying the underlying socket.
 | 
						|
		For example, one may wish to more gracefully close the socket with a custom HTTP response instead of abruptly severing the connection.
 | 
						|
 | 
						|
		Default behavior is to try close the socket with a HTTP '400 Bad Request', or a HTTP '431 Request Header Fields Too Large'
 | 
						|
		in the case of a `HPE_HEADER_OVERFLOW` error. If the socket is not writable it is immediately destroyed.
 | 
						|
	**/
 | 
						|
	#if haxe4
 | 
						|
	var ClientError:ServerEvent<(exception:Error, socket:Socket) -> Void> = "clientError";
 | 
						|
	#else
 | 
						|
	var ClientError:ServerEvent<Error->Socket->Void> = "clientError";
 | 
						|
	#end
 | 
						|
 | 
						|
	/**
 | 
						|
		Emitted when the server closes.
 | 
						|
	**/
 | 
						|
	var Close:ServerEvent<Void->Void> = "close";
 | 
						|
 | 
						|
	/**
 | 
						|
		Emitted each time a client requests an HTTP `CONNECT` method.
 | 
						|
		If this event is not listened for, then clients requesting a `CONNECT` method will have their connections closed.
 | 
						|
 | 
						|
		After this event is emitted, the request's socket will not have a `'data'` event listener,
 | 
						|
		meaning it will need to be bound in order to handle data sent to the server on that socket.
 | 
						|
	**/
 | 
						|
	#if haxe4
 | 
						|
	var Connect:ServerEvent<(request:IncomingMessage, socekt:Socket, head:Buffer) -> Void> = "connect";
 | 
						|
	#else
 | 
						|
	var Connect:ServerEvent<IncomingMessage->Socket->Buffer->Void> = "connect";
 | 
						|
	#end
 | 
						|
 | 
						|
	/**
 | 
						|
		This event is emitted when a new TCP stream is established.
 | 
						|
		`socket` is typically an object of type net.Socket. Usually users will not want to access this event.
 | 
						|
		In particular, the socket will not emit `'readable'` events because of how the protocol parser attaches to the socket.
 | 
						|
		The `socket` can also be accessed at `request.connection`.
 | 
						|
 | 
						|
		This event can also be explicitly emitted by users to inject connections into the HTTP server. In that case,
 | 
						|
		any `Duplex` stream can be passed.
 | 
						|
 | 
						|
		If `socket.setTimeout()` is called here, the timeout will be replaced with `server.keepAliveTimeout`
 | 
						|
		when the socket has served a request (if `server.keepAliveTimeout` is non-zero).
 | 
						|
	**/
 | 
						|
	var Connection:ServerEvent<Socket->Void> = "connection";
 | 
						|
 | 
						|
	/**
 | 
						|
		Emitted each time there is a request.
 | 
						|
		There may be multiple requests per connection (in the case of HTTP Keep-Alive connections).
 | 
						|
	**/
 | 
						|
	#if haxe4
 | 
						|
	var Request:ServerEvent<(request:IncomingMessage, response:ServerResponse) -> Void> = "request";
 | 
						|
	#else
 | 
						|
	var Request:ServerEvent<IncomingMessage->ServerResponse->Void> = "request";
 | 
						|
	#end
 | 
						|
 | 
						|
	/**
 | 
						|
		Emitted each time a client requests an HTTP upgrade.
 | 
						|
		Listening to this event is optional and clients cannot insist on a protocol change.
 | 
						|
 | 
						|
		After this event is emitted, the request's socket will not have a `'data'` event listener,
 | 
						|
		meaning it will need to be bound in order to handle data sent to the server on that socket.
 | 
						|
	**/
 | 
						|
	#if haxe4
 | 
						|
	var Upgrade:ServerEvent<(request:IncomingMessage, socket:Socket, buffer:Buffer) -> Void> = "upgrade";
 | 
						|
	#else
 | 
						|
	var Upgrade:ServerEvent<IncomingMessage->Socket->Buffer->Void> = "upgrade";
 | 
						|
	#end
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	This class inherits `from net.Server`.
 | 
						|
**/
 | 
						|
@:jsRequire("http", "Server")
 | 
						|
extern class Server extends js.node.net.Server {
 | 
						|
	/**
 | 
						|
		Limit the amount of time the parser will wait to receive the complete HTTP headers.
 | 
						|
 | 
						|
		In case of inactivity, the rules defined in `server.timeout` apply.
 | 
						|
		However, that inactivity based timeout would still allow the connection to be kept open
 | 
						|
		if the headers are being sent very slowly (by default, up to a byte per 2 minutes).
 | 
						|
		In order to prevent this, whenever header data arrives an additional check is made that
 | 
						|
		more than `server.headersTimeout` milliseconds has not passed since the connection was established.
 | 
						|
		If the check fails, a `'timeout'` event is emitted on the server object, and (by default) the socket is destroyed.
 | 
						|
		See [server.timeout](https://nodejs.org/api/http.html#http_server_timeout) for more information on how timeout behavior can be customized.
 | 
						|
 | 
						|
		Default: `40000`
 | 
						|
	**/
 | 
						|
	var headersTimeout:Int;
 | 
						|
 | 
						|
	/**
 | 
						|
		Limits maximum incoming headers count. If set to 0, no limit will be applied.
 | 
						|
 | 
						|
		Default: `2000`
 | 
						|
	**/
 | 
						|
	var maxHeadersCount:Null<Int>;
 | 
						|
 | 
						|
	/**
 | 
						|
		Sets the timeout value for sockets, and emits a `'timeout'` event on the Server object,
 | 
						|
		passing the socket as an argument, if a timeout occurs.
 | 
						|
 | 
						|
		If there is a `'timeout'` event listener on the Server object, then it will be called with the timed-out socket as an argument.
 | 
						|
 | 
						|
		By default, the Server's timeout value is 2 minutes, and sockets are destroyed automatically if they time out.
 | 
						|
		However, if a callback is assigned to the Server's `'timeout'` event, timeouts must be handled explicitly.
 | 
						|
 | 
						|
		To change the default timeout use the `--http-server-default-timeout` flag.
 | 
						|
	**/
 | 
						|
	function setTimeout(msecs:Int, ?callback:js.node.net.Socket->Void):Void;
 | 
						|
 | 
						|
	/**
 | 
						|
		The number of milliseconds of inactivity before a socket is presumed to have timed out.
 | 
						|
 | 
						|
		A value of `0` will disable the timeout behavior on incoming connections.
 | 
						|
 | 
						|
		The socket timeout logic is set up on connection, so changing this value only affects new connections to the server,
 | 
						|
		not any existing connections.
 | 
						|
 | 
						|
		To change the default timeout use the `--http-server-default-timeout` flag.
 | 
						|
 | 
						|
		Default: `120000` (2 minutes)
 | 
						|
	**/
 | 
						|
	var timeout:Int;
 | 
						|
 | 
						|
	/**
 | 
						|
		The number of milliseconds of inactivity a server needs to wait for additional incoming data,
 | 
						|
		after it has finished writing the last response, before a socket will be destroyed.
 | 
						|
		If the server receives new data before the keep-alive timeout has fired, it will reset the regular inactivity timeout, i.e., `server.timeout`.
 | 
						|
 | 
						|
		A value of `0` will disable the keep-alive timeout behavior on incoming connections
 | 
						|
		A value of 0 makes the http server behave similarly to Node.js versions prior to 8.0.0, which did not have a keep-alive timeout.
 | 
						|
 | 
						|
		The socket timeout logic is set up on connection, so changing this value only affects new connections to the server, not any existing connections.
 | 
						|
 | 
						|
		Default: `5000` (5 seconds).
 | 
						|
	**/
 | 
						|
	var keepAliveTimeout:Int;
 | 
						|
}
 |