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