#if SECURITY_DEP
-#if MONOTOUCH || MONODROID
-using Mono.Security.Protocol.Tls;
-#else
-extern alias MonoSecurity;
-using MonoSecurity::Mono.Security.Protocol.Tls;
-#endif
-
using System.Collections;
using System.Collections.Specialized;
using System.Globalization;
using System.Text;
using System.Security.Authentication.ExtendedProtection;
using System.Threading.Tasks;
+using System.Net;
namespace System.Net {
public sealed class HttpListenerRequest
foreach (string kv in components) {
int pos = kv.IndexOf ('=');
if (pos == -1) {
- query_string.Add (null, HttpUtility.UrlDecode (kv));
+ query_string.Add (null, WebUtility.UrlDecode (kv));
} else {
- string key = HttpUtility.UrlDecode (kv.Substring (0, pos));
- string val = HttpUtility.UrlDecode (kv.Substring (pos + 1));
+ string key = WebUtility.UrlDecode (kv.Substring (0, pos));
+ string val = WebUtility.UrlDecode (kv.Substring (pos + 1));
query_string.Add (key, val);
}
string path;
Uri raw_uri = null;
- if (Uri.MaybeUri (raw_url) && Uri.TryCreate (raw_url, UriKind.Absolute, out raw_uri))
+ if (Uri.MaybeUri (raw_url.ToLowerInvariant ()) && Uri.TryCreate (raw_url, UriKind.Absolute, out raw_uri))
path = raw_uri.PathAndQuery;
else
path = raw_url;
host, LocalEndPoint.Port);
if (!Uri.TryCreate (base_uri + path, UriKind.Absolute, out url)){
- context.ErrorMessage = "Invalid url: " + base_uri + path;
+ context.ErrorMessage = WebUtility.HtmlEncode ("Invalid url: " + base_uri + path);
return;
}
CreateQueryString (url.Query);
+ // Use reference source HttpListenerRequestUriBuilder to process url.
+ // Fixes #29927
+ url = HttpListenerRequestUriBuilder.GetRequestUri (raw_url, url.Scheme,
+ url.Authority, url.LocalPath, url.Query);
+
if (version >= HttpVersion.Version11) {
string t_encoding = Headers ["Transfer-Encoding"];
is_chunked = (t_encoding != null && String.Compare (t_encoding, "chunked", StringComparison.OrdinalIgnoreCase) == 0);
}
public bool IsLocal {
- get { return IPAddress.IsLoopback (RemoteEndPoint.Address); }
+ get { return LocalEndPoint.Address.Equals (RemoteEndPoint.Address); }
}
public bool IsSecureConnection {