![]() |
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:
Drücke ich jedoch die Enter-Taste erhalte ich folgende Fehlermeldung:
telnet localhost 211
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 23:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz