1 module hunt.http.codec.http.stream.HttpHandler; 2 3 import hunt.http.codec.http.stream.HttpOutputStream; 4 import hunt.http.codec.http.stream.HttpConnection; 5 6 import hunt.http.codec.http.model.MetaData; 7 8 import hunt.lang.common; 9 import hunt.container.ByteBuffer; 10 11 // alias HttpRequest = HttpRequest; 12 // alias HttpResponse = HttpResponse; 13 14 interface HttpHandler { 15 16 bool content(ByteBuffer item, HttpRequest request, HttpResponse response, 17 HttpOutputStream output, 18 HttpConnection connection); 19 20 bool contentComplete(HttpRequest request, HttpResponse response, 21 HttpOutputStream output, 22 HttpConnection connection); 23 24 bool headerComplete(HttpRequest request, HttpResponse response, 25 HttpOutputStream output, 26 HttpConnection connection); 27 28 bool messageComplete(HttpRequest request, HttpResponse response, 29 HttpOutputStream output, 30 HttpConnection connection); 31 32 void badMessage(int status, string reason, HttpRequest request, HttpResponse response, 33 HttpOutputStream output, HttpConnection connection); 34 35 void earlyEOF(HttpRequest request, HttpResponse response, 36 HttpOutputStream output, 37 HttpConnection connection); 38 39 } 40 41 42 class HttpHandlerAdapter : HttpHandler { 43 44 protected Func4!(HttpRequest, HttpResponse, HttpOutputStream, HttpConnection, bool) _headerComplete; 45 protected Func5!(ByteBuffer, HttpRequest, HttpResponse, HttpOutputStream, HttpConnection, bool) _content; 46 protected Func4!(HttpRequest, HttpResponse, HttpOutputStream, HttpConnection, bool) _contentComplete; 47 protected Func4!(HttpRequest, HttpResponse, HttpOutputStream, HttpConnection, bool) _messageComplete; 48 protected Action6!(int, string, HttpRequest, HttpResponse, HttpOutputStream, HttpConnection) _badMessage; 49 protected Action4!(HttpRequest, HttpResponse, HttpOutputStream, HttpConnection) _earlyEOF; 50 51 override 52 bool headerComplete(HttpRequest request, HttpResponse response, 53 HttpOutputStream output, 54 HttpConnection connection) { 55 if (_headerComplete !is null) { 56 return _headerComplete(request, response, output, connection); 57 } else { 58 return false; 59 } 60 } 61 62 override 63 bool content(ByteBuffer item, HttpRequest request, HttpResponse response, 64 HttpOutputStream output, 65 HttpConnection connection) { 66 if (_content !is null) { 67 return _content(item, request, response, output, connection); 68 } else { 69 return false; 70 } 71 } 72 73 override 74 bool contentComplete(HttpRequest request, HttpResponse response, 75 HttpOutputStream output, 76 HttpConnection connection) { 77 if (_contentComplete !is null) { 78 return _contentComplete(request, response, output, connection); 79 } else { 80 return false; 81 } 82 } 83 84 85 override 86 bool messageComplete(HttpRequest request, HttpResponse response, 87 HttpOutputStream output, 88 HttpConnection connection) { 89 if (_messageComplete !is null) { 90 return _messageComplete(request, response, output, connection); 91 } else { 92 return true; 93 } 94 } 95 96 override 97 void badMessage(int status, string reason, HttpRequest request, HttpResponse response, 98 HttpOutputStream output, 99 HttpConnection connection) { 100 if (_badMessage !is null) { 101 _badMessage(status, reason, request, response, output, connection); 102 } 103 } 104 105 override 106 void earlyEOF(HttpRequest request, HttpResponse response, HttpOutputStream output, HttpConnection connection) { 107 if (_earlyEOF !is null) { 108 _earlyEOF(request, response, output, connection); 109 } 110 } 111 112 }