From 4a58e745c5f637e71a91cd6b51e4c7ee01be8b8b Mon Sep 17 00:00:00 2001 From: Jeroen Diederix Date: Fri, 11 Aug 2017 15:00:59 +0200 Subject: [PATCH] Allow changing the user agent string from the client code. --- websocket-sharp/HttpRequest.cs | 12 ++++++------ websocket-sharp/WebSocket.cs | 19 +++++++++++++++++-- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/websocket-sharp/HttpRequest.cs b/websocket-sharp/HttpRequest.cs index f9aa5cb33..91b383e31 100644 --- a/websocket-sharp/HttpRequest.cs +++ b/websocket-sharp/HttpRequest.cs @@ -65,10 +65,10 @@ private HttpRequest (string method, string uri, Version version, NameValueCollec #region Internal Constructors - internal HttpRequest (string method, string uri) + internal HttpRequest (string method, string uri, string userAgent) : this (method, uri, HttpVersion.Version11, new NameValueCollection ()) { - Headers["User-Agent"] = "websocket-sharp/1.0"; + Headers["User-Agent"] = userAgent; } #endregion @@ -122,20 +122,20 @@ public string RequestUri { #region Internal Methods - internal static HttpRequest CreateConnectRequest (Uri uri) + internal static HttpRequest CreateConnectRequest (Uri uri, string userAgent) { var host = uri.DnsSafeHost; var port = uri.Port; var authority = String.Format ("{0}:{1}", host, port); - var req = new HttpRequest ("CONNECT", authority); + var req = new HttpRequest ("CONNECT", authority, userAgent); req.Headers["Host"] = port == 80 ? host : authority; return req; } - internal static HttpRequest CreateWebSocketRequest (Uri uri) + internal static HttpRequest CreateWebSocketRequest(Uri uri, string userAgent) { - var req = new HttpRequest ("GET", uri.PathAndQuery); + var req = new HttpRequest ("GET", uri.PathAndQuery, userAgent); var headers = req.Headers; // Only includes a port number in the Host header value if it's non-default. diff --git a/websocket-sharp/WebSocket.cs b/websocket-sharp/WebSocket.cs index 7ca78b2d8..410cd368f 100644 --- a/websocket-sharp/WebSocket.cs +++ b/websocket-sharp/WebSocket.cs @@ -113,6 +113,7 @@ public class WebSocket : IDisposable private Stream _stream; private TcpClient _tcpClient; private Uri _uri; + private string _userAgent = "websocket-sharp/1.0"; private const string _version = "13"; private TimeSpan _waitTime; @@ -595,6 +596,20 @@ public Uri Url { } } + /// + /// Gets or sets the WebSocket User-Agent string as send in the header of the requests. + /// + public string UserAgent + { + get { + return _userAgent; + } + + set { + _userAgent = value; + } + } + /// /// Gets or sets the wait time for the response to the Ping or Close. /// @@ -1168,7 +1183,7 @@ private HttpResponse createHandshakeFailureResponse (HttpStatusCode code) // As client private HttpRequest createHandshakeRequest () { - var ret = HttpRequest.CreateWebSocketRequest (_uri); + var ret = HttpRequest.CreateWebSocketRequest (_uri, _userAgent); var headers = ret.Headers; if (!_origin.IsNullOrEmpty ()) @@ -1860,7 +1875,7 @@ private bool sendHttpResponse (HttpResponse response) // As client private void sendProxyConnectRequest () { - var req = HttpRequest.CreateConnectRequest (_uri); + var req = HttpRequest.CreateConnectRequest (_uri, _userAgent); var res = sendHttpRequest (req, 90000); if (res.IsProxyAuthenticationRequired) { var chal = res.Headers["Proxy-Authenticate"];