デバッグ
デバッグとロギング
wolfSSLは、デバッグが制限されている環境でのログメッセージによるデバッグをサポートしています。
ロギングをオンにするには関数wolfSSL_Debugging_ON()を使用し、
オフにするにはwolfSSL_Debugging_OFF()を使用します。
通常のビルド(リリースモード)では、これらの関数は効果がありません。
デバッグビルドでは、これらの関数が確実にオンになるようにDEBUG_WOLFSSLを定義してください。
wolfSSL 2.0以降では、ロギングの方法についてより柔軟性を提供するために、ランタイムでロギングコールバック関数を登録できます。
ロギングコールバックは関数wolfSSL_SetLoggingCb()で登録できます。
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にあります。
デフォルトでは、wolfSSLはfprintfを使用してstderrにログを出力します。
エラーコード
デバッグを支援するために、有益なエラーメッセージを提供するよう努めています。
wolfSSL_read()とwolfSSL_write()の呼び出しは、成功時にはバイト数、接続終了時には0、エラー時には-1を返します。
これはread()やwrite()と同様です。
エラーが発生した場合には、以下の2つのAPIを使用してより詳しい情報を入手できます。
関数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);
ノンブロッキングソケットを使用している場合、errno EAGAIN/EWOULDBLOCKをテストするか、
より正確には特定のエラーコードSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEをテストできます。
付録F エラーコードに、wolfSSLとwolfCryptのエラーコード一覧を掲載しています。