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