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

#ifndef __gnu_javax_net_ssl_provider_ClientHelloBuilder__
#define __gnu_javax_net_ssl_provider_ClientHelloBuilder__

#pragma interface

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

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

class gnu::javax::net::ssl::provider::ClientHelloBuilder : public ::gnu::javax::net::ssl::provider::ClientHello
{

public:
  ClientHelloBuilder();
  virtual ::java::nio::ByteBuffer * buffer();
  virtual void setVersion(::gnu::javax::net::ssl::provider::ProtocolVersion *);
  virtual void setSessionId(JArray< jbyte > *);
  virtual void setSessionId(JArray< jbyte > *, jint, jint);
  virtual void setCipherSuites(::java::util::List *);
  virtual void setCompressionMethods(::java::util::List *);
  virtual void setExtensionsLength(jint);
  virtual void setExtensions(::java::nio::ByteBuffer *);
  virtual void setDisableExtensions(jboolean);
  virtual void ensureCapacity(jint);
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_net_ssl_provider_ClientHelloBuilder__
