
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __gnu_javax_net_ssl_provider_SRPTrustManagerFactory__
#define __gnu_javax_net_ssl_provider_SRPTrustManagerFactory__

#pragma interface

#include <javax/net/ssl/TrustManagerFactorySpi.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace net
      {
        namespace ssl
        {
          namespace provider
          {
              class SRPTrustManagerFactory;
              class SRPTrustManagerFactory$Manager;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace security
    {
        class KeyStore;
    }
  }
  namespace javax
  {
    namespace net
    {
      namespace ssl
      {
          class ManagerFactoryParameters;
          class TrustManager;
      }
    }
  }
}

class gnu::javax::net::ssl::provider::SRPTrustManagerFactory : public ::javax::net::ssl::TrustManagerFactorySpi
{

public:
  SRPTrustManagerFactory();
public: // actually protected
  virtual JArray< ::javax::net::ssl::TrustManager * > * engineGetTrustManagers();
  virtual void engineInit(::java::security::KeyStore *);
  virtual void engineInit(::javax::net::ssl::ManagerFactoryParameters *);
private:
  ::gnu::javax::net::ssl::provider::SRPTrustManagerFactory$Manager * __attribute__((aligned(__alignof__( ::javax::net::ssl::TrustManagerFactorySpi)))) current;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_net_ssl_provider_SRPTrustManagerFactory__
