unit module OpenSSL::Method;

use OpenSSL::NativeLib;
use NativeCall;

class SSL_METHOD is repr('CStruct') {
    # This field is not present in LibreSSL implementation,
    # more so this structure is not really meant for introspection.
    # But for a CStruct we must provide at least one attribute,
    # so this one is it.
    # When used with OpenSSL implementation, it returns some values,
    # otherwise it returns garbage.
    has int32 $.version;
}

our sub SSLv2_client_method() returns SSL_METHOD is native(&ssl-lib)   { ... }
our sub SSLv2_server_method() returns SSL_METHOD is native(&ssl-lib)   { ... }
our sub SSLv2_method() returns SSL_METHOD is native(&ssl-lib)          { ... }
our sub SSLv3_client_method() returns SSL_METHOD is native(&ssl-lib)   { ... }
our sub SSLv3_server_method() returns SSL_METHOD is native(&ssl-lib)   { ... }
our sub SSLv3_method() returns SSL_METHOD is native(&ssl-lib)          { ... }
our sub SSLv23_client_method() returns SSL_METHOD is native(&ssl-lib)  { ... }
our sub SSLv23_server_method() returns SSL_METHOD is native(&ssl-lib)  { ... }
our sub SSLv23_method() returns SSL_METHOD is native(&ssl-lib)         { ... }
our sub TLS_client_method() returns SSL_METHOD is native(&ssl-lib)     { ... }
our sub TLS_server_method() returns SSL_METHOD is native(&ssl-lib)     { ... }
our sub TLS_method() returns SSL_METHOD is native(&ssl-lib)            { ... }
our sub TLSv1_client_method() returns SSL_METHOD is native(&ssl-lib)   { ... }
our sub TLSv1_server_method() returns SSL_METHOD is native(&ssl-lib)   { ... }
our sub TLSv1_method() returns SSL_METHOD is native(&ssl-lib)          { ... }
our sub TLSv1_1_client_method() returns SSL_METHOD is native(&ssl-lib) { ... }
our sub TLSv1_1_server_method() returns SSL_METHOD is native(&ssl-lib) { ... }
our sub TLSv1_1_method() returns SSL_METHOD is native(&ssl-lib)        { ... }
our sub TLSv1_2_client_method() returns SSL_METHOD is native(&ssl-lib) { ... }
our sub TLSv1_2_server_method() returns SSL_METHOD is native(&ssl-lib) { ... }
our sub TLSv1_2_method() returns SSL_METHOD is native(&ssl-lib)        { ... }
