GetMediaTypeExpressionLength() private static method

private static GetMediaTypeExpressionLength ( string input, int startIndex, string &mediaType ) : int
input string
startIndex int
mediaType string
return int
        internal static int GetMediaTypeLength(string input, int startIndex,
                                               Func <MediaTypeHeaderValue> mediaTypeCreator, out MediaTypeHeaderValue parsedValue)
        {
            Contract.Requires(mediaTypeCreator != null);
            Contract.Requires(startIndex >= 0);

            parsedValue = null;

            if (string.IsNullOrEmpty(input) || (startIndex >= input.Length))
            {
                return(0);
            }

            // Caller must remove leading whitespaces. If not, we'll return 0.
            string mediaType       = null;
            int    mediaTypeLength = MediaTypeHeaderValue.GetMediaTypeExpressionLength(input, startIndex, out mediaType);

            if (mediaTypeLength == 0)
            {
                return(0);
            }

            int current = startIndex + mediaTypeLength;

            current = current + HttpRuleParser.GetWhitespaceLength(input, current);
            MediaTypeHeaderValue mediaTypeHeader = null;

            // If we're not done and we have a parameter delimiter, then we have a list of parameters.
            if ((current < input.Length) && (input[current] == ';'))
            {
                mediaTypeHeader           = mediaTypeCreator();
                mediaTypeHeader.mediaType = mediaType;

                current++; // skip delimiter.
                int parameterLength = NameValueHeaderValue.GetNameValueListLength(input, current, ';',
                                                                                  mediaTypeHeader.Parameters);

                if (parameterLength == 0)
                {
                    return(0);
                }

                parsedValue = mediaTypeHeader;
                return(current + parameterLength - startIndex);
            }

            // We have a media type without parameters.
            mediaTypeHeader           = mediaTypeCreator();
            mediaTypeHeader.mediaType = mediaType;
            parsedValue = mediaTypeHeader;
            return(current - startIndex);
        }
Exemplo n.º 2
0
        private static void CheckMediaTypeFormat(string mediaType, string parameterName)
        {
            if (string.IsNullOrEmpty(mediaType))
            {
                throw new ArgumentException(SR.net_http_argument_empty_string, parameterName);
            }
            string mediaType1;

            if (MediaTypeHeaderValue.GetMediaTypeExpressionLength(mediaType, 0, out mediaType1) == 0 || mediaType1.Length != mediaType.Length)
            {
                throw new FormatException(SR.Format((IFormatProvider)CultureInfo.InvariantCulture, SR.net_http_headers_invalid_value, (object)mediaType));
            }
        }
Exemplo n.º 3
0
        internal static int GetMediaTypeLength(
            string input,
            int startIndex,
            Func <MediaTypeHeaderValue> mediaTypeCreator,
            out MediaTypeHeaderValue parsedValue)
        {
            parsedValue = (MediaTypeHeaderValue)null;
            if (string.IsNullOrEmpty(input) || startIndex >= input.Length)
            {
                return(0);
            }
            string mediaType        = (string)null;
            int    expressionLength = MediaTypeHeaderValue.GetMediaTypeExpressionLength(input, startIndex, out mediaType);

            if (expressionLength == 0)
            {
                return(0);
            }
            int startIndex1 = startIndex + expressionLength;
            int index       = startIndex1 + HttpRuleParser.GetWhitespaceLength(input, startIndex1);

            if (index < input.Length && input[index] == ';')
            {
                MediaTypeHeaderValue mediaTypeHeaderValue = mediaTypeCreator();
                mediaTypeHeaderValue._mediaType = mediaType;
                int startIndex2         = index + 1;
                int nameValueListLength = NameValueHeaderValue.GetNameValueListLength(input, startIndex2, ';', (ObjectCollection <NameValueHeaderValue>)mediaTypeHeaderValue.Parameters);
                if (nameValueListLength == 0)
                {
                    return(0);
                }
                parsedValue = mediaTypeHeaderValue;
                return(startIndex2 + nameValueListLength - startIndex);
            }
            MediaTypeHeaderValue mediaTypeHeaderValue1 = mediaTypeCreator();

            mediaTypeHeaderValue1._mediaType = mediaType;
            parsedValue = mediaTypeHeaderValue1;
            return(index - startIndex);
        }