Moin,

in den letzten Tagen habe ich angefangen den Netzwerk-Code von Gwen 
neuzuschreiben.

Anders war dem Timeout-Problem, das hier einige geschildert hatten, nicht 
beizukommen... Der neue Code ist noch nicht ganz fertig, aber ich denke, dass 
ich das in den naechsten Tagen hinbekomme.

Dann wird AqHBCI umgestellt, damit es den neuen Netzwerk-Code verwendet 
anstelle des alten.


Neues Netzwerk-Konzept
=====================

Dabei verfolgt der neue Code von Gwen ein etwas anderes Konzept als der alte.


Vorige Implementierung
-------------------------------
Vorher gab es GWEN_NetConnection, welches auf ein Objekt des Typs 
GWEN_NetTransport zugreift.

Dabei waren dann die Transport-Ebene in der GWEN_NetTransport-Klasse und die 
Protokoll-Ebene in der GWEN_NetConnection-Klasse abgebildet. Es konnte nur 
ein GWEN_NetConnection-Objekt mit genau *einem* GWEN_NetTransport-Objekt 
verbunden werden.


Neue Implementierung
-----------------------------
Im neuen Code gibt es nur noch eine Klasse: GWEN_NetLayer. Dies ist 
grundsaetzlich eine sehr simple Klasse, sie erlaubt an sich nur das Lesen, 
Schreiben, Verbinden und Diskonnektieren.

Objekte dieser neuen Klasse koennen aber beliebig gestapelt werden, um eine 
Protokoll-Kette aufzubauen. Es gibt inzwischen Ableitungen:
- GWEN_NetLayerSocket (greift auf Sockets zu)
- GWEN_NetLayerSsl (implementiert das SSL-Protokoll ueber einen beliebigen 
anderen GWEN_NetLayer)
- GWEN_NetLayerHttp (implementiert das HTTP-Protokoll ueber einen beliebigen 
anderen GWEN_NetLayer)

Sinnvolle Ketten sind nun beispielsweise:
- GWEN_NetLayerSocket alleine
- GWEN_NetLayerSsl->GWEN_NetLayerSocket
- GWEN_NetLayerHttp->GWEN_NetLayerSocket
- GWEN_NetLayerHttp->GWEN_NetLayerSsl->GWEN_NetLayerSocket


Besonderheiten der SSL-Implementierung
------------------------------------------------------
Selbstverstaendlich ist die nicht eine neue Implementierung des 
SSL-Protokolles :-) Dafuer wird hier OpenSSL eingesetzt. 
Allerdings wird OpenSSL von Gwen nun nicht mehr direkt ueber Sockets 
betrieben, sondern stattdessen ueber eigene Implementierungen der Klasse BIO 
(man 3 BIO).
Diese neue Klasse liest und schreibt nun aus/in beliebige GWEN_NetLayer (im 
Normalfall wird hier ein GWEN_NetLayerSocket verwendet, aber das ist nun 
nicht mehr die alleinige Moeglichkeit).

Dadurch wird nun GWEN_NetLayerSsl ebenfalls stapelbar :-)



Ausblick
=======
Als naechstes werde ich eine Klasse GWEN_NetLayerHbci erstellen. Damit ergeben 
sich zwei neue sinnvolle Ketten:

- GWEN_NetLayerHbci->GWEN_NetLayerSocket
- GWEN_NetLayerHbci->GWEN_NetLayerHttp->GWEN_NetLayerSsl->GWEN_NetLayerSocket

Hier sieht man auch, warum ich dieses Konzept gewaehlt habe:
Man kann nun NetLayer beliebig stapeln, wie in diesem Beispiel. 
Das HBCI-Protokoll kann man nun entweder direkt ueber TCP (Port 3000) fahren - 
das sind die sicheren Modi RDH und DDV - oder aber ueber HTTPS - bekannt als 
PIN/TAN.

In beiden Faellen ist das HBCI-Protokoll an sich gleich: Die Nachrichten haben 
den gleichen Aufbau. Man muss also nur noch *einmal* das HBCI-Protokoll 
implementieren, und kann dies nun ueber beliebig viele andere Protokolle 
ablaufen lassen.


Der neue Code ist nun auch deutlich schlanker und uebersichtlicher als der 
alte, womit er weit besser zu Debuggen ist. Damit duerften dann hoffentlich 
die geschilderten Timeout-Probleme geloest werden koennen.


Gruss
Martin
-- 
"Things are only impossible until they're not"

AqBanking - http://www.aquamaniac.de/aqbanking/
LibChipcard - http://www.libchipcard.de/

-- 
"Things are only impossible until they're not"

AqBanking - http://www.aquamaniac.de/aqbanking/
LibChipcard - http://www.libchipcard.de/


-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc.
Get Certified Today * Register for a JBoss Training Course
Free Certification Exam for All Training Attendees Through End of 2005
Visit http://www.jboss.com/services/certification for more information
_______________________________________________
Aqbanking-devel mailing list
Aqbanking-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/aqbanking-devel

Reply via email to