public Range getRange()
        {

            if (null != _range)
            {
                return _range;
            }

            if (!_headers.ContainsKey("range"))
            {
                return null;
            }

            String rangeValue = _headers["range"];
            _range = Range.buildFromString(rangeValue);
            return _range;
        }
Example #2
0
        public static Range buildFromString(String value)
        {
            Range answer = new Range(value);

            string[] tokens = value.Split(new char[] { '=', ',' });

            if (2 != tokens.Length)
            {
                String technicalError = String.Format("2 != tokens.Length; only support simple range values; value = '{0}'", value);
                throw new BaseException( typeof(Range), technicalError);
            }

            String bytes = tokens[0];
            if (!"bytes".Equals(bytes))
            {
                String technicalError = String.Format("!\"bytes\".Equals(bytes); bytes = '{0}'; value = '{1}'", bytes, value );
                throw new BaseException(typeof(Range), technicalError);
            }

            String range = tokens[1];

            log.debug(range, "range");

            int indexOfHyphen = range.IndexOf('-');
            if (-1 == indexOfHyphen)
            {
                String technicalError = String.Format("-1 == indexOfHyphen; range = '{0}'; value = '{1}'", range, value);
                throw new BaseException(typeof(Range), technicalError);
            }

            int secondHyphen = range.IndexOf('-', indexOfHyphen + 1);
            if (-1 != secondHyphen)
            {
                String technicalError = String.Format("-1 != secondHyphen; range = '{0}'; value = '{1}'", range, value);
                throw new BaseException(typeof(Range), technicalError);
            }

            // "bytes=-500"
            if (0 == indexOfHyphen)
            {
                long firstBytePosition = System.Int64.Parse(range);
                answer._firstBytePosition = new BytePosition(firstBytePosition);
                return answer;
            }

            // "bytes=9500-"
            int rangeLength = range.Length;
            if ('-' == range[rangeLength - 1])
            {
                range = range.Substring(0, rangeLength - 1);
                long firstBytePosition = System.Int64.Parse(range);
                answer._firstBytePosition = new BytePosition(firstBytePosition);

                return answer;

            }

            // "bytes=500-999"
            String startPosition = range.Substring(0, indexOfHyphen);
            // long firstBytePosition = System.Int64.Parse(startPosition); // c-sharp does not like this ... Error	1	Elements defined in a namespace cannot be explicitly declared as private, protected, or protected internal	H:\projects.windows\c-sharp\vlc_amigo.solution\jsonbroker.library\common\http\headers\request\Range.cs	11	21	jsonbroker.library
            answer._firstBytePosition = new BytePosition(System.Int64.Parse(startPosition));

            String endPosition = range.Substring(indexOfHyphen + 1);
            answer._lastBytePosition = new BytePosition(System.Int64.Parse(endPosition));

            return answer;

        }