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

#ifndef __gnu_javax_net_ssl_provider_SSLServerSocketImpl__
#define __gnu_javax_net_ssl_provider_SSLServerSocketImpl__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace net
      {
        namespace ssl
        {
          namespace provider
          {
              class SSLContextImpl;
              class SSLServerSocketImpl;
              class SSLSocketImpl;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace net
    {
        class Socket;
    }
  }
}

class gnu::javax::net::ssl::provider::SSLServerSocketImpl : public ::javax::net::ssl::SSLServerSocket
{

public:
  SSLServerSocketImpl(::gnu::javax::net::ssl::provider::SSLContextImpl *);
  virtual jboolean getEnableSessionCreation();
  virtual JArray< ::java::lang::String * > * getEnabledCipherSuites();
  virtual JArray< ::java::lang::String * > * getEnabledProtocols();
  virtual jboolean getNeedClientAuth();
  virtual JArray< ::java::lang::String * > * getSupportedCipherSuites();
  virtual JArray< ::java::lang::String * > * getSupportedProtocols();
  virtual jboolean getUseClientMode();
  virtual jboolean getWantClientAuth();
  virtual void setEnableSessionCreation(jboolean);
  virtual void setEnabledCipherSuites(JArray< ::java::lang::String * > *);
  virtual void setEnabledProtocols(JArray< ::java::lang::String * > *);
  virtual void setNeedClientAuth(jboolean);
  virtual void setUseClientMode(jboolean);
  virtual void setWantClientAuth(jboolean);
  virtual ::gnu::javax::net::ssl::provider::SSLSocketImpl * SSLServerSocketImpl$accept();
  virtual ::java::net::Socket * accept();
private:
  ::gnu::javax::net::ssl::provider::SSLContextImpl * __attribute__((aligned(__alignof__( ::javax::net::ssl::SSLServerSocket)))) contextImpl;
  jboolean enableSessionCreation;
  JArray< ::java::lang::String * > * enabledCipherSuites;
  JArray< ::java::lang::String * > * enabledProtocols;
  jboolean needClientAuth;
  jboolean wantClientAuth;
  jboolean clientMode;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_net_ssl_provider_SSLServerSocketImpl__
