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

#ifndef __javax_naming_ldap_StartTlsResponse__
#define __javax_naming_ldap_StartTlsResponse__

#pragma interface

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

extern "Java"
{
  namespace javax
  {
    namespace naming
    {
      namespace ldap
      {
          class StartTlsResponse;
      }
    }
    namespace net
    {
      namespace ssl
      {
          class HostnameVerifier;
          class SSLSession;
          class SSLSocketFactory;
      }
    }
  }
}

class javax::naming::ldap::StartTlsResponse : public ::java::lang::Object
{

public: // actually protected
  StartTlsResponse();
public:
  virtual ::java::lang::String * getID();
  virtual JArray< jbyte > * getEncodedValue();
  virtual void setEnabledCipherSuites(JArray< ::java::lang::String * > *) = 0;
  virtual void setHostnameVerifier(::javax::net::ssl::HostnameVerifier *) = 0;
  virtual ::javax::net::ssl::SSLSession * negotiate() = 0;
  virtual ::javax::net::ssl::SSLSession * negotiate(::javax::net::ssl::SSLSocketFactory *) = 0;
  virtual void close() = 0;
private:
  static const jlong serialVersionUID = 8372842182579276418LL;
public:
  static ::java::lang::String * OID;
  static ::java::lang::Class class$;
};

#endif // __javax_naming_ldap_StartTlsResponse__
