ArmeriaClientHttpRequest(HttpClient client, HttpMethod httpMethod, String pathAndQuery, URI uri, DataBufferFactoryWrapper<?> factoryWrapper) { this.client = requireNonNull(client, "client"); this.httpMethod = requireNonNull(httpMethod, "httpMethod"); this.uri = requireNonNull(uri, "uri"); this.factoryWrapper = requireNonNull(factoryWrapper, "factoryWrapper"); headers = HttpHeaders.of(com.linecorp.armeria.common.HttpMethod.valueOf(httpMethod.name()), requireNonNull(pathAndQuery, "pathAndQuery")); }
@Nullable @Override public HttpMethod method() { final HttpMethod method = this.method; if (method != null) { return method; } final String methodStr = get(HttpHeaderNames.METHOD); if (methodStr == null) { return null; } return this.method = HttpMethod.isSupported(methodStr) ? HttpMethod.valueOf(methodStr) : HttpMethod.UNKNOWN; }
/** * Converts the headers of the given Netty HTTP/1.x request into Armeria HTTP/2 headers. * The following headers are only used if they can not be found in the {@code HOST} header or the * {@code Request-Line} as defined by <a href="https://tools.ietf.org/html/rfc7230">rfc7230</a> * <ul> * <li>{@link ExtensionHeaderNames#SCHEME}</li> * </ul> * {@link ExtensionHeaderNames#PATH} is ignored and instead extracted from the {@code Request-Line}. */ public static HttpHeaders toArmeria(HttpRequest in) throws URISyntaxException { final URI requestTargetUri = toUri(in); final io.netty.handler.codec.http.HttpHeaders inHeaders = in.headers(); final HttpHeaders out = new DefaultHttpHeaders(true, inHeaders.size()); out.path(toHttp2Path(requestTargetUri)); out.method(HttpMethod.valueOf(in.method().name())); setHttp2Scheme(inHeaders, requestTargetUri, out); if (!isOriginForm(requestTargetUri) && !isAsteriskForm(requestTargetUri)) { // Attempt to take from HOST header before taking from the request-line final String host = inHeaders.getAsString(HttpHeaderNames.HOST); setHttp2Authority(host == null || host.isEmpty() ? requestTargetUri.getAuthority() : host, out); } // Add the HTTP headers which have not been consumed above toArmeria(inHeaders, out); return out; }