forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			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;
 | |
| }
 |