private void reply(final Stream stream, final ReplyInfo clientReplyInfo) { receiverStream.reply(clientReplyInfo, new Callback() { @Override public void succeeded() { if (LOG.isDebugEnabled()) LOG.debug("P -> C {} from {} to {}", clientReplyInfo, stream, receiverStream); } @Override public void failed(Throwable x) { LOG.debug(x); rst(receiverStream); } }); }
private void reply(final Stream stream) { final ReplyInfo replyInfo = this.replyInfo; this.replyInfo = null; clientStream.reply(replyInfo, getTimeout(), TimeUnit.MILLISECONDS, new Handler<Void>() { @Override public void completed(Void context) { logger.debug("P -> C {} from {} to {}", replyInfo, stream, clientStream); } @Override public void failed(Void context, Throwable x) { logger.debug(x); rst(clientStream); } }); }
@Override public void onHeaders(final Response response) { if (LOG.isDebugEnabled()) LOG.debug("onHeaders called with response: {}. Sending replyInfo to client.", response); Fields responseHeaders = createResponseHeaders(clientStream, response); removeHopHeaders(responseHeaders); ReplyInfo replyInfo = new ReplyInfo(responseHeaders, false); clientStream.reply(replyInfo, new Callback.Adapter() { @Override public void failed(Throwable x) { LOG.debug("failed: ", x); response.abort(x); } @Override public void succeeded() { committed = true; } }); }
private void reply(Stream stream, ReplyInfo replyInfo, Callback callback) { if (!stream.isUnidirectional()) stream.reply(replyInfo, callback); else stream.headers(new HeadersInfo(replyInfo.getHeaders(), replyInfo.isClose()), callback); Fields responseHeaders = replyInfo.getHeaders(); if (responseHeaders.get(HTTPSPDYHeader.STATUS.name(version)).getValue().startsWith("200") && !stream.isClosed()) { Set<String> pushResources = pushStrategy.apply(stream, requestHeaders, responseHeaders); if (pushResources.size() > 0) { PushResourceCoordinator pushResourceCoordinator = new PushResourceCoordinator(pushResources); pushResourceCoordinator.coordinate(); } } }
private void respond(Stream stream, int status) { if (stream.isUnidirectional()) { stream.getSession().rst(new RstInfo(stream.getId(), StreamStatus.INTERNAL_ERROR)); } else { Headers headers = new Headers(); headers.put(HTTPSPDYHeader.STATUS.name(version), String.valueOf(status)); headers.put(HTTPSPDYHeader.VERSION.name(version), "HTTP/1.1"); stream.reply(new ReplyInfo(headers, true)); } }
String.valueOf(HttpStatus.BAD_GATEWAY_502)); ReplyInfo replyInfo = new ReplyInfo(responseHeaders, true); clientStream.reply(replyInfo, LOGGING_CALLBACK);
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); } }); } } }