module http.codec.HttpDecoder; import geario.codec.Decoder; import geario.codec.Encoder; import geario.event; import http.HttpRequestParser; import http.HttpRequest; import geario.logging; class HttpDecoder : Decoder!HttpRequest { HttpRequestParser parser = new HttpRequestParser; override long Decode(ref Buffer buffer, ref HttpRequest request) { request = new HttpRequest; HttpRequestParser.ParseResult result = parser.parse(request, cast(ubyte[])buffer.toString()); if ( result == HttpRequestParser.ParseResult.ParsingCompleted ) { long length = buffer.Length(); buffer.Clear(); return length; } else if ( result == HttpRequestParser.ParseResult.ParsingIncompleted ) { return 0; } else { return -1; } } }