|
|
|
@ -254,6 +254,7 @@ namespace WebSocketSharp.Net
|
|
|
|
private static void onRead (IAsyncResult asyncResult)
|
|
|
|
private static void onRead (IAsyncResult asyncResult)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
var conn = (HttpConnection) asyncResult.AsyncState;
|
|
|
|
var conn = (HttpConnection) asyncResult.AsyncState;
|
|
|
|
|
|
|
|
|
|
|
|
if (conn._socket == null)
|
|
|
|
if (conn._socket == null)
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
@ -263,29 +264,35 @@ namespace WebSocketSharp.Net
|
|
|
|
|
|
|
|
|
|
|
|
var nread = -1;
|
|
|
|
var nread = -1;
|
|
|
|
var len = 0;
|
|
|
|
var len = 0;
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
var current = conn._reuses;
|
|
|
|
var current = conn._reuses;
|
|
|
|
|
|
|
|
|
|
|
|
if (!conn._timeoutCanceled[current]) {
|
|
|
|
if (!conn._timeoutCanceled[current]) {
|
|
|
|
conn._timer.Change (Timeout.Infinite, Timeout.Infinite);
|
|
|
|
conn._timer.Change (Timeout.Infinite, Timeout.Infinite);
|
|
|
|
conn._timeoutCanceled[current] = true;
|
|
|
|
conn._timeoutCanceled[current] = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
nread = conn._stream.EndRead (asyncResult);
|
|
|
|
nread = conn._stream.EndRead (asyncResult);
|
|
|
|
|
|
|
|
|
|
|
|
conn._requestBuffer.Write (conn._buffer, 0, nread);
|
|
|
|
conn._requestBuffer.Write (conn._buffer, 0, nread);
|
|
|
|
len = (int) conn._requestBuffer.Length;
|
|
|
|
len = (int) conn._requestBuffer.Length;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception ex) {
|
|
|
|
catch (Exception ex) {
|
|
|
|
if (conn._requestBuffer != null && conn._requestBuffer.Length > 0) {
|
|
|
|
if (conn._requestBuffer != null && conn._requestBuffer.Length > 0) {
|
|
|
|
conn.SendError (ex.Message, 400);
|
|
|
|
conn.SendError (ex.Message, 400);
|
|
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
conn.close ();
|
|
|
|
conn.close ();
|
|
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (nread <= 0) {
|
|
|
|
if (nread <= 0) {
|
|
|
|
conn.close ();
|
|
|
|
conn.close ();
|
|
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -295,19 +302,24 @@ namespace WebSocketSharp.Net
|
|
|
|
|
|
|
|
|
|
|
|
if (conn._context.HasError) {
|
|
|
|
if (conn._context.HasError) {
|
|
|
|
conn.SendError ();
|
|
|
|
conn.SendError ();
|
|
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
HttpListener lsnr;
|
|
|
|
HttpListener lsnr;
|
|
|
|
|
|
|
|
|
|
|
|
if (!conn._listener.TrySearchHttpListener (conn._context.Request.Url, out lsnr)) {
|
|
|
|
if (!conn._listener.TrySearchHttpListener (conn._context.Request.Url, out lsnr)) {
|
|
|
|
conn.SendError (null, 404);
|
|
|
|
conn.SendError (null, 404);
|
|
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (conn._lastListener != lsnr) {
|
|
|
|
if (conn._lastListener != lsnr) {
|
|
|
|
conn.removeConnection ();
|
|
|
|
conn.removeConnection ();
|
|
|
|
|
|
|
|
|
|
|
|
if (!lsnr.AddConnection (conn)) {
|
|
|
|
if (!lsnr.AddConnection (conn)) {
|
|
|
|
conn.close ();
|
|
|
|
conn.close ();
|
|
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -315,6 +327,7 @@ namespace WebSocketSharp.Net
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
conn._context.Listener = lsnr;
|
|
|
|
conn._context.Listener = lsnr;
|
|
|
|
|
|
|
|
|
|
|
|
if (!conn._context.Authenticate ())
|
|
|
|
if (!conn._context.Authenticate ())
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
|