SSL merge fixes (in XE10.1)

This commit is contained in:
Administrator 2016-11-11 13:08:33 +01:00
parent 5d75bef32f
commit 7a9455fafd
7 changed files with 43 additions and 26 deletions

View file

@ -16,18 +16,18 @@ object Form1: TForm1
object Button1: TButton
Left = 8
Top = 8
Width = 75
Width = 121
Height = 25
Caption = 'Button1'
Caption = 'Socket.IO test'
TabOrder = 0
OnClick = Button1Click
end
object Button2: TButton
Left = 8
Top = 39
Width = 75
Width = 121
Height = 25
Caption = 'Button2'
Caption = 'Plain websocket test'
TabOrder = 1
OnClick = Button2Click
end

View file

@ -92,6 +92,9 @@ end;
procedure TForm1.Button2Click(Sender: TObject);
begin
client.Free;
server.Free;
server := TIdWebsocketServer.Create(Self);
server.DefaultPort := 12346;
server.Active := True;

View file

@ -619,8 +619,9 @@ begin
//ws://host:port/<resourcename>
//about resourcename, see: http://dev.w3.org/html5/websockets/ "Parsing WebSocket URLs"
//sURL := Format('ws://%s:%d/%s', [Host, Port, WSResourceName]);
{$IFDEF WEBSOCKETSSL}
sURL := Format('https://%s:%d/%s', [Host, Port, WSResourceName]);
{$IFDEF WS_NO_SSL}
{$ELSE}
//TODO: depend protocol on usessl - param passing in here
sURL := Format('http://%s:%d/%s', [Host, Port, WSResourceName]);
{$ENDIF}

View file

@ -69,16 +69,16 @@ type
function ReadFrame(out aFIN, aRSV1, aRSV2, aRSV3: boolean; out aDataCode: TWSDataCode; out aData: TIdBytes): Integer;
function ReadMessage(var aBuffer: TIdBytes; out aDataCode: TWSDataCode): Integer;
{.$if CompilerVersion >= 26} //XE5
//function UTF8Encoding: IIdTextEncoding;
{.$else}
{$if CompilerVersion >= 26} //XE5
function UTF8Encoding: IIdTextEncoding;
{$else}
function UTF8Encoding: TEncoding;
{$ifend}
procedure InitComponent; override;
public
{$IFNDEF WS_NO_SSL}
{$IFDEF WEBSOCKETSSL}
procedure ClearSSLOptions;
{$ENDIF}
{$ENDIF}
function WriteData(aData: TIdBytes; aType: TWSDataCode;
aFIN: boolean = true; aRSV1: boolean = false; aRSV2: boolean = false; aRSV3: boolean = false): integer;
property BusyUpgrading : Boolean read FBusyUpgrading write FBusyUpgrading;
@ -304,7 +304,7 @@ begin
FPendingWriteCount := 0;
end;
{$IFNDEF WS_NO_SSL}
{$IFDEF WEBSOCKETSSL}
procedure TIdIOHandlerWebsocket.ClearSSLOptions;
begin
self.fxSSLOptions.Free;
@ -603,7 +603,9 @@ begin
end;
function TIdIOHandlerWebsocket.WriteDataToTarget(const ABuffer: TIdBytes; const AOffset, ALength: Integer): Integer;
var data: TIdBytes; DataCode:TWSDataCode; fin:boolean;
var
//data: TIdBytes;
DataCode:TWSDataCode; fin:boolean;
begin
if UseSingleWriteThread and IsWebsocket and (GetCurrentThreadId <> TIdWebsocketWriteThread.Instance.ThreadID) then
Assert(False, 'Write done in different thread than TIdWebsocketWriteThread!');
@ -630,7 +632,7 @@ begin
try
DataCode := fPayloadInfo.aDataCode;
fin := fPayloadInfo.DecLength(ALength);
Result := WriteData(data, DataCode, fin,webBit1 in ClientExtensionBits, webBit2 in ClientExtensionBits, webBit3 in ClientExtensionBits);
Result := WriteData(ABuffer, DataCode, fin,webBit1 in ClientExtensionBits, webBit2 in ClientExtensionBits, webBit3 in ClientExtensionBits);
except
FClosedGracefully := True;
Result := -1;
@ -872,17 +874,17 @@ begin
FLock.Leave;
end;
{.$if CompilerVersion >= 26} //XE5
//function TIdIOHandlerWebsocket.UTF8Encoding: IIdTextEncoding;
//begin
// Result := IndyTextEncoding_UTF8;
//end;
{.$else}
{$if CompilerVersion >= 26} //XE5
function TIdIOHandlerWebsocket.UTF8Encoding: IIdTextEncoding;
begin
Result := IndyTextEncoding_UTF8;
end;
{$else}
function TIdIOHandlerWebsocket.UTF8Encoding: TEncoding;
begin
Result := TIdTextEncoding.UTF8;
end;
{.$ifend}
{$ifend}
function TIdIOHandlerWebsocket.ReadFrame(out aFIN, aRSV1, aRSV2, aRSV3: boolean;
out aDataCode: TWSDataCode; out aData: TIdBytes): Integer;

View file

@ -2,7 +2,7 @@ unit IdServerIOHandlerWebsocket;
interface
{$I wsdefines.pas}
uses
Classes
Classes, SysUtils
, IdServerIOHandlerStack
, IdIOHandlerStack
, IdGlobal
@ -26,7 +26,11 @@ type
protected
procedure InitComponent; override;
{$IFDEF WEBSOCKETSSL}
{$if CompilerVersion >= 31} //XE10
function GetIOHandlerSelf: TIdSSLIOHandlerSocketOpenSSL;
{$else}
function CreateOpenSSLSocket:TIdSSLIOHandlerSocketOpenSSL; override;
{$endif}
{$ENDIF}
public
function Accept(ASocket: TIdSocketHandle; AListenerThread: TIdThread;
@ -39,20 +43,27 @@ implementation
{ TIdServerIOHandlerStack_Websocket }
{$IFDEF WEBSOCKETSSL}
{$if CompilerVersion >= 31} //XE10
function TIdServerIOHandlerWebsocket.GetIOHandlerSelf:TIdSSLIOHandlerSocketOpenSSL;
begin
Result := TIdIOHandlerWebsocket.Create(nil);
end;
{$else}
function TIdServerIOHandlerWebsocket.CreateOpenSSLSocket:TIdSSLIOHandlerSocketOpenSSL;
begin
Result := TIdIOHandlerWebsocket.Create(nil);
end;
{$endif}
{$ENDIF}
function TIdServerIOHandlerWebsocket.Accept(ASocket: TIdSocketHandle;
AListenerThread: TIdThread; AYarn: TIdYarn): TIdIOHandler;
{$IFNDEF WS_NO_SSL} ?
{$IFDEF WEBSOCKETSSL}
var
LIO: TIdIOHandlerWebsocket;
{$ENDIF}
begin
{$IFDEF WS_NO_SSL} ?
{$IFnDEF WEBSOCKETSSL}
Result := inherited Accept(ASocket, AListenerThread, AYarn);
{$ELSE}
Assert(ASocket<>nil);

View file

@ -95,7 +95,7 @@ begin
strmRequest.Position := 0;
//first is the type: text or bin
wscode := TWSDataCode(context.IOHandler.ReadLongWord);
wscode := TWSDataCode(context.IOHandler.ReadUInt32); //ReadLongWord);
//then the length + data = stream
context.IOHandler.ReadStream(strmRequest);
strmRequest.Position := 0;

View file

@ -1,3 +1,3 @@
{ $DEFINE WEBSOCKETSSL}
{ $DEFINE WEBSOCKETBRIDGE}
{$DEFINE WEBSOCKETSSL}
{.$DEFINE WEBSOCKETBRIDGE}
{$DEFINE SUPEROBJECT}