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

#ifndef __gnu_javax_net_ssl_provider_ServerHandshake__
#define __gnu_javax_net_ssl_provider_ServerHandshake__

#pragma interface

#include <gnu/javax/net/ssl/provider/AbstractHandshake.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace net
      {
        namespace ssl
        {
          namespace provider
          {
              class AbstractHandshake$CertVerifier;
              class CipherSuite;
              class CipherSuiteList;
              class CompressionMethod;
              class CompressionMethodList;
              class DelegatedTask;
              class ProtocolVersion;
              class SSLEngineImpl;
              class ServerHandshake;
              class ServerHandshake$CertLoader;
              class ServerHandshake$GenDH;
              class ServerHandshake$State;
              class ServerNameList;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace nio
    {
        class ByteBuffer;
    }
    namespace security
    {
        class KeyPair;
        class PrivateKey;
      namespace cert
      {
          class X509Certificate;
      }
    }
  }
  namespace javax
  {
    namespace net
    {
      namespace ssl
      {
          class SSLEngineResult$HandshakeStatus;
      }
    }
  }
}

class gnu::javax::net::ssl::provider::ServerHandshake : public ::gnu::javax::net::ssl::provider::AbstractHandshake
{

public: // actually package-private
  ServerHandshake(jboolean, ::gnu::javax::net::ssl::provider::SSLEngineImpl *);
private:
  static ::gnu::javax::net::ssl::provider::ProtocolVersion * chooseProtocol(::gnu::javax::net::ssl::provider::ProtocolVersion *, JArray< ::java::lang::String * > *);
  ::gnu::javax::net::ssl::provider::CipherSuite * chooseSuite(::gnu::javax::net::ssl::provider::CipherSuiteList *, JArray< ::java::lang::String * > *, ::gnu::javax::net::ssl::provider::ProtocolVersion *);
  static ::gnu::javax::net::ssl::provider::CompressionMethod * chooseCompression(::gnu::javax::net::ssl::provider::CompressionMethodList *);
public: // actually protected
  virtual jboolean doHash();
public:
  virtual ::javax::net::ssl::SSLEngineResult$HandshakeStatus * implHandleInput();
  virtual ::javax::net::ssl::SSLEngineResult$HandshakeStatus * implHandleOutput(::java::nio::ByteBuffer *);
public: // actually package-private
  virtual ::javax::net::ssl::SSLEngineResult$HandshakeStatus * status();
  virtual void checkKeyExchange();
  virtual void handleV2Hello(::java::nio::ByteBuffer *);
private:
  ::java::nio::ByteBuffer * signParams(::java::nio::ByteBuffer *);
  void verifyClient(JArray< jbyte > *);
public: // actually package-private
  static void access$0(::gnu::javax::net::ssl::provider::ServerHandshake *, ::java::lang::String *);
  static ::java::lang::String * access$1(::gnu::javax::net::ssl::provider::ServerHandshake *);
  static void access$2(::gnu::javax::net::ssl::provider::ServerHandshake *, ::java::security::cert::X509Certificate *);
  static void access$3(::gnu::javax::net::ssl::provider::ServerHandshake *, ::java::security::PrivateKey *);
  static ::java::security::cert::X509Certificate * access$4(::gnu::javax::net::ssl::provider::ServerHandshake *);
  static void access$5(::gnu::javax::net::ssl::provider::ServerHandshake *, ::java::security::KeyPair *);
  static ::java::security::KeyPair * access$6(::gnu::javax::net::ssl::provider::ServerHandshake *);
  static ::java::nio::ByteBuffer * access$7(::gnu::javax::net::ssl::provider::ServerHandshake *, ::java::nio::ByteBuffer *);
  static ::java::security::PrivateKey * access$8(::gnu::javax::net::ssl::provider::ServerHandshake *);
  static JArray< jint > * $SWITCH_TABLE$gnu$javax$net$ssl$provider$Extension$Type();
  static JArray< jint > * $SWITCH_TABLE$gnu$javax$net$ssl$provider$KeyExchangeAlgorithm();
  static JArray< jint > * $SWITCH_TABLE$gnu$javax$net$ssl$provider$ServerHandshake$State();
private:
  ::gnu::javax::net::ssl::provider::ServerHandshake$State * __attribute__((aligned(__alignof__( ::gnu::javax::net::ssl::provider::AbstractHandshake)))) state;
  ::java::nio::ByteBuffer * outBuffer;
  jboolean clientHadExtensions;
  jboolean continuedSession;
  ::gnu::javax::net::ssl::provider::ServerNameList * requestedNames;
  ::java::lang::String * keyAlias;
  ::java::security::cert::X509Certificate * clientCert;
  ::java::security::cert::X509Certificate * localCert;
  jboolean helloV2;
  ::java::security::KeyPair * dhPair;
  ::java::security::PrivateKey * serverKey;
  ::gnu::javax::net::ssl::provider::ServerHandshake$GenDH * genDH;
  ::gnu::javax::net::ssl::provider::AbstractHandshake$CertVerifier * certVerifier;
  ::gnu::javax::net::ssl::provider::ServerHandshake$CertLoader * certLoader;
  ::gnu::javax::net::ssl::provider::DelegatedTask * keyExchangeTask;
  static JArray< jint > * $SWITCH_TABLE$gnu$javax$net$ssl$provider$Extension$Type__;
  static JArray< jint > * $SWITCH_TABLE$gnu$javax$net$ssl$provider$KeyExchangeAlgorithm__;
  static JArray< jint > * $SWITCH_TABLE$gnu$javax$net$ssl$provider$ServerHandshake$State__;
public: // actually package-private
  static jboolean $assertionsDisabled;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_net_ssl_provider_ServerHandshake__
