fcl-web: TWSServerConnection.HandshakeResponseSent propagates result

This commit is contained in:
mattias 2022-10-05 10:49:31 +02:00
parent d8cd4d283d
commit 569f83e33d

View File

@ -421,7 +421,7 @@ type
end; end;
{ TWSServerConnection } { TWSServerConnection }
TWSConnectionHandshakeEvent = procedure (aRequest : TWSHandShakeRequest; aResponse : TWSHandShakeResponse) of object; TWSConnectionHandshakeEvent = function(aRequest : TWSHandShakeRequest; aResponse : TWSHandShakeResponse): boolean of object;
TWSServerConnection = Class(TWSConnection) TWSServerConnection = Class(TWSConnection)
Private Private
@ -432,7 +432,7 @@ type
Protected Protected
Procedure DoDisconnect; override; Procedure DoDisconnect; override;
function GetTransport: IWSTransport; override; function GetTransport: IWSTransport; override;
procedure DoPrepareHandshakeResponse(aRequest : TWSHandShakeRequest; aResponse : TWSHandShakeResponse); virtual; function DoPrepareHandshakeResponse(aRequest : TWSHandShakeRequest; aResponse : TWSHandShakeResponse): boolean; virtual;
function GetHandshakeCompleted: Boolean; override; function GetHandshakeCompleted: Boolean; override;
public public
// Transport is owned by connection // Transport is owned by connection
@ -442,7 +442,7 @@ type
// Do full circle. // Do full circle.
Procedure PerformHandshake; virtual; Procedure PerformHandshake; virtual;
// Given a request, send response // Given a request, send response
function DoHandshake(const aRequest : TWSHandShakeRequest): Boolean; function DoHandshake(const aRequest : TWSHandShakeRequest): Boolean; virtual;
// Has handshake been exchanged? // Has handshake been exchanged?
property HandshakeResponseSent: Boolean read FHandshakeResponseSent; property HandshakeResponseSent: Boolean read FHandshakeResponseSent;
// Extra handshake headers // Extra handshake headers
@ -568,7 +568,7 @@ end;
function TWSTransport.GetSocket: TSocketStream; function TWSTransport.GetSocket: TSocketStream;
begin begin
Result:=FHelper.Socket Result:=FHelper.Socket;
end; end;
constructor TWSTransport.Create(aStream : TSocketStream); constructor TWSTransport.Create(aStream : TSocketStream);
@ -700,7 +700,7 @@ end;
function TWSMessage.GetAsString: UTF8String; function TWSMessage.GetAsString: UTF8String;
begin begin
Result:=TEncoding.UTF8.GetString(Payload); Result:=UTF8String(TEncoding.UTF8.GetString(Payload));
end; end;
function TWSMessage.GetAsUnicodeString: UnicodeString; function TWSMessage.GetAsUnicodeString: UnicodeString;
@ -946,6 +946,7 @@ end;
{ TWSFrame } { TWSFrame }
constructor TWSFrame.Create(aType: TFrameType; aIsFinal: Boolean; APayload: TBytes; aMask: Integer=0); constructor TWSFrame.Create(aType: TFrameType; aIsFinal: Boolean; APayload: TBytes; aMask: Integer=0);
begin begin
Create(aType,aIsFinal,aMask); Create(aType,aIsFinal,aMask);
@ -965,14 +966,13 @@ begin
FFinalFrame := AIsFinal; FFinalFrame := AIsFinal;
end; end;
constructor TWSFrame.Create(const aMessage: UTF8String; aMask: Integer=0); constructor TWSFrame.Create(const aMessage: UTF8String; aMask: Integer=0);
Var Var
Data : TBytes; Data : TBytes;
begin begin
Data:=TEncoding.UTF8.GetBytes(AMessage); Data:=TEncoding.UTF8.GetBytes(UnicodeString(AMessage));
Create(ftText,True,Data,aMask); Create(ftText,True,Data,aMask);
end; end;
@ -1463,7 +1463,7 @@ begin
c := @AValue[0]; c := @AValue[0];
while i < len do while i < len do
begin begin
if (c^ >= $00) and (c^ <= $7f) then if (c^ <= $7f) then
n := 0 n := 0
else if (c^ >= $c2) and (c^ <= $df) then else if (c^ >= $c2) and (c^ <= $df) then
n := 1 n := 1
@ -1793,10 +1793,13 @@ begin
Result:=FTransport; Result:=FTransport;
end; end;
procedure TWSServerConnection.DoPrepareHandshakeResponse(aRequest: TWSHandShakeRequest; aResponse: TWSHandShakeResponse); function TWSServerConnection.DoPrepareHandshakeResponse(
aRequest: TWSHandShakeRequest; aResponse: TWSHandShakeResponse): boolean;
begin begin
If Assigned(OnHandshake) then If Assigned(OnHandshake) then
OnHandShake(aRequest,aResponse); Result:=OnHandShake(aRequest,aResponse)
else
Result:=true;
end; end;
@ -1814,8 +1817,8 @@ begin
H:=Nil; H:=Nil;
aResp:=TWSHandShakeResponse.Create('',FExtraHeaders); aResp:=TWSHandShakeResponse.Create('',FExtraHeaders);
try try
DoPrepareHandshakeResponse(aRequest,aResp);
try try
DoPrepareHandshakeResponse(aRequest,aResp);
H:=TStringList.Create; H:=TStringList.Create;
aResp.ToStrings(aRequest,H,True); aResp.ToStrings(aRequest,H,True);
Reply:=''; Reply:='';