# Copyright (c) 2023 Yuki Kimoto
# MIT License

class Net::SSLeay::X509_VERIFY_PARAM : pointer {
  version_from Net::SSLeay;
  allow Net::SSLeay::SSL_CTX;
  
  use Net::SSLeay::Error;
  
  use Fn;
  
  # Fields
  has ref_ssl_ctx : Net::SSLeay::SSL_CTX; # For Net::SSLeay::SSL_CTX#get0_param method
  
  # Class Methods
  native static method new : Net::SSLeay::X509_VERIFY_PARAM ();
  
  private static method new_with_pointer : Net::SSLeay::X509_VERIFY_PARAM ($pointer : Address, $options : object[] = undef) {
    
    my $self = new Net::SSLeay::X509_VERIFY_PARAM;
    
    Fn->set_pointer($self, $pointer);
    
    return $self;
  }
  
  # Instance Methods
  native method get_flags : long ();
  
  native method set_flags : int ($flags : long);
  
  native method clear_flags : int ($flags : long);
  
  native method get_hostflags : int ();
  
  native method set_hostflags : void ($flags : int);
  
  native method set1_host : int ($name : string, $namelen : int = -1);
  
  native method set1_ip_asc : int ($ipasc : string);
                                 
  native method set1_email : int ($email : string, $emaillen : int = -1);
  
  native method DESTROY : void ();
}