in Sources/NIOHTTP1Server/main.swift [402:442]
func channelRead(context: ChannelHandlerContext, data: NIOAny) {
let reqPart = self.unwrapInboundIn(data)
if let handler = self.handler {
handler(context, reqPart)
return
}
switch reqPart {
case .head(let request):
if request.uri.unicodeScalars.starts(with: "/dynamic".unicodeScalars) {
self.handler = self.dynamicHandler(request: request)
self.handler!(context, reqPart)
return
} else if let path = request.uri.chopPrefix("/sendfile/") {
self.handler = { self.handleFile(context: $0, request: $1, ioMethod: .sendfile, path: path) }
self.handler!(context, reqPart)
return
} else if let path = request.uri.chopPrefix("/fileio/") {
self.handler = { self.handleFile(context: $0, request: $1, ioMethod: .nonblockingFileIO, path: path) }
self.handler!(context, reqPart)
return
}
self.keepAlive = request.isKeepAlive
self.state.requestReceived()
var responseHead = httpResponseHead(request: request, status: HTTPResponseStatus.ok)
self.buffer.clear()
self.buffer.writeString(self.defaultResponse)
responseHead.headers.add(name: "content-length", value: "\(self.buffer!.readableBytes)")
let response = HTTPServerResponsePart.head(responseHead)
context.write(self.wrapOutboundOut(response), promise: nil)
case .body:
break
case .end:
self.state.requestComplete()
let content = HTTPServerResponsePart.body(.byteBuffer(buffer!.slice()))
context.write(self.wrapOutboundOut(content), promise: nil)
self.completeResponse(context, trailers: nil, promise: nil)
}
}