Python からのコールバックに精通している必要があります。
最初にコールバック関数を定義します。
using namespace boost::asio;
// this function is called to obtain password info about an encrypted key
std::string my_password_callback(
std::size_t max_length, // the maximum length for a password
ssl::context::password_purpose purpose ) // for_reading or for_writing
{
std::string password;
// security warning: !! DO NOT hard-code the password here !!
// read it from a SECURE location on your system
return password;
}
次に、コールバックを次のように設定しますset_password_callback()
。
// set the callback before you load the protected key
ctx.set_password_callback(my_password_callback);
// ...
// this will call my_password_callback if a password is required
ctx.use_private_key_file("key.pem",ssl::context::pem);
クラスメソッドをコールバックとして使いたい場合は、
class server {
std::string password_callback(); //NOTE: no parameters
// ...
};
boost::bind()
コールバックを設定するために使用できます。
#include <boost/bind.hpp>
void server::startup() {
ctx_.set_password_callback(
boost::bind(&server::password_callback,this) );
// ...
}
いずれの場合も、おそらくパスワードが間違っていたか、ファイルが見つからなかったためにキーを復号化できなかった場合、boost::system::system_error
例外 ( に基づく) がスローされます。std::exception