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

#ifndef __gnu_javax_net_ssl_provider_ClientHelloV2__
#define __gnu_javax_net_ssl_provider_ClientHelloV2__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace net
      {
        namespace ssl
        {
          namespace provider
          {
              class ClientHelloV2;
              class ProtocolVersion;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace nio
    {
        class ByteBuffer;
    }
  }
}

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

public: // actually package-private
  ClientHelloV2(::java::nio::ByteBuffer *);
public:
  virtual jint length();
public: // actually package-private
  virtual ::gnu::javax::net::ssl::provider::ProtocolVersion * version();
  virtual jint cipherSpecsLength();
  virtual jint sessionIdLength();
  virtual jint challengeLength();
public:
  virtual ::java::util::List * cipherSpecs();
public: // actually package-private
  virtual JArray< jbyte > * sessionId();
  virtual JArray< jbyte > * challenge();
public:
  virtual ::java::lang::String * toString();
  virtual ::java::lang::String * toString(::java::lang::String *);
private:
  ::java::nio::ByteBuffer * __attribute__((aligned(__alignof__( ::java::lang::Object)))) buffer;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_net_ssl_provider_ClientHelloV2__
