Bug 1459 - Pluggable protocols interfere with one another in the same ORB and across ORBs in a process
Summary: Pluggable protocols interfere with one another in the same ORB and across ORB...
Status: RESOLVED DUPLICATE of bug 2486
Alias: None
Product: TAO
Classification: Unclassified
Component: ORB (show other bugs)
Version: 1.3
Hardware: x86 Windows 2000
: P3 normal
Assignee: DOC Center Support List (internal)
URL:
Depends on:
Blocks:
 
Reported: 2003-03-05 11:53 CST by Jeff Mirwaisi
Modified: 2006-07-05 09:52 CDT (History)
1 user (show)

See Also:


Attachments
Porposed patch. Replaced UIOP/SSLIOP with a generic service (SHMIOP). Will need to create a new test to recreate the SSLIOP portion. (9.85 KB, patch)
2006-07-05 09:39 CDT, ciju john
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Jeff Mirwaisi 2003-03-05 11:53:16 CST
Enabling an application to host multiple endpoints with different protocols on 
a single orb or across multiple orbs fails. 

When a single orb process loads both the uipmc and ssliop protocols servants 
are unreachable and no exception is thrown, when the order is reversed (in the 
svc.conf file) the uipmc servant responds but doesnt process because of a no 
permision exception (ok) ssl servant doesnt respond.

In a multi orb process where orb A and B have different configuration:
A(ssliop) B(uipmc) 
A works fine,B group ior yields inv_objref exception. 
A(uipmc) B(ssliop)
uipmc factory is loaded ssliop is not
A(ssliop) B(ssliop) 
B's security settings are ignored
Comment 1 Jeff Mirwaisi 2003-03-05 14:49:46 CST
NOTE: the orb instances in the above are TAO_Singletons initialized and run by 
a dynamicly linked ACE_Service_Object , the singletons(orbs) are exposed to 
subsequent services via a common dll (orb initialization and thread , servant 
service)

i will simplify the situation with a staticly linked orb and no use of the 
ace_service_manager other than the orbs usage
Comment 2 Jeff Mirwaisi 2003-03-05 16:39:35 CST
//the following is a simplification of the above problems and the different 
//scenarios minus the creation of the servant the service manager or threads
//even without the servant to demonstrate that the server is capable of 
//responding (which in some cases it isnt) problems can allready be seen
//in the multiple orb scenarios AB b isnt prompted for a new certificate 
//password, MA ssliop isnt loaded at all etc

#include <tao/orb.h>
#include <ace/argv.h>
#include <iostream>

#define MORB_MA

int main(int argc,char* argv[])
{
  const char argA[] = "-ORBDebug -ORBDebugLevel 100 -ORBSvcConf a.conf";
//dynamic SSLIOP_Factory Service_Object * 
TAO_SSLIOP:_make_TAO_SSLIOP_Protocol_Factory() "-SSLAuthenticate 
SERVER_AND_CLIENT -SSLPrivateKey PEM:server_key.pem -SSLCertificate 
PEM:server_cert.pem"
//static Resource_Factory "-ORBProtocolFactory SSLIOP_Factory"

  const char argB[] = "-ORBDebug -ORBDebugLevel 100 -ORBSvcConf b.conf";
//dynamic SSLIOP_Factory Service_Object * 
TAO_SSLIOP:_make_TAO_SSLIOP_Protocol_Factory() "-SSLAuthenticate 
SERVER_AND_CLIENT -SSLPrivateKey PEM:client_key.pem -SSLCertificate 
PEM:client_cert.pem"
//static Resource_Factory "-ORBProtocolFactory SSLIOP_Factory"

  const char argM[] = "-ORBDebug -ORBDebugLevel 100 -ORBSvcConf m.conf";
//dynamic UIPMC_Factory Service_Object * 
TAO_PortableGroup:_make_TAO_UIPMC_Protocol_Factory() ""
//static Resource_Factory "-ORBProtocolFactory IIOP_Factory -ORBProtocolFactory 
UIPMC_Factory"
//#static PortableGroup_Loader ""
//dynamic PortableGroup_Loader Service_Object * 
TAO_PortableGroup:_make_TAO_PortableGroup_Loader() ""

  const char argAM[] = "-ORBDebug -ORBDebugLevel 100 -ORBSvcConf am.conf";
//combination of A followed by M (above)

  const char argMA[] = "-ORBDebug -ORBDebugLevel 100 -ORBSvcConf ma.conf";
//combination of M followed by A (above)

  try
  {
#ifdef SORB_AM
    ACE_ARGV arg0(argAM);
    int n = arg0.argc();
    CORBA::ORB_var ORBA = CORBA::ORB_init(n,arg0.argv());
#endif
#ifdef SORB_MA
    ACE_ARGV arg0(argMA);
    int n = arg0.argc();
    CORBA::ORB_var ORBA = CORBA::ORB_init(n,arg0.argv());
#endif
#ifdef MORB_AB
    ACE_ARGV arg0(argA);
    int n = arg0.argc();
    CORBA::ORB_var ORBA = CORBA::ORB_init(n,arg0.argv());
    ACE_ARGV arg1(argB);
    n = arg1.argc();
    CORBA::ORB_var ORBB = CORBA::ORB_init(n,arg1.argv());
#endif
#ifdef MORB_AM
    ACE_ARGV arg0(argA);
    int n = arg0.argc();
    CORBA::ORB_var ORBA = CORBA::ORB_init(n,arg0.argv());
    ACE_ARGV arg1(argM);
    n = arg1.argc();
    CORBA::ORB_var ORBB = CORBA::ORB_init(n,arg1.argv());
#endif
#ifdef MORB_MA
    ACE_ARGV arg0(argM);
    int n = arg0.argc();
    CORBA::ORB_var ORBA = CORBA::ORB_init(n,arg0.argv());
    ACE_ARGV arg1(argA);
    n = arg1.argc();
    CORBA::ORB_var ORBB = CORBA::ORB_init(n,arg1.argv());
#endif
  } 
  catch(const CORBA::Exception& ex)
  {
    std::cerr << ex._info().c_str() << std::endl;
  }
  catch(...)
  {
    std::cerr << "unhandled exception" <<std::endl;
  }
  return 0;
}
Comment 3 Ossama Othman 2003-03-06 13:10:35 CST
Jeff,

The Service Configurator directives/files used by TAO are currently
process-wide, not ORB wide.  This means that you currently cannot have multiple
ORBs with different pluggable protocols.
Comment 4 Ossama Othman 2003-03-17 16:30:02 CST
Reassigning bug to tao-support since this in not a TAO_SSLIOP specific issue.
Comment 5 Nanbor Wang 2003-03-31 12:11:57 CST
Accpeting the bug for tao-support! 
Comment 6 Iliyan Jeliazkov 2006-02-23 15:31:14 CST
Adding myself to the CC list
Comment 7 Iliyan Jeliazkov 2006-04-17 16:30:43 CDT
The changes to be introduced for 2486 address this issue.

*** This bug has been marked as a duplicate of 2486 ***
Comment 8 ciju john 2006-07-05 09:39:07 CDT
Created attachment 558 [details]
Porposed patch. Replaced UIOP/SSLIOP with a generic service (SHMIOP). Will need to create a new test to recreate the SSLIOP portion.
Comment 9 Johnny Willemsen 2006-07-05 09:52:21 CDT
also shmiop is not available on all platforms so I don't see a reason why to
switch UIOP/SSLIOP for UIOP. Use constructs like below to check whether the
platform is configured with the protocol in code, then in the run_test.pl then
the config part of the test can be used or a test for a platform

#if defined (TAO_HAS_SHMIOP) && (TAO_HAS_SHMIOP != 0)

# if TAO_HAS_UIOP == 1