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