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

#ifndef __gnu_javax_crypto_sasl_srp_SRPAuthInfoProvider__
#define __gnu_javax_crypto_sasl_srp_SRPAuthInfoProvider__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace crypto
      {
        namespace sasl
        {
          namespace srp
          {
              class PasswordFile;
              class SRPAuthInfoProvider;
          }
        }
      }
    }
  }
}

class gnu::javax::crypto::sasl::srp::SRPAuthInfoProvider : public ::java::lang::Object
{

public:
  SRPAuthInfoProvider();
  virtual void activate(::java::util::Map *);
  virtual void passivate();
  virtual jboolean contains(::java::lang::String *);
  virtual ::java::util::Map * lookup(::java::util::Map *);
  virtual void update(::java::util::Map *);
  virtual ::java::util::Map * getConfiguration(::java::lang::String *);
private:
  ::gnu::javax::crypto::sasl::srp::PasswordFile * __attribute__((aligned(__alignof__( ::java::lang::Object)))) passwordFile;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_crypto_sasl_srp_SRPAuthInfoProvider__
