[omniORB] Object To String (O2S) conversion problem

Gregory Giguashvili Gregoryg@ParadigmGeo.com
Mon Aug 19 10:02:01 2002


This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.

------_=_NextPart_000_01C24767.0773D330
Content-Type: text/plain;
	charset="iso-8859-1"

Please, forgive me, but our antivirus software chose to remove the
attachment from my e-mail (because of some problem on our server), so I'm
sending it to you once more (unpacked this time).

Thanks a lot and sorry for the inconvinience.
Giga
 <<O2S.idl>>  <<O2S.pure>>  <<O2S_i.cc>>  <<O2SSK.cc>>  <<O2SH.h>> 
>  -----Original Message-----
> From: 	Gregory Giguashvili  
> Sent:	Monday, August 19, 2002 11:53 AM
> To:	OMNI ORB Mailing List (E-mail)
> Subject:	Object To String (O2S) conversion problem
> 
> Hello,
> 
> I'm using omniORB 3.0.4 snapshot dated 25-April-2002. Recently, I came
> across a problem on SGI platform, which generated SIGPIPE in my programs.
> After investigating it a little, I came to the conclusion that the problem
> seems to be in the profile creation in omniORB and this is why...
> 
> 1) I attach a sample program, which contains interface and its
> implementation generated by the IDL compiler (no add-ons).
> 2) I attach a trace generated when running this program using Valgrind
> open-source "Purify" like product for Linux. (Though, I mentioned that the
> problem was on SGI platform, SGI Purify and Valgrind gave similar output
> for this test program. I chose to provide you with Valgrind output since I
> think it's a GREAT product and it really helps to find problems). Refer to
> the following link for further information:
> http://developer.kde.org/~sewardj/
> 3) As you can see from the trace, it complains that there is uninitialized
> memory read each time I use IOR returned by object_to_string function. In
> my "real" application, I used to transfer this IOR string as an argument
> to some IDL call. On SGI platforms, calling a send system call with
> uninitialized string causes SIGPIPE in some cases.
> 4) After investigating this problem a little, I came to the following
> conclusions:
>   - The problem doesn't seem to be in IOP::iorToEncapStr function, rather
> it seems to be in the profile buffer provided to this function as the
> argument.
>   - The problem doesn't occur for all IPs (this almost drove me crazy
> since it happened on certain machines only). I checked this on a
> standalone laptop, which was assigned different IPs every time. The
> following IP: 198.0.0.1 doesn't cause the problem, while 206.109.128.192
> does.
> 
> I sure hope there is a known fix for this problem, though I find it hard
> to beleive that someone noticed it because of its weirdness.
> 
> Thanks a lot in advance.
> Giga
> P.S. 
> 
> O2S.tgz file contains the following:
> O2S.idl - sample IDL file
> O2S.pure - the output from Valgrind
> O2S_i.cc - implementation generated by IDL compiler
> O2SH.h, O2SSK.cc - IDL generated sources
> 
> 
> 

------_=_NextPart_000_01C24767.0773D330
Content-Type: application/octet-stream;
	name="O2S.idl"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="O2S.idl"

interface Pinger {=0A=
	void ping ();=0A=
};=0A=
=0A=

------_=_NextPart_000_01C24767.0773D330
Content-Type: application/octet-stream;
	name="O2S.pure"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="O2S.pure"

valgrind's libpthread.so: IGNORED call to: pthread_attr_destroy=0A=
valgrind's libpthread.so: IGNORED call to: pthread_attr_destroy=0A=
valgrind's libpthread.so: IGNORED call to: pthread_attr_destroy=0A=
=3D=3D10825=3D=3D Conditional jump or move depends on uninitialised =
value(s)=0A=
=3D=3D10825=3D=3D    at 0x40349ECA: IOP::iorToEncapStr(unsigned char =
const *, _CORBA_Unbounded_Sequence<IOP::TaggedProfile> const *) =
(../ior.cc:141)=0A=
=3D=3D10825=3D=3D    by 0x4034B45E: =
omniURI::objectToString(CORBA::Object *) (../uri.cc:115)=0A=
=3D=3D10825=3D=3D    by 0x4033CB69: =
omniOrbORB::object_to_string(CORBA::Object *) (../corbaOrb.cc:428)=0A=
=3D=3D10825=3D=3D    by 0x80503C5: main =
(/home/gregoryg/project/src/subsystem/O2S/O2S_i.cc:69)=0A=
=3D=3D10825=3D=3D    by 0x40932507: __libc_start_main =
(../sysdeps/generic/libc-start.c:129)=0A=
=3D=3D10825=3D=3D    by 0x804F681: _IO_file_write@@GLIBC_2.1 (in =
/home/gregoryg/project/product/Linux-2.2/exe/O2S)=0A=
=3D=3D10825=3D=3D =0A=
=3D=3D10825=3D=3D Conditional jump or move depends on uninitialised =
value(s)=0A=
=3D=3D10825=3D=3D    at 0x40349F03: IOP::iorToEncapStr(unsigned char =
const *, _CORBA_Unbounded_Sequence<IOP::TaggedProfile> const *) =
(../ior.cc:146)=0A=
=3D=3D10825=3D=3D    by 0x4034B45E: =
omniURI::objectToString(CORBA::Object *) (../uri.cc:115)=0A=
=3D=3D10825=3D=3D    by 0x4033CB69: =
omniOrbORB::object_to_string(CORBA::Object *) (../corbaOrb.cc:428)=0A=
=3D=3D10825=3D=3D    by 0x80503C5: main =
(/home/gregoryg/project/src/subsystem/O2S/O2S_i.cc:69)=0A=
=3D=3D10825=3D=3D    by 0x40932507: __libc_start_main =
(../sysdeps/generic/libc-start.c:129)=0A=
=3D=3D10825=3D=3D    by 0x804F681: _IO_file_write@@GLIBC_2.1 (in =
/home/gregoryg/project/product/Linux-2.2/exe/O2S)=0A=
=3D=3D10825=3D=3D =0A=
=3D=3D10825=3D=3D Conditional jump or move depends on uninitialised =
value(s)=0A=
=3D=3D10825=3D=3D    at 0x8052516: ostream::operator<<(char const *) =
(../../../libio/iostream.cc:772)=0A=
=3D=3D10825=3D=3D    by 0x805040A: main =
(/home/gregoryg/project/src/subsystem/O2S/O2S_i.cc:70)=0A=
=3D=3D10825=3D=3D    by 0x40932507: __libc_start_main =
(../sysdeps/generic/libc-start.c:129)=0A=
=3D=3D10825=3D=3D    by 0x804F681: _IO_file_write@@GLIBC_2.1 (in =
/home/gregoryg/project/product/Linux-2.2/exe/O2S)=0A=
=3D=3D10825=3D=3D =0A=
=3D=3D10825=3D=3D Conditional jump or move depends on uninitialised =
value(s)=0A=
=3D=3D10825=3D=3D    at 0x805251C: ostream::operator<<(char const *) =
(../../../libio/iostream.cc:772)=0A=
=3D=3D10825=3D=3D    by 0x805040A: main =
(/home/gregoryg/project/src/subsystem/O2S/O2S_i.cc:70)=0A=
=3D=3D10825=3D=3D    by 0x40932507: __libc_start_main =
(../sysdeps/generic/libc-start.c:129)=0A=
=3D=3D10825=3D=3D    by 0x804F681: _IO_file_write@@GLIBC_2.1 (in =
/home/gregoryg/project/product/Linux-2.2/exe/O2S)=0A=
=3D=3D10825=3D=3D =0A=
=3D=3D10825=3D=3D Conditional jump or move depends on uninitialised =
value(s)=0A=
=3D=3D10825=3D=3D    at 0x8052525: ostream::operator<<(char const *) =
(../../../libio/iostream.cc:772)=0A=
=3D=3D10825=3D=3D    by 0x805040A: main =
(/home/gregoryg/project/src/subsystem/O2S/O2S_i.cc:70)=0A=
=3D=3D10825=3D=3D    by 0x40932507: __libc_start_main =
(../sysdeps/generic/libc-start.c:129)=0A=
=3D=3D10825=3D=3D    by 0x804F681: _IO_file_write@@GLIBC_2.1 (in =
/home/gregoryg/project/product/Linux-2.2/exe/O2S)=0A=
=3D=3D10825=3D=3D =0A=
=3D=3D10825=3D=3D Conditional jump or move depends on uninitialised =
value(s)=0A=
=3D=3D10825=3D=3D    at 0x805252F: ostream::operator<<(char const *) =
(../../../libio/iostream.cc:772)=0A=
=3D=3D10825=3D=3D    by 0x805040A: main =
(/home/gregoryg/project/src/subsystem/O2S/O2S_i.cc:70)=0A=
=3D=3D10825=3D=3D    by 0x40932507: __libc_start_main =
(../sysdeps/generic/libc-start.c:129)=0A=
=3D=3D10825=3D=3D    by 0x804F681: _IO_file_write@@GLIBC_2.1 (in =
/home/gregoryg/project/product/Linux-2.2/exe/O2S)=0A=
=3D=3D10825=3D=3D =0A=
=3D=3D10825=3D=3D Syscall param write(buf) contains uninitialised or =
unaddressable byte(s)=0A=
=3D=3D10825=3D=3D    at 0x409F6584: __libc_write (in =
/lib/i686/libc-2.2.4.so)=0A=
=3D=3D10825=3D=3D    by 0x40992465: _IO_file_write@@GLIBC_2.1 =
(fileops.c:883)=0A=
=3D=3D10825=3D=3D    by 0x805500C: filebuf::sys_write(char const *, =
int) (../../../libio/filebuf.cc:191)=0A=
=3D=3D10825=3D=3D    by 0x409924F9: new_do_write (fileops.c:465)=0A=
=3D=3D10825=3D=3D    by 0x409920CF: _IO_do_write@@GLIBC_2.1 =
(fileops.c:438)=0A=
=3D=3D10825=3D=3D    by 0x409917B8: _IO_file_sync@@GLIBC_2.1 =
(fileops.c:633)=0A=
=3D=3D10825=3D=3D    by 0x8054F74: filebuf::sync(void) =
(../../../libio/filebuf.cc:166)=0A=
=3D=3D10825=3D=3D    by 0x8052907: ostream::flush(void) =
(../../../libio/iostream.cc:864)=0A=
=3D=3D10825=3D=3D    by 0x8052930: flush(ostream &) (../../../libio/iost=
ream.cc:872)=0A=
=3D=3D10825=3D=3D    by 0x8052AA4: endl(ostream &) =
(../../../libio/iostream.cc:916)=0A=
=3D=3D10825=3D=3D    by 0x80535DC: ostream::operator<<(ostream =
&(*)(ostream &)) (../../../libio/iostream.h:106)=0A=
=3D=3D10825=3D=3D    by 0x8050420: main =
(/home/gregoryg/project/src/subsystem/O2S/O2S_i.cc:70)=0A=
=3D=3D10825=3D=3D    by 0x40932507: __libc_start_main =
(../sysdeps/generic/libc-start.c:129)=0A=
=3D=3D10825=3D=3D    by 0x804F681: _IO_file_write@@GLIBC_2.1 (in =
/home/gregoryg/project/product/Linux-2.2/exe/O2S)=0A=
=3D=3D10825=3D=3D    Address 0x41A5B099 is not stack'd, malloc'd or =
free'd=0A=
IDL object Pinger IOR =3D =
'IOR:010000000f00000049444c3a50696e6765723a312e30000001000000000000002e0=
0000001010000100000003230362e3130392e3132382e31363600648000000e000000fec=
33be63c00002a490000000000'=0A=

------_=_NextPart_000_01C24767.0773D330
Content-Type: application/octet-stream;
	name="O2S_i.cc"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="O2S_i.cc"

//=0A=
// Example code for implementing IDL interfaces in file =
./LockClient/O2S.idl=0A=
//=0A=
=0A=
#include <iostream.h>=0A=
#include <O2SH.h>=0A=
=0A=
//=0A=
// Example class implementing IDL interface Pinger=0A=
//=0A=
class Pinger_i: public POA_Pinger,=0A=
                public PortableServer::RefCountServantBase {=0A=
private:=0A=
  // Make sure all instances are built on the heap by making the=0A=
  // destructor non-public=0A=
  //virtual ~Pinger_i();=0A=
public:=0A=
  // standard constructor=0A=
  Pinger_i();=0A=
  virtual ~Pinger_i();=0A=
=0A=
  // methods corresponding to defined IDL attributes and operations=0A=
  void ping();=0A=
  =0A=
};=0A=
=0A=
//=0A=
// Example implementational code for IDL interface Pinger=0A=
//=0A=
Pinger_i::Pinger_i(){=0A=
  // add extra constructor code here=0A=
}=0A=
Pinger_i::~Pinger_i(){=0A=
  // add extra destructor code here=0A=
}=0A=
//   Methods corresponding to IDL attributes and operations=0A=
void Pinger_i::ping(){=0A=
  // insert code here and remove the warning=0A=
#warning "Code missing in function <void Pinger_i::ping()>"=0A=
}=0A=
=0A=
// End of example implementational code=0A=
=0A=
int main(int argc, char** argv)=0A=
{=0A=
  try {=0A=
    // Initialise the ORB.=0A=
    CORBA::ORB_var orb =3D CORBA::ORB_init(argc, argv, "omniORB3");=0A=
=0A=
    // Obtain a reference to the root POA.=0A=
    CORBA::Object_var obj =3D =
orb->resolve_initial_references("RootPOA");=0A=
    PortableServer::POA_var poa =3D =
PortableServer::POA::_narrow(obj);=0A=
=0A=
    // We allocate the objects on the heap.  Since these are =
reference=0A=
    // counted objects, they will be deleted by the POA when they are =
no=0A=
    // longer needed.=0A=
    Pinger_i* myPinger_i =3D new Pinger_i();=0A=
    =0A=
    // Activate the objects.  This tells the POA that the objects =
are=0A=
    // ready to accept requests.=0A=
    PortableServer::ObjectId_var myPinger_iid =3D =
poa->activate_object(myPinger_i);=0A=
    =0A=
    // Obtain a reference to each object and output the stringified=0A=
    // IOR to stdout=0A=
    {=0A=
      // IDL interface: Pinger=0A=
      //CORBA::Object_var ref =3D myPinger_i->_this();=0A=
	Pinger_var ref =3D myPinger_i->_this ();=0A=
      CORBA::String_var sior(orb->object_to_string(ref));=0A=
      cout << "IDL object Pinger IOR =3D '" << (char*)sior << "'" << =
endl;=0A=
    }=0A=
    =0A=
    // Obtain a POAManager, and tell the POA to start accepting=0A=
    // requests on its objects.=0A=
    PortableServer::POAManager_var pman =3D poa->the_POAManager();=0A=
    pman->activate();=0A=
=0A=
    orb->run();=0A=
    orb->destroy();=0A=
  }=0A=
  catch(CORBA::SystemException&) {=0A=
    cerr << "Caught CORBA::SystemException." << endl;=0A=
  }=0A=
  catch(CORBA::Exception&) {=0A=
    cerr << "Caught CORBA::Exception." << endl;=0A=
  }=0A=
  catch(omniORB::fatalException& fe) {=0A=
    cerr << "Caught omniORB::fatalException:" << endl;=0A=
    cerr << "  file: " << fe.file() << endl;=0A=
    cerr << "  line: " << fe.line() << endl;=0A=
    cerr << "  mesg: " << fe.errmsg() << endl;=0A=
  }=0A=
  catch(...) {=0A=
    cerr << "Caught unknown exception." << endl;=0A=
  }=0A=
=0A=
  return 0;=0A=
}=0A=

------_=_NextPart_000_01C24767.0773D330
Content-Type: application/octet-stream;
	name="O2SSK.cc"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="O2SSK.cc"

// This file is generated by omniidl (C++ backend)- omniORB_3_0. Do not =
edit.=0A=
=0A=
#include "O2SH.h"=0A=
#include <omniORB3/callDescriptor.h>=0A=
=0A=
static const char* _0RL_library_version =3D omniORB_3_0;=0A=
=0A=
Pinger_ptr Pinger_Helper::_nil() {=0A=
  return Pinger::_nil();=0A=
}=0A=
=0A=
CORBA::Boolean Pinger_Helper::is_nil(Pinger_ptr p) {=0A=
  return CORBA::is_nil(p);=0A=
=0A=
}=0A=
=0A=
void Pinger_Helper::release(Pinger_ptr p) {=0A=
  CORBA::release(p);=0A=
}=0A=
=0A=
void Pinger_Helper::duplicate(Pinger_ptr p) {=0A=
  if( p && !p->_NP_is_nil() )  omni::duplicateObjRef(p);=0A=
}=0A=
=0A=
size_t Pinger_Helper::NP_alignedSize(Pinger_ptr obj, size_t offset) =
{=0A=
  return Pinger::_alignedSize(obj, offset);=0A=
}=0A=
=0A=
void Pinger_Helper::marshalObjRef(Pinger_ptr obj, NetBufferedStream& s) =
{=0A=
  Pinger::_marshalObjRef(obj, s);=0A=
}=0A=
=0A=
Pinger_ptr Pinger_Helper::unmarshalObjRef(NetBufferedStream& s) {=0A=
  return Pinger::_unmarshalObjRef(s);=0A=
}=0A=
=0A=
void Pinger_Helper::marshalObjRef(Pinger_ptr obj, MemBufferedStream& s) =
{=0A=
  Pinger::_marshalObjRef(obj, s);=0A=
}=0A=
=0A=
Pinger_ptr Pinger_Helper::unmarshalObjRef(MemBufferedStream& s) {=0A=
  return Pinger::_unmarshalObjRef(s);=0A=
}=0A=
=0A=
Pinger_ptr=0A=
Pinger::_duplicate(Pinger_ptr obj)=0A=
{=0A=
  if( obj && !obj->_NP_is_nil() )  omni::duplicateObjRef(obj);=0A=
=0A=
  return obj;=0A=
}=0A=
=0A=
Pinger_ptr=0A=
Pinger::_narrow(CORBA::Object_ptr obj)=0A=
{=0A=
  if( !obj || obj->_NP_is_nil() || obj->_NP_is_pseudo() ) return =
_nil();=0A=
  _ptr_type e =3D (_ptr_type) =
obj->_PR_getobj()->_realNarrow(_PD_repoId);=0A=
  return e ? e : _nil();=0A=
}=0A=
=0A=
Pinger_ptr=0A=
Pinger::_unchecked_narrow(CORBA::Object_ptr obj)=0A=
{=0A=
  if( !obj || obj->_NP_is_nil() || obj->_NP_is_pseudo() ) return =
_nil();=0A=
  _ptr_type e =3D (_ptr_type) =
obj->_PR_getobj()->_uncheckedNarrow(_PD_repoId);=0A=
  return e ? e : _nil();=0A=
}=0A=
=0A=
Pinger_ptr=0A=
Pinger::_nil()=0A=
{=0A=
  static _objref_Pinger* _the_nil_ptr =3D 0;=0A=
  if( !_the_nil_ptr ) {=0A=
    omni::nilRefLock().lock();=0A=
  if( !_the_nil_ptr )  _the_nil_ptr =3D new _objref_Pinger;=0A=
    omni::nilRefLock().unlock();=0A=
  }=0A=
  return _the_nil_ptr;=0A=
}=0A=
=0A=
const char* Pinger::_PD_repoId =3D "IDL:Pinger:1.0";=0A=
=0A=
_objref_Pinger::~_objref_Pinger() {}=0A=
=0A=
_objref_Pinger::_objref_Pinger(const char* mdri,=0A=
   IOP::TaggedProfileList* p, omniIdentity* id, omniLocalIdentity* lid) =
:=0A=
   =0A=
   omniObjRef(Pinger::_PD_repoId, mdri, p, id, lid)=0A=
{=0A=
  _PR_setobj(this);=0A=
}=0A=
=0A=
void*=0A=
_objref_Pinger::_ptrToObjRef(const char* id)=0A=
{=0A=
  if( !strcmp(id, CORBA::Object::_PD_repoId) )=0A=
    return (CORBA::Object_ptr) this;=0A=
  if( !strcmp(id, Pinger::_PD_repoId) )=0A=
    return (Pinger_ptr) this;=0A=
  =0A=
  return 0;=0A=
}=0A=
=0A=
// Local call call-back function.=0A=
static void=0A=
_0RL_lcfn_efacbc7601d601ed_00000000(omniCallDescriptor* cd, =
omniServant* svnt)=0A=
{=0A=
  =0A=
  _impl_Pinger* impl =3D (_impl_Pinger*) =
svnt->_ptrToInterface(Pinger::_PD_repoId);=0A=
  impl->ping();=0A=
}=0A=
=0A=
void _objref_Pinger::ping()=0A=
{=0A=
  omniStdCallDesc::void_call =
_call_desc(_0RL_lcfn_efacbc7601d601ed_00000000, "ping", 5, 0);=0A=
  =0A=
  _invoke(_call_desc);=0A=
  =0A=
}=0A=
=0A=
_pof_Pinger::~_pof_Pinger() {}=0A=
=0A=
omniObjRef*=0A=
_pof_Pinger::newObjRef(const char* mdri, IOP::TaggedProfileList* p,=0A=
               omniIdentity* id, omniLocalIdentity* lid)=0A=
{=0A=
  return new _objref_Pinger(mdri, p, id, lid);=0A=
}=0A=
=0A=
CORBA::Boolean=0A=
_pof_Pinger::is_a(const char* id) const=0A=
{=0A=
  if( !strcmp(id, Pinger::_PD_repoId) )=0A=
    return 1;=0A=
  =0A=
  return 0;=0A=
}=0A=
=0A=
const _pof_Pinger _the_pof_Pinger;=0A=
=0A=
_impl_Pinger::~_impl_Pinger() {}=0A=
=0A=
CORBA::Boolean=0A=
_impl_Pinger::_dispatch(GIOP_S& giop_s)=0A=
{=0A=
  if( !strcmp(giop_s.operation(), "ping") ) {=0A=
    =0A=
    giop_s.RequestReceived();=0A=
    =0A=
    this->ping();=0A=
    =0A=
    if( giop_s.response_expected() ) {=0A=
      size_t msgsize =3D (size_t) GIOP_S::ReplyHeaderSize();=0A=
      =0A=
      giop_s.InitialiseReply(GIOP::NO_EXCEPTION, (CORBA::ULong) =
msgsize);=0A=
      =0A=
    }=0A=
    giop_s.ReplyCompleted();=0A=
    return 1;=0A=
  }=0A=
=0A=
  return 0;=0A=
}=0A=
=0A=
void*=0A=
_impl_Pinger::_ptrToInterface(const char* id)=0A=
{=0A=
  if( !strcmp(id, CORBA::Object::_PD_repoId) )=0A=
    return (void*) 1;=0A=
  if( !strcmp(id, Pinger::_PD_repoId) )=0A=
    return (_impl_Pinger*) this;=0A=
  =0A=
  return 0;=0A=
}=0A=
=0A=
const char*=0A=
_impl_Pinger::_mostDerivedRepoId()=0A=
{=0A=
  return Pinger::_PD_repoId;=0A=
}=0A=
=0A=
POA_Pinger::~POA_Pinger() {}=0A=
=0A=

------_=_NextPart_000_01C24767.0773D330
Content-Type: application/octet-stream;
	name="O2SH.h"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="O2SH.h"

// This file is generated by omniidl (C++ backend)- omniORB_3_0. Do not =
edit.=0A=
#ifndef __O2S_hh__=0A=
#define __O2S_hh__=0A=
=0A=
#ifndef USE_omniORB_logStream=0A=
#define USE_omniORB_logStream=0A=
#endif=0A=
=0A=
#ifndef __CORBA_H_EXTERNAL_GUARD__=0A=
#include <omniORB3/CORBA.h>=0A=
#endif=0A=
=0A=
#ifndef  USE_core_stub_in_nt_dll=0A=
# define USE_core_stub_in_nt_dll_NOT_DEFINED_O2S=0A=
#endif=0A=
#ifndef  USE_dyn_stub_in_nt_dll=0A=
# define USE_dyn_stub_in_nt_dll_NOT_DEFINED_O2S=0A=
#endif=0A=
=0A=
#ifdef USE_stub_in_nt_dll=0A=
#ifndef USE_core_stub_in_nt_dll=0A=
#define USE_core_stub_in_nt_dll=0A=
#endif=0A=
#ifndef USE_dyn_stub_in_nt_dll=0A=
#define USE_dyn_stub_in_nt_dll=0A=
#endif=0A=
#endif=0A=
=0A=
#ifdef _core_attr=0A=
# error "A local CPP macro _core_attr has already been defined."=0A=
#else=0A=
# ifdef  USE_core_stub_in_nt_dll=0A=
#  define _core_attr _OMNIORB_NTDLL_IMPORT=0A=
# else=0A=
#  define _core_attr=0A=
# endif=0A=
#endif=0A=
=0A=
#ifdef _dyn_attr=0A=
# error "A local CPP macro _dyn_attr has already been defined."=0A=
#else=0A=
# ifdef  USE_dyn_stub_in_nt_dll=0A=
#  define _dyn_attr _OMNIORB_NTDLL_IMPORT=0A=
# else=0A=
#  define _dyn_attr=0A=
# endif=0A=
#endif=0A=
=0A=
#ifndef __Pinger__=0A=
#define __Pinger__=0A=
=0A=
class Pinger;=0A=
class _objref_Pinger;=0A=
class _impl_Pinger;=0A=
=0A=
typedef _objref_Pinger* Pinger_ptr;=0A=
typedef Pinger_ptr PingerRef;=0A=
=0A=
class Pinger_Helper {=0A=
public:=0A=
  typedef Pinger_ptr _ptr_type;=0A=
=0A=
  static _ptr_type _nil();=0A=
  static _CORBA_Boolean is_nil(_ptr_type);=0A=
  static void release(_ptr_type);=0A=
  static void duplicate(_ptr_type);=0A=
  static size_t NP_alignedSize(_ptr_type, size_t);=0A=
  static void marshalObjRef(_ptr_type, NetBufferedStream&);=0A=
  static _ptr_type unmarshalObjRef(NetBufferedStream&);=0A=
  static void marshalObjRef(_ptr_type, MemBufferedStream&);=0A=
  static _ptr_type unmarshalObjRef(MemBufferedStream&);=0A=
};=0A=
=0A=
typedef _CORBA_ObjRef_Var<_objref_Pinger, Pinger_Helper> Pinger_var;=0A=
typedef _CORBA_ObjRef_OUT_arg<_objref_Pinger,Pinger_Helper > =
Pinger_out;=0A=
=0A=
#endif=0A=
=0A=
class Pinger {=0A=
public:=0A=
  // Declarations for this interface type.=0A=
  typedef Pinger_ptr _ptr_type;=0A=
  typedef Pinger_var _var_type;=0A=
=0A=
  static _ptr_type _duplicate(_ptr_type);=0A=
  static _ptr_type _narrow(CORBA::Object_ptr);=0A=
  static _ptr_type _unchecked_narrow(CORBA::Object_ptr);=0A=
  static _ptr_type _nil();=0A=
=0A=
  static inline size_t _alignedSize(_ptr_type, size_t);=0A=
  static inline void _marshalObjRef(_ptr_type, NetBufferedStream&);=0A=
  static inline void _marshalObjRef(_ptr_type, MemBufferedStream&);=0A=
=0A=
  static inline _ptr_type _unmarshalObjRef(NetBufferedStream& s) {=0A=
    CORBA::Object_ptr obj =3D CORBA::UnMarshalObjRef(_PD_repoId, s);=0A=
    _ptr_type result =3D _narrow(obj);=0A=
    CORBA::release(obj);=0A=
    return result;=0A=
  }=0A=
=0A=
  static inline _ptr_type _unmarshalObjRef(MemBufferedStream& s) {=0A=
    CORBA::Object_ptr obj =3D CORBA::UnMarshalObjRef(_PD_repoId, s);=0A=
    _ptr_type result =3D _narrow(obj);=0A=
    CORBA::release(obj);=0A=
    return result;=0A=
  }=0A=
=0A=
  static _core_attr const char* _PD_repoId;=0A=
=0A=
  // Other IDL defined within this scope.=0A=
  =0A=
};=0A=
=0A=
class _objref_Pinger :=0A=
  public virtual CORBA::Object, public virtual omniObjRef=0A=
{=0A=
public:=0A=
  void ping();=0A=
  =0A=
  inline _objref_Pinger() { _PR_setobj(0); }  // nil=0A=
  _objref_Pinger(const char*, IOP::TaggedProfileList*, omniIdentity*, =
omniLocalIdentity*);=0A=
=0A=
protected:=0A=
  virtual ~_objref_Pinger();=0A=
=0A=
private:=0A=
  virtual void* _ptrToObjRef(const char*);=0A=
=0A=
  _objref_Pinger(const _objref_Pinger&);=0A=
  _objref_Pinger& operator =3D (const _objref_Pinger&);=0A=
  // not implemented=0A=
};=0A=
=0A=
class _pof_Pinger : public proxyObjectFactory {=0A=
public:=0A=
  inline _pof_Pinger() : proxyObjectFactory(Pinger::_PD_repoId) {}=0A=
  virtual ~_pof_Pinger();=0A=
=0A=
  virtual omniObjRef* newObjRef(const char*, =
IOP::TaggedProfileList*,=0A=
                                omniIdentity*, omniLocalIdentity*);=0A=
  virtual _CORBA_Boolean is_a(const char*) const;=0A=
};=0A=
=0A=
class _impl_Pinger :=0A=
  public virtual omniServant=0A=
{=0A=
public:=0A=
  virtual ~_impl_Pinger();=0A=
=0A=
  virtual void ping() =3D 0;=0A=
  =0A=
public:  // Really protected, workaround for xlC=0A=
  virtual _CORBA_Boolean _dispatch(GIOP_S&);=0A=
=0A=
private:=0A=
  virtual void* _ptrToInterface(const char*);=0A=
  virtual const char* _mostDerivedRepoId();=0A=
};=0A=
=0A=
class POA_Pinger :=0A=
  public virtual _impl_Pinger,=0A=
  public virtual PortableServer::ServantBase=0A=
{=0A=
public:=0A=
  virtual ~POA_Pinger();=0A=
=0A=
  inline Pinger_ptr _this() {=0A=
    return (Pinger_ptr) _do_this(Pinger::_PD_repoId);=0A=
  }=0A=
};=0A=
=0A=
#undef _core_attr=0A=
#undef _dyn_attr=0A=
=0A=
inline size_t=0A=
Pinger::_alignedSize(Pinger_ptr obj, size_t offset) {=0A=
  return CORBA::AlignedObjRef(obj, _PD_repoId, 15, offset);=0A=
}=0A=
=0A=
inline void=0A=
Pinger::_marshalObjRef(Pinger_ptr obj, NetBufferedStream& s) {=0A=
  CORBA::MarshalObjRef(obj, _PD_repoId, 15, s);=0A=
}=0A=
=0A=
inline void=0A=
Pinger::_marshalObjRef(Pinger_ptr obj, MemBufferedStream& s) {=0A=
  CORBA::MarshalObjRef(obj, _PD_repoId, 15, s);=0A=
}=0A=
=0A=
#ifdef   USE_core_stub_in_nt_dll_NOT_DEFINED_O2S=0A=
# undef  USE_core_stub_in_nt_dll=0A=
# undef  USE_core_stub_in_nt_dll_NOT_DEFINED_O2S=0A=
#endif=0A=
#ifdef   USE_dyn_stub_in_nt_dll_NOT_DEFINED_O2S=0A=
# undef  USE_dyn_stub_in_nt_dll=0A=
# undef  USE_dyn_stub_in_nt_dll_NOT_DEFINED_O2S=0A=
#endif=0A=
=0A=
#endif  // __O2S_hh__=0A=
=0A=

------_=_NextPart_000_01C24767.0773D330--