aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Common/Net/HttpRequestOptions.cs
blob: 432e389d3b207ad4679733adfe2bb483da628815 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
using System;
using System.Collections.Generic;
using System.Threading;
using Microsoft.Net.Http.Headers;

namespace MediaBrowser.Common.Net
{
    /// <summary>
    /// Class HttpRequestOptions
    /// </summary>
    public class HttpRequestOptions
    {
        /// <summary>
        /// Gets or sets the URL.
        /// </summary>
        /// <value>The URL.</value>
        public string Url { get; set; }

        public CompressionMethod DecompressionMethod { get; set; }

        /// <summary>
        /// Gets or sets the accept header.
        /// </summary>
        /// <value>The accept header.</value>
        public string AcceptHeader
        {
            get => GetHeaderValue(HeaderNames.Accept);
            set => RequestHeaders[HeaderNames.Accept] = value;
        }

        /// <summary>
        /// Gets or sets the cancellation token.
        /// </summary>
        /// <value>The cancellation token.</value>
        public CancellationToken CancellationToken { get; set; }

        /// <summary>
        /// Gets or sets the user agent.
        /// </summary>
        /// <value>The user agent.</value>
        public string UserAgent
        {
            get => GetHeaderValue(HeaderNames.UserAgent);
            set => RequestHeaders[HeaderNames.UserAgent] = value;
        }

        /// <summary>
        /// Gets or sets the referrer.
        /// </summary>
        /// <value>The referrer.</value>
        public string Referer
        {
            get => GetHeaderValue(HeaderNames.Referer);
            set => RequestHeaders[HeaderNames.Referer] = value;
        }

        /// <summary>
        /// Gets or sets the host.
        /// </summary>
        /// <value>The host.</value>
        public string Host
        {
            get => GetHeaderValue(HeaderNames.Host);
            set => RequestHeaders[HeaderNames.Host] = value;
        }

        /// <summary>
        /// Gets or sets the progress.
        /// </summary>
        /// <value>The progress.</value>
        public IProgress<double> Progress { get; set; }

        public Dictionary<string, string> RequestHeaders { get; private set; }

        public string RequestContentType { get; set; }

        public string RequestContent { get; set; }
        public byte[] RequestContentBytes { get; set; }

        public bool BufferContent { get; set; }

        public bool LogRequest { get; set; }
        public bool LogRequestAsDebug { get; set; }
        public bool LogErrors { get; set; }

        public bool LogErrorResponseBody { get; set; }
        public bool EnableKeepAlive { get; set; }

        public CacheMode CacheMode { get; set; }
        public TimeSpan CacheLength { get; set; }

        public bool EnableDefaultUserAgent { get; set; }

        public bool AppendCharsetToMimeType { get; set; }

        private string GetHeaderValue(string name)
        {
            RequestHeaders.TryGetValue(name, out var value);

            return value;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="HttpRequestOptions"/> class.
        /// </summary>
        public HttpRequestOptions()
        {
            RequestHeaders = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

            LogRequest = true;
            LogErrors = true;
            CacheMode = CacheMode.None;
            DecompressionMethod = CompressionMethod.Deflate;
        }
    }

    public enum CacheMode
    {
        None = 0,
        Unconditional = 1
    }

    public enum CompressionMethod
    {
        None = 0b00000001,
        Deflate = 0b00000010,
        Gzip = 0b00000100
    }
}