private Session produceSession(String host, short version, InetSocketAddress address) { try { Session session = serverSessions.get(host); if (session == null) { SPDYClient client = factory.newSPDYClient(version); session = client.connect(address, sessionListener).get(getConnectTimeout(), TimeUnit.MILLISECONDS); logger.debug("Proxy session connected to {}", address); Session existing = serverSessions.putIfAbsent(host, session); if (existing != null) { session.goAway(getTimeout(), TimeUnit.MILLISECONDS, new Handler.Adapter<Void>()); session = existing; } } return session; } catch (Exception x) { logger.debug(x); return null; } }
@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, getTimeout(), TimeUnit.MILLISECONDS, new Handler.Adapter<Void>()); }