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

#ifndef __javax_net_ssl_X509ExtendedKeyManager__
#define __javax_net_ssl_X509ExtendedKeyManager__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace net
    {
        class Socket;
    }
    namespace security
    {
        class Principal;
        class PrivateKey;
      namespace cert
      {
          class X509Certificate;
      }
    }
  }
  namespace javax
  {
    namespace net
    {
      namespace ssl
      {
          class SSLEngine;
          class X509ExtendedKeyManager;
      }
    }
  }
}

class javax::net::ssl::X509ExtendedKeyManager : public ::java::lang::Object
{

public: // actually protected
  X509ExtendedKeyManager();
public:
  virtual ::java::lang::String * chooseEngineClientAlias(JArray< ::java::lang::String * > *, JArray< ::java::security::Principal * > *, ::javax::net::ssl::SSLEngine *);
  virtual ::java::lang::String * chooseEngineServerAlias(::java::lang::String *, JArray< ::java::security::Principal * > *, ::javax::net::ssl::SSLEngine *);
  virtual ::java::lang::String * chooseClientAlias(JArray< ::java::lang::String * > *, JArray< ::java::security::Principal * > *, ::java::net::Socket *) = 0;
  virtual ::java::lang::String * chooseServerAlias(::java::lang::String *, JArray< ::java::security::Principal * > *, ::java::net::Socket *) = 0;
  virtual JArray< ::java::security::cert::X509Certificate * > * getCertificateChain(::java::lang::String *) = 0;
  virtual JArray< ::java::lang::String * > * getClientAliases(::java::lang::String *, JArray< ::java::security::Principal * > *) = 0;
  virtual ::java::security::PrivateKey * getPrivateKey(::java::lang::String *) = 0;
  virtual JArray< ::java::lang::String * > * getServerAliases(::java::lang::String *, JArray< ::java::security::Principal * > *) = 0;
  static ::java::lang::Class class$;
};

#endif // __javax_net_ssl_X509ExtendedKeyManager__
