void _modifySettings()

in lib/src/settings/settings.dart [173:223]


  void _modifySettings(
      ActiveSettings base, List<Setting> changes, bool peerSettings) {
    for (var setting in changes) {
      switch (setting.identifier) {
        case Setting.SETTINGS_ENABLE_PUSH:
          if (setting.value == 0) {
            base.enablePush = false;
          } else if (setting.value == 1) {
            base.enablePush = true;
          } else {
            throw ProtocolException(
                'The push setting can be only set to 0 or 1.');
          }
          break;

        case Setting.SETTINGS_HEADER_TABLE_SIZE:
          base.headerTableSize = setting.value;
          if (peerSettings) {
            _hpackEncoder.updateMaxSendingHeaderTableSize(base.headerTableSize);
          }
          break;

        case Setting.SETTINGS_MAX_HEADER_LIST_SIZE:
          // TODO: Propagate this signal to the HPackContext.
          base.maxHeaderListSize = setting.value;
          break;

        case Setting.SETTINGS_MAX_CONCURRENT_STREAMS:
          // NOTE: We will not force closing of existing streams if the limit is
          // lower than the current number of open streams. But we will prevent
          // new streams from being created if the number of existing streams
          // is above this limit.
          base.maxConcurrentStreams = setting.value;
          break;

        case Setting.SETTINGS_INITIAL_WINDOW_SIZE:
          if (setting.value < (1 << 31)) {
            var difference = setting.value - base.initialWindowSize;
            _onInitialWindowSizeChangeController.add(difference);
            base.initialWindowSize = setting.value;
          } else {
            throw FlowControlException('Invalid initial window size.');
          }
          break;

        default:
          // Spec says to ignore unknown settings.
          break;
      }
    }
  }