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