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

#ifndef __javax_net_ssl_SSLSocket__
#define __javax_net_ssl_SSLSocket__

#pragma interface

#include <java/net/Socket.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace net
    {
        class InetAddress;
    }
  }
  namespace javax
  {
    namespace net
    {
      namespace ssl
      {
          class HandshakeCompletedListener;
          class SSLSession;
          class SSLSocket;
      }
    }
  }
}

class javax::net::ssl::SSLSocket : public ::java::net::Socket
{

public: // actually protected
  SSLSocket();
  SSLSocket(::java::lang::String *, jint);
  SSLSocket(::java::net::InetAddress *, jint);
  SSLSocket(::java::lang::String *, jint, ::java::net::InetAddress *, jint);
  SSLSocket(::java::net::InetAddress *, jint, ::java::net::InetAddress *, jint);
public:
  virtual void addHandshakeCompletedListener(::javax::net::ssl::HandshakeCompletedListener *) = 0;
  virtual void removeHandshakeCompletedListener(::javax::net::ssl::HandshakeCompletedListener *) = 0;
  virtual JArray< ::java::lang::String * > * getEnabledCipherSuites() = 0;
  virtual void setEnabledCipherSuites(JArray< ::java::lang::String * > *) = 0;
  virtual JArray< ::java::lang::String * > * getEnabledProtocols() = 0;
  virtual void setEnabledProtocols(JArray< ::java::lang::String * > *) = 0;
  virtual jboolean getEnableSessionCreation() = 0;
  virtual void setEnableSessionCreation(jboolean) = 0;
  virtual jboolean getNeedClientAuth() = 0;
  virtual void setNeedClientAuth(jboolean) = 0;
  virtual ::javax::net::ssl::SSLSession * getSession() = 0;
  virtual JArray< ::java::lang::String * > * getSupportedCipherSuites() = 0;
  virtual JArray< ::java::lang::String * > * getSupportedProtocols() = 0;
  virtual jboolean getUseClientMode() = 0;
  virtual void setUseClientMode(jboolean) = 0;
  virtual jboolean getWantClientAuth() = 0;
  virtual void setWantClientAuth(jboolean) = 0;
  virtual void startHandshake() = 0;
  static ::java::lang::Class class$;
};

#endif // __javax_net_ssl_SSLSocket__
