Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datasnap 2009 DSTCPServertransport + TIdServerIOHandlerSSLOpenSSL (https://www.delphipraxis.net/153434-datasnap-2009-dstcpservertransport-tidserveriohandlersslopenssl.html)

Piethan 2. Aug 2010 21:10

Datenbank: datasnap • Version: 2009 • Zugriff über: datasnap

Datasnap 2009 DSTCPServertransport + TIdServerIOHandlerSSLOpenSSL
 
Hi,

ich möchte die DSTCPServerTransport-Komponente um ein SSL Zertifikate erweitern. Dafür habe ich zunächst vor eine neue Komponente von der Klasse DSServerTransport abzuleiten. Ich habe den Code aus der DSTCPServerTransport.pas entnommen und diesen um die die Klasse TIdServerIOHandlerSSLOpenSSL erweitert. In einem Testprogramm kann ich zwar jetzt eine TIdServerIOHandlerSSLOpenSSL Komponente hinzufügen und diese der TDSServerSSLTransport-Komponente zuweisen.
Eine Verbindung per Telnet kann ich auch aufbauen:
Code:
telnet localhost 211
Drücke ich jedoch die Enter-Taste erhalte ich folgende Fehlermeldung:

Erste Gelegenheit für Exception bei $75D1B727. Exception-Klasse TDBXError mit Meldung 'Read error'. Prozess ssl_test.exe (4404)

Hat jemand bereits den DSTCPServerTransport um eine SSL-Verschlüsselung erweitert und kann mir einen Tipp geben wie es nun weiter geht? Leider habe ich bis jetzt nie mit Indy gearbeitet. Laut Bob Swart soll ja eine andere Transportvariante einfach sein, jedoch finde ich kein wirkliches Beispiel an dem ich mich orientieren kann.

Danke und Gruß
Dirk

Code:
telnet localhost 211
Delphi-Quellcode:
type
  TDSServerSSLTransport = class(TDSServerTransport)
  strict private
    FPort: Integer;
    FMaxThreads: Integer;
    FPoolSize: Integer;
    FProtocolHandlerFactory:  TDSJSONProtocolHandlerFactory;
    procedure DoOnConnect(AContext: TIdContext);
    procedure DoOnDisconnect(AContext: TIdContext);
    procedure DoOnExecute(AContext: TIdContext);
  protected
    FTcpServer: TIdTCPServer;
    FIdServerIOHandlerSSLOpenSSL : TIdServerIOHandlerSSLOpenSSL;
    procedure SetServer(const AServer: TDSCustomServer); override;
    procedure Notification(AComponent: TComponent; Operation: TOperation);
      override;
  public
    destructor Destroy; override;
    constructor Create(AOwner: TComponent); override;
    procedure Start; override;
    procedure Stop; override;
  published
    property Port: Integer read FPort write FPort default 211;
    property MaxThreads: Integer read FMaxThreads write FMaxThreads default 0;
    property PoolSize: Integer read FPoolSize write FPoolSize default 10;
    property Server;
    property BufferKBSize;

    property SSLIO: TIdServerIOHandlerSSLOpenSSL read FIdServerIOHandlerSSLOpenSSL write FIdServerIOHandlerSSLOpenSSL;
  end;

[...]

procedure TDSServerSSLTransport.DoOnConnect(AContext: TIdContext);
var
  Channel: TDBXChannel;
begin
  if (AContext.Connection.IOHandler is TIdSSLIOHandlerSocketBase) then          //Aus dem Indy SSL Beispiel
  TIdSSLIOHandlerSocketBase(AContext.Connection.IOHandler).PassThrough:= false; //entnommen.
  Channel := TDSTCPSSLChannel.Create(AContext);
  Channel.Open;
  AContext.Data := FProtocolHandlerFactory.CreateProtocolHandler(Channel);
end;

[...]

procedure TDSServerSSLTransport.Start;
var
  Scheduler: TIdSchedulerOfThreadPool;
begin
  inherited;
  FIdServerIOHandlerSSLOpenSSL := TIdServerIOHandlerSSLOpenSSL.Create(FTcpServer); //IOHandler angepasst
  FTcpServer := TIdTCPServer.Create(nil);
  FTcpServer.OnConnect := DoOnConnect;
  FTcpServer.OnDisconnect := DoOnDisconnect;
  FTcpServer.OnExecute := DoOnExecute;
  FTcpServer.Bindings.Add.Port := FPort;
  Scheduler := TIdSchedulerOfThreadPool.Create(FTCPServer);
  Scheduler.MaxThreads := MaxThreads;
  Scheduler.PoolSize := PoolSize;
  FTCPServer.Scheduler := Scheduler;
  FTcpServer.Active := True;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz