@Override
 protected void nextIncomingFrame(Frame frame) {
   if (frame.isFin() && !incomingContextTakeover) {
     LOG.debug("Incoming Context Reset");
     getInflater().reset();
   }
   super.nextIncomingFrame(frame);
 }
 @Override
 protected void nextOutgoingFrame(Frame frame, WriteCallback callback, BatchMode batchMode) {
   if (frame.isFin() && !outgoingContextTakeover) {
     LOG.debug("Outgoing Context Reset");
     getDeflater().reset();
   }
   super.nextOutgoingFrame(frame, callback, batchMode);
 }
  @Override
  public void setConfig(final ExtensionConfig config) {
    configRequested = new ExtensionConfig(config);
    configNegotiated = new ExtensionConfig(config.getName());

    for (String key : config.getParameterKeys()) {
      key = key.trim();
      switch (key) {
        case "client_max_window_bits":
        case "server_max_window_bits":
          {
            // Not supported by Jetty
            // Don't negotiate these parameters
            break;
          }
        case "client_no_context_takeover":
          {
            configNegotiated.setParameter("client_no_context_takeover");
            switch (getPolicy().getBehavior()) {
              case CLIENT:
                incomingContextTakeover = false;
                break;
              case SERVER:
                outgoingContextTakeover = false;
                break;
            }
            break;
          }
        case "server_no_context_takeover":
          {
            configNegotiated.setParameter("server_no_context_takeover");
            switch (getPolicy().getBehavior()) {
              case CLIENT:
                outgoingContextTakeover = false;
                break;
              case SERVER:
                incomingContextTakeover = false;
                break;
            }
            break;
          }
        default:
          {
            throw new IllegalArgumentException();
          }
      }
    }

    super.setConfig(configNegotiated);
  }