Visibroker and wstrings (was: RE: [omniORB] wstring corruption, omniOrb -> Orbacus )

brk@jenkon.com brk@jenkon.com
Fri, 15 Mar 2002 09:25:46 -0800


Thanks Duncan, that does indeed help! The next thing is to actually call the
method, which goes like this:

omniORB:  send codeset service context: ( ISO-8859-1,UTF-16)
omniORB: sendChunk: to giop:tcp:209.210.37.31:4504 132 bytes
4749 4f50 0102 0100 7800 0000 0400 0000 GIOP....x.......
0300 0000 0000 0000 2400 0000 0056 4201 ........$....VB.
0000 0002 2f00 2020 0000 000b 4261 6e6b ..../.  ....Bank
4d61 6e61 6765 7220 0000 01d9 178c 6e71 Manager ......nq
0500 0000 6e65 7773 005f 6964 0100 0000 ....news._id....
0100 0000 0c00 0000 0100 0000 0100 0100 ................
0901 0100 0301 0c01 1800 0000 fffe 6800 ..............h.
6500 6c00 6c00 6f00 2000 7400 6800 6500 e.l.l.o. .t.h.e.
7200 6500                               r.e.
omniORB: inputMessage: from giop:tcp:209.210.37.31:4504 68 bytes
4749 4f50 0102 0101 3800 0000 0400 0000 GIOP....8.......
0200 0000 0000 0000 1e00 0000 4944 4c3a ............IDL:
6f6d 672e 6f72 672f 434f 5242 412f 4d41 omg.org/CORBA/MA
5253 4841 4c3a 312e 3000 01d9 0000 0000 RSHAL:1.0.......
0100 0000                               ....
omniORB: throw MARSHAL from GIOP_C.cc:241 (NO,0x00000000)
Traceback (most recent call last):
  File "py_client.py", line 25, in ?
    print calc.news(u"hello there")
  File "Bank_idl.py", line 97, in news
    return _omnipy.invoke(self, "news", _0_Bank.AccountManager._d_news,
args)
omniORB.CORBA.MARSHAL: Minor: 0x0, COMPLETED_NO.
omniORB: omniRemoteIdentity deleted.
omniORB: ObjRef(IDL:Bank/AccountManager:1.0) -- deleted.
omniORB: omniRemoteIdentity deleted.
omniORB: ObjRef(IDL:Bank/AccountManager:1.0) -- deleted.
omniORB: ORB not destroyed; no final clean-up.


> -----Original Message-----
> From:	Duncan Grisby [SMTP:dgrisby@uk.research.att.com]
> Sent:	Friday, March 15, 2002 3:07 AM
> To:	brk@jenkon.com
> Cc:	kfeuerma@adobe.com; omniorb-list@uk.research.att.com
> Subject:	Re: [omniORB] wstring corruption, omniOrb -> Orbacus 
> 
> On Thursday 14 March, brk@jenkon.com wrote:
> 
> > omniORB: inputMessage: from giop:tcp:209.210.37.31:4504 24 bytes
> > 4749 4f50 0102 0104 0c00 0000 0200 0000 GIOP............
> > 0100 0000 0000 0000                     ........
> 
> This is a LocateReply message. Splitting it up, we find why omniORB
> was unhappy...
> 
> GIOP 1.2 MessageHeader
> 
>   4749 4f50  GIOP
>   0102       version 1.2
>   01         flags: little-endian, no more fragments follow
>   04         message type: LocateReply
>   0c00 0000  message size: 12 bytes
> 
> LocateReply message
> 
>   0200 0000  request id (matching the id in the LocateRequest)
>   0100 0000  locate status: OBJECT_HERE
> 
> That should be the end of the message, but Visibroker sent an extra 4
> zero bytes. I don't think there's anything in the spec that says that
> sending extra data is illegal, but it's still a sign of bad things
> happening. If it happens in the context of an request or reply, it's
> probably a sign that the two sides are using different IDL. So,
> omniORB's default behaviour is to kill the connection if it receives a
> message that's too long.
> 
> If you run with -ORBstrictIIOP 0, omniORB will ignore the error, and
> you should be OK.
> 
> Cheers,
> 
> Duncan.
> 
> -- 
>  -- Duncan Grisby  \  Research Engineer  --
>   -- AT&T Laboratories Cambridge          --
>    -- http://www.uk.research.att.com/~dpg1 --