AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datasnap 2009 DSTCPServertransport + TIdServerIOHandlerSSLOpenSSL
Thema durchsuchen
Ansicht
Themen-Optionen

Datasnap 2009 DSTCPServertransport + TIdServerIOHandlerSSLOpenSSL

Ein Thema von Piethan · begonnen am 2. Aug 2010
Antwort Antwort
Piethan

Registriert seit: 2. Jun 2008
Ort: Köln
43 Beiträge
 
Delphi XE Architect
 
#1

Datasnap 2009 DSTCPServertransport + TIdServerIOHandlerSSLOpenSSL

  Alt 2. Aug 2010, 22:10
Datenbank: datasnap • Version: 2009 • Zugriff über: datasnap
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:46 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