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"];