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

#ifndef __gnu_CORBA_ResponseHandlerImpl__
#define __gnu_CORBA_ResponseHandlerImpl__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace CORBA
    {
      namespace CDR
      {
          class BufferedCdrOutput;
      }
      namespace GIOP
      {
          class MessageHeader;
          class ReplyHeader;
          class RequestHeader;
      }
        class ResponseHandlerImpl;
    }
  }
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class ORB;
        namespace portable
        {
            class OutputStream;
        }
      }
    }
  }
}

class gnu::CORBA::ResponseHandlerImpl : public ::java::lang::Object
{

public: // actually package-private
  ResponseHandlerImpl(::org::omg::CORBA::ORB *, ::gnu::CORBA::GIOP::MessageHeader *, ::gnu::CORBA::GIOP::ReplyHeader *, ::gnu::CORBA::GIOP::RequestHeader *);
public:
  virtual ::org::omg::CORBA::portable::OutputStream * createExceptionReply();
  virtual ::org::omg::CORBA::portable::OutputStream * createReply();
  virtual ::gnu::CORBA::CDR::BufferedCdrOutput * getBuffer();
  virtual jboolean isExceptionReply();
private:
  void prepareStream();
public:
  ::gnu::CORBA::GIOP::MessageHeader * __attribute__((aligned(__alignof__( ::java::lang::Object)))) message_header;
  ::org::omg::CORBA::ORB * orb;
  ::gnu::CORBA::GIOP::ReplyHeader * reply_header;
  ::gnu::CORBA::GIOP::RequestHeader * request_header;
private:
  jboolean exceptionReply;
  ::gnu::CORBA::CDR::BufferedCdrOutput * buffer;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_CORBA_ResponseHandlerImpl__
