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

#ifndef __gnu_CORBA_GIOP_RequestHeader__
#define __gnu_CORBA_GIOP_RequestHeader__

#pragma interface

#include <gnu/CORBA/GIOP/ContextHandler.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace CORBA
    {
      namespace CDR
      {
          class AbstractCdrInput;
          class AbstractCdrOutput;
      }
      namespace GIOP
      {
          class RequestHeader;
      }
    }
  }
}

class gnu::CORBA::GIOP::RequestHeader : public ::gnu::CORBA::GIOP::ContextHandler
{

public:
  RequestHeader();
  static jint getNextId();
  virtual void setResponseExpected(jboolean) = 0;
  virtual jboolean isResponseExpected() = 0;
  virtual ::java::lang::String * bytes(JArray< jbyte > *);
  virtual void read(::gnu::CORBA::CDR::AbstractCdrInput *) = 0;
  virtual ::java::lang::String * toString() = 0;
  virtual void write(::gnu::CORBA::CDR::AbstractCdrOutput *) = 0;
private:
  static jint freeId;
public:
  ::java::lang::String * __attribute__((aligned(__alignof__( ::gnu::CORBA::GIOP::ContextHandler)))) operation;
  JArray< jbyte > * object_key;
  JArray< jbyte > * requesting_principal;
  jint request_id;
public: // actually protected
  jboolean response_expected;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_CORBA_GIOP_RequestHeader__
