<DIV>I am posting this issue in connection with presence of firewalls in the<BR>network.&nbsp;We have a firewall sitting in between client and&nbsp;server, filtering<BR>packets based on TCP ports. A client invokes method on the proxy, which<BR>leads to the server invoking a CALL BACK method on the client object.<BR><BR>I was going through omniORB 4.0.3 documentation and found how to achieve<BR>Bi-directional GIOP, which allows callbacks to be made using a connection<BR>opened by the original client. Based example&nbsp;on src\examples\bidir. </DIV>
<DIV>&nbsp;</DIV>
<DIV>============server code==================================================</DIV>
<DIV>&nbsp;&nbsp; const char* options[][2] = { <BR>&nbsp;&nbsp;&nbsp; { "traceLevel", "40" },&nbsp;<BR>&nbsp;&nbsp;&nbsp; { "traceExceptions", "1" }, <BR>&nbsp;&nbsp;&nbsp; { "acceptBiDirectionalGIOP", "1" },<BR>&nbsp;&nbsp;&nbsp; { "serverTransportRule", "* unix,tcp,bidir" },&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp; { "endPoint", "giop:tcp::7788" },<BR>&nbsp;&nbsp;&nbsp; { 0, 0 } <BR>&nbsp;&nbsp; };&nbsp;&nbsp;</DIV>
<DIV>&nbsp;//&nbsp; Initialise the ORB.<BR>&nbsp;orb = CORBA::ORB_init(argc, argv,"omniORB4",options);</DIV>
<DIV>&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CORBA::Object_var obj = orb-&gt;resolve_initial_references("RootPOA");<BR>&nbsp;&nbsp; //CORBA::Object_var obj = orb-&gt;resolve_initial_references("omniINSPOA"); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortableServer::POA_var rootpoa = PortableServer::POA::_narrow(obj);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortableServer::POAManager_var pman = rootpoa-&gt;the_POAManager();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pman-&gt;activate();</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Create a POA with the Bidirectional policy<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CORBA::PolicyList pl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pl.length(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CORBA::Any a;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a &lt;&lt;= BiDirPolicy::BOTH;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pl[0] = orb-&gt;create_policy(BiDirPolicy::BIDIRECTIONAL_POLICY_TYPE, a);</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortableServer::POA_var poa = rootpoa-&gt;create_POA("bidir", pman, pl);</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_i* myserver = new server_i();<BR>&nbsp;&nbsp; PortableServer::ObjectId_var myserver_id = PortableServer::string_to_ObjectId("bidirService"); &nbsp;&nbsp; <BR>&nbsp;&nbsp; rootpoa-&gt;activate_object_with_id(myserver_id, myserver); <BR>&nbsp;&nbsp; //poa-&gt;activate_object_with_id(myserver_id, myserver); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortableServer::ObjectId_var oid = poa-&gt;activate_object(myserver);&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; obj = myserver-&gt;_this();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myserver-&gt;_remove_ref();</DIV>
<DIV><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CORBA::String_var sior(orb-&gt;object_to_string(obj));<BR>&nbsp;&nbsp; cerr &lt;&lt;std::endl&lt;&lt; "Servant ObjectId£º'" &lt;&lt; (char*) sior &lt;&lt; "'" &lt;&lt; endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; orb-&gt;run();<BR>&nbsp;&nbsp;&nbsp; }</DIV>
<DIV>&nbsp;&nbsp;&nbsp; cerr &lt;&lt; "bd_server: Returned from orb-&gt;run()." &lt;&lt; endl;<BR>&nbsp;&nbsp;&nbsp; orb-&gt;destroy();</DIV>
<DIV>&nbsp;</DIV>
<DIV>============client code==================================================</DIV>
<DIV>&nbsp;&nbsp; const char* options[][2] = { <BR>&nbsp;&nbsp;&nbsp; { "traceLevel", "40" },&nbsp;<BR>&nbsp;&nbsp;&nbsp; { "traceExceptions", "1" }, <BR>&nbsp;&nbsp;&nbsp; { "offerBiDirectionalGIOP", "1" },<BR>&nbsp;&nbsp;&nbsp; { "clientTransportRule", "* unix,tcp,bidir" },&nbsp;<BR>&nbsp;&nbsp;&nbsp; { 0, 0 } <BR>&nbsp;&nbsp; };&nbsp;&nbsp;</DIV>
<DIV>&nbsp;&nbsp; //&nbsp; Initialise the ORB.<BR>&nbsp;&nbsp; CORBA::ORB_var orb = CORBA::ORB_init(argc, argv,"omniORB4",options);</DIV>
<DIV>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CORBA::Object_var obj;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Initialise the POA.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //obj = orb-&gt;resolve_initial_references("RootPOA");<BR>&nbsp;&nbsp; obj = orb-&gt;resolve_initial_references("omniINSPOA"); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortableServer::POA_var rootpoa = PortableServer::POA::_narrow(obj);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortableServer::POAManager_var pman = rootpoa-&gt;the_POAManager();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pman-&gt;activate();</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Create a POA with the Bidirectional policy<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CORBA::PolicyList pl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pl.length(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CORBA::Any a;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a &lt;&lt;= BiDirPolicy::BOTH;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pl[0] = orb-&gt;create_policy(BiDirPolicy::BIDIRECTIONAL_POLICY_TYPE, a);</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortableServer::POA_var poa = rootpoa-&gt;create_POA("bidir", pman, pl);</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Get the reference the server.<BR>&nbsp;&nbsp;&nbsp; std::string srv_obj_id("corbaloc::10.1.1.2:7788/bidirService");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; obj = orb-&gt;string_to_object(srv_obj_id.c_str());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb::Server_var server = cb::Server::_narrow(obj);</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Register a CallBack object in this process.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb_i* mycallback = new cb_i();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortableServer::ObjectId_var oid = poa-&gt;activate_object(mycallback);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb::CallBack_var callback = mycallback-&gt;_this();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mycallback-&gt;_remove_ref();</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*if( argc == 2 )&nbsp; <BR>&nbsp;&nbsp;&nbsp; do_single(server, callback);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; do_register(server, callback, atoi(argv[2]),atoi(argv[3]));*/<BR>&nbsp;&nbsp;&nbsp; do_register(server, callback, 3,1000);</DIV>
<DIV>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;//system("Pause");<BR>&nbsp;&nbsp;&nbsp; // Clean-up.&nbsp; This also destroys the call-back object.<BR>&nbsp;&nbsp;&nbsp; orb-&gt;destroy();</DIV>
<DIV>&nbsp;</DIV>
<DIV>-------------------------------------------------------------</DIV>
<DIV>It still is not working and server is unable to invoke callback method on<BR>the client object. Is there anything I am missing here? Also, can I get an<BR>IIOP to HTTP <A class=kLink oncontextmenu="return false;" id=KonaLink3 onmouseover=adlinkMouseOver(event,this,3); style="POSITION: static; TEXT-DECORATION: underline! important" onclick=adlinkMouseClick(event,this,3); onmouseout=adlinkMouseOut(event,this,3); href="http://osdir.com/ml/corba.omniorb.devel/2004-02/msg00001.html#" target=_top><FONT style="FONT-WEIGHT: 400; FONT-SIZE: 10pt; COLOR: blue! important; FONT-FAMILY: Courier New; POSITION: static" color=blue><SPAN class=kLink style="FONT-WEIGHT: 400; FONT-SIZE: 10pt; COLOR: blue! important; FONT-FAMILY: Courier New; POSITION: relative">gateway</SPAN></FONT></A> compatible with omniORB?<BR></DIV>
<DIV>-----Result-----------</DIV>
<DIV>omniORB: throw giopStream::CommFailure from giopStream.cc:1110(0,NO,COMM_FAILURE_MarshalArguments)</DIV>
<DIV>----------------</DIV>
<DIV><BR>Thanks a lot, your help is much appreciated.</DIV>
<DIV>&nbsp;</DIV>
<DIV>roger</DIV>
<DIV><BR>&nbsp;</DIV>
<DIV>&nbsp;</DIV>