Fix due to the modified WebSocket.cs

This commit is contained in:
sta 2012-09-13 23:44:35 +09:00
parent 9730e2a9ff
commit 2fde8824ec
25 changed files with 71 additions and 43 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -53,8 +53,8 @@ namespace WebSocketSharp {
#region Properties #region Properties
public NameValueCollection Headers { get; protected set; } public NameValueCollection Headers { get; internal set; }
public Version ProtocolVersion { get; protected set; } public Version ProtocolVersion { get; internal set; }
#endregion #endregion

View File

@ -59,7 +59,7 @@ namespace WebSocketSharp {
#region Properties #region Properties
public string HttpMethod { get; private set; } public string HttpMethod { get; internal set; }
public bool IsWebSocketRequest { public bool IsWebSocketRequest {
@ -89,7 +89,7 @@ namespace WebSocketSharp {
} }
} }
public Uri RequestUri { get; private set; } public Uri RequestUri { get; internal set; }
#endregion #endregion

View File

@ -72,8 +72,8 @@ namespace WebSocketSharp {
} }
} }
public string Reason { get; private set; } public string Reason { get; internal set; }
public string StatusCode { get; private set; } public string StatusCode { get; internal set; }
#endregion #endregion

View File

@ -32,6 +32,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.Specialized;
using System.Configuration; using System.Configuration;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
@ -255,21 +256,17 @@ namespace WebSocketSharp
private void acceptHandshake() private void acceptHandshake()
{ {
var request = receiveOpeningHandshake(); var req = receiveOpeningHandshake();
#if DEBUG
Console.WriteLine("WS: Info@acceptHandshake: Opening handshake from client:\n");
Console.WriteLine(request.ToString());
#endif
string msg;
if (!isValidRequest(request, out msg))
throw new InvalidOperationException(msg);
var response = createResponseHandshake(); string msg;
#if DEBUG if (!isValidRequest(req, out msg))
Console.WriteLine("WS: Info@acceptHandshake: Opening handshake from server:\n"); {
Console.WriteLine(response.ToString()); error(msg);
#endif close(CloseStatusCode.HANDSHAKE_FAILURE, msg);
sendResponseHandshake(response); return;
}
sendResponseHandshake();
ReadyState = WsState.OPEN; ReadyState = WsState.OPEN;
} }
@ -283,12 +280,12 @@ namespace WebSocketSharp
{ {
if (_readyState == WsState.CLOSING || if (_readyState == WsState.CLOSING ||
_readyState == WsState.CLOSED) _readyState == WsState.CLOSED)
{
return; return;
}
else if (_readyState == WsState.CONNECTING) if (_readyState == WsState.CONNECTING && !_isClient)
{ {
OnClose.Emit(this, new CloseEventArgs(data)); OnClose.Emit(this, new CloseEventArgs(data));
sendResponseHandshakeForInvalid();
ReadyState = WsState.CLOSED; ReadyState = WsState.CLOSED;
return; return;
} }
@ -509,19 +506,15 @@ namespace WebSocketSharp
private void doHandshake() private void doHandshake()
{ {
var request = createOpeningHandshake(); var res = sendOpeningHandshake();
#if DEBUG
Console.WriteLine("WS: Info@doHandshake: Opening handshake from client:\n");
Console.WriteLine(request.ToString());
#endif
var response = sendOpeningHandshake(request);
#if DEBUG
Console.WriteLine("WS: Info@doHandshake: Opening handshake from server:\n");
Console.WriteLine(response.ToString());
#endif
string msg; string msg;
if (!isValidResponse(response, out msg)) if (!isValidResponse(res, out msg))
throw new InvalidOperationException(msg); {
error(msg);
close(CloseStatusCode.HANDSHAKE_FAILURE, msg);
return;
}
ReadyState = WsState.OPEN; ReadyState = WsState.OPEN;
} }
@ -860,10 +853,17 @@ namespace WebSocketSharp
private RequestHandshake receiveOpeningHandshake() private RequestHandshake receiveOpeningHandshake()
{ {
if (_context != null) RequestHandshake req;
return RequestHandshake.Parse(_context);
return RequestHandshake.Parse(readHandshake()); if (_context == null)
req = RequestHandshake.Parse(readHandshake());
else
req = RequestHandshake.Parse(_context);
#if DEBUG
Console.WriteLine("WS: Info@receiveOpeningHandshake: Opening handshake from client:\n");
Console.WriteLine(req.ToString());
#endif
return req;
} }
private bool send(WsFrame frame) private bool send(WsFrame frame)
@ -999,15 +999,43 @@ namespace WebSocketSharp
return readLen; return readLen;
} }
private ResponseHandshake sendOpeningHandshake(RequestHandshake request) private ResponseHandshake sendOpeningHandshake()
{ {
_wsStream.Write(request.ToBytes(), 0, request.ToBytes().Length); var req = createOpeningHandshake();
return ResponseHandshake.Parse(readHandshake()); #if DEBUG
Console.WriteLine("WS: Info@sendOpeningHandshake: Opening handshake from client:\n");
Console.WriteLine(req.ToString());
#endif
_wsStream.Write(req.ToBytes(), 0, req.ToBytes().Length);
var res = ResponseHandshake.Parse(readHandshake());
#if DEBUG
Console.WriteLine("WS: Info@sendOpeningHandshake: Response handshake from server:\n");
Console.WriteLine(res.ToString());
#endif
return res;
} }
private void sendResponseHandshake(ResponseHandshake response) private void sendResponseHandshake()
{ {
_wsStream.Write(response.ToBytes(), 0, response.ToBytes().Length); var res = createResponseHandshake();
#if DEBUG
Console.WriteLine("WS: Info@sendResponseHandshake: Response handshake from server:\n");
Console.WriteLine(res.ToString());
#endif
_wsStream.Write(res.ToBytes(), 0, res.ToBytes().Length);
}
private void sendResponseHandshakeForInvalid()
{
var code = (int)WebSocketSharp.Net.HttpStatusCode.BadRequest;
var res = new ResponseHandshake {
Headers = new NameValueCollection(),
Reason = "Bad Request",
StatusCode = code.ToString()
};
_wsStream.Write(res.ToBytes(), 0, res.ToBytes().Length);
} }
private void startMessageThread() private void startMessageThread()

Binary file not shown.