Beispiel #1
0
        List <string> GetAllHeaderValues(HeaderBucket bucket, HeaderInfo headerInfo)
        {
            List <string> string_values = null;

            if (headerInfo != null && headerInfo.AllowsMany)
            {
                string_values = headerInfo.ToStringCollection(bucket.Parsed);
            }
            else
            {
                if (bucket.Parsed != null)
                {
                    string s = bucket.ParsedToString();
                    if (!string.IsNullOrEmpty(s))
                    {
                        string_values = new List <string> ();
                        string_values.Add(s);
                    }
                }
            }

            if (bucket.HasStringValues)
            {
                if (string_values == null)
                {
                    string_values = new List <string> ();
                }

                string_values.AddRange(bucket.Values);
            }

            return(string_values);
        }
Beispiel #2
0
        internal HttpHeaderValueCollection <T> GetValues <T> (string name) where T : class
        {
            HeaderBucket value;

            if (!headers.TryGetValue(name, out value))
            {
                value = new HeaderBucket(new HttpHeaderValueCollection <T> (this, known_headers [name]));
                headers.Add(name, value);
            }

            if (value.HasStringValues)
            {
                var hinfo = known_headers[name];
                if (value.Parsed == null)
                {
                    value.Parsed = hinfo.CreateCollection(this);
                }

                object pvalue;
                for (int i = 0; i < value.Values.Count; ++i)
                {
                    if (!hinfo.TryParse(value.Values[i], out pvalue))
                    {
                        continue;
                    }

                    hinfo.AddToCollection(value.Parsed, pvalue);
                    value.Values.RemoveAt(i);
                    --i;
                }
            }

            return((HttpHeaderValueCollection <T>)value.Parsed);
        }
    protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        AuthenticationHeaderValue header = request.Headers.Authorization;

        if (header != null)
        {
            HeaderBucket bucket = (HeaderBucket)request.GetDependencyScope().GetService(typeof(HeaderBucket));
            bucket.Add(new HeaderBucket.Header(HeaderConstants.AUTHORIZATION_TOKEN, header.Parameter));
        }

        return(base.SendAsync(request, cancellationToken));
    }
Beispiel #4
0
        internal HttpHeaderValueCollection <T> GetValues <T> (string name) where T : class
        {
            HeaderBucket value;

            if (!headers.TryGetValue(name, out value))
            {
                var hinfo = known_headers[name];
                value = new HeaderBucket(new HttpHeaderValueCollection <T> (this, hinfo), hinfo.CustomToString);
                headers.Add(name, value);
            }

            var col = (HttpHeaderValueCollection <T>)value.Parsed;

            if (value.HasStringValues)
            {
                var hinfo = known_headers[name];
                if (col == null)
                {
                    value.Parsed = col = new HttpHeaderValueCollection <T> (this, hinfo);
                }

                object pvalue;
                for (int i = 0; i < value.Values.Count; ++i)
                {
                    var svalue = value.Values[i];
                    if (!hinfo.TryParse(svalue, out pvalue))
                    {
                        col.AddInvalidValue(svalue);
                    }
                    else
                    {
                        hinfo.AddToCollection(col, pvalue);
                    }
                }

                value.Values.Clear();
            }

            return(col);
        }
Beispiel #5
0
 void SetValue <T> (string name, T value, Func <object, string> toStringConverter = null)
 {
     headers[name] = new HeaderBucket(value, toStringConverter);
 }
Beispiel #6
0
        bool AddInternal(string name, IEnumerable <string> values, HeaderInfo headerInfo, bool ignoreInvalid)
        {
            HeaderBucket bucket;

            headers.TryGetValue(name, out bucket);
            bool ok = true;

            foreach (var value in values)
            {
                bool first_entry = bucket == null;

                if (headerInfo != null)
                {
                    object parsed_value;
                    if (!headerInfo.TryParse(value, out parsed_value))
                    {
                        if (ignoreInvalid)
                        {
                            ok = false;
                            continue;
                        }

                        throw new FormatException();
                    }

                    if (headerInfo.AllowsMany)
                    {
                        if (bucket == null)
                        {
                            bucket = new HeaderBucket(headerInfo.CreateCollection(this));
                        }

                        headerInfo.AddToCollection(bucket.Parsed, parsed_value);
                    }
                    else
                    {
                        if (bucket != null)
                        {
                            throw new FormatException();
                        }

                        bucket = new HeaderBucket(parsed_value);
                    }
                }
                else
                {
                    if (bucket == null)
                    {
                        bucket = new HeaderBucket(null);
                    }

                    bucket.Values.Add(value ?? string.Empty);
                }

                if (first_entry)
                {
                    headers.Add(name, bucket);
                }
            }

            return(ok);
        }
Beispiel #7
0
 public HeaderAwareBus(IBus bus, HeaderBucket bucket)
 {
     _bus    = bus;
     _bucket = bucket;
 }
Beispiel #8
0
 void SetValue <T> (string name, T value)
 {
     headers[name] = new HeaderBucket(value);
 }