1 /* 2 * Archttp - A highly performant web framework written in D. 3 * 4 * Copyright (C) 2021-2022 Kerisy.com 5 * 6 * Website: https://www.kerisy.com 7 * 8 * Licensed under the Apache-2.0 License. 9 * 10 */ 11 12 module archttp.codec.HttpDecoder; 13 14 import geario.codec.Decoder; 15 import geario.codec.Encoder; 16 17 import nbuff; 18 19 import geario.event; 20 21 import archttp.HttpRequestParser; 22 import archttp.HttpRequest; 23 import archttp.HttpContext; 24 25 import geario.logging; 26 27 class HttpDecoder : Decoder!HttpRequest 28 { 29 private HttpRequestParser _parser; 30 31 this() 32 { 33 _parser = new HttpRequestParser; 34 } 35 36 override long Decode(ref Nbuff buffer, ref HttpRequest request) 37 { 38 long result = _parser.parse(cast(string) buffer.data().data()); 39 40 if ( ParserStatus.COMPLETED == _parser.parserStatus() ) 41 { 42 request = _parser.request(); 43 44 _parser.reset(); 45 buffer.pop(result); 46 47 return result; 48 } 49 50 if ( ParserStatus.PARTIAL == _parser.parserStatus() ) 51 { 52 return 0; 53 } 54 55 return -1; 56 } 57 }