package com.firefly.codec.http2.stream; import com.firefly.codec.http2.model.MetaData; import com.firefly.codec.http2.model.MetaData.Request; import com.firefly.codec.http2.model.MetaData.Response; import com.firefly.utils.function.Action4; import com.firefly.utils.function.Action6; import com.firefly.utils.function.Func4; import com.firefly.utils.function.Func5; import java.nio.ByteBuffer; public interface HTTPHandler { boolean content(ByteBuffer item, MetaData.Request request, MetaData.Response response, HTTPOutputStream output, HTTPConnection connection); boolean contentComplete(MetaData.Request request, MetaData.Response response, HTTPOutputStream output, HTTPConnection connection); boolean headerComplete(MetaData.Request request, MetaData.Response response, HTTPOutputStream output, HTTPConnection connection); boolean messageComplete(MetaData.Request request, MetaData.Response response, HTTPOutputStream output, HTTPConnection connection); void badMessage(int status, String reason, MetaData.Request request, MetaData.Response response, HTTPOutputStream output, HTTPConnection connection); void earlyEOF(MetaData.Request request, MetaData.Response response, HTTPOutputStream output, HTTPConnection connection); class Adapter implements HTTPHandler { protected Func4<Request, Response, HTTPOutputStream, HTTPConnection, Boolean> headerComplete; protected Func5<ByteBuffer, Request, Response, HTTPOutputStream, HTTPConnection, Boolean> content; protected Func4<Request, Response, HTTPOutputStream, HTTPConnection, Boolean> contentComplete; protected Func4<Request, Response, HTTPOutputStream, HTTPConnection, Boolean> messageComplete; protected Action6<Integer, String, Request, Response, HTTPOutputStream, HTTPConnection> badMessage; protected Action4<Request, Response, HTTPOutputStream, HTTPConnection> earlyEOF; @Override public boolean headerComplete(Request request, Response response, HTTPOutputStream output, HTTPConnection connection) { if (headerComplete != null) { return headerComplete.call(request, response, output, connection); } else { return false; } } @Override public boolean content(ByteBuffer item, Request request, Response response, HTTPOutputStream output, HTTPConnection connection) { if (content != null) { return content.call(item, request, response, output, connection); } else { return false; } } @Override public boolean contentComplete(MetaData.Request request, MetaData.Response response, HTTPOutputStream output, HTTPConnection connection) { if (contentComplete != null) { return contentComplete.call(request, response, output, connection); } else { return false; } } @Override public boolean messageComplete(Request request, Response response, HTTPOutputStream output, HTTPConnection connection) { if (messageComplete != null) { return messageComplete.call(request, response, output, connection); } else { return true; } } @Override public void badMessage(int status, String reason, Request request, Response response, HTTPOutputStream output, HTTPConnection connection) { if (badMessage != null) { badMessage.call(status, reason, request, response, output, connection); } } @Override public void earlyEOF(Request request, Response response, HTTPOutputStream output, HTTPConnection connection) { if (earlyEOF != null) { earlyEOF.call(request, response, output, connection); } } } }