String status = headers.remove(HTTPSPDYHeader.STATUS.name(version)).value(); Matcher matcher = statusRegexp.matcher(status); matcher.matches(); generator.setResponse(code, reason); String httpVersion = headers.remove(HTTPSPDYHeader.VERSION.name(version)).value(); generator.setVersion(Integer.parseInt(httpVersion.replaceAll("\\D", ""))); headers.put("host", host.value()); String name = camelize(header.name()); fields.put(name, header.value());
throw new HttpException(HttpStatus.BAD_REQUEST_400); String m = method.value(); String u = uri.value(); String v = version.value(); logger.debug("HTTP > {} {} {}", m, u, v); startRequest(new ByteArrayBuffer(m), new ByteArrayBuffer(u), new ByteArrayBuffer(v)); _request.setScheme(schemeHeader.value()); String name = header.name(); String value = header.value(); logger.debug("HTTP > {}: {}", name, value); parsedHeader(new ByteArrayBuffer(name), new ByteArrayBuffer(value));
if (!isIfModifiedSinceHeaderPresent(requestHeaders) && isValidMethod(requestHeaders.get(HTTPSPDYHeader.METHOD.name(version)).value())) String scheme = requestHeaders.get(HTTPSPDYHeader.SCHEME.name(version)).value(); String host = requestHeaders.get(HTTPSPDYHeader.HOST.name(version)).value(); String origin = scheme + "://" + host; String url = requestHeaders.get(HTTPSPDYHeader.URI.name(version)).value(); String absoluteURL = origin + url; logger.debug("Applying push strategy for {}", absoluteURL); if (referrerHeader != null) String referrer = referrerHeader.value(); MainResource mainResource = mainResources.get(referrer); if (mainResource == null)
String host = hostHeader.value(); int colon = host.indexOf(':'); if (colon >= 0)
protected void reply(Stream stream, ReplyInfo replyInfo) { if (!stream.isUnidirectional()) stream.reply(replyInfo); if (replyInfo.getHeaders().get(HTTPSPDYHeader.STATUS.name(version)).value().startsWith("200") && !stream.isClosed()) { // We have a 200 OK with some content to send Headers.Header scheme = headers.get(HTTPSPDYHeader.SCHEME.name(version)); Headers.Header host = headers.get(HTTPSPDYHeader.HOST.name(version)); Headers.Header uri = headers.get(HTTPSPDYHeader.URI.name(version)); Set<String> pushResources = pushStrategy.apply(stream, headers, replyInfo.getHeaders()); for (String pushResourcePath : pushResources) { final Headers requestHeaders = createRequestHeaders(scheme, host, uri, pushResourcePath); final Headers pushHeaders = createPushHeaders(scheme, host, pushResourcePath); stream.syn(new SynInfo(pushHeaders, false), getMaxIdleTime(), TimeUnit.MILLISECONDS, new Handler.Adapter<Stream>() { @Override public void completed(Stream pushStream) { ServerHTTPSPDYAsyncConnection pushConnection = new ServerHTTPSPDYAsyncConnection(getConnector(), getEndPoint(), getServer(), version, connection, pushStrategy, pushStream); pushConnection.beginRequest(requestHeaders, true); } }); } } }
private void convert(short fromVersion, short toVersion, Headers headers) { if (fromVersion != toVersion) { for (HTTPSPDYHeader httpHeader : HTTPSPDYHeader.values()) { Headers.Header header = headers.remove(httpHeader.name(fromVersion)); if (header != null) { String toName = httpHeader.name(toVersion); for (String value : header.values()) headers.add(toName, value); } } } }
private boolean isPushResource(String url, Headers responseHeaders) { for (Pattern pushRegexp : pushRegexps) { if (pushRegexp.matcher(url).matches()) { Headers.Header header = responseHeaders.get("content-type"); if (header == null) return true; String contentType = header.value().toLowerCase(Locale.ENGLISH); for (String pushContentType : pushContentTypes) if (contentType.startsWith(pushContentType)) return true; } } return false; }
private Headers createPushHeaders(Headers.Header scheme, Headers.Header host, String pushResourcePath) { final Headers pushHeaders = new Headers(); if (version == SPDY.V2) pushHeaders.put(HTTPSPDYHeader.URI.name(version), scheme.value() + "://" + host.value() + pushResourcePath); else { pushHeaders.put(HTTPSPDYHeader.URI.name(version), pushResourcePath); pushHeaders.put(scheme); pushHeaders.put(host); } pushHeaders.put(HTTPSPDYHeader.STATUS.name(version), "200"); pushHeaders.put(HTTPSPDYHeader.VERSION.name(version), "HTTP/1.1"); return pushHeaders; }
private Headers createRequestHeaders(Headers.Header scheme, Headers.Header host, Headers.Header uri, String pushResourcePath) { final Headers requestHeaders = new Headers(); requestHeaders.put(HTTPSPDYHeader.METHOD.name(version), "GET"); requestHeaders.put(HTTPSPDYHeader.VERSION.name(version), "HTTP/1.1"); requestHeaders.put(scheme); requestHeaders.put(host); requestHeaders.put(HTTPSPDYHeader.URI.name(version), pushResourcePath); String referrer = scheme.value() + "://" + host.value() + uri.value(); requestHeaders.put("referer", referrer); // Remember support for gzip encoding requestHeaders.put(headers.get("accept-encoding")); requestHeaders.put("x-spdy-push", "true"); return requestHeaders; }