handshake failure fix

This commit is contained in:
Lucca Faria Ferri 2023-08-01 09:01:20 -07:00
parent 33001803e6
commit e129fbd077

View File

@ -250,6 +250,8 @@ namespace DiIiS_NA.LoginServer.Base
}
internal class WebSocketServerProtocolHandshakeHandler : ChannelHandlerAdapter
{
static readonly Logger _logger = LogManager.CreateLogger();
private readonly string websocketPath;
private readonly string subprotocols;
@ -290,12 +292,16 @@ namespace DiIiS_NA.LoginServer.Base
{
if (!object.Equals(req.Method, HttpMethod.Get))
{
SendHttpResponse(ctx, req, new DefaultFullHttpResponse(HttpVersion.Http11, HttpResponseStatus.Forbidden));
SendHttpResponse(ctx, req,
new DefaultFullHttpResponse(HttpVersion.Http11, HttpResponseStatus.Forbidden));
return;
}
//v1.rpc.battle.net
//
WebSocketServerHandshakerFactory webSocketServerHandshakerFactory = new WebSocketServerHandshakerFactory(GetWebSocketLocation(ctx.Channel.Pipeline, req, websocketPath), subprotocols, allowExtensions, maxFramePayloadSize, allowMaskMismatch);
WebSocketServerHandshakerFactory webSocketServerHandshakerFactory =
new WebSocketServerHandshakerFactory(GetWebSocketLocation(ctx.Channel.Pipeline, req, websocketPath),
subprotocols, allowExtensions, maxFramePayloadSize, allowMaskMismatch);
WebSocketServerHandshaker handshaker = webSocketServerHandshakerFactory.NewHandshaker(req);
if (handshaker == null)
{
@ -303,7 +309,7 @@ namespace DiIiS_NA.LoginServer.Base
return;
}
handshaker.HandshakeAsync(ctx.Channel, req).ContinueWith(delegate (Task t)
handshaker.HandshakeAsync(ctx.Channel, req).ContinueWith(delegate(Task t)
{
if (t.Status != TaskStatus.RanToCompletion)
{
@ -311,12 +317,17 @@ namespace DiIiS_NA.LoginServer.Base
}
else
{
ctx.FireUserEventTriggered(new HandshakeHandler.HandshakeComplete(req.Uri, req.Headers, handshaker.SelectedSubprotocol));
ctx.FireUserEventTriggered(new HandshakeHandler.HandshakeComplete(req.Uri, req.Headers,
handshaker.SelectedSubprotocol));
}
}, TaskContinuationOptions.ExecuteSynchronously);
HandshakeHandler.SetHandshaker(ctx.Channel, handshaker);
ctx.Channel.Pipeline.Replace(this, "WS403Responder", HandshakeHandler.ForbiddenHttpRequestResponder());
}
catch (Exception ex)
{
_logger.ErrorException(ex, "Handshake failure");
}
finally
{
req.Release();