@Override
 public void rst(RstInfo rstInfo)
     throws InterruptedException, ExecutionException, TimeoutException {
   FutureCallback result = new FutureCallback();
   rst(rstInfo, result);
   if (rstInfo.getTimeout() > 0) result.get(rstInfo.getTimeout(), rstInfo.getUnit());
   else result.get();
 }
 @Override
 public void rst(RstInfo rstInfo, Callback callback) {
   // SPEC v3, 2.2.2
   if (goAwaySent.get()) {
     complete(callback);
   } else {
     int streamId = rstInfo.getStreamId();
     IStream stream = streams.get(streamId);
     RstStreamFrame frame =
         new RstStreamFrame(version, streamId, rstInfo.getStreamStatus().getCode(version));
     control(stream, frame, rstInfo.getTimeout(), rstInfo.getUnit(), callback);
     if (stream != null) {
       stream.process(frame);
       removeStream(stream);
     }
   }
 }
 @Override
 public void rst(RstInfo rstInfo, Callback handler) {
   // Not much we can do in HTTP land: just close the connection
   goAway(new GoAwayInfo(rstInfo.getTimeout(), rstInfo.getUnit()), handler);
 }