nitcorn :: HttpServer :: defaultinit
nitcorn :: HttpServer :: delegate_answer
Answer to a requestnitcorn :: HttpServer :: factory=
The associatedHttpFactory
			nitcorn :: HttpServer :: remote_address
Human readable address of the remote clientnitcorn :: HttpServer :: remote_address=
Human readable address of the remote clientnitcorn :: HttpServer :: respond
Send backresponse to the client
			nitcorn $ HttpServer :: SELF
Type of this instance, automatically specialized in every classnitcorn $ HttpServer :: read_http_request
Callback when a full HTTP request is receivednitcorn :: log $ HttpServer :: read_http_request
Callback when a full HTTP request is receivednitcorn :: log $ HttpServer :: respond
Send backresponse to the client
			binary :: BinaryStream :: big_endian
Use the big-endian convention? otherwise use little-endian.binary :: BinaryStream :: big_endian=
Use the big-endian convention? otherwise use little-endian.core :: Object :: class_factory
Implementation used byget_class to create the specific class.
			libevent :: Connection :: close_requested
Closing this connection has been requested, but may not yet beclosed
			libevent :: Connection :: close_requested=
Closing this connection has been requested, but may not yet beclosed
			core :: Stream :: defaultinit
core :: Object :: defaultinit
nitcorn :: HTTPConnection :: defaultinit
nitcorn :: HttpServer :: defaultinit
binary :: BinaryStream :: defaultinit
libevent :: Connection :: defaultinit
core :: Writer :: defaultinit
nitcorn :: HttpServer :: delegate_answer
Answer to a requestlibevent :: Connection :: event_callback
Callback method on events: EOF, user-defined timeout and unrecoverable errorsnitcorn :: HttpServer :: factory=
The associatedHttpFactory
			libevent :: Connection :: force_close
Force closing this connection and freeingnative_buffer_event
			core :: Object :: is_same_instance
Return true ifself and other are the same instance (i.e. same identity).
			core :: Object :: is_same_serialized
Isself the same as other in a serialization context?
			core :: Object :: is_same_type
Return true ifself and other have the same dynamic type.
			core :: Stream :: last_error=
Error produced by the file streamcore :: Stream :: lookahead=
Lookahead buffer for codecscore :: Stream :: lookahead_capacity
Capacity of the lookaheadcore :: Stream :: lookahead_capacity=
Capacity of the lookaheadcore :: Stream :: lookahead_length
Current occupation of the lookaheadcore :: Stream :: lookahead_length=
Current occupation of the lookaheadlibevent :: Connection :: native_buffer_event
The native libevent linked toself
			libevent :: Connection :: native_buffer_event=
The native libevent linked toself
			core :: Object :: output_class_name
Display class name on stdout (debug only).libevent :: Connection :: read_callback
Callback method when data is available to readnitcorn :: HTTPConnection :: read_http_request
Callback when a full HTTP request is receivednitcorn :: HttpServer :: remote_address
Human readable address of the remote clientnitcorn :: HttpServer :: remote_address=
Human readable address of the remote clientnitcorn :: HttpServer :: respond
Send backresponse to the client
			core :: Writer :: serialize_msgpack
Serializevalue in MessagePack format
			core :: Writer :: write_block
Write the length as a 64 bits integer, then the content oftext
			core :: Writer :: write_bool
Write a booleanvalue on a byte, using 0 for false and 1 for true
			core :: Stream :: write_buffer
Buffer for writing data to a streamcore :: Stream :: write_buffer=
Buffer for writing data to a streamcore :: Writer :: write_bytes_from_cstring
Writelen bytes from ns
			core :: Writer :: write_double
Write a floating pointvalue on 64 bits
			core :: Writer :: write_int64
Writevalue as a signed integer on 64 bits
			core :: Writer :: write_msgpack_array
Write an array header forlen items in the shortest possible MessagePack array format
			core :: Writer :: write_msgpack_array16
Write an array header forlen items, max of 0xFFFF items
			core :: Writer :: write_msgpack_array32
Write an array header forlen items, max of 0xFFFF_FFFF items
			core :: Writer :: write_msgpack_bin
Writedata in the shortest possible MessagePack bin format
			core :: Writer :: write_msgpack_bin16
Writedata in bin16 format, max of 0xFFFF bytes
			core :: Writer :: write_msgpack_bin32
Writedata in bin32 format, max of 0xFFFF_FFFF bytes
			core :: Writer :: write_msgpack_bin8
Writedata in bin8 format, max of 0xFF bytes
			core :: Writer :: write_msgpack_bool
Writebool in MessagePack format
			core :: Writer :: write_msgpack_double
Writevalue as a MessagePack double
			core :: Writer :: write_msgpack_ext
Write an application-specific extension fortyp and bytes in the shortest possible MessagePack ext format
			core :: Writer :: write_msgpack_ext16
Write the header for an application-specific extension oflen data bytes
			core :: Writer :: write_msgpack_ext32
Write the header for an application-specific extension oflen data bytes
			core :: Writer :: write_msgpack_ext8
Write the header for an application-specific extension oflen data bytes
			core :: Writer :: write_msgpack_fixarray
Write an array header forlen items, max of 0x0F items
			core :: Writer :: write_msgpack_fixext1
Write the header for an application-specific extension of one data bytecore :: Writer :: write_msgpack_fixext16
Write the header for an application-specific extension of 16 data bytescore :: Writer :: write_msgpack_fixext2
Write the header for an application-specific extension of two data bytescore :: Writer :: write_msgpack_fixext4
Write the header for an application-specific extension of 4 data bytescore :: Writer :: write_msgpack_fixext8
Write the header for an application-specific extension of 8 data bytescore :: Writer :: write_msgpack_fixint
Writevalue as a single byte with metadata
			core :: Writer :: write_msgpack_fixmap
Write a map header forlen key/value pairs, max of 0x0F pairs
			core :: Writer :: write_msgpack_fixstr
Writetext in fixstr format, max of 0x1F bytes
			core :: Writer :: write_msgpack_float
Writevalue as a MessagePack float (losing precision)
			core :: Writer :: write_msgpack_int
Write the integervalue either as the shortest possible MessagePack int
			core :: Writer :: write_msgpack_int16
Writevalue over two signed bytes, following 1 metadata byte
			core :: Writer :: write_msgpack_int32
Writevalue over 4 signed bytes, following 1 metadata byte
			core :: Writer :: write_msgpack_int64
Writevalue over 8 signed bytes, following 1 metadata byte
			core :: Writer :: write_msgpack_int8
Writevalue over one signed byte, following 1 metadata byte
			core :: Writer :: write_msgpack_map
Write a map header forlen keys/value pairs in the shortest possible MessagePack map format
			core :: Writer :: write_msgpack_map16
Write a map header forlen key/value pairs, max of 0xFFFF pairs
			core :: Writer :: write_msgpack_map32
Write a map header forlen key/value pairs, max of 0xFFFF_FFFF pairs
			core :: Writer :: write_msgpack_null
Writenull, or nil, in MessagePack format
			core :: Writer :: write_msgpack_str
Writetext in the shortest possible MessagePack format
			core :: Writer :: write_msgpack_str16
Writetext in str16 format, max of 0xFFFF bytes
			core :: Writer :: write_msgpack_str32
Writetext in str32 format, max of 0xFFFF_FFFF bytes
			core :: Writer :: write_msgpack_str8
Writetext in str8 format, max of 0xFF bytes
			core :: Writer :: write_msgpack_uint16
Writevalue over two unsigned bytes, following 1 metadata byte
			core :: Writer :: write_msgpack_uint32
Writevalue over 4 unsigned bytes, following 1 metadata byte
			core :: Writer :: write_msgpack_uint64
Writevalue over 8 unsigned bytes, following 1 metadata byte
			core :: Writer :: write_msgpack_uint8
Writevalue over one unsigned byte, following 1 metadata byte
			
# A server handling a single connection
class HttpServer
	super HTTPConnection
	# The associated `HttpFactory`
	var factory: HttpFactory
	private var parser = new HttpRequestParser is lazy
	# Human readable address of the remote client
	var remote_address: String
	redef fun read_http_request(str)
	do
		var request_object = parser.parse_http_request(str.to_s)
		if request_object != null then delegate_answer request_object
	end
	# Answer to a request
	fun delegate_answer(request: HttpRequest)
	do
		# Find target virtual host
		var virtual_host = null
		if request.header.keys.has("Host") then
			var host = request.header["Host"]
			if host.index_of(':') == -1 then host += ":80"
			for vh in factory.config.virtual_hosts do
				for i in vh.interfaces do if i.to_s == host then
					virtual_host = vh
					break label
				end
			end label
		end
		# Use default virtual host if none already responded
		if virtual_host == null then virtual_host = factory.config.default_virtual_host
		# Get a response from the virtual host
		var response
		if virtual_host != null then
			var route = virtual_host.routes[request.uri]
			if route != null then
				# include uri parameters in request
				request.uri_params = route.parse_params(request.uri)
				var handler = route.handler
				var root = route.resolve_path(request)
				var turi
				if root != null then
					turi = ("/" + request.uri.substring_from(root.length)).simplify_path
				else turi = request.uri
				# Delegate the responsibility to respond to the `Action`
				handler.prepare_respond_and_close(request, turi, self)
				return
			else response = new HttpResponse(404)
		else response = new HttpResponse(404)
		respond response
		close
	end
	# Send back `response` to the client
	fun respond(response: HttpResponse)
	do
		response.render.write_to(self)
		for path in response.files do write_file path
	end
end
					lib/nitcorn/reactor.nit:29,1--97,3
				
redef class HttpServer
	redef fun read_http_request(str)
	do
		print "{remote_address}: received HTTP request"
		super
	end
	redef fun respond(response)
	do
		super
		if log_nitcorn_actions then print "{remote_address}: response header '{response.header.join(",", ":")}' to '{remote_address}'"
	end
end
					lib/nitcorn/log.nit:43,1--55,3