05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

348 6 Netzwerkprogrammierung <strong>mit</strong> <strong>SSL</strong><br />

1–13<br />

von der threadbasierten Anwendung festgelegt werden <strong>und</strong> enthält die für<br />

den gegenseitigen Ausschluß benötigte Datenstruktur. Im Zusammenspiel <strong>mit</strong><br />

POSIX-<strong>Threads</strong> ist dies ein Pthreads-Mutex.<br />

Die Implementierung der dl_create()-Funktion soll für Open<strong>SSL</strong> eine neue<br />

CRYPTO_dynlock_value-Struktur anlegen <strong>und</strong> die Adresse dieser neu erstellten<br />

Datenstruktur zurückliefern. Kann die Anforderung nicht erfüllt werden,<br />

muß dl_create() einen Nullzeiger zurückgeben. Die einzigen Parameter der<br />

Funktion sind file <strong>und</strong> line, die Auskunft über die Quelldatei <strong>und</strong> die<br />

Zeilennummer geben, von der aus die neue Datenstruktur angefordert wurde.<br />

Mit Hilfe von dl_lock() (ent-)sperrt Open<strong>SSL</strong> dann die referenzierte<br />

CRYPTO_dynlock_value-Struktur l. Über den Wert des Parameters mode wird<br />

gesteuert, wie <strong>mit</strong> dem betreffenden Mutex verfahren werden soll: Ist das Flag<br />

CRYPTO_LOCK gesetzt, so wird der Mutex gesperrt, andernfalls wieder freigegeben.<br />

Benötigt Open<strong>SSL</strong> einen dynamischen Mutex nicht mehr weiter, so wird<br />

die zugehörige Datenstruktur l <strong>mit</strong>tels dl_destroy() wieder freigegeben.<br />

Die Beispiele 6.2 <strong>und</strong> 6.3 zeigen eine Implementierung der von Open<strong>SSL</strong> erwarteten<br />

Callback-Funktionen <strong>mit</strong> Hilfe der Pthreads-Synchronisationspri<strong>mit</strong>iven.<br />

Sie können den Quelltext aus diesen Beispielen unverändert in allen Pthreads-<br />

Programmen <strong>mit</strong> Open<strong>SSL</strong> einsetzen.<br />

Nach der Einbindung der notwendigen Headerdateien definieren wir die Struktur<br />

CRYPTO_dynlock_value für dynamische Mutex-Variablen. Bei der Implementierung<br />

<strong>mit</strong> POSIX-<strong>Threads</strong> enthält die Datenstruktur lediglich eine<br />

Mutex-Strukturkomponente. Bei Bedarf könnten hier natürlich noch beliebige<br />

andere Hilfskomponenten Platz finden.<br />

1 #include <br />

2 #include <br />

Beispiel 6.2. openssl-thread-init.c, Teil 1<br />

3<br />

4 #include <br />

5<br />

6 /* Enthält Prototyp für openssl_thread_init() */<br />

7 #include "openssl -thread -init.h"<br />

8<br />

9 struct CRYPTO_dynlock_value<br />

10 {<br />

11 /* Realisierung des DynLocks über einen Pthreads -Mutex */<br />

12 pthread_mutex_t mutex;<br />

13 };<br />

14<br />

15 /* Zeiger auf ein festes Feld von Mutex -Variablen */<br />

16 pthread_mutex_t *openssl_mutex = NULL;<br />

17<br />

18 unsigned long openssl_thread_id( void )

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!