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

#ifndef __gnu_javax_net_ssl_provider_ClientKeyExchange__
#define __gnu_javax_net_ssl_provider_ClientKeyExchange__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace net
      {
        namespace ssl
        {
          namespace provider
          {
              class CipherSuite;
              class ClientKeyExchange;
              class ExchangeKeys;
              class ProtocolVersion;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace nio
    {
        class ByteBuffer;
    }
  }
}

class gnu::javax::net::ssl::provider::ClientKeyExchange : public ::java::lang::Object
{

public:
  ClientKeyExchange(::java::nio::ByteBuffer *, ::gnu::javax::net::ssl::provider::CipherSuite *, ::gnu::javax::net::ssl::provider::ProtocolVersion *);
  virtual ::gnu::javax::net::ssl::provider::ExchangeKeys * exchangeKeys();
  virtual jint length();
  virtual ::java::lang::String * toString();
  virtual ::java::lang::String * toString(::java::lang::String *);
public: // actually protected
  ::java::nio::ByteBuffer * __attribute__((aligned(__alignof__( ::java::lang::Object)))) buffer;
  ::gnu::javax::net::ssl::provider::CipherSuite * suite;
  ::gnu::javax::net::ssl::provider::ProtocolVersion * version;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_net_ssl_provider_ClientKeyExchange__
