package org.webpieces.httpfrontend2.api; import java.net.InetSocketAddress; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import org.webpieces.data.api.BufferCreationPool; import org.webpieces.data.api.DataWrapperGenerator; import org.webpieces.data.api.DataWrapperGeneratorFactory; import org.webpieces.frontend2.api.FrontendConfig; import org.webpieces.frontend2.api.FrontendSocket; import org.webpieces.frontend2.api.FrontendStream; import org.webpieces.frontend2.api.HttpFrontendFactory; import org.webpieces.frontend2.api.HttpFrontendManager; import org.webpieces.frontend2.api.HttpRequestListener; import org.webpieces.frontend2.api.HttpServer; import org.webpieces.frontend2.api.Protocol; import org.webpieces.httpfrontend2.api.http1.Requests; import org.webpieces.httpparser.api.dto.HttpRequest; import org.webpieces.httpparser.api.dto.KnownHttpMethod; import org.webpieces.util.threading.NamedThreadFactory; import com.webpieces.hpack.api.dto.Http2Headers; import com.webpieces.http2engine.api.StreamWriter; import com.webpieces.http2parser.api.dto.RstStreamFrame; class ServerFactory { static final String MAIN_RESPONSE = "Here's the file"; static final String PUSHED_RESPONSE = "Here's the css"; static int createTestServer(boolean alwaysHttp2, Long maxConcurrentStreams) { BufferCreationPool pool = new BufferCreationPool(); ScheduledExecutorService timer = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("webpieces-timer")); HttpFrontendManager frontEndMgr = HttpFrontendFactory.createFrontEnd("frontEnd", 10, timer, pool); FrontendConfig config = new FrontendConfig("id2", new InetSocketAddress(0)); // Set this to true to test with h2spec config.alwaysHttp2 = alwaysHttp2; HttpServer server = frontEndMgr.createHttpServer(config, new OurListener()); server.start(); return server.getUnderlyingChannel().getLocalAddress().getPort(); } private static class OurListener implements HttpRequestListener { private DataWrapperGenerator dataGen = DataWrapperGeneratorFactory.createDataWrapperGenerator(); private HttpRequest pushedRequest = Requests.createRequest(KnownHttpMethod.GET, "/file.css"); private Map<Long, HttpRequest> idMap = new HashMap<>(); private void sendResponse(Long requestId, FrontendSocket sender) { HttpRequest req = idMap.get(requestId); if(req.getRequestLine().getMethod().getMethodAsString().equals("HEAD")) { // sender.sendResponse(responseANoBody, req, requestId, true); } else { // sender.sendResponse(responseA, req, requestId, true); } // if(sender.getProtocol() == Protocol.HTTP2) { // sender.sendResponse(pushedResponse, pushedRequest, requestId, true); // } } @Override public StreamWriter incomingRequest(FrontendStream stream, Http2Headers headers, Protocol type) { // TODO Auto-generated method stub return null; } @Override public void cancelRequest(FrontendStream stream, RstStreamFrame c) { // TODO Auto-generated method stub } } }