GetValueLength() статический приватный Метод

static private GetValueLength ( string input, int startIndex ) : int
input string
startIndex int
Результат int
Пример #1
0
 private static void CheckValueFormat(string value)
 {
     if (!string.IsNullOrEmpty(value) && NameValueHeaderValue.GetValueLength(value, 0) != value.Length)
     {
         throw new FormatException(SR.Format((IFormatProvider)CultureInfo.InvariantCulture, SR.net_http_headers_invalid_value, (object)value));
     }
 }
Пример #2
0
 private static void CheckValueFormat(string value)
 {
     if (!string.IsNullOrEmpty(value) && NameValueHeaderValue.GetValueLength(value, 0) != value.Length)
     {
         throw new FormatException(string.Format(CultureInfo.InvariantCulture, "The format of value '{0}' is invalid.", value));
     }
 }
Пример #3
0
        private static bool TryGetParametersEndIndex(string input, ref int parseEndIndex, ref int parameterEndIndex)
        {
            Debug.Assert(parseEndIndex < input.Length, "Expected string to have at least 1 char");
            Debug.Assert(input[parseEndIndex] == ',');

            int current = parseEndIndex;

            do
            {
                current++;                   // skip ',' delimiter

                bool separatorFound = false; // ignore value returned by GetNextNonEmptyOrWhitespaceIndex()
                current = HeaderUtilities.GetNextNonEmptyOrWhitespaceIndex(input, current, true, out separatorFound);
                if (current == input.Length)
                {
                    return(true);
                }

                // Now we have to determine if after ',' we have a list of <name>=<value> pairs that are part of
                // the auth scheme parameters OR if we have another auth scheme. Either way, after ',' we expect a
                // valid token that is either the <name> in a <name>=<value> pair OR <scheme> of another scheme.
                int tokenLength = HttpRuleParser.GetTokenLength(input, current);
                if (tokenLength == 0)
                {
                    return(false);
                }

                current = current + tokenLength;
                current = current + HttpRuleParser.GetWhitespaceLength(input, current);

                // If we reached the end of the string or the token is followed by anything but '=', then the parsed
                // token is another scheme name. The string representing parameters ends before the token (e.g.
                // "Digest a=b, c=d, NTLM": return scheme "Digest" with parameters string "a=b, c=d").
                if ((current == input.Length) || (input[current] != '='))
                {
                    return(true);
                }

                current++; // skip '=' delimiter
                current = current + HttpRuleParser.GetWhitespaceLength(input, current);
                int valueLength = NameValueHeaderValue.GetValueLength(input, current);

                // After '<name>=' we expect a valid <value> (either token or quoted string)
                if (valueLength == 0)
                {
                    return(false);
                }

                // Update parameter end index, since we just parsed a valid <name>=<value> pair that is part of the
                // parameters string.
                current           = current + valueLength;
                parameterEndIndex = current - 1; // -1 because 'current' already points to the char after <value>
                current           = current + HttpRuleParser.GetWhitespaceLength(input, current);
                parseEndIndex     = current;     // this essentially points to parameterEndIndex + whitespace + next char
            } while ((current < input.Length) && (input[current] == ','));

            return(true);
        }
Пример #4
0
        internal static int GetNameValueLength(
            string input,
            int startIndex,
            Func <NameValueHeaderValue> nameValueCreator,
            out NameValueHeaderValue parsedValue)
        {
            parsedValue = (NameValueHeaderValue)null;
            if (string.IsNullOrEmpty(input) || startIndex >= input.Length)
            {
                return(0);
            }
            int tokenLength = HttpRuleParser.GetTokenLength(input, startIndex);

            if (tokenLength == 0)
            {
                return(0);
            }
            string str         = input.Substring(startIndex, tokenLength);
            int    startIndex1 = startIndex + tokenLength;
            int    startIndex2 = startIndex1 + HttpRuleParser.GetWhitespaceLength(input, startIndex1);

            if (startIndex2 == input.Length || input[startIndex2] != '=')
            {
                parsedValue       = nameValueCreator();
                parsedValue._name = str;
                return(startIndex2 + HttpRuleParser.GetWhitespaceLength(input, startIndex2) - startIndex);
            }
            int startIndex3 = startIndex2 + 1;
            int startIndex4 = startIndex3 + HttpRuleParser.GetWhitespaceLength(input, startIndex3);
            int valueLength = NameValueHeaderValue.GetValueLength(input, startIndex4);

            if (valueLength == 0)
            {
                return(0);
            }
            parsedValue        = nameValueCreator();
            parsedValue._name  = str;
            parsedValue._value = input.Substring(startIndex4, valueLength);
            int startIndex5 = startIndex4 + valueLength;

            return(startIndex5 + HttpRuleParser.GetWhitespaceLength(input, startIndex5) - startIndex);
        }
Пример #5
0
        internal static int GetNameValueLength(string input, int startIndex, Func <NameValueHeaderValue> nameValueCreator, out NameValueHeaderValue parsedValue)
        {
            parsedValue = null;
            if (string.IsNullOrEmpty(input) || startIndex >= input.Length)
            {
                return(0);
            }
            int tokenLength = HttpRuleParser.GetTokenLength(input, startIndex);

            if (tokenLength == 0)
            {
                return(0);
            }
            string text = input.Substring(startIndex, tokenLength);
            int    num  = startIndex + tokenLength;

            num += HttpRuleParser.GetWhitespaceLength(input, num);
            if (num == input.Length || input[num] != '=')
            {
                parsedValue      = nameValueCreator();
                parsedValue.name = text;
                num += HttpRuleParser.GetWhitespaceLength(input, num);
                return(num - startIndex);
            }
            num++;
            num += HttpRuleParser.GetWhitespaceLength(input, num);
            int valueLength = NameValueHeaderValue.GetValueLength(input, num);

            if (valueLength == 0)
            {
                return(0);
            }
            parsedValue       = nameValueCreator();
            parsedValue.name  = text;
            parsedValue.value = input.Substring(num, valueLength);
            num += valueLength;
            num += HttpRuleParser.GetWhitespaceLength(input, num);
            return(num - startIndex);
        }