corrade-vassal – Blame information for rev 16

Subversion Repositories:
Rev:
Rev Author Line No. Line
13 eva 1 ///////////////////////////////////////////////////////////////////////////
2 // Copyright (C) Wizardry and Steamworks 2013 - License: GNU GPLv3 //
3 // Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
4 // rights of fair usage, the disclaimer and warranty conditions. //
5 ///////////////////////////////////////////////////////////////////////////
6  
7 using System;
16 eva 8 using System.Collections.Generic;
13 eva 9 using System.Linq;
14 zed 10 using System.Linq.Expressions;
13 eva 11 using System.Net;
16 eva 12 using System.Net.Http;
13 using System.Net.Http.Headers;
14 using System.Text;
15 using System.Threading.Tasks;
13 eva 16  
17 namespace wasSharp
18 {
16 eva 19 public static class Web
13 eva 20 {
16 eva 21 private static readonly Func<string, string> directURIEscapeDataString =
22 ((Expression<Func<string, string>>)
23 (data => string.Join("", Enumerable.Range(0, (data.Length + 32765)/32766).AsParallel()
24 .Select(o => Uri.EscapeDataString(data.Substring(o*32766, Math.Min(32766, data.Length - o*32766))))
25 .ToArray()))).Compile();
26  
27 private static readonly Func<string, string> directURIUnescapeDataString =
28 ((Expression<Func<string, string>>)
29 (data => string.Join("", Enumerable.Range(0, (data.Length + 32765)/32766).AsParallel()
30 .Select(
31 o => Uri.UnescapeDataString(data.Substring(o*32766, Math.Min(32766, data.Length - o*32766))))
32 .ToArray()))).Compile();
33  
13 eva 34 ///////////////////////////////////////////////////////////////////////////
35 // Copyright (C) Wizardry and Steamworks 2014 - License: GNU GPLv3 //
36 ///////////////////////////////////////////////////////////////////////////
37 /// <summary>RFC3986 URI Escapes a string</summary>
14 zed 38 /// <remarks>
39 /// data - a string to escape
40 /// </remarks>
13 eva 41 /// <returns>an RFC3986 escaped string</returns>
16 eva 42 public static string URIEscapeDataString(string data)
43 {
44 return directURIEscapeDataString(data);
45 }
13 eva 46  
47 ///////////////////////////////////////////////////////////////////////////
48 // Copyright (C) Wizardry and Steamworks 2014 - License: GNU GPLv3 //
49 ///////////////////////////////////////////////////////////////////////////
50 /// <summary>URI unescapes an RFC3986 URI escaped string</summary>
14 zed 51 /// <remarks>
52 /// data - a string to unescape
53 /// </remarks>
13 eva 54 /// <returns>the resulting string</returns>
16 eva 55 public static string URIUnescapeDataString(string data)
56 {
57 return directURIUnescapeDataString(data);
58 }
13 eva 59  
60 ///////////////////////////////////////////////////////////////////////////
61 // Copyright (C) Wizardry and Steamworks 2015 - License: GNU GPLv3 //
62 ///////////////////////////////////////////////////////////////////////////
63 /// <summary>RFC1738 URL Escapes a string</summary>
64 /// <param name="data">a string to escape</param>
65 /// <returns>an RFC1738 escaped string</returns>
66 public static string URLEscapeDataString(string data)
67 {
68 return WebUtility.UrlEncode(data);
69 }
70  
71 ///////////////////////////////////////////////////////////////////////////
72 // Copyright (C) Wizardry and Steamworks 2015 - License: GNU GPLv3 //
73 ///////////////////////////////////////////////////////////////////////////
74 /// <summary>RFC1738 URL Unescape a string</summary>
75 /// <param name="data">a string to unescape</param>
76 /// <returns>an RFC1738 unescaped string</returns>
77 public static string URLUnescapeDataString(string data)
78 {
79 return WebUtility.UrlDecode(data);
80 }
16 eva 81  
82 ///////////////////////////////////////////////////////////////////////////
83 // Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3 //
84 ///////////////////////////////////////////////////////////////////////////
85 // <summary>A portable HTTP client.</summar>
86 public class wasHTTPClient
87 {
88 private readonly HttpClient HTTPClient;
89 private readonly string MediaType;
90  
91 public wasHTTPClient(ProductInfoHeaderValue userAgent, CookieContainer cookieContainer, string mediaType,
92 uint timeout)
93 {
94 var HTTPClientHandler = new HttpClientHandler
95 {
96 CookieContainer = cookieContainer,
97 UseCookies = true
98 };
99 if (HTTPClientHandler.SupportsRedirectConfiguration)
100 {
101 HTTPClientHandler.AllowAutoRedirect = true;
102 }
103 if (HTTPClientHandler.SupportsProxy)
104 {
105 HTTPClientHandler.Proxy = WebRequest.DefaultWebProxy;
106 HTTPClientHandler.UseProxy = true;
107 }
108 if (HTTPClientHandler.SupportsAutomaticDecompression)
109 {
110 HTTPClientHandler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
111 }
112 HTTPClientHandler.ClientCertificateOptions = ClientCertificateOption.Automatic;
113  
114 HTTPClient = new HttpClient(HTTPClientHandler, false);
115 HTTPClient.DefaultRequestHeaders.UserAgent.Add(userAgent);
116 HTTPClient.Timeout = TimeSpan.FromMilliseconds(timeout);
117 MediaType = mediaType;
118 }
119  
120 ///////////////////////////////////////////////////////////////////////////
121 // Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3 //
122 ///////////////////////////////////////////////////////////////////////////
123 /// <summary>
124 /// Sends a POST request to an URL with set key-value pairs.
125 /// </summary>
126 /// <param name="URL">the url to send the message to</param>
127 /// <param name="message">key-value pairs to send</param>
128 public async Task<byte[]> POST(string URL, Dictionary<string, string> message)
129 {
130 try
131 {
132 using (var content =
133 new StringContent(KeyValue.Encode(message), Encoding.UTF8, MediaType))
134 {
135 using (var response = await HTTPClient.PostAsync(URL, content))
136 {
137 return response.IsSuccessStatusCode
138 ? await response.Content.ReadAsByteArrayAsync()
139 : null;
140 }
141 }
142 }
143 catch (Exception)
144 {
145 return null;
146 }
147 }
148  
149 ///////////////////////////////////////////////////////////////////////////
150 // Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3 //
151 ///////////////////////////////////////////////////////////////////////////
152 /// <summary>
153 /// Sends a GET request to an URL with set key-value pairs.
154 /// </summary>
155 /// <param name="URL">the url to send the message to</param>
156 /// <param name="message">key-value pairs to send</param>
157 public async Task<byte[]> GET(string URL, Dictionary<string, string> message)
158 {
159 try
160 {
161 using (var response =
162 await HTTPClient.GetAsync(URL + "?" + KeyValue.Encode(message)))
163 {
164 return response.IsSuccessStatusCode ? await response.Content.ReadAsByteArrayAsync() : null;
165 }
166 }
167 catch (Exception)
168 {
169 return null;
170 }
171 }
172 }
13 eva 173 }
174 }