デバッグ
デバッグとログ
wolfSSL はデバッグ機能が限られている環境のために、ログ・メッセージを通じてデバッ グをサポートします。実行時にログ機能をオンにするには wolfSSL_Debugging_ON()関 数、オフにするには wolfSSL_Debugging_OFF()関数を使用してください。通常ビルド(リ リースモード)ではこれらの関数は作用しないようになります。デバッグビルドでは、
DEBUG_WOLFSSL を定義しこれらの関数をオンにしておく必要があります。
wolfSSL2.0 では、ログ機能のコールバック関数が実行時に登録でき、ログがどのようにさ れるか柔軟に指定できます。ログ機能のコールバックは次のような関数で登録できま す:
int wolfSSL_SetLoggingCb(wolfSSL_Logging_cb log_function);
typedef void (*wolfSSL_Logging_cb)(const int logLevel, const char *const logMessage);
ログレベルについては wolfssl/wolfcrypt/logging.h に定義があり、その実体は logging.c に あります。デフォルトでログは fprintf の stderr に出力されます。
エラー・コード
wolfSSL は、デバッグを手助けするために有用なエラー・メッセージを提供します。
それぞれの wolfSSL_read()または wolfSSL_write()呼び出しは、ちょうど read()や write() と同じように、成功した場合書き込みバイト数、コネクションのクローズ時には 0、エラー 時には-1 を返却します。エラー時には二つの呼び出しを使ってエラーに関してさらに情報 を得ることができます。
wolfSSL_get_error()はその時点のエラー・コードを返却します。WOLFSSL オブジェク トと wolfSSL_read()または wolfSSL_write()の返却値をアーギュメントとして受け取り、
対応するエラー・コードを返却します
int err = wolfSSL_get_error(ssl, result);
さらに人が読める形のエラー・コードの説明を得るためにはwolfSSL_ERR_error_string() 関数を使用することができます。wolfSSL_get_error()の返却するコードとストレージ・バ ッファをアーギュメントとして受け取り、対応するエラー の説明をストレージ・バッファ
(下の例では errorString)に置きます。
char errorString[80];
wolfSSL_
ERR_error_string(err, errorString);ノンブロッキングのソケットを使用している場合、EAGAIN/EWOULDBLOCK でエラー チェックすることができます。さらにより正確には、特定のエラー・コードを
SSL_ERROR_WANT_READ と SSL_ERROR_WANT_WRITE でテストすることができま す。
wolfSSL と wolfCrypt のエラー・コードのリストはユーザ・マニュアル Appendix C (エラ ー・コード)を参照してください。
ライブラリ設計
ライブラリー・ヘッダー
wolfSSLでは、ライブラリー・ヘッダーファイルは以下の場所に格納されています:
wolfSSL: wolfssl/
wolfCrypt: wolfssl/wolfcrypt/
wolfSSL OpenSSL Compatibility Layer: wolfssl/openssl/
OpenSSL 互換レイヤー(ユーザマニュアル第 13 章参照)を使用する場合、
/wolfssl/openssl/ssl.h ヘッダーをインクルードする必要があります:
#include <wolfssl/openssl/ssl.h>
wolfSSL ネイティブ API のみを使用する場合は /wolfssl/ssl.h ヘッダーをインクルードする 必要があります:
#include <wolfssl/ssl.h>
開始と終了
すべてのアプリケーションはライブラリを使用する前に wolfSSL_Init()を呼び出し、プ ログラム終了時には wolfSSL_Cleanup()を呼び出す必要があります。現在は、これらの関 数はマルチユーザーモードにおいてセッション・キャッシュのための共有の相互排他を初 期化あるいは解放するだけですが、将来、拡張の可能性があるのでこれらを使用すること をお勧めします。
構造体の使用
ヘッダーファイルの格納場所の変更のほかに、現在のwolfSSLではネイティブ wolfSSL
API と wolfSSL OpenSSL 互換レイヤーの間を命名法で区別しています。この区別によっ て、ネイティブ wolfSSL API によって使用される主なSSL/TLS 構造体は名前はopenSSL とは異なっています。wolfSSLでの構造体は以下の通りです。OpenSSL 互換レイヤー(ユ ーザ・マニュアル第 13 章参照)を使用する場合は以前の名前も使用されています。