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

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

6.3 Open<strong>SSL</strong>-Basisfunktionalität 351<br />

88 {<br />

89 st = pthread_mutex_init( &openssl_mutex[i], NULL );<br />

90 if( st != 0 )<br />

91 return( 0 ); /* Rücksprung <strong>mit</strong> Fehler */<br />

92 }<br />

93 }<br />

94<br />

95 /* Callback zur Bestimmung der Thread -ID registrieren */<br />

96 CRYPTO_set_id_callback( openssl_thread_id );<br />

97<br />

98 /* statischen Mutex -Lock-Callback registrieren */<br />

99 CRYPTO_set_locking_callback( openssl_mutex_lock );<br />

100<br />

101 /* Callbacks für dynamische Mutexe registrieren */<br />

102 CRYPTO_set_dynlock_create_callback( openssl_dl_create );<br />

103 CRYPTO_set_dynlock_destroy_callback( openssl_dl_destroy );<br />

104 CRYPTO_set_dynlock_lock_callback( openssl_dl_lock );<br />

105<br />

106 return( 1 ); /* Erfolgsmeldung zurückgeben */<br />

107 }<br />

33–53<br />

55–62<br />

64–72<br />

64–72<br />

Die Callback-Funktion openssl_dl_create() legt auf Wunsch einen neuen<br />

Mutex für die Open<strong>SSL</strong>-Bibliotheken an. openssl_dl_create() fordert dazu<br />

vom System einen Speicherblock in der Größe der zuvor vereinbarten Datenstruktur<br />

CRYPTO_dynlock_value an, initialisiert den in dieser neuen Struktur<br />

enthaltenen Mutex über pthread_mutex_init() <strong>und</strong> gibt eine Referenz auf<br />

die dynamisch erzeugte Datenstruktur zurück. Sollte das System die Speicheranforderung<br />

nicht erfüllen können oder sollte die Initialisierung des Mutex’<br />

fehlschlagen, so liefert die Funktion stattdessen einen Nullzeiger.<br />

Die Callback-Funktion openssl_dl_destroy() gibt eine zuvor dynamisch<br />

per openssl_dl_create() angelegte CRYPTO_dynlock_value-Struktur wieder<br />

frei. Dazu wird zunächst der zugehörige Mutex zerstört <strong>und</strong> danach der<br />

vom System bereitgestellte Speicherbereich wieder freigegeben.<br />

Mit Hilfe der Callback-Funktion openssl_dl_lock() sperrt oder entsperrt<br />

Open<strong>SSL</strong> schließlich einen zuvor dynamisch angelegten Mutex. Wie bei der<br />

openssl_mutex_lock()-Funktion (siehe oben), zeigt das CRYPTO_LOCK-Flag<br />

des Parameters mode an, wie <strong>mit</strong> der Datenstruktur verfahren werden soll. Die<br />

Pthreads-Funktionen pthread_mutex_lock() <strong>und</strong> pthread_mutex_unlock()<br />

greifen zum (Ent-)Sperren der CRYPTO_dynlock_value-Struktur dl auf die<br />

darin eingebettete Mutex-Strukturkomponente mutex zu.<br />

Die openssl_thread_init()-Funktion dient der Initialisierung der Thread-<br />

Unterstützung. Die Funktion erstellt <strong>und</strong> initialisiert dazu als erstes das<br />

statische Feld der Mutex-Variablen. Sollte dabei etwas schief laufen (nicht<br />

genügend Speicher, Fehler in pthread_mutex_init()), dann kehrt die Funktion<br />

<strong>mit</strong> dem Rückgabewert 0 zurück. Andernfalls werden zum Schluß die

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!