예제 #1
0
            private static int GetParameterLength(string input, int startIndex, out MediaTypeParameter parsedValue)
            {
                if (OffsetIsOutOfRange(startIndex, input.Length) || input[startIndex] != ';')
                {
                    parsedValue = default(MediaTypeParameter);
                    return(0);
                }

                var nameLength = GetNameLength(input, startIndex, out var name);

                var current = startIndex + nameLength;

                if (nameLength == 0 || OffsetIsOutOfRange(current, input.Length) || input[current] != '=')
                {
                    if (current == input.Length && name.Equals("*", StringComparison.OrdinalIgnoreCase))
                    {
                        var asterisk = new StringSegment("*");
                        parsedValue = new MediaTypeParameter(asterisk, asterisk);
                        return(current - startIndex);
                    }
                    else
                    {
                        parsedValue = default(MediaTypeParameter);
                        return(0);
                    }
                }

                var valueLength = GetValueLength(input, current, out var value);

                parsedValue = new MediaTypeParameter(name, value);
                current    += valueLength;

                return(current - startIndex);
            }
예제 #2
0
            private static int GetParameterLength(string input, int startIndex, out MediaTypeParameter parsedValue)
            {
                if (OffsetIsOutOfRange(startIndex, input.Length) ||
                    input[startIndex] != ';')
                {
                    parsedValue = default(MediaTypeParameter);
                    return(0);
                }

                StringSegment name;
                var           nameLength = GetNameLength(input, startIndex, out name);

                var current = startIndex + nameLength;

                if (nameLength == 0 || OffsetIsOutOfRange(current, input.Length) || input[current] != '=')
                {
                    parsedValue = default(MediaTypeParameter);
                    return(0);
                }

                StringSegment value;
                var           valueLength = GetValueLength(input, current, out value);

                parsedValue = new MediaTypeParameter(name, value);

                current = current + valueLength;
                return(current - startIndex);
            }
예제 #3
0
            public bool ParseNextParameter(out MediaTypeParameter result)
            {
                if (_mediaTypeBuffer == null)
                {
                    result = default(MediaTypeParameter);
                    return(false);
                }

                var parameterLength = GetParameterLength(_mediaTypeBuffer, CurrentOffset, out result);

                CurrentOffset = CurrentOffset + parameterLength;

                if (parameterLength == 0)
                {
                    ParsingFailed = _length != null && CurrentOffset < _length;
                    return(false);
                }

                return(true);
            }
예제 #4
0
            public bool ParseNextParameter(out MediaTypeParameter result)
            {
                if (this._mediaTypeBuffer == null)
                {
                    this.ParsingFailed = true;
                    result             = default;
                    return(false);
                }

                var parameterLength = GetParameterLength(this._mediaTypeBuffer, this.CurrentOffset, out result);

                this.CurrentOffset += parameterLength;

                if (parameterLength == 0)
                {
                    this.ParsingFailed = this._length != null && this.CurrentOffset < this._length;
                    return(false);
                }

                return(true);
            }
예제 #5
0
        private static int GetParameterLength(string input, int startIndex, out MediaTypeParameter parsedValue)
        {
            if (OffsetIsOutOfRange(startIndex, input.Length) || input[startIndex] != ';')
            {
                parsedValue = default(MediaTypeParameter);
                return(0);
            }

            var nameLength = GetNameLength(input, startIndex, out var name);

            var current = startIndex + nameLength;

            if (nameLength == 0 || OffsetIsOutOfRange(current, input.Length) || input[current] != '=')
            {
                if (current == input.Length && name.Equals("*", StringComparison.OrdinalIgnoreCase))
                {
                    // As a special case, we allow a trailing ";*" to indicate a wildcard
                    // string allowing any other parameters. It's the same as ";*=*".
                    var asterisk = new StringSegment("*");
                    parsedValue = new MediaTypeParameter(asterisk, asterisk);
                    return(current - startIndex);
                }
                else
                {
                    parsedValue = default(MediaTypeParameter);
                    return(0);
                }
            }

            var valueLength = GetValueLength(input, current, out var value);

            parsedValue = new MediaTypeParameter(name, value);
            current    += valueLength;

            return(current - startIndex);
        }