use of org.eclipse.jetty.http.MetaData in project jetty.project by eclipse.
the class ContinuationBodyParser method onHeaders.
private void onHeaders() {
ByteBuffer headerBlock = headerBlockFragments.complete();
MetaData metaData = headerBlockParser.parse(headerBlock, headerBlock.remaining());
HeadersFrame frame = new HeadersFrame(getStreamId(), metaData, headerBlockFragments.getPriorityFrame(), headerBlockFragments.isEndStream());
notifyHeaders(frame);
}
use of org.eclipse.jetty.http.MetaData in project jetty.project by eclipse.
the class HeaderBlockParser method parse.
public MetaData parse(ByteBuffer buffer, int blockLength) {
// We must wait for the all the bytes of the header block to arrive.
// If they are not all available, accumulate them.
// When all are available, decode them.
int accumulated = blockBuffer == null ? 0 : blockBuffer.position();
int remaining = blockLength - accumulated;
if (buffer.remaining() < remaining) {
if (blockBuffer == null) {
blockBuffer = byteBufferPool.acquire(blockLength, false);
BufferUtil.clearToFill(blockBuffer);
}
blockBuffer.put(buffer);
return null;
} else {
int limit = buffer.limit();
buffer.limit(buffer.position() + remaining);
ByteBuffer toDecode;
if (blockBuffer != null) {
blockBuffer.put(buffer);
BufferUtil.flipToFlush(blockBuffer, 0);
toDecode = blockBuffer;
} else {
toDecode = buffer;
}
MetaData result = hpackDecoder.decode(toDecode);
buffer.limit(limit);
if (blockBuffer != null) {
byteBufferPool.release(blockBuffer);
blockBuffer = null;
}
return result;
}
}
use of org.eclipse.jetty.http.MetaData in project jetty.project by eclipse.
the class HeadersBodyParser method emptyBody.
@Override
protected void emptyBody(ByteBuffer buffer) {
if (hasFlag(Flags.END_HEADERS)) {
MetaData metaData = headerBlockParser.parse(BufferUtil.EMPTY_BUFFER, 0);
onHeaders(0, 0, false, metaData);
} else {
headerBlockFragments.setStreamId(getStreamId());
headerBlockFragments.setEndStream(isEndStream());
if (hasFlag(Flags.PRIORITY))
connectionFailure(buffer, ErrorCode.PROTOCOL_ERROR.code, "invalid_headers_priority_frame");
}
}
use of org.eclipse.jetty.http.MetaData in project jetty.project by eclipse.
the class Request method getLocales.
/* ------------------------------------------------------------ */
/*
* @see javax.servlet.ServletRequest#getLocales()
*/
@Override
public Enumeration<Locale> getLocales() {
MetaData.Request metadata = _metaData;
if (metadata == null)
return Collections.enumeration(__defaultLocale);
List<String> acceptable = metadata.getFields().getQualityCSV(HttpHeader.ACCEPT_LANGUAGE);
// handle no locale
if (acceptable.isEmpty())
return Collections.enumeration(__defaultLocale);
List<Locale> locales = acceptable.stream().map(language -> {
language = HttpFields.stripParameters(language);
String country = "";
int dash = language.indexOf('-');
if (dash > -1) {
country = language.substring(dash + 1).trim();
language = language.substring(0, dash).trim();
}
return new Locale(language, country);
}).collect(Collectors.toList());
return Collections.enumeration(locales);
}
use of org.eclipse.jetty.http.MetaData in project jetty.project by eclipse.
the class Request method findServerName.
/* ------------------------------------------------------------ */
private String findServerName() {
MetaData.Request metadata = _metaData;
// Return host from header field
HttpField host = metadata == null ? null : metadata.getFields().getField(HttpHeader.HOST);
if (host != null) {
if (!(host instanceof HostPortHttpField) && host.getValue() != null && !host.getValue().isEmpty())
host = new HostPortHttpField(host.getValue());
if (host instanceof HostPortHttpField) {
HostPortHttpField authority = (HostPortHttpField) host;
metadata.getURI().setAuthority(authority.getHost(), authority.getPort());
return authority.getHost();
}
}
// Return host from connection
String name = getLocalName();
if (name != null)
return name;
// Return the local host
try {
return InetAddress.getLocalHost().getHostAddress();
} catch (java.net.UnknownHostException e) {
LOG.ignore(e);
}
return null;
}
Aggregations