package com.firefly.server.http2;
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.codec.http2.stream.HTTPConnection;
import com.firefly.codec.http2.stream.HTTPHandler;
import com.firefly.codec.http2.stream.HTTPOutputStream;
import com.firefly.codec.http2.stream.HTTPTunnelConnection;
import com.firefly.utils.function.*;
import java.nio.ByteBuffer;
public interface ServerHTTPHandler extends HTTPHandler {
void acceptConnection(HTTPConnection connection);
boolean accept100Continue(MetaData.Request request, MetaData.Response response,
HTTPOutputStream output,
HTTPConnection connection);
boolean acceptHTTPTunnelConnection(MetaData.Request request, MetaData.Response response,
HTTPOutputStream output,
HTTPServerConnection connection);
class Adapter extends HTTPHandler.Adapter implements ServerHTTPHandler {
protected Action1<HTTPConnection> acceptConnection;
protected Func4<Request, Response, HTTPOutputStream, HTTPConnection, Boolean> accept100Continue;
protected Func4<Request, Response, HTTPOutputStream, HTTPServerConnection, Boolean> acceptHTTPTunnelConnection;
public ServerHTTPHandler.Adapter headerComplete(
Func4<Request, Response, HTTPOutputStream, HTTPConnection, Boolean> headerComplete) {
this.headerComplete = headerComplete;
return this;
}
public ServerHTTPHandler.Adapter messageComplete(
Func4<Request, Response, HTTPOutputStream, HTTPConnection, Boolean> messageComplete) {
this.messageComplete = messageComplete;
return this;
}
public ServerHTTPHandler.Adapter content(
Func5<ByteBuffer, Request, Response, HTTPOutputStream, HTTPConnection, Boolean> content) {
this.content = content;
return this;
}
public ServerHTTPHandler.Adapter contentComplete(
Func4<Request, Response, HTTPOutputStream, HTTPConnection, Boolean> contentComplete) {
this.contentComplete = contentComplete;
return this;
}
public ServerHTTPHandler.Adapter badMessage(
Action6<Integer, String, Request, Response, HTTPOutputStream, HTTPConnection> badMessage) {
this.badMessage = badMessage;
return this;
}
public ServerHTTPHandler.Adapter earlyEOF(
Action4<Request, Response, HTTPOutputStream, HTTPConnection> earlyEOF) {
this.earlyEOF = earlyEOF;
return this;
}
public ServerHTTPHandler.Adapter acceptConnection(Action1<HTTPConnection> acceptConnection) {
this.acceptConnection = acceptConnection;
return this;
}
public ServerHTTPHandler.Adapter accept100Continue(
Func4<Request, Response, HTTPOutputStream, HTTPConnection, Boolean> accept100Continue) {
this.accept100Continue = accept100Continue;
return this;
}
public ServerHTTPHandler.Adapter acceptHTTPTunnelConnection(
Func4<Request, Response, HTTPOutputStream, HTTPServerConnection, Boolean> acceptHTTPTunnelConnection) {
this.acceptHTTPTunnelConnection = acceptHTTPTunnelConnection;
return this;
}
@Override
public void acceptConnection(HTTPConnection connection) {
if (acceptConnection != null) {
acceptConnection.call(connection);
}
}
@Override
public boolean accept100Continue(Request request, Response response, HTTPOutputStream output,
HTTPConnection connection) {
if (accept100Continue != null) {
return accept100Continue.call(request, response, output, connection);
} else {
return false;
}
}
@Override
public boolean acceptHTTPTunnelConnection(MetaData.Request request, MetaData.Response response,
HTTPOutputStream output,
HTTPServerConnection connection) {
if (acceptHTTPTunnelConnection != null) {
return acceptHTTPTunnelConnection.call(request, response, output, connection);
} else {
return true;
}
}
}
}