以前のOpenSSLバージョンでは、SWIG.iファイルでこれを行うことができました。
STACK *ssl_get_ciphers(SSL *ssl) {
return (STACK *)SSL_get_ciphers(ssl);
}
OpenSSL 1.0.0beta3では、STACKが定義されていないように見えるため、これは失敗します。新しいOpenSSLは型チェックでより良い仕事をしようとするので、次のように定義されたSTACK_OFマクロを使用することになっています。
#define STACK_OF(type) struct stack_st_##type
上記のコードをSTACK_OFを使用するように変更した場合:
STACK_OF(SSL_CIPHER) *ssl_get_ciphers(SSL *ssl) {
return SSL_get_ciphers(ssl);
}
次に、SWIGはこれを好きではありません:
Error: Syntax error in input(1).
これを次のように変更することで、コンパイルすることができます。
struct stack_st_SSL_CIPHER *ssl_get_ciphers(SSL *ssl) {
return SSL_get_ciphers(ssl);
}
ただし、OpenSSLはマクロをリリースごとに変更する可能性があるため、これは明らかに良くありません。_STACK構造体がありますが、これもOpenSSLのプライベート詳細であり、リリースごとに変更される可能性があります。スタックは、次のようにパラメータとして入力することもできます。
int sk_x509_num(STACK_OF(X509) *stack) {
return sk_num(stack);
}
SWIGも好きではありません。
OpenSSLの個人情報を使用せずにこれを機能させる方法はありますか?