private static bool TrySetCacheControlValues(CacheControlHeaderValue cc,
List<NameValueHeaderValue> nameValueList)
{
foreach (NameValueHeaderValue nameValue in nameValueList)
{
bool success = true;
string name = nameValue.Name.ToLowerInvariant();
switch (name)
{
case noCacheString:
success = TrySetOptionalTokenList(nameValue, ref cc._noCache, ref cc._noCacheHeaders);
break;
case noStoreString:
success = TrySetTokenOnlyValue(nameValue, ref cc._noStore);
break;
case maxAgeString:
success = TrySetTimeSpan(nameValue, ref cc._maxAge);
break;
case maxStaleString:
success = ((nameValue.Value == null) || TrySetTimeSpan(nameValue, ref cc._maxStaleLimit));
if (success)
{
cc._maxStale = true;
}
break;
case minFreshString:
success = TrySetTimeSpan(nameValue, ref cc._minFresh);
break;
case noTransformString:
success = TrySetTokenOnlyValue(nameValue, ref cc._noTransform);
break;
case onlyIfCachedString:
success = TrySetTokenOnlyValue(nameValue, ref cc._onlyIfCached);
break;
case publicString:
success = TrySetTokenOnlyValue(nameValue, ref cc._publicField);
break;
case privateString:
success = TrySetOptionalTokenList(nameValue, ref cc._privateField, ref cc._privateHeaders);
break;
case mustRevalidateString:
success = TrySetTokenOnlyValue(nameValue, ref cc._mustRevalidate);
break;
case proxyRevalidateString:
success = TrySetTokenOnlyValue(nameValue, ref cc._proxyRevalidate);
break;
case sharedMaxAgeString:
success = TrySetTimeSpan(nameValue, ref cc._sharedMaxAge);
break;
default:
cc.Extensions.Add(nameValue); // success is always true
break;
}
if (!success)
{
return false;
}
}
return true;
}