private PushInfo convertPushInfo(PushInfo pushInfo, Stream from, Stream to) { Fields headersToConvert = pushInfo.getHeaders(); Fields headers = convertHeaders(from, to, headersToConvert); return new PushInfo(getTimeout(), TimeUnit.MILLISECONDS, headers, pushInfo.isClose()); }
private void pushResource(String pushResource) { Fields.Field scheme = requestHeaders.get(HTTPSPDYHeader.SCHEME.name(version)); Fields.Field host = requestHeaders.get(HTTPSPDYHeader.HOST.name(version)); Fields.Field uri = requestHeaders.get(HTTPSPDYHeader.URI.name(version)); final Fields pushHeaders = createPushHeaders(scheme, host, pushResource); final Fields pushRequestHeaders = createRequestHeaders(scheme, host, uri, pushResource); stream.push(new PushInfo(pushHeaders, false), new Promise<Stream>() { @Override public void succeeded(Stream pushStream) { if (LOG.isDebugEnabled()) LOG.debug("Headers pushed for {} on {}", pushHeaders.get(HTTPSPDYHeader.URI.name(version)), pushStream); queue.offer(new PushResource(pushStream, pushRequestHeaders)); sendNextResourceData(); } @Override public void failed(Throwable x) { LOG.debug("Creating push stream failed.", x); sendNextResourceData(); } }); }
private void processSyn(SessionFrameListener listener, IStream stream, SynStreamFrame frame) { stream.process(frame); // Update the last stream id before calling the application (which may send a GO_AWAY) updateLastStreamId(stream); StreamFrameListener streamListener; if (stream.isUnidirectional()) { PushInfo pushInfo = new PushInfo(frame.getHeaders(), frame.isClose()); streamListener = notifyOnPush(stream.getAssociatedStream().getStreamFrameListener(), stream, pushInfo); } else { SynInfo synInfo = new SynInfo(frame.getHeaders(), frame.isClose(), frame.getPriority()); streamListener = notifyOnSyn(listener, stream, synInfo); } stream.setStreamFrameListener(streamListener); // The onSyn() listener may have sent a frame that closed the stream if (stream.isClosed()) removeStream(stream); }