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

#ifndef __org_ietf_jgss_ChannelBinding__
#define __org_ietf_jgss_ChannelBinding__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace net
    {
        class InetAddress;
    }
  }
  namespace org
  {
    namespace ietf
    {
      namespace jgss
      {
          class ChannelBinding;
      }
    }
  }
}

class org::ietf::jgss::ChannelBinding : public ::java::lang::Object
{

public:
  ChannelBinding(::java::net::InetAddress *, ::java::net::InetAddress *, JArray< jbyte > *);
  ChannelBinding(JArray< jbyte > *);
  virtual ::java::net::InetAddress * getInitiatorAddress();
  virtual ::java::net::InetAddress * getAcceptorAddress();
  virtual JArray< jbyte > * getApplicationData();
  virtual jboolean equals(::java::lang::Object *);
  virtual jint hashCode();
private:
  JArray< jbyte > * __attribute__((aligned(__alignof__( ::java::lang::Object)))) appData;
  ::java::net::InetAddress * initAddr;
  ::java::net::InetAddress * acceptAddr;
public:
  static ::java::lang::Class class$;
};

#endif // __org_ietf_jgss_ChannelBinding__
