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;
}
}
}