private void closeConnections() { for (Session session : sessions) session.goAway(new GoAwayInfo(), Callback.Adapter.INSTANCE); sessions.clear(); }
@Override public void onRst(Session serverSession, RstInfo serverRstInfo) { Stream serverStream = serverSession.getStream(serverRstInfo.getStreamId()); if (serverStream != null) { Stream clientStream = (Stream)serverStream.getAttribute(CLIENT_STREAM_ATTRIBUTE); if (clientStream != null) { Session clientSession = clientStream.getSession(); RstInfo clientRstInfo = new RstInfo(clientStream.getId(), serverRstInfo.getStreamStatus()); clientSession.rst(clientRstInfo, Callback.Adapter.INSTANCE); } } }
public HttpTransportOverSPDY(Connector connector, HttpConfiguration configuration, EndPoint endPoint, PushStrategy pushStrategy, Stream stream, Fields requestHeaders) { this.connector = connector; this.configuration = configuration; this.endPoint = endPoint; this.pushStrategy = pushStrategy == null ? new PushStrategy.None() : pushStrategy; this.stream = stream; this.requestHeaders = requestHeaders; Session session = stream.getSession(); this.version = session.getVersion(); }
protected void addRequestProxyHeaders(Stream stream, Fields headers) { addViaHeader(headers); Fields.Field schemeField = headers.get(HTTPSPDYHeader.SCHEME.name(stream.getSession().getVersion())); if(schemeField != null) headers.add("X-Forwarded-Proto", schemeField.getValue()); InetSocketAddress address = stream.getSession().getRemoteAddress(); if (address != null) { headers.add("X-Forwarded-Host", address.getHostName()); headers.add("X-Forwarded-For", address.toString()); } headers.add("X-Forwarded-Server", name()); }
public StreamFrameListener proxy(final Stream clientStream, SynInfo clientSynInfo, ProxyEngineSelector.ProxyServerInfo proxyServerInfo) { Fields headers = new Fields(clientSynInfo.getHeaders(), false); short serverVersion = getVersion(proxyServerInfo.getProtocol()); InetSocketAddress address = proxyServerInfo.getAddress(); Session serverSession = produceSession(proxyServerInfo.getHost(), serverVersion, address); if (serverSession == null) { rst(clientStream); return null; } final Session clientSession = clientStream.getSession(); addRequestProxyHeaders(clientStream, headers); customizeRequestHeaders(clientStream, headers); convert(clientSession.getVersion(), serverVersion, headers); SynInfo serverSynInfo = new SynInfo(headers, clientSynInfo.isClose()); StreamFrameListener listener = new ProxyStreamFrameListener(clientStream); StreamPromise promise = new StreamPromise(clientStream, serverSynInfo); clientStream.setAttribute(STREAM_PROMISE_ATTRIBUTE, promise); serverSession.syn(serverSynInfo, listener, promise); return this; }
try clientStream.getSession().rst(new RstInfo(clientStream.getId(), StreamStatus.INTERNAL_ERROR)); Fields responseHeaders = createResponseHeaders(clientStream, response); if (failure instanceof TimeoutException) responseHeaders.add(HTTPSPDYHeader.STATUS.name(clientStream.getSession().getVersion()), String.valueOf(HttpStatus.GATEWAY_TIMEOUT_504)); else responseHeaders.add(HTTPSPDYHeader.STATUS.name(clientStream.getSession().getVersion()), String.valueOf(HttpStatus.BAD_GATEWAY_502)); ReplyInfo replyInfo = new ReplyInfo(responseHeaders, true);
private void rst(Stream stream) { RstInfo rstInfo = new RstInfo(stream.getId(), StreamStatus.REFUSED_STREAM); stream.getSession().rst(rstInfo, Callback.Adapter.INSTANCE); }
protected void addRequestProxyHeaders(Stream stream, Headers headers) { addViaHeader(headers); String address = (String)stream.getSession().getAttribute("org.eclipse.jetty.spdy.remoteAddress"); if (address != null) headers.add("X-Forwarded-For", address); }
public StreamFrameListener proxy(final Stream clientStream, SynInfo clientSynInfo, ProxyEngineSelector.ProxyServerInfo proxyServerInfo) { Headers headers = new Headers(clientSynInfo.getHeaders(), false); short serverVersion = getVersion(proxyServerInfo.getProtocol()); InetSocketAddress address = proxyServerInfo.getAddress(); Session serverSession = produceSession(proxyServerInfo.getHost(), serverVersion, address); if (serverSession == null) { rst(clientStream); return null; } final Session clientSession = clientStream.getSession(); addRequestProxyHeaders(clientStream, headers); customizeRequestHeaders(clientStream, headers); convert(clientSession.getVersion(), serverVersion, headers); SynInfo serverSynInfo = new SynInfo(headers, clientSynInfo.isClose()); StreamFrameListener listener = new ProxyStreamFrameListener(clientStream); StreamHandler handler = new StreamHandler(clientStream, serverSynInfo); clientStream.setAttribute(STREAM_HANDLER_ATTRIBUTE, handler); serverSession.syn(serverSynInfo, listener, timeout, TimeUnit.MILLISECONDS, handler); return this; }
private void rst(Stream stream) { RstInfo rstInfo = new RstInfo(stream.getId(), StreamStatus.REFUSED_STREAM); stream.getSession().rst(rstInfo); }
void closeSessions() { for (Session session : sessions) session.goAway(new GoAwayInfo(), Callback.Adapter.INSTANCE); sessions.clear(); }
private Fields convertHeaders(Stream from, Stream to, Fields headersToConvert) { Fields headers = new Fields(headersToConvert, false); addResponseProxyHeaders(from, headers); customizeResponseHeaders(from, headers); convert(from.getSession().getVersion(), to.getSession().getVersion(), headers); return headers; } }
@Override public void onRst(Session serverSession, RstInfo serverRstInfo) { Stream serverStream = serverSession.getStream(serverRstInfo.getStreamId()); if (serverStream != null) { Stream clientStream = (Stream)serverStream.getAttribute(CLIENT_STREAM_ATTRIBUTE); if (clientStream != null) { Session clientSession = clientStream.getSession(); RstInfo clientRstInfo = new RstInfo(clientStream.getId(), serverRstInfo.getStreamStatus()); clientSession.rst(clientRstInfo, getTimeout(), TimeUnit.MILLISECONDS, new Handler.Adapter<Void>()); } } }
private void rst(Stream stream) { RstInfo rstInfo = new RstInfo(stream.getId(), StreamStatus.REFUSED_STREAM); stream.getSession().rst(rstInfo, Callback.Adapter.INSTANCE); }
private void close(Stream stream) { stream.getSession().goAway(); }
@Override public void onReply(final Stream stream, ReplyInfo replyInfo) { logger.debug("S -> P {} on {}", replyInfo, stream); short serverVersion = stream.getSession().getVersion(); Headers headers = new Headers(replyInfo.getHeaders(), false); addResponseProxyHeaders(stream, headers); customizeResponseHeaders(stream, headers); short clientVersion = this.clientStream.getSession().getVersion(); convert(serverVersion, clientVersion, headers); this.replyInfo = new ReplyInfo(headers, replyInfo.isClose()); if (replyInfo.isClose()) reply(stream); }
private void rst(Stream stream) { RstInfo rstInfo = new RstInfo(stream.getId(), StreamStatus.REFUSED_STREAM); stream.getSession().rst(rstInfo, getTimeout(), TimeUnit.MILLISECONDS, new Handler.Adapter<Void>()); }
@Override public void flush(long maxIdleTime) throws IOException { try { Buffer content = getContentBuffer(); while (content != null) { DataInfo dataInfo = toDataInfo(content, closed); logger.debug("HTTP < {} bytes of content", dataInfo.length()); stream.data(dataInfo).get(maxIdleTime, TimeUnit.MILLISECONDS); content.clear(); _bypass = false; content = getContentBuffer(); } } catch (TimeoutException x) { stream.getSession().goAway(); throw new EOFException("write timeout"); } catch (InterruptedException x) { throw new InterruptedIOException(); } catch (ExecutionException x) { throw new IOException(x.getCause()); } }
@Override public StreamFrameListener onSyn(Stream serverStream, SynInfo serverSynInfo) { logger.debug("S -> P pushed {} on {}", serverSynInfo, serverStream); Headers headers = new Headers(serverSynInfo.getHeaders(), false); addResponseProxyHeaders(serverStream, headers); customizeResponseHeaders(serverStream, headers); Stream clientStream = (Stream)serverStream.getAssociatedStream().getAttribute(CLIENT_STREAM_ATTRIBUTE); convert(serverStream.getSession().getVersion(), clientStream.getSession().getVersion(), headers); StreamHandler handler = new StreamHandler(clientStream, serverSynInfo); serverStream.setAttribute(STREAM_HANDLER_ATTRIBUTE, handler); clientStream.syn(new SynInfo(headers, serverSynInfo.isClose()), getTimeout(), TimeUnit.MILLISECONDS, handler); return this; }
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)); } }