Skip to content

Commit ca84ca1

Browse files
KaruzasPluginCornerads102003
authored andcommitted
Update WebRequest to allow setting DecompressionMethod via Enqueue instead of relying on static property which could break other plugins
1 parent f6dac0b commit ca84ca1

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

src/Libraries/WebRequests.cs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ public class WebRequests : Library
3636
/// <summary>
3737
/// Specifies the HTTP request decompression support
3838
/// </summary>
39+
[Obsolete("AllowDecompression is deprecated, use Enqueue with DecompressionMode instead")]
40+
3941
public static bool AllowDecompression = false;
4042

4143
/// <summary>
@@ -88,6 +90,11 @@ public class WebRequest
8890
/// </summary>
8991
public Dictionary<string, string> RequestHeaders { get; set; }
9092

93+
/// <summary>
94+
/// Gets the decompression type for web requests
95+
/// </summary>
96+
public DecompressionMethods DecompressionMethod { get; set; } = DecompressionMethods.None;
97+
9198
private HttpWebRequest request;
9299
private WaitHandle waitHandle;
93100
private RegisteredWaitHandle registeredWaitHandle;
@@ -121,7 +128,17 @@ public void Start()
121128
request.Proxy = null; // Make sure no proxy is set
122129
request.KeepAlive = false;
123130
request.Timeout = (int)Math.Round((Timeout.Equals(0f) ? WebRequests.Timeout : Timeout) * 1000f);
124-
request.AutomaticDecompression = AllowDecompression ? DecompressionMethods.GZip | DecompressionMethods.Deflate : DecompressionMethods.None;
131+
132+
// Backward compatibility
133+
if (AllowDecompression && DecompressionMethod == DecompressionMethods.None)
134+
{
135+
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
136+
}
137+
else
138+
{
139+
request.AutomaticDecompression = DecompressionMethod;
140+
}
141+
125142
request.ServicePoint.MaxIdleTime = request.Timeout;
126143
request.ServicePoint.Expect100Continue = ServicePointManager.Expect100Continue;
127144
request.ServicePoint.ConnectionLimit = ServicePointManager.DefaultConnectionLimit;
@@ -488,10 +505,11 @@ public void EnqueuePut(string url, string body, Action<int, string> callback, Pl
488505
/// <param name="method"></param>
489506
/// <param name="headers"></param>
490507
/// <param name="timeout"></param>
508+
/// <param name="decompressionMethod"></param>
491509
[LibraryFunction("Enqueue")]
492-
public void Enqueue(string url, string body, Action<int, string> callback, Plugin owner, RequestMethod method = RequestMethod.GET, Dictionary<string, string> headers = null, float timeout = 0f)
510+
public void Enqueue(string url, string body, Action<int, string> callback, Plugin owner, RequestMethod method = RequestMethod.GET, Dictionary<string, string> headers = null, float timeout = 0f, DecompressionMethods decompressionMethod = DecompressionMethods.None)
493511
{
494-
WebRequest request = new WebRequest(url, callback, owner) { Method = method.ToString(), RequestHeaders = headers, Timeout = timeout, Body = body };
512+
WebRequest request = new WebRequest(url, callback, owner) { Method = method.ToString(), RequestHeaders = headers, Timeout = timeout, Body = body, DecompressionMethod = decompressionMethod };
495513
lock (syncroot)
496514
{
497515
queue.Enqueue(request);

0 commit comments

Comments
 (0)