use of com.webpieces.http2.api.dto.highlevel.Http2HeaderStruct in project webpieces by deanhiller.
the class Http2ToHttp11 method translateRequest.
public static HttpRequest translateRequest(Http2Request headers) {
HttpRequestLine requestLine = new HttpRequestLine();
HttpRequest req = new HttpRequest();
req.setRequestLine(requestLine);
for (Http2Header header : headers.getHeaders()) {
insertInfo(req, header);
}
Http2HeaderStruct headerMap = headers.getHeaderLookupStruct();
Http2Header method = headerMap.getHeader(Http2HeaderName.METHOD);
if (method == null)
throw new IllegalArgumentException(Http2HeaderName.METHOD.name() + "is a required header to translate to http1");
req.getRequestLine().setMethod(new HttpRequestMethod(method.getValue()));
Http2Header host = headerMap.getHeader(Http2HeaderName.AUTHORITY);
if (host == null)
throw new IllegalArgumentException(Http2HeaderName.AUTHORITY.name() + "is a required header to translate to http1");
Http2Header path = headerMap.getHeader(Http2HeaderName.PATH);
if (path == null)
throw new IllegalArgumentException(Http2HeaderName.PATH.name() + "is a required header to translate to http1");
HttpUri httpUri = new HttpUri(path.getValue());
req.getRequestLine().setUri(httpUri);
return req;
}
use of com.webpieces.http2.api.dto.highlevel.Http2HeaderStruct in project webpieces by deanhiller.
the class RouterRequest method getHeaders.
/**
* Need to remove webpieces http2 stack from router(ie. Http2Request above and Http2Headers!!!!!!)
* This is a step towards that to only
* have RouterRequest which is the bare minimum object to allow router to do it's job. In this way,
* router is a piece that can work with an http stack(apache, etc. etc.) and a true piece to be
* re-used.
*
* For now, http2 headers is too tightly coupled for worry about while we get this working so this is
* at least one point of decoupling. Steps...
* Step 1. create all read points to read from methods like this reading in objects from org.webpieces.ctx.api
* Step 2. figure out how to better translate from ANY http2/http1 into RouterRequest in
* the webserver connection layer
* Step 3. Make these fields Object so any platform can insert their http2 or http1 objects
* public Http2Request originalRequest;
* public Http2Headers trailingHeaders;
*/
public synchronized Map<String, List<RouterHeader>> getHeaders() {
if (routerHeaderMap != null)
return routerHeaderMap;
else if (originalRequest == null)
// some legacy tests at Orderly simulate with no original request
return routerHeaderMap;
routerHeaderMap = new HashMap<>();
// DO NOT cache this as there are clients that modify the Http2Header which will not
// modify this list so just generate this list every time for now.
// In webpieces getHeaders is only called once every request anyways!!!
Http2HeaderStruct headerLookupStruct = originalRequest.getHeaderLookupStruct();
for (String headerName : headerLookupStruct.getAllHeaderNames()) {
// http is well, 'interesting' allowing one to repeat header names and if I remember
// order matters and we keep the order
List<Http2Header> headerArray = headerLookupStruct.getHeaders(headerName);
List<RouterHeader> translatedList = translate(headerArray);
routerHeaderMap.put(headerName, translatedList);
}
return routerHeaderMap;
}
Aggregations