private static void ParseMultipleRawHeaderValues(
     HeaderDescriptor descriptor,
     HttpHeaders.HeaderStoreItemInfo info,
     List <string> rawValues)
 {
     if (descriptor.Parser == null)
     {
         foreach (string rawValue in rawValues)
         {
             if (!HttpHeaders.ContainsInvalidNewLine(rawValue, descriptor.Name))
             {
                 HttpHeaders.AddValue(info, (object)rawValue, HttpHeaders.StoreLocation.Parsed);
             }
         }
     }
     else
     {
         foreach (string rawValue in rawValues)
         {
             if (!HttpHeaders.TryParseAndAddRawHeaderValue(descriptor, info, rawValue, true) && NetEventSource.IsEnabled)
             {
                 NetEventSource.Log.HeadersInvalidValue(descriptor.Name, rawValue);
             }
         }
     }
 }
        private static void ParseSingleRawHeaderValue(
            HeaderDescriptor descriptor,
            HttpHeaders.HeaderStoreItemInfo info)
        {
            string rawValue = info.RawValue as string;

            if (descriptor.Parser == null)
            {
                if (HttpHeaders.ContainsInvalidNewLine(rawValue, descriptor.Name))
                {
                    return;
                }
                HttpHeaders.AddValue(info, (object)rawValue, HttpHeaders.StoreLocation.Parsed);
            }
            else
            {
                if (HttpHeaders.TryParseAndAddRawHeaderValue(descriptor, info, rawValue, true) || !NetEventSource.IsEnabled)
                {
                    return;
                }
                NetEventSource.Log.HeadersInvalidValue(descriptor.Name, rawValue);
            }
        }
        private static bool TryParseAndAddRawHeaderValue(
            HeaderDescriptor descriptor,
            HttpHeaders.HeaderStoreItemInfo info,
            string value,
            bool addWhenInvalid)
        {
            if (!info.CanAddValue(descriptor.Parser))
            {
                if (addWhenInvalid)
                {
                    HttpHeaders.AddValue(info, (object)(value ?? string.Empty), HttpHeaders.StoreLocation.Invalid);
                }
                return(false);
            }
            int    index       = 0;
            object parsedValue = (object)null;

            if (descriptor.Parser.TryParseValue(value, info.ParsedValue, ref index, out parsedValue))
            {
                if (value == null || index == value.Length)
                {
                    if (parsedValue != null)
                    {
                        HttpHeaders.AddValue(info, parsedValue, HttpHeaders.StoreLocation.Parsed);
                    }
                    return(true);
                }
                List <object> objectList = new List <object>();
                if (parsedValue != null)
                {
                    objectList.Add(parsedValue);
                }
                while (index < value.Length)
                {
                    if (descriptor.Parser.TryParseValue(value, info.ParsedValue, ref index, out parsedValue))
                    {
                        if (parsedValue != null)
                        {
                            objectList.Add(parsedValue);
                        }
                    }
                    else
                    {
                        if (!HttpHeaders.ContainsInvalidNewLine(value, descriptor.Name) & addWhenInvalid)
                        {
                            HttpHeaders.AddValue(info, (object)value, HttpHeaders.StoreLocation.Invalid);
                        }
                        return(false);
                    }
                }
                foreach (object obj in objectList)
                {
                    HttpHeaders.AddValue(info, obj, HttpHeaders.StoreLocation.Parsed);
                }
                return(true);
            }
            if (!HttpHeaders.ContainsInvalidNewLine(value, descriptor.Name) & addWhenInvalid)
            {
                HttpHeaders.AddValue(info, (object)(value ?? string.Empty), HttpHeaders.StoreLocation.Invalid);
            }
            return(false);
        }