diff options
52 files changed, 2324 insertions, 961 deletions
diff --git a/TAO/ChangeLog-99c b/TAO/ChangeLog-99c index afc8f01afa6..1fe42a08373 100644 --- a/TAO/ChangeLog-99c +++ b/TAO/ChangeLog-99c @@ -1,3 +1,118 @@ +Wed Jun 9 20:16:36 1999 Carlos O'Ryan <coryan@cs.wustl.edu> + + * Started the work on GIOP 1.1, the current version is still + incomplete, but works and has to be tested in more + platforms. The features implemented so far include: + + Requests are issued using version 1.1 or version 1.0, + depending on the version of the profile. + + Acceptors create v 1.1 profiles by default, but can generate + 1.0 profiles if a -ORBendpoint option with an explicit version + is present (like -ORBendpoint iiop://1.0@host:0) + + Replys are sent using the same version that the request + + There is a framework to receive a request (or reply) broken in + multiple fragments. The framework is not specially efficient, + is does not handle fragments with different byte order or + different GIOP versions and is completely untested. TAO does + *not* generate fragments. + + Notice that the tagged components in the profile are *not* + implemented yet. + + * tao/orbconf.h: + Added new macros to control the default GIOP protocol version, + either 1.0 or 1.1 + + * tao/Acceptor_Registry.cpp: + Use the version in the command-line endpoint to initialize the + Acceptor. + + * tao/Environment.h: + Cosmetic fixes + + * tao/GIOP.h: + * tao/GIOP.i: + * tao/GIOP.cpp: + Many changes to support 1.1, including a new class to keep the + state of an incoming message composed by multiple fragments. + + * tao/Server_Request.h: + * tao/GIOP_Server_Request.h: + * tao/GIOP_Server_Request.cpp: + The server request uses the version of the request to determine + the version of the reply. + We don't need to use exceptions in the constructor, saving us + from some really nasty portability problems. + + * tao/Invocation.h: + * tao/Invocation.i: + * tao/Invocation.cpp: + Moved the code to initialize a Request or LocateRequest message + to the transport classes, not only this isolates the use of + TAO_GIOP even further, it is also needed because the transport + class needs to query the version of the Profile to determine the + version of the GIOP message. + + * tao/ORB_Core.h: + * tao/ORB_Core.i: + Added the Service Context List to the ORB core, it lacks an + elegant interface, but at least it can be set and is used. + + * tao/Reply_Dispatcher.h: + * tao/Reply_Dispatcher.cpp: + * tao/Transport_Mux_Strategy.h: + * tao/Transport_Mux_Strategy.cpp: + Changed the interfaces in the the ORB core to use a + TAO_GIOP_Message_State that keeps track of not only the payload, + but of any fragments for the current message, the current amount + of data read on the fragment, etc. + + * tao/Pluggable.h: + * tao/Pluggable.i: + * tao/Pluggable.cpp: + * tao/IIOP_Acceptor.h: + * tao/IIOP_Acceptor.cpp: + * tao/IIOP_Connect.h: + * tao/IIOP_Connect.cpp: + * tao/IIOP_Factory.h: + * tao/IIOP_Factory.cpp: + * tao/IIOP_Profile.h: + * tao/IIOP_Profile.i: + * tao/IIOP_Profile.cpp: + * tao/IIOP_Transport.h: + * tao/IIOP_Transport.cpp: + * tao/UIOP_Acceptor.h: + * tao/UIOP_Acceptor.cpp: + * tao/UIOP_Connect.h: + * tao/UIOP_Connect.cpp: + * tao/UIOP_Factory.h: + * tao/UIOP_Factory.cpp: + * tao/UIOP_Profile.h: + * tao/UIOP_Profile.i: + * tao/UIOP_Profile.cpp: + * tao/UIOP_Transport.h: + * tao/UIOP_Transport.cpp: + All the classes where change to propagate the GIOP version of + the message and the profile used for each request. + + * orbsvcs/tests/Simple_Naming/client.cpp: + Use CORBA::is_nil() to validate object references + + * orbsvcs/ImplRepo_Service/ImplRepo_i.h: + * orbsvcs/ImplRepo_Service/ImplRepo_i.cpp: + Updated to use the new TAO IIOP_Profile constructor + + * utils/catior/catior.cpp: + TAO moved to GIOP 1.1, but this test can only handle GIOP 1.0 + + * utils/nslist/nslist.cpp: + * orbsvcs/orbsvcs/Sched/Config_Scheduler.cpp: + Fixed use of String_var and managed types must passed using + .in() to ACE_DEBUG() + + * orbsvcs/tests/Trading/Makefile: + * examples/POA/Generic_Servant/Makefile: + Define PSRC so the dependencies for the program files + are also generated. + Wed Jun 9 17:16:44 1999 Marina Spivak <marina@cs.wustl.edu> * orbsvcs/tests/Simple_Naming/run_test.pl: diff --git a/TAO/examples/POA/Generic_Servant/Makefile b/TAO/examples/POA/Generic_Servant/Makefile index bd5e6be7834..1b62578542e 100644 --- a/TAO/examples/POA/Generic_Servant/Makefile +++ b/TAO/examples/POA/Generic_Servant/Makefile @@ -40,8 +40,9 @@ VLDLIBS = $(LDLIBS:%=%$(VAR)) VBIN = $(BIN:%=%$(VAR)) LIBS = -lTAO -LSRC = $(addsuffix .cpp,$(SHLIB_SRC)) client.cpp +LSRC = $(addsuffix .cpp,$(SHLIB_SRC)) LOBJ = $(addsuffix .o,$(SHLIB_SRC)) +PSRC = $(addsuffix .cpp,$(BIN)) #---------------------------------------------------------------------------- # Include macros and targets diff --git a/TAO/orbsvcs/ImplRepo_Service/ImplRepo_i.cpp b/TAO/orbsvcs/ImplRepo_Service/ImplRepo_i.cpp index e9537f11618..f1528103f16 100644 --- a/TAO/orbsvcs/ImplRepo_Service/ImplRepo_i.cpp +++ b/TAO/orbsvcs/ImplRepo_Service/ImplRepo_i.cpp @@ -57,6 +57,7 @@ ImplRepo_i::activate_object (CORBA::Object_ptr obj, ACE_NEW_RETURN (new_pfile, TAO_IIOP_Profile (iiop_pfile->object_addr (), iiop_pfile->object_key (), + iiop_pfile->version (), stub_obj->orb_core ()), CORBA::Object::_nil ()); diff --git a/TAO/orbsvcs/ImplRepo_Service/ImplRepo_i.h b/TAO/orbsvcs/ImplRepo_Service/ImplRepo_i.h index 3c0fa82efd8..b5d9cfb0dfc 100644 --- a/TAO/orbsvcs/ImplRepo_Service/ImplRepo_i.h +++ b/TAO/orbsvcs/ImplRepo_Service/ImplRepo_i.h @@ -78,29 +78,29 @@ public: virtual CORBA::Object_ptr activate_object (CORBA::Object_ptr obj, CORBA_Environment &ACE_TRY_ENV - = CORBA_Environment::default_environment ()); + = TAO_default_environment ()); // Starts up the server containing the object <obj> if not already running. virtual Implementation_Repository::INET_Addr *activate_server (const char *server, - CORBA::Environment &env); + CORBA::Environment &env = TAO_default_environment ()); // Starts up the server <server> if not already running. virtual void register_server (const char *server, const Implementation_Repository::Process_Options &options, CORBA_Environment &ACE_TRY_ENV - = CORBA_Environment::default_environment ()); + = TAO_default_environment ()); // Adds the server to the repository and registers the startup information about // the server <server>. virtual void reregister_server (const char *server, const Implementation_Repository::Process_Options &options, CORBA_Environment &ACE_TRY_ENV - = CORBA_Environment::default_environment ()); + = TAO_default_environment ()); // Updates the startup information about the server <server>. virtual void remove_server (const char *server, CORBA_Environment &ACE_TRY_ENV - = CORBA_Environment::default_environment ()); + = TAO_default_environment ()); // Removes the server <server> from the repository. virtual Implementation_Repository::INET_Addr @@ -108,20 +108,20 @@ public: const Implementation_Repository::INET_Addr &addr, CORBA::Object_ptr ping, CORBA_Environment &ACE_TRY_ENV - = CORBA_Environment::default_environment ()); + = TAO_default_environment ()); // Called by the server to update transient information such as current location of // the <server> and its ping object. virtual void server_is_shutting_down (const char * server, CORBA_Environment &ACE_TRY_ENV - = CORBA_Environment::default_environment ()); + = TAO_default_environment ()); // What the server should call before it shutsdown. // = Other methods int init (int argc, char **argv, CORBA_Environment &ACE_TRY_ENV - = CORBA_Environment::default_environment ()); + = TAO_default_environment ()); // Initialize the Server state - parsing arguments and waiting. int run (CORBA_Environment &ACE_TRY_ENV = CORBA_Environment::default_environment ()); diff --git a/TAO/orbsvcs/orbsvcs/Sched/Config_Scheduler.cpp b/TAO/orbsvcs/orbsvcs/Sched/Config_Scheduler.cpp index 4ce06cc4c60..c0f38390024 100644 --- a/TAO/orbsvcs/orbsvcs/Sched/Config_Scheduler.cpp +++ b/TAO/orbsvcs/orbsvcs/Sched/Config_Scheduler.cpp @@ -328,7 +328,7 @@ void ACE_Config_Scheduler::compute_scheduling (CORBA::Long minimum_priority, ACE_DEBUG ((LM_DEBUG, "%s: %s\n", anomaly_severity_msg, - (*anomaly)->description)); + (*anomaly)->description.in ())); // Store the anomaly in the anomaly sequence out parameter anomalies[anomaly_index] = **anomaly; diff --git a/TAO/orbsvcs/tests/Simple_Naming/client.cpp b/TAO/orbsvcs/tests/Simple_Naming/client.cpp index 82302915623..9ec5bf2a9ad 100644 --- a/TAO/orbsvcs/tests/Simple_Naming/client.cpp +++ b/TAO/orbsvcs/tests/Simple_Naming/client.cpp @@ -346,8 +346,7 @@ MT_Test::svc (void) int MT_Test::execute (TAO_Naming_Client &root_context) { - // if we weren't given the orb pointer - cannot proceed. - if (orb_.ptr () == 0) + if (CORBA::is_nil (this->orb_.in ())) return -1; // Create data which will be used by all threads. diff --git a/TAO/orbsvcs/tests/Trading/Makefile b/TAO/orbsvcs/tests/Trading/Makefile index 20f2db2942e..3ddb6b514f9 100644 --- a/TAO/orbsvcs/tests/Trading/Makefile +++ b/TAO/orbsvcs/tests/Trading/Makefile @@ -36,6 +36,7 @@ LDFLAGS += -L$(TAO_ROOT)/orbsvcs/orbsvcs -L$(TAO_ROOT)/tao CPPFLAGS += -I$(TAO_ROOT)/orbsvcs -I$(TAO_ROOT) $(TSS_ORB_FLAG) LSRC = $(addsuffix .cpp,$(FILES)) +PSRC = $(addsuffix .cpp,$(BIN)) LIBS = -lorbsvcs -lTAO LDLIBS = -lorbsvcs -lTAO VLDLIBS = $(LDLIBS:%=%$(VAR)) @@ -229,18 +230,7 @@ realclean: clean $(ACE_ROOT)/ace/Singleton.i \ $(ACE_ROOT)/ace/Singleton.cpp \ $(TAO_ROOT)/tao/POA.h \ - $(TAO_ROOT)/tao/POAC.h \ - $(TAO_ROOT)/tao/POAC.i \ - $(TAO_ROOT)/tao/Servant_Base.h \ - $(TAO_ROOT)/tao/Servant_Base.i \ - $(TAO_ROOT)/tao/POAS.h \ - $(TAO_ROOT)/tao/POA_CORBA.h \ - $(TAO_ROOT)/tao/DynAnyC.h \ - $(TAO_ROOT)/tao/DynAnyC.i \ - $(TAO_ROOT)/tao/DomainC.h \ - $(TAO_ROOT)/tao/DomainC.i \ - $(TAO_ROOT)/tao/POAS.i \ - $(TAO_ROOT)/tao/Active_Object_Map.h \ + $(TAO_ROOT)/tao/Object_Adapter.h \ $(TAO_ROOT)/tao/Key_Adapters.h \ $(ACE_ROOT)/ace/Map.h \ $(ACE_ROOT)/ace/Map.i \ @@ -260,14 +250,25 @@ realclean: clean $(ACE_ROOT)/ace/Active_Map_Manager_T.cpp \ $(ACE_ROOT)/ace/Map_T.i \ $(ACE_ROOT)/ace/Map_T.cpp \ + $(TAO_ROOT)/tao/POAC.h \ + $(TAO_ROOT)/tao/POAC.i \ $(TAO_ROOT)/tao/Key_Adapters.i \ $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ + $(TAO_ROOT)/tao/poa_macros.h \ + $(TAO_ROOT)/tao/Servant_Base.h \ + $(TAO_ROOT)/tao/Servant_Base.i \ + $(TAO_ROOT)/tao/POAS.h \ + $(TAO_ROOT)/tao/POA_CORBA.h \ + $(TAO_ROOT)/tao/DynAnyC.h \ + $(TAO_ROOT)/tao/DynAnyC.i \ + $(TAO_ROOT)/tao/DomainC.h \ + $(TAO_ROOT)/tao/DomainC.i \ + $(TAO_ROOT)/tao/POAS.i \ + $(TAO_ROOT)/tao/Active_Object_Map.h \ $(TAO_ROOT)/tao/Active_Object_Map.i \ + $(TAO_ROOT)/tao/Object_Adapter.i \ $(TAO_ROOT)/tao/POAManager.h \ - $(TAO_ROOT)/tao/poa_macros.h \ $(TAO_ROOT)/tao/POAManager.i \ - $(TAO_ROOT)/tao/Object_Adapter.h \ - $(TAO_ROOT)/tao/Object_Adapter.i \ $(TAO_ROOT)/tao/POA.i \ $(TAO_ROOT)/tao/Stub.h \ $(TAO_ROOT)/tao/Pluggable.h \ @@ -322,6 +323,7 @@ realclean: clean $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ $(TAO_ROOT)/tao/Invocation.h \ $(TAO_ROOT)/tao/Reply_Dispatcher.h \ + $(TAO_ROOT)/tao/Reply_Dispatcher.i \ $(TAO_ROOT)/tao/Invocation.i \ $(TAO_ROOT)/tao/InconsistentTypeCodeC.h \ $(TAO_ROOT)/tao/DynAny_i.h \ @@ -480,18 +482,7 @@ realclean: clean $(ACE_ROOT)/ace/Singleton.i \ $(ACE_ROOT)/ace/Singleton.cpp \ $(TAO_ROOT)/tao/POA.h \ - $(TAO_ROOT)/tao/POAC.h \ - $(TAO_ROOT)/tao/POAC.i \ - $(TAO_ROOT)/tao/Servant_Base.h \ - $(TAO_ROOT)/tao/Servant_Base.i \ - $(TAO_ROOT)/tao/POAS.h \ - $(TAO_ROOT)/tao/POA_CORBA.h \ - $(TAO_ROOT)/tao/DynAnyC.h \ - $(TAO_ROOT)/tao/DynAnyC.i \ - $(TAO_ROOT)/tao/DomainC.h \ - $(TAO_ROOT)/tao/DomainC.i \ - $(TAO_ROOT)/tao/POAS.i \ - $(TAO_ROOT)/tao/Active_Object_Map.h \ + $(TAO_ROOT)/tao/Object_Adapter.h \ $(TAO_ROOT)/tao/Key_Adapters.h \ $(ACE_ROOT)/ace/Map.h \ $(ACE_ROOT)/ace/Map.i \ @@ -511,14 +502,25 @@ realclean: clean $(ACE_ROOT)/ace/Active_Map_Manager_T.cpp \ $(ACE_ROOT)/ace/Map_T.i \ $(ACE_ROOT)/ace/Map_T.cpp \ + $(TAO_ROOT)/tao/POAC.h \ + $(TAO_ROOT)/tao/POAC.i \ $(TAO_ROOT)/tao/Key_Adapters.i \ $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ + $(TAO_ROOT)/tao/poa_macros.h \ + $(TAO_ROOT)/tao/Servant_Base.h \ + $(TAO_ROOT)/tao/Servant_Base.i \ + $(TAO_ROOT)/tao/POAS.h \ + $(TAO_ROOT)/tao/POA_CORBA.h \ + $(TAO_ROOT)/tao/DynAnyC.h \ + $(TAO_ROOT)/tao/DynAnyC.i \ + $(TAO_ROOT)/tao/DomainC.h \ + $(TAO_ROOT)/tao/DomainC.i \ + $(TAO_ROOT)/tao/POAS.i \ + $(TAO_ROOT)/tao/Active_Object_Map.h \ $(TAO_ROOT)/tao/Active_Object_Map.i \ + $(TAO_ROOT)/tao/Object_Adapter.i \ $(TAO_ROOT)/tao/POAManager.h \ - $(TAO_ROOT)/tao/poa_macros.h \ $(TAO_ROOT)/tao/POAManager.i \ - $(TAO_ROOT)/tao/Object_Adapter.h \ - $(TAO_ROOT)/tao/Object_Adapter.i \ $(TAO_ROOT)/tao/POA.i \ $(TAO_ROOT)/tao/Stub.h \ $(TAO_ROOT)/tao/Pluggable.h \ @@ -573,6 +575,7 @@ realclean: clean $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ $(TAO_ROOT)/tao/Invocation.h \ $(TAO_ROOT)/tao/Reply_Dispatcher.h \ + $(TAO_ROOT)/tao/Reply_Dispatcher.i \ $(TAO_ROOT)/tao/Invocation.i \ $(TAO_ROOT)/tao/InconsistentTypeCodeC.h \ $(TAO_ROOT)/tao/DynAny_i.h \ @@ -731,18 +734,7 @@ realclean: clean $(ACE_ROOT)/ace/Singleton.i \ $(ACE_ROOT)/ace/Singleton.cpp \ $(TAO_ROOT)/tao/POA.h \ - $(TAO_ROOT)/tao/POAC.h \ - $(TAO_ROOT)/tao/POAC.i \ - $(TAO_ROOT)/tao/Servant_Base.h \ - $(TAO_ROOT)/tao/Servant_Base.i \ - $(TAO_ROOT)/tao/POAS.h \ - $(TAO_ROOT)/tao/POA_CORBA.h \ - $(TAO_ROOT)/tao/DynAnyC.h \ - $(TAO_ROOT)/tao/DynAnyC.i \ - $(TAO_ROOT)/tao/DomainC.h \ - $(TAO_ROOT)/tao/DomainC.i \ - $(TAO_ROOT)/tao/POAS.i \ - $(TAO_ROOT)/tao/Active_Object_Map.h \ + $(TAO_ROOT)/tao/Object_Adapter.h \ $(TAO_ROOT)/tao/Key_Adapters.h \ $(ACE_ROOT)/ace/Map.h \ $(ACE_ROOT)/ace/Map.i \ @@ -762,14 +754,25 @@ realclean: clean $(ACE_ROOT)/ace/Active_Map_Manager_T.cpp \ $(ACE_ROOT)/ace/Map_T.i \ $(ACE_ROOT)/ace/Map_T.cpp \ + $(TAO_ROOT)/tao/POAC.h \ + $(TAO_ROOT)/tao/POAC.i \ $(TAO_ROOT)/tao/Key_Adapters.i \ $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ + $(TAO_ROOT)/tao/poa_macros.h \ + $(TAO_ROOT)/tao/Servant_Base.h \ + $(TAO_ROOT)/tao/Servant_Base.i \ + $(TAO_ROOT)/tao/POAS.h \ + $(TAO_ROOT)/tao/POA_CORBA.h \ + $(TAO_ROOT)/tao/DynAnyC.h \ + $(TAO_ROOT)/tao/DynAnyC.i \ + $(TAO_ROOT)/tao/DomainC.h \ + $(TAO_ROOT)/tao/DomainC.i \ + $(TAO_ROOT)/tao/POAS.i \ + $(TAO_ROOT)/tao/Active_Object_Map.h \ $(TAO_ROOT)/tao/Active_Object_Map.i \ + $(TAO_ROOT)/tao/Object_Adapter.i \ $(TAO_ROOT)/tao/POAManager.h \ - $(TAO_ROOT)/tao/poa_macros.h \ $(TAO_ROOT)/tao/POAManager.i \ - $(TAO_ROOT)/tao/Object_Adapter.h \ - $(TAO_ROOT)/tao/Object_Adapter.i \ $(TAO_ROOT)/tao/POA.i \ $(TAO_ROOT)/tao/Stub.h \ $(TAO_ROOT)/tao/Pluggable.h \ @@ -824,6 +827,7 @@ realclean: clean $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ $(TAO_ROOT)/tao/Invocation.h \ $(TAO_ROOT)/tao/Reply_Dispatcher.h \ + $(TAO_ROOT)/tao/Reply_Dispatcher.i \ $(TAO_ROOT)/tao/Invocation.i \ $(TAO_ROOT)/tao/InconsistentTypeCodeC.h \ $(TAO_ROOT)/tao/DynAny_i.h \ @@ -1010,18 +1014,7 @@ realclean: clean $(ACE_ROOT)/ace/Singleton.i \ $(ACE_ROOT)/ace/Singleton.cpp \ $(TAO_ROOT)/tao/POA.h \ - $(TAO_ROOT)/tao/POAC.h \ - $(TAO_ROOT)/tao/POAC.i \ - $(TAO_ROOT)/tao/Servant_Base.h \ - $(TAO_ROOT)/tao/Servant_Base.i \ - $(TAO_ROOT)/tao/POAS.h \ - $(TAO_ROOT)/tao/POA_CORBA.h \ - $(TAO_ROOT)/tao/DynAnyC.h \ - $(TAO_ROOT)/tao/DynAnyC.i \ - $(TAO_ROOT)/tao/DomainC.h \ - $(TAO_ROOT)/tao/DomainC.i \ - $(TAO_ROOT)/tao/POAS.i \ - $(TAO_ROOT)/tao/Active_Object_Map.h \ + $(TAO_ROOT)/tao/Object_Adapter.h \ $(TAO_ROOT)/tao/Key_Adapters.h \ $(ACE_ROOT)/ace/Map.h \ $(ACE_ROOT)/ace/Map.i \ @@ -1041,14 +1034,25 @@ realclean: clean $(ACE_ROOT)/ace/Active_Map_Manager_T.cpp \ $(ACE_ROOT)/ace/Map_T.i \ $(ACE_ROOT)/ace/Map_T.cpp \ + $(TAO_ROOT)/tao/POAC.h \ + $(TAO_ROOT)/tao/POAC.i \ $(TAO_ROOT)/tao/Key_Adapters.i \ $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ + $(TAO_ROOT)/tao/poa_macros.h \ + $(TAO_ROOT)/tao/Servant_Base.h \ + $(TAO_ROOT)/tao/Servant_Base.i \ + $(TAO_ROOT)/tao/POAS.h \ + $(TAO_ROOT)/tao/POA_CORBA.h \ + $(TAO_ROOT)/tao/DynAnyC.h \ + $(TAO_ROOT)/tao/DynAnyC.i \ + $(TAO_ROOT)/tao/DomainC.h \ + $(TAO_ROOT)/tao/DomainC.i \ + $(TAO_ROOT)/tao/POAS.i \ + $(TAO_ROOT)/tao/Active_Object_Map.h \ $(TAO_ROOT)/tao/Active_Object_Map.i \ + $(TAO_ROOT)/tao/Object_Adapter.i \ $(TAO_ROOT)/tao/POAManager.h \ - $(TAO_ROOT)/tao/poa_macros.h \ $(TAO_ROOT)/tao/POAManager.i \ - $(TAO_ROOT)/tao/Object_Adapter.h \ - $(TAO_ROOT)/tao/Object_Adapter.i \ $(TAO_ROOT)/tao/POA.i \ $(TAO_ROOT)/tao/Stub.h \ $(TAO_ROOT)/tao/Pluggable.h \ @@ -1103,6 +1107,7 @@ realclean: clean $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ $(TAO_ROOT)/tao/Invocation.h \ $(TAO_ROOT)/tao/Reply_Dispatcher.h \ + $(TAO_ROOT)/tao/Reply_Dispatcher.i \ $(TAO_ROOT)/tao/Invocation.i \ $(TAO_ROOT)/tao/InconsistentTypeCodeC.h \ $(TAO_ROOT)/tao/DynAny_i.h \ @@ -1272,18 +1277,7 @@ realclean: clean $(ACE_ROOT)/ace/Singleton.i \ $(ACE_ROOT)/ace/Singleton.cpp \ $(TAO_ROOT)/tao/POA.h \ - $(TAO_ROOT)/tao/POAC.h \ - $(TAO_ROOT)/tao/POAC.i \ - $(TAO_ROOT)/tao/Servant_Base.h \ - $(TAO_ROOT)/tao/Servant_Base.i \ - $(TAO_ROOT)/tao/POAS.h \ - $(TAO_ROOT)/tao/POA_CORBA.h \ - $(TAO_ROOT)/tao/DynAnyC.h \ - $(TAO_ROOT)/tao/DynAnyC.i \ - $(TAO_ROOT)/tao/DomainC.h \ - $(TAO_ROOT)/tao/DomainC.i \ - $(TAO_ROOT)/tao/POAS.i \ - $(TAO_ROOT)/tao/Active_Object_Map.h \ + $(TAO_ROOT)/tao/Object_Adapter.h \ $(TAO_ROOT)/tao/Key_Adapters.h \ $(ACE_ROOT)/ace/Map.h \ $(ACE_ROOT)/ace/Map.i \ @@ -1303,14 +1297,25 @@ realclean: clean $(ACE_ROOT)/ace/Active_Map_Manager_T.cpp \ $(ACE_ROOT)/ace/Map_T.i \ $(ACE_ROOT)/ace/Map_T.cpp \ + $(TAO_ROOT)/tao/POAC.h \ + $(TAO_ROOT)/tao/POAC.i \ $(TAO_ROOT)/tao/Key_Adapters.i \ $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ + $(TAO_ROOT)/tao/poa_macros.h \ + $(TAO_ROOT)/tao/Servant_Base.h \ + $(TAO_ROOT)/tao/Servant_Base.i \ + $(TAO_ROOT)/tao/POAS.h \ + $(TAO_ROOT)/tao/POA_CORBA.h \ + $(TAO_ROOT)/tao/DynAnyC.h \ + $(TAO_ROOT)/tao/DynAnyC.i \ + $(TAO_ROOT)/tao/DomainC.h \ + $(TAO_ROOT)/tao/DomainC.i \ + $(TAO_ROOT)/tao/POAS.i \ + $(TAO_ROOT)/tao/Active_Object_Map.h \ $(TAO_ROOT)/tao/Active_Object_Map.i \ + $(TAO_ROOT)/tao/Object_Adapter.i \ $(TAO_ROOT)/tao/POAManager.h \ - $(TAO_ROOT)/tao/poa_macros.h \ $(TAO_ROOT)/tao/POAManager.i \ - $(TAO_ROOT)/tao/Object_Adapter.h \ - $(TAO_ROOT)/tao/Object_Adapter.i \ $(TAO_ROOT)/tao/POA.i \ $(TAO_ROOT)/tao/Stub.h \ $(TAO_ROOT)/tao/Pluggable.h \ @@ -1365,6 +1370,7 @@ realclean: clean $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ $(TAO_ROOT)/tao/Invocation.h \ $(TAO_ROOT)/tao/Reply_Dispatcher.h \ + $(TAO_ROOT)/tao/Reply_Dispatcher.i \ $(TAO_ROOT)/tao/Invocation.i \ $(TAO_ROOT)/tao/InconsistentTypeCodeC.h \ $(TAO_ROOT)/tao/DynAny_i.h \ @@ -1557,18 +1563,7 @@ realclean: clean $(ACE_ROOT)/ace/Singleton.i \ $(ACE_ROOT)/ace/Singleton.cpp \ $(TAO_ROOT)/tao/POA.h \ - $(TAO_ROOT)/tao/POAC.h \ - $(TAO_ROOT)/tao/POAC.i \ - $(TAO_ROOT)/tao/Servant_Base.h \ - $(TAO_ROOT)/tao/Servant_Base.i \ - $(TAO_ROOT)/tao/POAS.h \ - $(TAO_ROOT)/tao/POA_CORBA.h \ - $(TAO_ROOT)/tao/DynAnyC.h \ - $(TAO_ROOT)/tao/DynAnyC.i \ - $(TAO_ROOT)/tao/DomainC.h \ - $(TAO_ROOT)/tao/DomainC.i \ - $(TAO_ROOT)/tao/POAS.i \ - $(TAO_ROOT)/tao/Active_Object_Map.h \ + $(TAO_ROOT)/tao/Object_Adapter.h \ $(TAO_ROOT)/tao/Key_Adapters.h \ $(ACE_ROOT)/ace/Map.h \ $(ACE_ROOT)/ace/Map.i \ @@ -1588,14 +1583,25 @@ realclean: clean $(ACE_ROOT)/ace/Active_Map_Manager_T.cpp \ $(ACE_ROOT)/ace/Map_T.i \ $(ACE_ROOT)/ace/Map_T.cpp \ + $(TAO_ROOT)/tao/POAC.h \ + $(TAO_ROOT)/tao/POAC.i \ $(TAO_ROOT)/tao/Key_Adapters.i \ $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ + $(TAO_ROOT)/tao/poa_macros.h \ + $(TAO_ROOT)/tao/Servant_Base.h \ + $(TAO_ROOT)/tao/Servant_Base.i \ + $(TAO_ROOT)/tao/POAS.h \ + $(TAO_ROOT)/tao/POA_CORBA.h \ + $(TAO_ROOT)/tao/DynAnyC.h \ + $(TAO_ROOT)/tao/DynAnyC.i \ + $(TAO_ROOT)/tao/DomainC.h \ + $(TAO_ROOT)/tao/DomainC.i \ + $(TAO_ROOT)/tao/POAS.i \ + $(TAO_ROOT)/tao/Active_Object_Map.h \ $(TAO_ROOT)/tao/Active_Object_Map.i \ + $(TAO_ROOT)/tao/Object_Adapter.i \ $(TAO_ROOT)/tao/POAManager.h \ - $(TAO_ROOT)/tao/poa_macros.h \ $(TAO_ROOT)/tao/POAManager.i \ - $(TAO_ROOT)/tao/Object_Adapter.h \ - $(TAO_ROOT)/tao/Object_Adapter.i \ $(TAO_ROOT)/tao/POA.i \ $(TAO_ROOT)/tao/Stub.h \ $(TAO_ROOT)/tao/Pluggable.h \ @@ -1650,6 +1656,7 @@ realclean: clean $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ $(TAO_ROOT)/tao/Invocation.h \ $(TAO_ROOT)/tao/Reply_Dispatcher.h \ + $(TAO_ROOT)/tao/Reply_Dispatcher.i \ $(TAO_ROOT)/tao/Invocation.i \ $(TAO_ROOT)/tao/InconsistentTypeCodeC.h \ $(TAO_ROOT)/tao/DynAny_i.h \ @@ -1850,8 +1857,31 @@ realclean: clean $(ACE_ROOT)/ace/Singleton.i \ $(ACE_ROOT)/ace/Singleton.cpp \ $(TAO_ROOT)/tao/POA.h \ + $(TAO_ROOT)/tao/Object_Adapter.h \ + $(TAO_ROOT)/tao/Key_Adapters.h \ + $(ACE_ROOT)/ace/Map.h \ + $(ACE_ROOT)/ace/Map.i \ + $(ACE_ROOT)/ace/Map_T.h \ + $(ACE_ROOT)/ace/Pair.h \ + $(ACE_ROOT)/ace/Pair.i \ + $(ACE_ROOT)/ace/Pair_T.h \ + $(ACE_ROOT)/ace/Pair_T.i \ + $(ACE_ROOT)/ace/Pair_T.cpp \ + $(ACE_ROOT)/ace/Map_Manager.h \ + $(ACE_ROOT)/ace/Map_Manager.i \ + $(ACE_ROOT)/ace/Map_Manager.cpp \ + $(ACE_ROOT)/ace/Active_Map_Manager.h \ + $(ACE_ROOT)/ace/Active_Map_Manager.i \ + $(ACE_ROOT)/ace/Active_Map_Manager_T.h \ + $(ACE_ROOT)/ace/Active_Map_Manager_T.i \ + $(ACE_ROOT)/ace/Active_Map_Manager_T.cpp \ + $(ACE_ROOT)/ace/Map_T.i \ + $(ACE_ROOT)/ace/Map_T.cpp \ $(TAO_ROOT)/tao/POAC.h \ $(TAO_ROOT)/tao/POAC.i \ + $(TAO_ROOT)/tao/Key_Adapters.i \ + $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ + $(TAO_ROOT)/tao/poa_macros.h \ $(TAO_ROOT)/tao/Servant_Base.h \ $(TAO_ROOT)/tao/Servant_Base.i \ $(TAO_ROOT)/tao/POAS.h \ @@ -1862,6 +1892,248 @@ realclean: clean $(TAO_ROOT)/tao/DomainC.i \ $(TAO_ROOT)/tao/POAS.i \ $(TAO_ROOT)/tao/Active_Object_Map.h \ + $(TAO_ROOT)/tao/Active_Object_Map.i \ + $(TAO_ROOT)/tao/Object_Adapter.i \ + $(TAO_ROOT)/tao/POAManager.h \ + $(TAO_ROOT)/tao/POAManager.i \ + $(TAO_ROOT)/tao/POA.i \ + $(TAO_ROOT)/tao/Stub.h \ + $(TAO_ROOT)/tao/Pluggable.h \ + $(TAO_ROOT)/tao/Pluggable.i \ + $(TAO_ROOT)/tao/MProfile.h \ + $(TAO_ROOT)/tao/MProfile.i \ + $(TAO_ROOT)/tao/MessagingS.h \ + $(TAO_ROOT)/tao/TimeBaseS.h \ + $(TAO_ROOT)/tao/TimeBaseC.h \ + $(TAO_ROOT)/tao/TimeBaseC.i \ + $(TAO_ROOT)/tao/TimeBaseS_T.h \ + $(TAO_ROOT)/tao/TimeBaseS_T.i \ + $(TAO_ROOT)/tao/TimeBaseS_T.cpp \ + $(TAO_ROOT)/tao/TimeBaseS.i \ + $(TAO_ROOT)/tao/MessagingC.h \ + $(TAO_ROOT)/tao/iopfwd.h \ + $(TAO_ROOT)/tao/MessagingC.i \ + $(TAO_ROOT)/tao/MessagingS.i \ + $(TAO_ROOT)/tao/Stub.i \ + $(TAO_ROOT)/tao/params.h \ + $(TAO_ROOT)/tao/params.i \ + $(TAO_ROOT)/tao/ORB_Core.h \ + $(TAO_ROOT)/tao/Policy_Manager.h \ + $(TAO_ROOT)/tao/Policy_Manager.i \ + $(TAO_ROOT)/tao/Resource_Factory.h \ + $(TAO_ROOT)/tao/Protocol_Factory.h \ + $(ACE_ROOT)/ace/Strategies_T.h \ + $(ACE_ROOT)/ace/Strategies.h \ + $(ACE_ROOT)/ace/Strategies.i \ + $(ACE_ROOT)/ace/Synch_Options.h \ + $(ACE_ROOT)/ace/Synch_Options.i \ + $(ACE_ROOT)/ace/Thread_Manager.h \ + $(ACE_ROOT)/ace/Thread_Manager.i \ + $(ACE_ROOT)/ace/Strategies_T.i \ + $(ACE_ROOT)/ace/Strategies_T.cpp \ + $(ACE_ROOT)/ace/Service_Repository.h \ + $(ACE_ROOT)/ace/Service_Types.h \ + $(ACE_ROOT)/ace/Service_Types.i \ + $(ACE_ROOT)/ace/Service_Repository.i \ + $(ACE_ROOT)/ace/WFMO_Reactor.h \ + $(ACE_ROOT)/ace/Message_Queue.h \ + $(ACE_ROOT)/ace/IO_Cntl_Msg.h \ + $(ACE_ROOT)/ace/Message_Queue_T.h \ + $(ACE_ROOT)/ace/Message_Queue_T.i \ + $(ACE_ROOT)/ace/Message_Queue_T.cpp \ + $(ACE_ROOT)/ace/Message_Queue.i \ + $(ACE_ROOT)/ace/WFMO_Reactor.i \ + $(TAO_ROOT)/tao/ORB_Core.i \ + $(ACE_ROOT)/ace/Dynamic_Service.h \ + $(ACE_ROOT)/ace/Dynamic_Service.cpp \ + $(TAO_ROOT)/tao/Operation_Table.h \ + $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ + $(TAO_ROOT)/tao/Invocation.h \ + $(TAO_ROOT)/tao/Reply_Dispatcher.h \ + $(TAO_ROOT)/tao/Reply_Dispatcher.i \ + $(TAO_ROOT)/tao/Invocation.i \ + $(TAO_ROOT)/tao/InconsistentTypeCodeC.h \ + $(TAO_ROOT)/tao/DynAny_i.h \ + $(TAO_ROOT)/tao/Union.h \ + $(TAO_ROOT)/tao/ValueBase.h \ + $(TAO_ROOT)/tao/ValueBase.i \ + $(TAO_ROOT)/tao/ValueFactory.h \ + $(TAO_ROOT)/tao/ValueFactory.i \ + $(TAO_ROOT)/tao/ObjectIDList.h \ + $(TAO_ROOT)/tao/ObjectIDList.i \ + $(TAO_ROOT)/tao/WrongTransactionC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/orbsvcs_export.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingC.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposC.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicC.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS.i \ + Simple_Dynamic.cpp +.obj/export_test.o .obj/export_test.so .shobj/export_test.o .shobj/export_test.so: export_test.cpp \ + $(TAO_ROOT)/tao/TAO.h \ + $(TAO_ROOT)/tao/corbafwd.h \ + $(ACE_ROOT)/ace/CDR_Stream.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/inc_user_config.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/OS.i \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Malloc.i \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Synch.i \ + $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Free_List.cpp \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Malloc_T.cpp \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers.i \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ + $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Managed_Object.cpp \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/Memory_Pool.i \ + $(ACE_ROOT)/ace/Message_Block.i \ + $(ACE_ROOT)/ace/Message_Block_T.h \ + $(ACE_ROOT)/ace/Message_Block_T.i \ + $(ACE_ROOT)/ace/Message_Block_T.cpp \ + $(ACE_ROOT)/ace/SString.h \ + $(ACE_ROOT)/ace/SString.i \ + $(ACE_ROOT)/ace/CDR_Stream.i \ + $(TAO_ROOT)/tao/try_macros.h \ + $(TAO_ROOT)/tao/orbconf.h \ + $(ACE_ROOT)/ace/CORBA_macros.h \ + $(TAO_ROOT)/tao/corbafwd.i \ + $(TAO_ROOT)/tao/POAC.h \ + $(TAO_ROOT)/tao/PolicyC.h \ + $(TAO_ROOT)/tao/CurrentC.h \ + $(TAO_ROOT)/tao/Object.h \ + $(TAO_ROOT)/tao/Object.i \ + $(TAO_ROOT)/tao/CurrentC.i \ + $(TAO_ROOT)/tao/CDR.h \ + $(TAO_ROOT)/tao/Typecode.h \ + $(TAO_ROOT)/tao/Exception.h \ + $(TAO_ROOT)/tao/Exception.i \ + $(TAO_ROOT)/tao/Typecode.i \ + $(TAO_ROOT)/tao/CDR.i \ + $(TAO_ROOT)/tao/Sequence.h \ + $(TAO_ROOT)/tao/Managed_Types.h \ + $(TAO_ROOT)/tao/Managed_Types.i \ + $(TAO_ROOT)/tao/Sequence.i \ + $(TAO_ROOT)/tao/Sequence_T.h \ + $(TAO_ROOT)/tao/Sequence_T.i \ + $(TAO_ROOT)/tao/Sequence_T.cpp \ + $(TAO_ROOT)/tao/PolicyC.i \ + $(TAO_ROOT)/tao/Environment.h \ + $(TAO_ROOT)/tao/Environment.i \ + $(TAO_ROOT)/tao/POAC.i \ + $(TAO_ROOT)/tao/ORB.h \ + $(TAO_ROOT)/tao/IOR_LookupTable.h \ + $(ACE_ROOT)/ace/Hash_Map_Manager.h \ + $(ACE_ROOT)/ace/Functor.h \ + $(ACE_ROOT)/ace/Functor.i \ + $(ACE_ROOT)/ace/Functor_T.h \ + $(ACE_ROOT)/ace/Functor_T.i \ + $(ACE_ROOT)/ace/Functor_T.cpp \ + $(ACE_ROOT)/ace/Hash_Map_Manager.i \ + $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \ + $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \ + $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \ + $(ACE_ROOT)/ace/Service_Config.h \ + $(ACE_ROOT)/ace/Service_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.i \ + $(ACE_ROOT)/ace/Service_Object.i \ + $(ACE_ROOT)/ace/Service_Config.i \ + $(ACE_ROOT)/ace/Reactor.h \ + $(ACE_ROOT)/ace/Handle_Set.h \ + $(ACE_ROOT)/ace/Handle_Set.i \ + $(ACE_ROOT)/ace/Timer_Queue.h \ + $(ACE_ROOT)/ace/Timer_Queue_T.h \ + $(ACE_ROOT)/ace/Timer_Queue_T.i \ + $(ACE_ROOT)/ace/Timer_Queue_T.cpp \ + $(ACE_ROOT)/ace/Reactor.i \ + $(ACE_ROOT)/ace/Reactor_Impl.h \ + $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \ + $(TAO_ROOT)/tao/Services.h \ + $(TAO_ROOT)/tao/Services.i \ + $(TAO_ROOT)/tao/ORB.i \ + Offer_Exporter.h TT_Info.h TTestS.h TTestC.h \ + $(TAO_ROOT)/tao/corba.h \ + $(TAO_ROOT)/tao/Any.h \ + $(TAO_ROOT)/tao/Any.i \ + $(TAO_ROOT)/tao/NVList.h \ + $(TAO_ROOT)/tao/NVList.i \ + $(TAO_ROOT)/tao/Principal.h \ + $(TAO_ROOT)/tao/Principal.i \ + $(TAO_ROOT)/tao/Request.h \ + $(TAO_ROOT)/tao/Context.h \ + $(TAO_ROOT)/tao/Context.i \ + $(TAO_ROOT)/tao/Request.i \ + $(TAO_ROOT)/tao/Server_Request.h \ + $(TAO_ROOT)/tao/Object_KeyC.h \ + $(TAO_ROOT)/tao/Object_KeyC.i \ + $(TAO_ROOT)/tao/GIOP.h \ + $(TAO_ROOT)/tao/GIOP.i \ + $(TAO_ROOT)/tao/Server_Request.i \ + $(TAO_ROOT)/tao/varout.h \ + $(TAO_ROOT)/tao/varout.i \ + $(TAO_ROOT)/tao/varout.cpp \ + $(TAO_ROOT)/tao/Marshal.h \ + $(TAO_ROOT)/tao/Marshal.i \ + $(TAO_ROOT)/tao/singletons.h \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Singleton.cpp \ + $(TAO_ROOT)/tao/POA.h \ + $(TAO_ROOT)/tao/Object_Adapter.h \ $(TAO_ROOT)/tao/Key_Adapters.h \ $(ACE_ROOT)/ace/Map.h \ $(ACE_ROOT)/ace/Map.i \ @@ -1883,12 +2155,21 @@ realclean: clean $(ACE_ROOT)/ace/Map_T.cpp \ $(TAO_ROOT)/tao/Key_Adapters.i \ $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ + $(TAO_ROOT)/tao/poa_macros.h \ + $(TAO_ROOT)/tao/Servant_Base.h \ + $(TAO_ROOT)/tao/Servant_Base.i \ + $(TAO_ROOT)/tao/POAS.h \ + $(TAO_ROOT)/tao/POA_CORBA.h \ + $(TAO_ROOT)/tao/DynAnyC.h \ + $(TAO_ROOT)/tao/DynAnyC.i \ + $(TAO_ROOT)/tao/DomainC.h \ + $(TAO_ROOT)/tao/DomainC.i \ + $(TAO_ROOT)/tao/POAS.i \ + $(TAO_ROOT)/tao/Active_Object_Map.h \ $(TAO_ROOT)/tao/Active_Object_Map.i \ + $(TAO_ROOT)/tao/Object_Adapter.i \ $(TAO_ROOT)/tao/POAManager.h \ - $(TAO_ROOT)/tao/poa_macros.h \ $(TAO_ROOT)/tao/POAManager.i \ - $(TAO_ROOT)/tao/Object_Adapter.h \ - $(TAO_ROOT)/tao/Object_Adapter.i \ $(TAO_ROOT)/tao/POA.i \ $(TAO_ROOT)/tao/Stub.h \ $(TAO_ROOT)/tao/Pluggable.h \ @@ -1943,6 +2224,7 @@ realclean: clean $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ $(TAO_ROOT)/tao/Invocation.h \ $(TAO_ROOT)/tao/Reply_Dispatcher.h \ + $(TAO_ROOT)/tao/Reply_Dispatcher.i \ $(TAO_ROOT)/tao/Invocation.i \ $(TAO_ROOT)/tao/InconsistentTypeCodeC.h \ $(TAO_ROOT)/tao/DynAny_i.h \ @@ -1954,26 +2236,644 @@ realclean: clean $(TAO_ROOT)/tao/ObjectIDList.h \ $(TAO_ROOT)/tao/ObjectIDList.i \ $(TAO_ROOT)/tao/WrongTransactionC.h \ + TTestC.i TTestS_T.h TTestS_T.i TTestS_T.cpp TTestS.i \ + $(ACE_ROOT)/ace/Arg_Shifter.h \ + $(ACE_ROOT)/ace/Read_Buffer.h \ + $(ACE_ROOT)/ace/Read_Buffer.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingC.h \ $(TAO_ROOT)/orbsvcs/orbsvcs/orbsvcs_export.h \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingC.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposC.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicC.i \ + Simple_Dynamic.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Trader/Trader_Utils.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Trader/Trader.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS.h \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS_T.h \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS_T.i \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS_T.cpp \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS.i \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS.i \ + Simple_Dynamic.cpp Offer_Importer.h \ + $(ACE_ROOT)/ace/Task_T.h \ + $(ACE_ROOT)/ace/Task.h \ + $(ACE_ROOT)/ace/Task.i \ + $(ACE_ROOT)/ace/Task_T.i \ + $(ACE_ROOT)/ace/Task_T.cpp \ + $(ACE_ROOT)/ace/Module.h \ + $(ACE_ROOT)/ace/Module.i \ + $(ACE_ROOT)/ace/Module.cpp \ + $(ACE_ROOT)/ace/Stream_Modules.h \ + $(ACE_ROOT)/ace/Stream_Modules.i \ + $(ACE_ROOT)/ace/Stream_Modules.cpp \ + Service_Type_Exporter.h \ + $(ACE_ROOT)/ace/Auto_Ptr.h \ + $(ACE_ROOT)/ace/Auto_Ptr.i \ + $(ACE_ROOT)/ace/Auto_Ptr.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Trader/Service_Type_Repository.h +.obj/import_test.o .obj/import_test.so .shobj/import_test.o .shobj/import_test.so: import_test.cpp \ + $(TAO_ROOT)/tao/TAO.h \ + $(TAO_ROOT)/tao/corbafwd.h \ + $(ACE_ROOT)/ace/CDR_Stream.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/inc_user_config.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/OS.i \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Malloc.i \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Synch.i \ + $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Free_List.cpp \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Malloc_T.cpp \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers.i \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ + $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Managed_Object.cpp \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/Memory_Pool.i \ + $(ACE_ROOT)/ace/Message_Block.i \ + $(ACE_ROOT)/ace/Message_Block_T.h \ + $(ACE_ROOT)/ace/Message_Block_T.i \ + $(ACE_ROOT)/ace/Message_Block_T.cpp \ + $(ACE_ROOT)/ace/SString.h \ + $(ACE_ROOT)/ace/SString.i \ + $(ACE_ROOT)/ace/CDR_Stream.i \ + $(TAO_ROOT)/tao/try_macros.h \ + $(TAO_ROOT)/tao/orbconf.h \ + $(ACE_ROOT)/ace/CORBA_macros.h \ + $(TAO_ROOT)/tao/corbafwd.i \ + $(TAO_ROOT)/tao/POAC.h \ + $(TAO_ROOT)/tao/PolicyC.h \ + $(TAO_ROOT)/tao/CurrentC.h \ + $(TAO_ROOT)/tao/Object.h \ + $(TAO_ROOT)/tao/Object.i \ + $(TAO_ROOT)/tao/CurrentC.i \ + $(TAO_ROOT)/tao/CDR.h \ + $(TAO_ROOT)/tao/Typecode.h \ + $(TAO_ROOT)/tao/Exception.h \ + $(TAO_ROOT)/tao/Exception.i \ + $(TAO_ROOT)/tao/Typecode.i \ + $(TAO_ROOT)/tao/CDR.i \ + $(TAO_ROOT)/tao/Sequence.h \ + $(TAO_ROOT)/tao/Managed_Types.h \ + $(TAO_ROOT)/tao/Managed_Types.i \ + $(TAO_ROOT)/tao/Sequence.i \ + $(TAO_ROOT)/tao/Sequence_T.h \ + $(TAO_ROOT)/tao/Sequence_T.i \ + $(TAO_ROOT)/tao/Sequence_T.cpp \ + $(TAO_ROOT)/tao/PolicyC.i \ + $(TAO_ROOT)/tao/Environment.h \ + $(TAO_ROOT)/tao/Environment.i \ + $(TAO_ROOT)/tao/POAC.i \ + $(TAO_ROOT)/tao/ORB.h \ + $(TAO_ROOT)/tao/IOR_LookupTable.h \ + $(ACE_ROOT)/ace/Hash_Map_Manager.h \ + $(ACE_ROOT)/ace/Functor.h \ + $(ACE_ROOT)/ace/Functor.i \ + $(ACE_ROOT)/ace/Functor_T.h \ + $(ACE_ROOT)/ace/Functor_T.i \ + $(ACE_ROOT)/ace/Functor_T.cpp \ + $(ACE_ROOT)/ace/Hash_Map_Manager.i \ + $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \ + $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \ + $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \ + $(ACE_ROOT)/ace/Service_Config.h \ + $(ACE_ROOT)/ace/Service_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.i \ + $(ACE_ROOT)/ace/Service_Object.i \ + $(ACE_ROOT)/ace/Service_Config.i \ + $(ACE_ROOT)/ace/Reactor.h \ + $(ACE_ROOT)/ace/Handle_Set.h \ + $(ACE_ROOT)/ace/Handle_Set.i \ + $(ACE_ROOT)/ace/Timer_Queue.h \ + $(ACE_ROOT)/ace/Timer_Queue_T.h \ + $(ACE_ROOT)/ace/Timer_Queue_T.i \ + $(ACE_ROOT)/ace/Timer_Queue_T.cpp \ + $(ACE_ROOT)/ace/Reactor.i \ + $(ACE_ROOT)/ace/Reactor_Impl.h \ + $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \ + $(TAO_ROOT)/tao/Services.h \ + $(TAO_ROOT)/tao/Services.i \ + $(TAO_ROOT)/tao/ORB.i \ + Offer_Importer.h TT_Info.h TTestS.h TTestC.h \ + $(TAO_ROOT)/tao/corba.h \ + $(TAO_ROOT)/tao/Any.h \ + $(TAO_ROOT)/tao/Any.i \ + $(TAO_ROOT)/tao/NVList.h \ + $(TAO_ROOT)/tao/NVList.i \ + $(TAO_ROOT)/tao/Principal.h \ + $(TAO_ROOT)/tao/Principal.i \ + $(TAO_ROOT)/tao/Request.h \ + $(TAO_ROOT)/tao/Context.h \ + $(TAO_ROOT)/tao/Context.i \ + $(TAO_ROOT)/tao/Request.i \ + $(TAO_ROOT)/tao/Server_Request.h \ + $(TAO_ROOT)/tao/Object_KeyC.h \ + $(TAO_ROOT)/tao/Object_KeyC.i \ + $(TAO_ROOT)/tao/GIOP.h \ + $(TAO_ROOT)/tao/GIOP.i \ + $(TAO_ROOT)/tao/Server_Request.i \ + $(TAO_ROOT)/tao/varout.h \ + $(TAO_ROOT)/tao/varout.i \ + $(TAO_ROOT)/tao/varout.cpp \ + $(TAO_ROOT)/tao/Marshal.h \ + $(TAO_ROOT)/tao/Marshal.i \ + $(TAO_ROOT)/tao/singletons.h \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Singleton.cpp \ + $(TAO_ROOT)/tao/POA.h \ + $(TAO_ROOT)/tao/Object_Adapter.h \ + $(TAO_ROOT)/tao/Key_Adapters.h \ + $(ACE_ROOT)/ace/Map.h \ + $(ACE_ROOT)/ace/Map.i \ + $(ACE_ROOT)/ace/Map_T.h \ + $(ACE_ROOT)/ace/Pair.h \ + $(ACE_ROOT)/ace/Pair.i \ + $(ACE_ROOT)/ace/Pair_T.h \ + $(ACE_ROOT)/ace/Pair_T.i \ + $(ACE_ROOT)/ace/Pair_T.cpp \ + $(ACE_ROOT)/ace/Map_Manager.h \ + $(ACE_ROOT)/ace/Map_Manager.i \ + $(ACE_ROOT)/ace/Map_Manager.cpp \ + $(ACE_ROOT)/ace/Active_Map_Manager.h \ + $(ACE_ROOT)/ace/Active_Map_Manager.i \ + $(ACE_ROOT)/ace/Active_Map_Manager_T.h \ + $(ACE_ROOT)/ace/Active_Map_Manager_T.i \ + $(ACE_ROOT)/ace/Active_Map_Manager_T.cpp \ + $(ACE_ROOT)/ace/Map_T.i \ + $(ACE_ROOT)/ace/Map_T.cpp \ + $(TAO_ROOT)/tao/Key_Adapters.i \ + $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ + $(TAO_ROOT)/tao/poa_macros.h \ + $(TAO_ROOT)/tao/Servant_Base.h \ + $(TAO_ROOT)/tao/Servant_Base.i \ + $(TAO_ROOT)/tao/POAS.h \ + $(TAO_ROOT)/tao/POA_CORBA.h \ + $(TAO_ROOT)/tao/DynAnyC.h \ + $(TAO_ROOT)/tao/DynAnyC.i \ + $(TAO_ROOT)/tao/DomainC.h \ + $(TAO_ROOT)/tao/DomainC.i \ + $(TAO_ROOT)/tao/POAS.i \ + $(TAO_ROOT)/tao/Active_Object_Map.h \ + $(TAO_ROOT)/tao/Active_Object_Map.i \ + $(TAO_ROOT)/tao/Object_Adapter.i \ + $(TAO_ROOT)/tao/POAManager.h \ + $(TAO_ROOT)/tao/POAManager.i \ + $(TAO_ROOT)/tao/POA.i \ + $(TAO_ROOT)/tao/Stub.h \ + $(TAO_ROOT)/tao/Pluggable.h \ + $(TAO_ROOT)/tao/Pluggable.i \ + $(TAO_ROOT)/tao/MProfile.h \ + $(TAO_ROOT)/tao/MProfile.i \ + $(TAO_ROOT)/tao/MessagingS.h \ + $(TAO_ROOT)/tao/TimeBaseS.h \ + $(TAO_ROOT)/tao/TimeBaseC.h \ + $(TAO_ROOT)/tao/TimeBaseC.i \ + $(TAO_ROOT)/tao/TimeBaseS_T.h \ + $(TAO_ROOT)/tao/TimeBaseS_T.i \ + $(TAO_ROOT)/tao/TimeBaseS_T.cpp \ + $(TAO_ROOT)/tao/TimeBaseS.i \ + $(TAO_ROOT)/tao/MessagingC.h \ + $(TAO_ROOT)/tao/iopfwd.h \ + $(TAO_ROOT)/tao/MessagingC.i \ + $(TAO_ROOT)/tao/MessagingS.i \ + $(TAO_ROOT)/tao/Stub.i \ + $(TAO_ROOT)/tao/params.h \ + $(TAO_ROOT)/tao/params.i \ + $(TAO_ROOT)/tao/ORB_Core.h \ + $(TAO_ROOT)/tao/Policy_Manager.h \ + $(TAO_ROOT)/tao/Policy_Manager.i \ + $(TAO_ROOT)/tao/Resource_Factory.h \ + $(TAO_ROOT)/tao/Protocol_Factory.h \ + $(ACE_ROOT)/ace/Strategies_T.h \ + $(ACE_ROOT)/ace/Strategies.h \ + $(ACE_ROOT)/ace/Strategies.i \ + $(ACE_ROOT)/ace/Synch_Options.h \ + $(ACE_ROOT)/ace/Synch_Options.i \ + $(ACE_ROOT)/ace/Thread_Manager.h \ + $(ACE_ROOT)/ace/Thread_Manager.i \ + $(ACE_ROOT)/ace/Strategies_T.i \ + $(ACE_ROOT)/ace/Strategies_T.cpp \ + $(ACE_ROOT)/ace/Service_Repository.h \ + $(ACE_ROOT)/ace/Service_Types.h \ + $(ACE_ROOT)/ace/Service_Types.i \ + $(ACE_ROOT)/ace/Service_Repository.i \ + $(ACE_ROOT)/ace/WFMO_Reactor.h \ + $(ACE_ROOT)/ace/Message_Queue.h \ + $(ACE_ROOT)/ace/IO_Cntl_Msg.h \ + $(ACE_ROOT)/ace/Message_Queue_T.h \ + $(ACE_ROOT)/ace/Message_Queue_T.i \ + $(ACE_ROOT)/ace/Message_Queue_T.cpp \ + $(ACE_ROOT)/ace/Message_Queue.i \ + $(ACE_ROOT)/ace/WFMO_Reactor.i \ + $(TAO_ROOT)/tao/ORB_Core.i \ + $(ACE_ROOT)/ace/Dynamic_Service.h \ + $(ACE_ROOT)/ace/Dynamic_Service.cpp \ + $(TAO_ROOT)/tao/Operation_Table.h \ + $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ + $(TAO_ROOT)/tao/Invocation.h \ + $(TAO_ROOT)/tao/Reply_Dispatcher.h \ + $(TAO_ROOT)/tao/Reply_Dispatcher.i \ + $(TAO_ROOT)/tao/Invocation.i \ + $(TAO_ROOT)/tao/InconsistentTypeCodeC.h \ + $(TAO_ROOT)/tao/DynAny_i.h \ + $(TAO_ROOT)/tao/Union.h \ + $(TAO_ROOT)/tao/ValueBase.h \ + $(TAO_ROOT)/tao/ValueBase.i \ + $(TAO_ROOT)/tao/ValueFactory.h \ + $(TAO_ROOT)/tao/ValueFactory.i \ + $(TAO_ROOT)/tao/ObjectIDList.h \ + $(TAO_ROOT)/tao/ObjectIDList.i \ + $(TAO_ROOT)/tao/WrongTransactionC.h \ + TTestC.i TTestS_T.h TTestS_T.i TTestS_T.cpp TTestS.i \ + $(ACE_ROOT)/ace/Arg_Shifter.h \ + $(ACE_ROOT)/ace/Read_Buffer.h \ + $(ACE_ROOT)/ace/Read_Buffer.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/orbsvcs_export.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingC.i \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposC.h \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposC.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicC.i \ + $(ACE_ROOT)/ace/Task_T.h \ + $(ACE_ROOT)/ace/Task.h \ + $(ACE_ROOT)/ace/Task.i \ + $(ACE_ROOT)/ace/Task_T.i \ + $(ACE_ROOT)/ace/Task_T.cpp \ + $(ACE_ROOT)/ace/Module.h \ + $(ACE_ROOT)/ace/Module.i \ + $(ACE_ROOT)/ace/Module.cpp \ + $(ACE_ROOT)/ace/Stream_Modules.h \ + $(ACE_ROOT)/ace/Stream_Modules.i \ + $(ACE_ROOT)/ace/Stream_Modules.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Trader/Trader_Utils.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Trader/Trader.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS.h \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS_T.h \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS_T.i \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS_T.cpp \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS.i \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS.i +.obj/colocated_test.o .obj/colocated_test.so .shobj/colocated_test.o .shobj/colocated_test.so: colocated_test.cpp \ + $(ACE_ROOT)/ace/Auto_Ptr.h \ + $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/inc_user_config.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/OS.i \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/Auto_Ptr.i \ + $(ACE_ROOT)/ace/Auto_Ptr.cpp \ + $(ACE_ROOT)/ace/Get_Opt.h \ + $(ACE_ROOT)/ace/Get_Opt.i \ + $(TAO_ROOT)/tao/TAO.h \ + $(TAO_ROOT)/tao/corbafwd.h \ + $(ACE_ROOT)/ace/CDR_Stream.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Malloc.i \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Synch.i \ + $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Free_List.cpp \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Malloc_T.cpp \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers.i \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ + $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Managed_Object.cpp \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/Memory_Pool.i \ + $(ACE_ROOT)/ace/Message_Block.i \ + $(ACE_ROOT)/ace/Message_Block_T.h \ + $(ACE_ROOT)/ace/Message_Block_T.i \ + $(ACE_ROOT)/ace/Message_Block_T.cpp \ + $(ACE_ROOT)/ace/SString.h \ + $(ACE_ROOT)/ace/SString.i \ + $(ACE_ROOT)/ace/CDR_Stream.i \ + $(TAO_ROOT)/tao/try_macros.h \ + $(TAO_ROOT)/tao/orbconf.h \ + $(ACE_ROOT)/ace/CORBA_macros.h \ + $(TAO_ROOT)/tao/corbafwd.i \ + $(TAO_ROOT)/tao/POAC.h \ + $(TAO_ROOT)/tao/PolicyC.h \ + $(TAO_ROOT)/tao/CurrentC.h \ + $(TAO_ROOT)/tao/Object.h \ + $(TAO_ROOT)/tao/Object.i \ + $(TAO_ROOT)/tao/CurrentC.i \ + $(TAO_ROOT)/tao/CDR.h \ + $(TAO_ROOT)/tao/Typecode.h \ + $(TAO_ROOT)/tao/Exception.h \ + $(TAO_ROOT)/tao/Exception.i \ + $(TAO_ROOT)/tao/Typecode.i \ + $(TAO_ROOT)/tao/CDR.i \ + $(TAO_ROOT)/tao/Sequence.h \ + $(TAO_ROOT)/tao/Managed_Types.h \ + $(TAO_ROOT)/tao/Managed_Types.i \ + $(TAO_ROOT)/tao/Sequence.i \ + $(TAO_ROOT)/tao/Sequence_T.h \ + $(TAO_ROOT)/tao/Sequence_T.i \ + $(TAO_ROOT)/tao/Sequence_T.cpp \ + $(TAO_ROOT)/tao/PolicyC.i \ + $(TAO_ROOT)/tao/Environment.h \ + $(TAO_ROOT)/tao/Environment.i \ + $(TAO_ROOT)/tao/POAC.i \ + $(TAO_ROOT)/tao/ORB.h \ + $(TAO_ROOT)/tao/IOR_LookupTable.h \ + $(ACE_ROOT)/ace/Hash_Map_Manager.h \ + $(ACE_ROOT)/ace/Functor.h \ + $(ACE_ROOT)/ace/Functor.i \ + $(ACE_ROOT)/ace/Functor_T.h \ + $(ACE_ROOT)/ace/Functor_T.i \ + $(ACE_ROOT)/ace/Functor_T.cpp \ + $(ACE_ROOT)/ace/Hash_Map_Manager.i \ + $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \ + $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \ + $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \ + $(ACE_ROOT)/ace/Service_Config.h \ + $(ACE_ROOT)/ace/Service_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.i \ + $(ACE_ROOT)/ace/Service_Object.i \ + $(ACE_ROOT)/ace/Service_Config.i \ + $(ACE_ROOT)/ace/Reactor.h \ + $(ACE_ROOT)/ace/Handle_Set.h \ + $(ACE_ROOT)/ace/Handle_Set.i \ + $(ACE_ROOT)/ace/Timer_Queue.h \ + $(ACE_ROOT)/ace/Timer_Queue_T.h \ + $(ACE_ROOT)/ace/Timer_Queue_T.i \ + $(ACE_ROOT)/ace/Timer_Queue_T.cpp \ + $(ACE_ROOT)/ace/Reactor.i \ + $(ACE_ROOT)/ace/Reactor_Impl.h \ + $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \ + $(TAO_ROOT)/tao/Services.h \ + $(TAO_ROOT)/tao/Services.i \ + $(TAO_ROOT)/tao/ORB.i \ + Offer_Exporter.h TT_Info.h TTestS.h TTestC.h \ + $(TAO_ROOT)/tao/corba.h \ + $(TAO_ROOT)/tao/Any.h \ + $(TAO_ROOT)/tao/Any.i \ + $(TAO_ROOT)/tao/NVList.h \ + $(TAO_ROOT)/tao/NVList.i \ + $(TAO_ROOT)/tao/Principal.h \ + $(TAO_ROOT)/tao/Principal.i \ + $(TAO_ROOT)/tao/Request.h \ + $(TAO_ROOT)/tao/Context.h \ + $(TAO_ROOT)/tao/Context.i \ + $(TAO_ROOT)/tao/Request.i \ + $(TAO_ROOT)/tao/Server_Request.h \ + $(TAO_ROOT)/tao/Object_KeyC.h \ + $(TAO_ROOT)/tao/Object_KeyC.i \ + $(TAO_ROOT)/tao/GIOP.h \ + $(TAO_ROOT)/tao/GIOP.i \ + $(TAO_ROOT)/tao/Server_Request.i \ + $(TAO_ROOT)/tao/varout.h \ + $(TAO_ROOT)/tao/varout.i \ + $(TAO_ROOT)/tao/varout.cpp \ + $(TAO_ROOT)/tao/Marshal.h \ + $(TAO_ROOT)/tao/Marshal.i \ + $(TAO_ROOT)/tao/singletons.h \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Singleton.cpp \ + $(TAO_ROOT)/tao/POA.h \ + $(TAO_ROOT)/tao/Object_Adapter.h \ + $(TAO_ROOT)/tao/Key_Adapters.h \ + $(ACE_ROOT)/ace/Map.h \ + $(ACE_ROOT)/ace/Map.i \ + $(ACE_ROOT)/ace/Map_T.h \ + $(ACE_ROOT)/ace/Pair.h \ + $(ACE_ROOT)/ace/Pair.i \ + $(ACE_ROOT)/ace/Pair_T.h \ + $(ACE_ROOT)/ace/Pair_T.i \ + $(ACE_ROOT)/ace/Pair_T.cpp \ + $(ACE_ROOT)/ace/Map_Manager.h \ + $(ACE_ROOT)/ace/Map_Manager.i \ + $(ACE_ROOT)/ace/Map_Manager.cpp \ + $(ACE_ROOT)/ace/Active_Map_Manager.h \ + $(ACE_ROOT)/ace/Active_Map_Manager.i \ + $(ACE_ROOT)/ace/Active_Map_Manager_T.h \ + $(ACE_ROOT)/ace/Active_Map_Manager_T.i \ + $(ACE_ROOT)/ace/Active_Map_Manager_T.cpp \ + $(ACE_ROOT)/ace/Map_T.i \ + $(ACE_ROOT)/ace/Map_T.cpp \ + $(TAO_ROOT)/tao/Key_Adapters.i \ + $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ + $(TAO_ROOT)/tao/poa_macros.h \ + $(TAO_ROOT)/tao/Servant_Base.h \ + $(TAO_ROOT)/tao/Servant_Base.i \ + $(TAO_ROOT)/tao/POAS.h \ + $(TAO_ROOT)/tao/POA_CORBA.h \ + $(TAO_ROOT)/tao/DynAnyC.h \ + $(TAO_ROOT)/tao/DynAnyC.i \ + $(TAO_ROOT)/tao/DomainC.h \ + $(TAO_ROOT)/tao/DomainC.i \ + $(TAO_ROOT)/tao/POAS.i \ + $(TAO_ROOT)/tao/Active_Object_Map.h \ + $(TAO_ROOT)/tao/Active_Object_Map.i \ + $(TAO_ROOT)/tao/Object_Adapter.i \ + $(TAO_ROOT)/tao/POAManager.h \ + $(TAO_ROOT)/tao/POAManager.i \ + $(TAO_ROOT)/tao/POA.i \ + $(TAO_ROOT)/tao/Stub.h \ + $(TAO_ROOT)/tao/Pluggable.h \ + $(TAO_ROOT)/tao/Pluggable.i \ + $(TAO_ROOT)/tao/MProfile.h \ + $(TAO_ROOT)/tao/MProfile.i \ + $(TAO_ROOT)/tao/MessagingS.h \ + $(TAO_ROOT)/tao/TimeBaseS.h \ + $(TAO_ROOT)/tao/TimeBaseC.h \ + $(TAO_ROOT)/tao/TimeBaseC.i \ + $(TAO_ROOT)/tao/TimeBaseS_T.h \ + $(TAO_ROOT)/tao/TimeBaseS_T.i \ + $(TAO_ROOT)/tao/TimeBaseS_T.cpp \ + $(TAO_ROOT)/tao/TimeBaseS.i \ + $(TAO_ROOT)/tao/MessagingC.h \ + $(TAO_ROOT)/tao/iopfwd.h \ + $(TAO_ROOT)/tao/MessagingC.i \ + $(TAO_ROOT)/tao/MessagingS.i \ + $(TAO_ROOT)/tao/Stub.i \ + $(TAO_ROOT)/tao/params.h \ + $(TAO_ROOT)/tao/params.i \ + $(TAO_ROOT)/tao/ORB_Core.h \ + $(TAO_ROOT)/tao/Policy_Manager.h \ + $(TAO_ROOT)/tao/Policy_Manager.i \ + $(TAO_ROOT)/tao/Resource_Factory.h \ + $(TAO_ROOT)/tao/Protocol_Factory.h \ + $(ACE_ROOT)/ace/Strategies_T.h \ + $(ACE_ROOT)/ace/Strategies.h \ + $(ACE_ROOT)/ace/Strategies.i \ + $(ACE_ROOT)/ace/Synch_Options.h \ + $(ACE_ROOT)/ace/Synch_Options.i \ + $(ACE_ROOT)/ace/Thread_Manager.h \ + $(ACE_ROOT)/ace/Thread_Manager.i \ + $(ACE_ROOT)/ace/Strategies_T.i \ + $(ACE_ROOT)/ace/Strategies_T.cpp \ + $(ACE_ROOT)/ace/Service_Repository.h \ + $(ACE_ROOT)/ace/Service_Types.h \ + $(ACE_ROOT)/ace/Service_Types.i \ + $(ACE_ROOT)/ace/Service_Repository.i \ + $(ACE_ROOT)/ace/WFMO_Reactor.h \ + $(ACE_ROOT)/ace/Message_Queue.h \ + $(ACE_ROOT)/ace/IO_Cntl_Msg.h \ + $(ACE_ROOT)/ace/Message_Queue_T.h \ + $(ACE_ROOT)/ace/Message_Queue_T.i \ + $(ACE_ROOT)/ace/Message_Queue_T.cpp \ + $(ACE_ROOT)/ace/Message_Queue.i \ + $(ACE_ROOT)/ace/WFMO_Reactor.i \ + $(TAO_ROOT)/tao/ORB_Core.i \ + $(ACE_ROOT)/ace/Dynamic_Service.h \ + $(ACE_ROOT)/ace/Dynamic_Service.cpp \ + $(TAO_ROOT)/tao/Operation_Table.h \ + $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ + $(TAO_ROOT)/tao/Invocation.h \ + $(TAO_ROOT)/tao/Reply_Dispatcher.h \ + $(TAO_ROOT)/tao/Reply_Dispatcher.i \ + $(TAO_ROOT)/tao/Invocation.i \ + $(TAO_ROOT)/tao/InconsistentTypeCodeC.h \ + $(TAO_ROOT)/tao/DynAny_i.h \ + $(TAO_ROOT)/tao/Union.h \ + $(TAO_ROOT)/tao/ValueBase.h \ + $(TAO_ROOT)/tao/ValueBase.i \ + $(TAO_ROOT)/tao/ValueFactory.h \ + $(TAO_ROOT)/tao/ValueFactory.i \ + $(TAO_ROOT)/tao/ObjectIDList.h \ + $(TAO_ROOT)/tao/ObjectIDList.i \ + $(TAO_ROOT)/tao/WrongTransactionC.h \ + TTestC.i TTestS_T.h TTestS_T.i TTestS_T.cpp TTestS.i \ + $(ACE_ROOT)/ace/Arg_Shifter.h \ + $(ACE_ROOT)/ace/Read_Buffer.h \ + $(ACE_ROOT)/ace/Read_Buffer.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/orbsvcs_export.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingC.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposC.i \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicC.h \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicC.i \ + Simple_Dynamic.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Trader/Trader_Utils.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Trader/Trader.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingS.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingReposS.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS.h \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS_T.h \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS_T.i \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS_T.cpp \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosTradingDynamicS.i \ - Simple_Dynamic.cpp + Simple_Dynamic.cpp Offer_Importer.h \ + $(ACE_ROOT)/ace/Task_T.h \ + $(ACE_ROOT)/ace/Task.h \ + $(ACE_ROOT)/ace/Task.i \ + $(ACE_ROOT)/ace/Task_T.i \ + $(ACE_ROOT)/ace/Task_T.cpp \ + $(ACE_ROOT)/ace/Module.h \ + $(ACE_ROOT)/ace/Module.i \ + $(ACE_ROOT)/ace/Module.cpp \ + $(ACE_ROOT)/ace/Stream_Modules.h \ + $(ACE_ROOT)/ace/Stream_Modules.i \ + $(ACE_ROOT)/ace/Stream_Modules.cpp \ + Service_Type_Exporter.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Trader/Service_Type_Repository.h # IF YOU PUT ANYTHING HERE IT WILL GO AWAY diff --git a/TAO/tao/Acceptor_Registry.cpp b/TAO/tao/Acceptor_Registry.cpp index 7af569dd697..9906e5a9cc0 100644 --- a/TAO/tao/Acceptor_Registry.cpp +++ b/TAO/tao/Acceptor_Registry.cpp @@ -138,7 +138,7 @@ TAO_Acceptor_Registry::open (TAO_ORB_Core *orb_core) if (addrs [addrs.length () - 1] == '/') // Get rid of trailing '/'. - addrs [addrs.length () - 1] = '\0'; + addrs [addrs.length () - 1] = '\0'; char *last_addr=0; addr_str.reset (addrs.rep ()); @@ -168,22 +168,29 @@ TAO_Acceptor_Registry::open (TAO_ORB_Core *orb_core) (*factory)->factory ()->make_acceptor (); if (acceptor != 0) { + // add acceptor to list. + this->acceptors_.insert (acceptor); + // Check if an "N.n@" version prefix was // specified. // @@ For now, we just drop the version prefix. // At some point in the future it may become // useful. + int major = -1; + int minor = -1; const char *temp_iop = address.c_str (); - if (isdigit (temp_iop[0]) - && temp_iop[1] == '.' - && isdigit (temp_iop[2]) + if (isdigit (temp_iop[0]) + && temp_iop[1] == '.' + && isdigit (temp_iop[2]) && temp_iop[3] == '@') - address = address.substring (4); - - // add acceptor to list. - this->acceptors_.insert (acceptor); + { + major = temp_iop[0] - '0'; + minor = temp_iop[2] - '0'; + address = address.substring (4); + } if (acceptor->open (orb_core, + major, minor, address) == -1) return -1; break; diff --git a/TAO/tao/Environment.h b/TAO/tao/Environment.h index 86eb048700e..86516d652c3 100644 --- a/TAO/tao/Environment.h +++ b/TAO/tao/Environment.h @@ -136,12 +136,12 @@ class TAO_Export CORBA_Environment_var // Provide for automatic storage deallocation on going out of // scope. public: - CORBA_Environment_var (void); + CORBA_Environment_var (void); // default constructor CORBA_Environment_var (CORBA_Environment_ptr); - CORBA_Environment_var (const CORBA_Environment_var &); + CORBA_Environment_var (const CORBA_Environment_var &); // copy constructor - ~CORBA_Environment_var (void); + ~CORBA_Environment_var (void); // destructor CORBA_Environment_var &operator= (CORBA_Environment_ptr); diff --git a/TAO/tao/GIOP.cpp b/TAO/tao/GIOP.cpp index 9353c3250da..8d97238fe8b 100644 --- a/TAO/tao/GIOP.cpp +++ b/TAO/tao/GIOP.cpp @@ -99,23 +99,17 @@ ACE_TIMEPROBE_EVENT_DESCRIPTIONS (TAO_GIOP_Timeprobe_Description, #endif /* ACE_ENABLE_TIMEPROBES */ -static const char digits [] = "0123456789ABCD"; -static const char *names [] = -{ - "Request", - "Reply", - "CancelRequest", - "LocateRequest", - "LocateReply", - "CloseConnection", - "MessageError" - "Fragment" -}; - -TAO_GIOP_MessageHeader::TAO_GIOP_MessageHeader (void) +TAO_GIOP_Message_State::TAO_GIOP_Message_State (TAO_ORB_Core* orb_core) : byte_order (TAO_ENCAP_BYTE_ORDER), + more_fragments (0), message_type (TAO_GIOP::MessageError), - message_size (0) + message_size (0), + current_offset (0), + cdr (orb_core->create_input_cdr_data_block (ACE_CDR::DEFAULT_BUFSIZE), + TAO_ENCAP_BYTE_ORDER, + orb_core), + fragments_begin (0), + fragments_end (0) { // Note that we need to use the ASCII values so the code will be // portable to platforms that use different character sets, such as @@ -125,34 +119,123 @@ TAO_GIOP_MessageHeader::TAO_GIOP_MessageHeader (void) this->magic[2] = 0x4f; // 'O' this->magic[3] = 0x50; // 'P' - giop_version.major = - TAO_GIOP_MessageHeader::MY_MAJOR; - giop_version.minor = - TAO_GIOP_MessageHeader::MY_MINOR; + giop_version.major = TAO_DEF_GIOP_MAJOR; + giop_version.minor = TAO_DEF_GIOP_MINOR; } +int +TAO_GIOP_Message_State::is_complete () +{ + if (this->message_size != this->current_offset) + return 0; + + if (this->more_fragments) + { + // This is only one fragment of the complete Request.... + ACE_Message_Block* current = + this->cdr.steal_contents (); + if (this->fragments_begin == 0) + { + this->first_fragment_byte_order = this->byte_order; + this->first_fragment_giop_version = this->giop_version; + this->first_fragment_message_type = this->message_type; + this->fragments_end = this->fragments_begin = current; + this->reset (); + return 0; + } + + return this->append_fragment (current); + } + + if (this->fragments_begin != 0) + { + // This is the last message, but we must defragment before + // sending + + ACE_Message_Block* current = + this->cdr.steal_contents (); + if (this->append_fragment (current) == -1) + return -1; + + // Copy the entire chain into the input CDR..... + this->cdr.reset (this->fragments_begin, + this->first_fragment_byte_order); + ACE_Message_Block::release (this->fragments_begin); + this->fragments_begin = 0; + this->fragments_end = 0; + + this->byte_order = this->first_fragment_byte_order; + this->giop_version = this->first_fragment_giop_version; + this->message_type = this->first_fragment_message_type; + + /*FALLTHROUGH*/ + } + // else + // { + // This message has no more fragments, and there where no fragments + // before it, just return... notice that this->cdr has the right + // contents. + // } + + return 1; +} + +int +TAO_GIOP_Message_State::append_fragment (ACE_Message_Block* current) +{ + this->fragments_end->cont (current); + this->fragments_end = this->fragments_end->cont (); + + if (this->first_fragment_byte_order != this->byte_order + || this->first_fragment_giop_version.major != this->giop_version.major + || this->first_fragment_giop_version.minor != this->giop_version.minor) + { + // Yes, print it out in all debug levels! + ACE_DEBUG ((LM_DEBUG, + "TAO (%P|%t) incompatible fragments:\n" + " Different GIOP versions or byte order\n")); + this->reset (); + return -1; + } + this->reset (); + return 0; +} + + +// **************************************************************** + +static const char digits [] = "0123456789ABCD"; +static const char *names [] = +{ + "Request", + "Reply", + "CancelRequest", + "LocateRequest", + "LocateReply", + "CloseConnection", + "MessageError" + "Fragment" +}; + void TAO_GIOP::dump_msg (const char *label, const u_char *ptr, size_t len) { - const int TAO_GIOP_VERSION_MAJOR_OFFSET = 4; - const int TAO_GIOP_VERSION_MINOR_OFFSET = 5; - const int TAO_GIOP_MESSAGE_TYPE_OFFSET = 7; - if (TAO_debug_level >= 5) { const char *message_name = "UNKNOWN MESSAGE"; u_long slot = ptr[TAO_GIOP_MESSAGE_TYPE_OFFSET]; if (slot < sizeof (names)/sizeof(names[0])) message_name = names [slot]; + int byte_order = ptr[TAO_GIOP_MESSAGE_FLAGS_OFFSET] & 0x01; ACE_DEBUG ((LM_DEBUG, "%s GIOP v%c.%c msg, %d data bytes, %s endian, %s", label, digits[ptr[TAO_GIOP_VERSION_MAJOR_OFFSET]], digits[ptr[TAO_GIOP_VERSION_MINOR_OFFSET]], len - TAO_GIOP_HEADER_LEN, - (ptr[6] == TAO_ENCAP_BYTE_ORDER) ? "my" : "other", + (byte_order == TAO_ENCAP_BYTE_ORDER) ? "my" : "other", message_name)); if (ptr[TAO_GIOP_MESSAGE_TYPE_OFFSET] == TAO_GIOP::Request) @@ -245,21 +328,19 @@ operator>> (TAO_InputCDR &cdr, } CORBA::Boolean -TAO_GIOP::start_message (TAO_GIOP::Message_Type type, +TAO_GIOP::start_message (const TAO_GIOP_Version &version, + TAO_GIOP::Message_Type type, TAO_OutputCDR &msg, TAO_ORB_Core* orb_core) { if (orb_core->orb_params ()->use_lite_protocol ()) - return TAO_GIOP::start_message_lite (type, - msg); + return TAO_GIOP::start_message_lite (version, type, msg); else - return TAO_GIOP::start_message_std (type, - msg); + return TAO_GIOP::start_message_std (version, type, msg); } CORBA::Boolean -TAO_GIOP::write_request_header (const TAO_GIOP_ServiceContextList& svc_ctx, - CORBA::ULong request_id, +TAO_GIOP::write_request_header (CORBA::ULong request_id, CORBA::Boolean is_roundtrip, const TAO_opaque& key, const char *opname, @@ -268,7 +349,7 @@ TAO_GIOP::write_request_header (const TAO_GIOP_ServiceContextList& svc_ctx, TAO_ORB_Core *orb_core) { if (orb_core->orb_params ()->use_lite_protocol ()) - return TAO_GIOP::write_request_header_lite (svc_ctx, + return TAO_GIOP::write_request_header_lite (orb_core->service_context (), request_id, is_roundtrip, key, @@ -276,7 +357,7 @@ TAO_GIOP::write_request_header (const TAO_GIOP_ServiceContextList& svc_ctx, principal, msg); else - return TAO_GIOP::write_request_header_std (svc_ctx, + return TAO_GIOP::write_request_header_std (orb_core->service_context (), request_id, is_roundtrip, key, @@ -410,26 +491,27 @@ TAO_GIOP::send_message (TAO_Transport *transport, // orderly disconnect as provided by TCP. This quality of service is // required to write robust distributed systems.) -// static CORBA::Octet -static const char close_message [TAO_GIOP_HEADER_LEN] = -{ - // The following works on non-ASCII platforms, such as MVS (which - // uses EBCDIC). - 0x47, // 'G' - 0x49, // 'I' - 0x4f, // 'O' - 0x50, // 'P' - TAO_GIOP_MessageHeader::MY_MAJOR, - TAO_GIOP_MessageHeader::MY_MINOR, - TAO_ENCAP_BYTE_ORDER, - TAO_GIOP::CloseConnection, - 0, 0, 0, 0 -}; - void -TAO_GIOP::close_connection (TAO_Transport *transport, +TAO_GIOP::close_connection (const TAO_GIOP_Version& version, + TAO_Transport *transport, void *) { + // static CORBA::Octet + const char close_message [TAO_GIOP_HEADER_LEN] = + { + // The following works on non-ASCII platforms, such as MVS (which + // uses EBCDIC). + 0x47, // 'G' + 0x49, // 'I' + 0x4f, // 'O' + 0x50, // 'P' + version.major, + version.minor, + TAO_ENCAP_BYTE_ORDER, + TAO_GIOP::CloseConnection, + 0, 0, 0, 0 + }; + // It's important that we use a reliable shutdown after we send this // message, so we know it's received. // @@ -469,26 +551,28 @@ TAO_GIOP::close_connection (TAO_Transport *transport, // // NOTE that IIOP will still benefit from TCP's orderly disconnect. -static const char -error_message [TAO_GIOP_HEADER_LEN] = -{ - // The following works on non-ASCII platforms, such as MVS (which - // uses EBCDIC). - 0x47, // 'G' - 0x49, // 'I' - 0x4f, // 'O' - 0x50, // 'P' - TAO_GIOP_MessageHeader::MY_MAJOR, - TAO_GIOP_MessageHeader::MY_MINOR, - TAO_ENCAP_BYTE_ORDER, - TAO_GIOP::MessageError, - 0, 0, 0, 0 -}; - void -TAO_GIOP::send_error (TAO_Transport *transport) +TAO_GIOP::send_error (const TAO_GIOP_Version &version, + TAO_Transport *transport) { - // @@ How does this works with GIOP lite? + const char + error_message [TAO_GIOP_HEADER_LEN] = + { + // The following works on non-ASCII platforms, such as MVS (which + // uses EBCDIC). + 0x47, // 'G' + 0x49, // 'I' + 0x4f, // 'O' + 0x50, // 'P' + version.major, + version.minor, + TAO_ENCAP_BYTE_ORDER, + TAO_GIOP::MessageError, + 0, 0, 0, 0 + }; + + // @@ Q: How does this works with GIOP lite? + // A: It doesn't TAO_GIOP::dump_msg ("send_error", (const u_char *) error_message, @@ -575,7 +659,7 @@ TAO_GIOP::convert_CORBA_to_GIOP_exception (CORBA::exception_type corba_type) int TAO_GIOP::read_header (TAO_Transport *transport, TAO_ORB_Core *orb_core, - TAO_GIOP_MessageHeader &header, + TAO_GIOP_Message_State &state, CORBA::ULong &header_size, TAO_InputCDR &input) { @@ -610,28 +694,27 @@ TAO_GIOP::read_header (TAO_Transport *transport, if (TAO_GIOP::parse_header (orb_core, input, - header) == -1) - return -1; - else - return header_size; + state) == -1) + { + TAO_GIOP::send_error (state.giop_version, transport); + return -1; + } + return header_size; } int TAO_GIOP::handle_input (TAO_Transport *transport, TAO_ORB_Core *orb_core, - TAO_GIOP_MessageHeader &header, - CORBA::ULong ¤t_offset, - TAO_InputCDR& input) + TAO_GIOP_Message_State &state) { - if (header.message_size == 0) + if (state.header_received () == 0) { - current_offset = 0; CORBA::ULong header_size; if (TAO_GIOP::read_header (transport, orb_core, - header, + state, header_size, - input) == -1) + state.cdr) == -1) { if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, @@ -640,8 +723,8 @@ TAO_GIOP::handle_input (TAO_Transport *transport, return -1; } - if (input.grow (header_size + - header.message_size) == -1) + if (state.cdr.grow (header_size + + state.message_size) == -1) { if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, @@ -653,14 +736,14 @@ TAO_GIOP::handle_input (TAO_Transport *transport, // Growing the buffer may have reset the rd_ptr(), but we want // to leave it just after the GIOP header (that was parsed // already); - input.skip_bytes (header_size); + state.cdr.skip_bytes (header_size); } size_t missing_data = - header.message_size - current_offset; + state.message_size - state.current_offset; ssize_t n = TAO_GIOP::read_buffer (transport, - input.rd_ptr () + current_offset, + state.cdr.rd_ptr () + state.current_offset, missing_data); if (n == -1) { @@ -681,9 +764,9 @@ TAO_GIOP::handle_input (TAO_Transport *transport, return -1; } - current_offset += n; + state.current_offset += n; - if (current_offset == header.message_size) + if (state.current_offset == state.message_size) { if (TAO_debug_level >= 5) { @@ -691,29 +774,28 @@ TAO_GIOP::handle_input (TAO_Transport *transport, if (orb_core->orb_params ()->use_lite_protocol ()) header_len = TAO_GIOP_LITE_HEADER_LEN; - char *buf = input.rd_ptr (); + char *buf = state.cdr.rd_ptr (); buf -= header_len; - size_t msg_len = input.length () + header_len; + size_t msg_len = state.cdr.length () + header_len; TAO_GIOP::dump_msg ("recv", ACE_reinterpret_cast (u_char *, buf), msg_len); } - return 1; } - return 0; + + return state.is_complete (); } int TAO_GIOP::parse_reply (TAO_Transport *transport, TAO_ORB_Core *orb_core, - TAO_InputCDR &input, - const TAO_GIOP_MessageHeader &header, + TAO_GIOP_Message_State &state, TAO_GIOP_ServiceContextList &reply_ctx, CORBA::ULong &request_id, CORBA::ULong &reply_status) { - switch (header.message_type) + switch (state.message_type) { case TAO_GIOP::Request: // In GIOP 1.0 and GIOP 1.1 this is an error, but it is @@ -740,11 +822,15 @@ TAO_GIOP::parse_reply (TAO_Transport *transport, case TAO_GIOP::Reply: // Handle after the switch. break; + + case TAO_GIOP::Fragment: + // Never happens: + break; } // For GIOP 1.0 and 1.1 the reply_ctx comes first: // @@ Use <header.giop_version> to make this work with GIOP 1.2 - if ((input >> reply_ctx) == 0) + if ((state.cdr >> reply_ctx) == 0) { if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, @@ -754,7 +840,7 @@ TAO_GIOP::parse_reply (TAO_Transport *transport, } // Read the request id - if (!input.read_ulong (request_id)) + if (!state.cdr.read_ulong (request_id)) { if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, @@ -766,7 +852,7 @@ TAO_GIOP::parse_reply (TAO_Transport *transport, // and the reply status type. status can be NO_EXCEPTION, // SYSTEM_EXCEPTION, USER_EXCEPTION, LOCATION_FORWARD or (on GIOP // 1.2) LOCATION_FORWARD_PERM - if (!input.read_ulong (reply_status)) + if (!state.cdr.read_ulong (reply_status)) { if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, @@ -777,13 +863,11 @@ TAO_GIOP::parse_reply (TAO_Transport *transport, return 0; } -// @@ Carlos, this method is rather large. Is it possible to break it -// up a bit? void TAO_GIOP::process_server_message (TAO_Transport *transport, TAO_ORB_Core *orb_core, TAO_InputCDR &input, - const TAO_GIOP_MessageHeader &header) + const TAO_GIOP_Message_State &state) { char repbuf[ACE_CDR::DEFAULT_BUFSIZE]; #if defined(ACE_HAS_PURIFY) @@ -800,12 +884,9 @@ TAO_GIOP::process_server_message (TAO_Transport *transport, orb_core->to_iso8859 (), orb_core->to_unicode ()); - CORBA::Boolean response_required = 0; - CORBA::ULong request_id = 0; - TAO_MINIMAL_TIMEPROBE (TAO_SERVER_CONNECTION_HANDLER_RECEIVE_REQUEST_END); - switch (header.message_type) + switch (state.message_type) { case TAO_GIOP::Request: // The following two routines will either raise an exception @@ -814,8 +895,7 @@ TAO_GIOP::process_server_message (TAO_Transport *transport, orb_core, input, output, - response_required, - request_id); + state.giop_version); break; case TAO_GIOP::LocateRequest: @@ -823,8 +903,7 @@ TAO_GIOP::process_server_message (TAO_Transport *transport, orb_core, input, output, - response_required, - request_id); + state.giop_version); break; case TAO_GIOP::MessageError: @@ -843,7 +922,7 @@ TAO_GIOP::process_server_message (TAO_Transport *transport, if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, "TAO (%P|%t) Illegal message received by server\n")); - TAO_GIOP::send_error (transport); + TAO_GIOP::send_error (state.giop_version, transport); break; } TAO_MINIMAL_TIMEPROBE (TAO_SERVER_CONNECTION_HANDLER_HANDLE_INPUT_END); @@ -854,26 +933,31 @@ TAO_GIOP::process_server_request (TAO_Transport *transport, TAO_ORB_Core* orb_core, TAO_InputCDR &input, TAO_OutputCDR &output, - CORBA::Boolean &response_required, - CORBA::ULong &request_id) + const TAO_GIOP_Version& version) { + CORBA::ULong request_id; + CORBA::ULong response_required; CORBA::Environment &ACE_TRY_ENV = TAO_default_environment (); ACE_TRY { // This will extract the request header, set <response_required> // as appropriate. + + int parse_error; TAO_GIOP_ServerRequest request (input, output, orb_core, - ACE_TRY_ENV); - ACE_TRY_CHECK; + version, + parse_error); - // The request_id_ field in request will be 0 if something went - // wrong before it got a chance to read it out. request_id = request.request_id (); - response_required = request.response_expected (); + if (parse_error != 0) + ACE_TRY_THROW (CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, + CORBA::COMPLETED_NO)); + + #if !defined (TAO_NO_IOR_TABLE) const CORBA::Octet *object_key = request.object_key ().get_buffer (); @@ -928,7 +1012,8 @@ TAO_GIOP::process_server_request (TAO_Transport *transport, #if !defined (TAO_HAS_MINIMUM_CORBA) ACE_CATCH (PortableServer::ForwardRequest, forward_request) { - TAO_GIOP::start_message (TAO_GIOP::Reply, + TAO_GIOP::start_message (version, + TAO_GIOP::Reply, output, orb_core); TAO_GIOP_ServiceContextList resp_ctx; @@ -950,7 +1035,8 @@ TAO_GIOP::process_server_request (TAO_Transport *transport, { if (response_required) { - if (TAO_GIOP::send_reply_exception (transport, + if (TAO_GIOP::send_reply_exception (version, + transport, orb_core, request_id, &ACE_ANY_EXCEPTION) == -1) @@ -998,7 +1084,8 @@ TAO_GIOP::process_server_request (TAO_Transport *transport, (TAO_UNHANDLED_SERVER_CXX_EXCEPTION, 0), CORBA::COMPLETED_MAYBE); - if (TAO_GIOP::send_reply_exception (transport, + if (TAO_GIOP::send_reply_exception (version, + transport, orb_core, request_id, &exception) == -1) @@ -1042,8 +1129,7 @@ TAO_GIOP::process_server_locate (TAO_Transport *transport, TAO_ORB_Core* orb_core, TAO_InputCDR &input, TAO_OutputCDR &output, - CORBA::Boolean &response_required, - CORBA::ULong &request_id) + const TAO_GIOP_Version& version) { // TAO_FUNCTION_PP_TIMEPROBE (TAO_SERVER_CONNECTION_HANDLER_HANDLE_LOCATE_START); @@ -1054,6 +1140,9 @@ TAO_GIOP::process_server_locate (TAO_Transport *transport, TAO_GIOP_LocateStatusType status = TAO_GIOP_UNKNOWN_OBJECT; CORBA::Object_var forward_location_var; + CORBA::ULong request_id; + CORBA::Boolean response_required = 1; + CORBA::Environment &ACE_TRY_ENV = TAO_default_environment (); ACE_TRY { @@ -1061,7 +1150,6 @@ TAO_GIOP::process_server_locate (TAO_Transport *transport, ACE_TRY_CHECK; request_id = locateRequestHeader.request_id; - response_required = 1; #if !defined (TAO_NO_IOR_TABLE) @@ -1120,13 +1208,18 @@ TAO_GIOP::process_server_locate (TAO_Transport *transport, locateRequestHeader.object_key.get_buffer (), 0); + int parse_error; TAO_GIOP_ServerRequest serverRequest (locateRequestHeader.request_id, response_required, tmp_key, "_non_existent", dummy_output, orb_core, - ACE_TRY_ENV); + version, + parse_error); + if (parse_error != 0) + ACE_TRY_THROW (CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, + CORBA::COMPLETED_NO)); orb_core->object_adapter ()->dispatch_servant (serverRequest.object_key (), serverRequest, @@ -1194,7 +1287,8 @@ TAO_GIOP::process_server_locate (TAO_Transport *transport, ACE_ENDTRY; // Create the response. - TAO_GIOP::start_message (TAO_GIOP::LocateReply, + TAO_GIOP::start_message (version, + TAO_GIOP::LocateReply, output, orb_core); output.write_ulong (locateRequestHeader.request_id); @@ -1222,7 +1316,8 @@ TAO_GIOP::process_server_locate (TAO_Transport *transport, } int -TAO_GIOP::send_reply_exception (TAO_Transport *transport, +TAO_GIOP::send_reply_exception (const TAO_GIOP_Version &version, + TAO_Transport *transport, TAO_ORB_Core* orb_core, CORBA::ULong request_id, CORBA::Exception *x) @@ -1245,7 +1340,8 @@ TAO_GIOP::send_reply_exception (TAO_Transport *transport, orb_core->to_unicode ()); // Construct a REPLY header. - TAO_GIOP::start_message (TAO_GIOP::Reply, + TAO_GIOP::start_message (version, + TAO_GIOP::Reply, output, orb_core); @@ -1301,7 +1397,8 @@ TAO_GIOP::send_reply_exception (TAO_Transport *transport, } CORBA::Boolean -TAO_GIOP::start_message_std (TAO_GIOP::Message_Type type, +TAO_GIOP::start_message_std (const TAO_GIOP_Version &version, + TAO_GIOP::Message_Type type, TAO_OutputCDR &msg) { msg.reset (); @@ -1309,7 +1406,7 @@ TAO_GIOP::start_message_std (TAO_GIOP::Message_Type type, // if (msg.size () < TAO_GIOP_HEADER_LEN) // return 0; - static CORBA::Octet header[] = + static CORBA::Octet magic[] = { // The following works on non-ASCII platforms, such as MVS (which // uses EBCDIC). @@ -1317,15 +1414,13 @@ TAO_GIOP::start_message_std (TAO_GIOP::Message_Type type, 0x49, // 'I' 0x4f, // 'O' 0x50, // 'P' - TAO_GIOP_MessageHeader::MY_MAJOR, - TAO_GIOP_MessageHeader::MY_MINOR, - TAO_ENCAP_BYTE_ORDER }; - static int header_size = - sizeof(header)/sizeof(header[0]); - msg.write_octet_array (header, - header_size); + static int magic_size = sizeof(magic)/sizeof(magic[0]); + msg.write_octet_array (magic, magic_size); + msg.write_octet (version.major); + msg.write_octet (version.minor); + msg.write_octet (TAO_ENCAP_BYTE_ORDER); msg.write_octet (type); // Write a dummy <size> later it is set to the right value... @@ -1336,7 +1431,8 @@ TAO_GIOP::start_message_std (TAO_GIOP::Message_Type type, } CORBA::Boolean -TAO_GIOP::start_message_lite (TAO_GIOP::Message_Type type, +TAO_GIOP::start_message_lite (const TAO_GIOP_Version &version, + TAO_GIOP::Message_Type type, TAO_OutputCDR &msg) { msg.reset (); @@ -1362,6 +1458,8 @@ TAO_GIOP::write_request_header_std (const TAO_GIOP_ServiceContextList& svc_ctx, { out_stream << svc_ctx; out_stream << request_id; + // @@ Messaging: this is where the extra synchronization information + // should be stored. out_stream << CORBA::Any::from_boolean (is_roundtrip); out_stream << key; out_stream << opname; @@ -1388,19 +1486,17 @@ TAO_GIOP::write_request_header_lite (const TAO_GIOP_ServiceContextList&, int TAO_GIOP::parse_header (TAO_ORB_Core *orb_core, TAO_InputCDR &input, - TAO_GIOP_MessageHeader& header) + TAO_GIOP_Message_State& state) { if (orb_core->orb_params ()->use_lite_protocol ()) - return TAO_GIOP::parse_header_lite (input, - header); + return TAO_GIOP::parse_header_lite (input, state); else - return TAO_GIOP::parse_header_std (input, - header); + return TAO_GIOP::parse_header_std (input, state); } int TAO_GIOP::parse_header_std (TAO_InputCDR &input, - TAO_GIOP_MessageHeader &header) + TAO_GIOP_Message_State &state) { char *buf = input.rd_ptr (); @@ -1420,55 +1516,82 @@ TAO_GIOP::parse_header_std (TAO_InputCDR &input, return -1; } -#if 0 - // @@ Nobody uses this magic number, no sense in wasting time here. - header.magic[0] = 0x47; // 'G' - header.magic[1] = 0x49; // 'I' - header.magic[2] = 0x4f; // 'O' - header.magic[3] = 0x50; // 'P' -#endif /* 0 */ - header.giop_version.major = buf[4]; - header.giop_version.minor = buf[5]; - header.byte_order = buf[6]; - header.message_type = buf[7]; - - input.reset_byte_order (header.byte_order); + state.giop_version.major = buf[TAO_GIOP_VERSION_MAJOR_OFFSET]; + state.giop_version.minor = buf[TAO_GIOP_VERSION_MINOR_OFFSET]; + + if (state.giop_version.major != TAO_DEF_GIOP_MAJOR + || state.giop_version.minor > TAO_DEF_GIOP_MINOR) + { + if (TAO_debug_level > 0) + ACE_DEBUG ((LM_DEBUG, + "TAO (%P|%t) bad version <%d.%d>\n", + state.giop_version.major, + state.giop_version.minor)); + return -1; + } + + if (state.giop_version.minor == 0) + { + state.byte_order = buf[TAO_GIOP_MESSAGE_FLAGS_OFFSET]; + if (TAO_debug_level > 2 + && state.byte_order != 0 && state.byte_order != 1) + { + ACE_DEBUG ((LM_DEBUG, + "TAO (%P|%t) invalid byte order <%d>" + " for version <1.0>\n", + state.byte_order)); + return -1; + } + } + else + { + state.byte_order = buf[TAO_GIOP_MESSAGE_FLAGS_OFFSET] & 0x01; + state.more_fragments = buf[TAO_GIOP_MESSAGE_FLAGS_OFFSET] & 0x02; + if (TAO_debug_level > 2 + && state.giop_version.minor == 1 + && (buf[TAO_GIOP_MESSAGE_FLAGS_OFFSET] & ~0x3) != 0) + { + ACE_DEBUG ((LM_DEBUG, + "TAO (%P|%t) invalid flags for <%d>" + " for version <1.1>\n", + buf[TAO_GIOP_MESSAGE_FLAGS_OFFSET])); + return -1; + } + + } + + state.message_type = buf[TAO_GIOP_MESSAGE_TYPE_OFFSET]; + + input.reset_byte_order (state.byte_order); input.skip_bytes (TAO_GIOP_MESSAGE_SIZE_OFFSET); - input.read_ulong (header.message_size); + input.read_ulong (state.message_size); if (TAO_debug_level > 2) { ACE_DEBUG ((LM_DEBUG, "TAO (%P|%t) Parsed header = <%d,%d,%d,%d,%d>\n", - header.giop_version.major, - header.giop_version.minor, - header.byte_order, - header.message_type, - header.message_size)); + state.giop_version.major, + state.giop_version.minor, + state.byte_order, + state.message_type, + state.message_size)); } return 0; } int TAO_GIOP::parse_header_lite (TAO_InputCDR &input, - TAO_GIOP_MessageHeader &header) + TAO_GIOP_Message_State &state) { char *buf = input.rd_ptr (); -#if 0 - // @@ Nobody uses this magic number, no sense in wasting time here. - header.magic[0] = 0x47; // 'G' - header.magic[1] = 0x49; // 'I' - header.magic[2] = 0x4f; // 'O' - header.magic[3] = 0x50; // 'P' -#endif /* 0 */ - header.giop_version.major = 1; - header.giop_version.minor = 0; - header.byte_order = TAO_ENCAP_BYTE_ORDER; - header.message_type = buf[4]; - - input.reset_byte_order (header.byte_order); - input.read_ulong (header.message_size); + state.giop_version.major = TAO_DEF_GIOP_MAJOR; + state.giop_version.minor = TAO_DEF_GIOP_MINOR; + state.byte_order = TAO_ENCAP_BYTE_ORDER; + state.message_type = buf[TAO_GIOP_LITE_MESSAGE_TYPE_OFFSET]; + + input.reset_byte_order (state.byte_order); + input.read_ulong (state.message_size); return 0; } diff --git a/TAO/tao/GIOP.h b/TAO/tao/GIOP.h index 8f452701e1d..ead0b055842 100644 --- a/TAO/tao/GIOP.h +++ b/TAO/tao/GIOP.h @@ -37,6 +37,7 @@ #include "tao/corbafwd.h" #include "tao/Sequence.h" +#include "tao/CDR.h" class TAO_Transport; class TAO_ORB_Core; @@ -124,59 +125,141 @@ public: TAO_opaque component_data; }; +// **************************************************************** + typedef TAO_Unbounded_Sequence<TAO_IOP_TaggedComponent> TAO_IOP_MultipleComponentProfile; -// namespace TAO_GIOP - -struct TAO_GIOP_Version +class TAO_Export TAO_GIOP_Version { + // = TITLE + // Major and Minor version number of the Inter-ORB Protocol. +public: CORBA::Octet major; + // Major version number + CORBA::Octet minor; + // Minor version number + + TAO_GIOP_Version (const TAO_GIOP_Version &src); + // Copy constructor + + TAO_GIOP_Version (CORBA::Octet maj = TAO_DEF_GIOP_MAJOR, + CORBA::Octet min = TAO_DEF_GIOP_MINOR); + // Default constructor. + + ~TAO_GIOP_Version (void); + // Destructor. + + void set_version (CORBA::Octet maj, CORBA::Octet min); + // Explicitly set the major and minor version. + + TAO_GIOP_Version &operator= (const TAO_GIOP_Version &src); + // Copy operator. + + int operator== (const TAO_GIOP_Version &src); + int operator!= (const TAO_GIOP_Version &src); + // Equality operator }; -class TAO_GIOP_MessageHeader +// **************************************************************** + +class TAO_GIOP_Message_State { // = TITLE - // This is the header sent with ever GIOP request! + // Represent the state of an incoming GIOP message. + // + // = DESCRIPTION + // As the ORB processes a GIOP messages it needs to keep track of + // how much of the message has been read, if there are any + // fragments following this message, the contents of the header, + // etc. + // Notice that it is not a direct mapping from the + // GIOP::MessageHeader IDL structure, for example, the message + // flags introduced in GIOP 1.1 are expanded in several fields. public: - - TAO_GIOP_MessageHeader (void); + TAO_GIOP_Message_State (TAO_ORB_Core* orb_core); // Constructor. + // The parameters are used to initialize the InputCDR stream + + void reset (void); + // Reset the message header state and prepare it to receive the next + // event. + // already read. + // This method will reset the header to indicate that the last + // message was procesno data (not + // event the + + int header_received (void) const; + // Has the header been received? + + int is_complete (void); + // Check if the current message is complete, adjusting the fragments + // if required... + + // = The GIOP header for the current fragment... + CORBA::Octet magic [4]; // "GIOP" + TAO_GIOP_Version giop_version; // 1.1 or 1.0 + CORBA::Octet byte_order; // 0 = big, 1 = little + CORBA::Octet more_fragments; // For GIOP 1.1 (Requests and Replys) + CORBA::Octet message_type; // MsgType above + CORBA::ULong message_size; // in byte_order! + + CORBA::ULong current_offset; + // How much of the payload has been received + + TAO_InputCDR cdr; + // This is the InputCDR that will be used to decode the message. + + ACE_Message_Block* fragments_begin; + ACE_Message_Block* fragments_end; + // The fragments are collected in a chain of message blocks (using + // the cont() field). When the complete message is received the + // chain is reassembled into <cdr> + + CORBA::Octet first_fragment_byte_order; + // The byte order for the the first fragment + // @@ The current implementation cannot handle fragments with + // different byte orders, this should not be a major problem + // because: + // 1) It is unlikely that we are going to receive fragments. + // 2) The spec *seems* to allow different byte_orders, but it is + // unlikely that any ORB will do that. + // 3) Even if we allowed that at this layer the CDR classes are + // not prepared to handle that. + + TAO_GIOP_Version first_fragment_giop_version; + // The GIOP version for the first fragment + // @@ Same as above, all GIOP versions must match. + + CORBA::Octet first_fragment_message_type; + // If the messages are chained this represents the message type for + // the *complete* message (remember that the last message will be + // fragment and the upper level needs to know if it is a request, + // locate request or what). - // version numbers - enum - { - // = DESCRIPTION - // GIOP protocol version 1.0 information. - - MY_MAJOR = 1, - MY_MINOR = 0 - }; - - CORBA::Octet magic [4]; // "GIOP" - TAO_GIOP_Version giop_version; - CORBA::Octet byte_order; // 0 = big, 1 = little - CORBA::Octet message_type; // MsgType above - CORBA::ULong message_size; // in byte_order! +private: + int append_fragment (ACE_Message_Block* current); + // Append <current> to the list of fragments + // Also resets the state, because the current message was consumed. }; -// defined by GIOP 1.0 protocol @@ Is this portable? The structure -// above could have some padding on machines with absurd padding -// requirements (like 8 byte boundaries); hence the size of it may not -// match the size of the header on the wire. -//#define TAO_GIOP_HEADER_LEN sizeof (TAO_GIOP_MessageHeader) -// @@ - I made this explicitly 12 (ASG) +// The GIOP message header size #define TAO_GIOP_HEADER_LEN 12 // The offset the message_size field inside the GIOP HEADER +#define TAO_GIOP_VERSION_MAJOR_OFFSET 4 +#define TAO_GIOP_VERSION_MINOR_OFFSET 5 +#define TAO_GIOP_MESSAGE_FLAGS_OFFSET 6 +#define TAO_GIOP_MESSAGE_TYPE_OFFSET 7 #define TAO_GIOP_MESSAGE_SIZE_OFFSET 8 // The IIOP Lite header length and the offset of the message size // field in it. #define TAO_GIOP_LITE_HEADER_LEN 5 #define TAO_GIOP_LITE_MESSAGE_SIZE_OFFSET 0 +#define TAO_GIOP_LITE_MESSAGE_TYPE_OFFSET 4 // Support for Implicit ORB Service Context. typedef CORBA::ULong TAO_GIOP_ServiceID; @@ -192,6 +275,8 @@ enum // This is where our RIOP service ID will be defined... }; +// namespace TAO_GIOP + class TAO_GIOP_ServiceContext { // = TITLE @@ -321,17 +406,18 @@ public: Fragment = 7 // by both. }; - static void close_connection (TAO_Transport *transport, + static void close_connection (const TAO_GIOP_Version &version, + TAO_Transport *transport, void *ctx); // Close a connection, first sending GIOP::CloseConnection. - static CORBA::Boolean start_message (TAO_GIOP::Message_Type t, + static CORBA::Boolean start_message (const TAO_GIOP_Version &version, + TAO_GIOP::Message_Type t, TAO_OutputCDR &msg, TAO_ORB_Core* orb_core); // Build the header for a message of type <t> into stream <msg>. - static CORBA::Boolean write_request_header (const TAO_GIOP_ServiceContextList& svc_ctx, - CORBA::ULong request_id, + static CORBA::Boolean write_request_header (CORBA::ULong request_id, CORBA::Boolean is_roundtrip, const TAO_opaque& key, const char* opname, @@ -355,7 +441,8 @@ public: size_t len); // Print out a message header. - static void send_error (TAO_Transport *transport); + static void send_error (const TAO_GIOP_Version &version, + TAO_Transport *transport); // Send an error message back to a caller. static ssize_t read_buffer (TAO_Transport *transport, @@ -369,33 +456,29 @@ public: static int read_header (TAO_Transport *transport, TAO_ORB_Core *orb_core, - TAO_GIOP_MessageHeader &header, + TAO_GIOP_Message_State &state, CORBA::ULong &header_size, TAO_InputCDR &input); static int handle_input (TAO_Transport *transport, TAO_ORB_Core *orb_core, - TAO_GIOP_MessageHeader &header, - CORBA::ULong ¤t_offset, - TAO_InputCDR& input); + TAO_GIOP_Message_State &state); static int parse_reply (TAO_Transport *transport, TAO_ORB_Core *orb_core, - TAO_InputCDR& input, - const TAO_GIOP_MessageHeader& header, + TAO_GIOP_Message_State& state, TAO_GIOP_ServiceContextList& reply_ctx, CORBA::ULong& request_id, CORBA::ULong& reply_status); static void process_server_message (TAO_Transport *transport, TAO_ORB_Core *orb_core, - TAO_InputCDR &cdr, - const TAO_GIOP_MessageHeader& header); + TAO_InputCDR &input, + const TAO_GIOP_Message_State& state); static void process_server_request (TAO_Transport *transport, TAO_ORB_Core* orb_core, TAO_InputCDR &input, TAO_OutputCDR &output, - CORBA::Boolean &response_required, - CORBA::ULong &request_id); + const TAO_GIOP_Version& version); // A request was received on the server side. // <transport> is the source of the message (and thus where the // replies should be sent). @@ -409,8 +492,7 @@ public: TAO_ORB_Core* orb_core, TAO_InputCDR &input, TAO_OutputCDR &output, - CORBA::Boolean &response_required, - CORBA::ULong &request_id); + const TAO_GIOP_Version& version); // A LocateRequest was received on the server side. // <transport> is the source of the message (and thus where the // replies should be sent). @@ -420,7 +502,8 @@ public: // <request_id> and <response_required> are set as part of the // message processing. - static int send_reply_exception (TAO_Transport *transport, + static int send_reply_exception (const TAO_GIOP_Version &version, + TAO_Transport *transport, TAO_ORB_Core* orb_core, CORBA::ULong request_id, CORBA::Exception *x); @@ -428,12 +511,14 @@ public: // resulted in some kind of exception. private: - static CORBA::Boolean start_message_std (TAO_GIOP::Message_Type t, + static CORBA::Boolean start_message_std (const TAO_GIOP_Version &version, + TAO_GIOP::Message_Type t, TAO_OutputCDR &msg); // Build the standard header for a message of type <t> into // stream <msg>. - static CORBA::Boolean start_message_lite (TAO_GIOP::Message_Type t, + static CORBA::Boolean start_message_lite (const TAO_GIOP_Version &version, + TAO_GIOP::Message_Type t, TAO_OutputCDR &msg); // Build the lightweight header for a message of type <t> into // stream <msg>. @@ -460,14 +545,14 @@ private: static int parse_header (TAO_ORB_Core *orb_core, TAO_InputCDR &input, - TAO_GIOP_MessageHeader& header); + TAO_GIOP_Message_State& state); // Parse the header, extracting all the relevant info. static int parse_header_std (TAO_InputCDR &input, - TAO_GIOP_MessageHeader& header); + TAO_GIOP_Message_State& state); static int parse_header_lite (TAO_InputCDR &input, - TAO_GIOP_MessageHeader& header); + TAO_GIOP_Message_State& state); }; #if defined (__ACE_INLINE__) diff --git a/TAO/tao/GIOP.i b/TAO/tao/GIOP.i index ee8855c9029..37fd00abba5 100644 --- a/TAO/tao/GIOP.i +++ b/TAO/tao/GIOP.i @@ -8,3 +8,72 @@ TAO_GIOP_LocateRequestHeader::TAO_GIOP_LocateRequestHeader (void) : request_id (0) { } + +// **************************************************************** + +ACE_INLINE +TAO_GIOP_Version::TAO_GIOP_Version (const TAO_GIOP_Version &src) + : major (src.major), + minor (src.minor) +{ +} + +ACE_INLINE +TAO_GIOP_Version::TAO_GIOP_Version (CORBA::Octet maj, CORBA::Octet min) + : major (maj), + minor (min) +{ +} + +ACE_INLINE +TAO_GIOP_Version::~TAO_GIOP_Version (void) +{ +} + +ACE_INLINE TAO_GIOP_Version & +TAO_GIOP_Version::operator= (const TAO_GIOP_Version &src) +{ + if (this == &src) + return *this; + + this->major = src.major; + this->minor = src.minor; + return *this; +} + +ACE_INLINE void +TAO_GIOP_Version::set_version (CORBA::Octet maj, CORBA::Octet min) +{ + this->major = maj; + this->minor = min; +} + +ACE_INLINE int +TAO_GIOP_Version::operator== (const TAO_GIOP_Version &src) +{ + return this->major == src.major && this->minor == src.minor; +} + +ACE_INLINE int +TAO_GIOP_Version::operator!= (const TAO_GIOP_Version &src) +{ + return !(*this == src); +} + +// **************************************************************** + +ACE_INLINE void +TAO_GIOP_Message_State::reset (void) +{ + this->message_size = 0; + this->current_offset = 0; + this->more_fragments = 0; + +} + +ACE_INLINE int +TAO_GIOP_Message_State::header_received (void) const +{ + return this->message_size != 0; +} + diff --git a/TAO/tao/GIOP_Server_Request.cpp b/TAO/tao/GIOP_Server_Request.cpp index cc377441e05..7a5edeeac61 100644 --- a/TAO/tao/GIOP_Server_Request.cpp +++ b/TAO/tao/GIOP_Server_Request.cpp @@ -40,10 +40,12 @@ ACE_TIMEPROBE_EVENT_DESCRIPTIONS (TAO_Server_Request_Timeprobe_Description, #endif /* ACE_ENABLE_TIMEPROBES */ -TAO_GIOP_ServerRequest::TAO_GIOP_ServerRequest (TAO_InputCDR &input, - TAO_OutputCDR &output, - TAO_ORB_Core *orb_core, - CORBA::Environment &env) +TAO_GIOP_ServerRequest:: + TAO_GIOP_ServerRequest (TAO_InputCDR &input, + TAO_OutputCDR &output, + TAO_ORB_Core *orb_core, + const TAO_GIOP_Version &version, + int &parse_error) : incoming_ (&input), outgoing_ (&output), response_expected_ (0), @@ -58,6 +60,7 @@ TAO_GIOP_ServerRequest::TAO_GIOP_ServerRequest (TAO_InputCDR &input, exception_ (0), exception_type_ (TAO_GIOP_NO_EXCEPTION), orb_core_ (orb_core), + version_ (version), service_info_ (), request_id_ (0), object_key_ (), @@ -65,11 +68,11 @@ TAO_GIOP_ServerRequest::TAO_GIOP_ServerRequest (TAO_InputCDR &input, { ACE_FUNCTION_TIMEPROBE (TAO_SERVER_REQUEST_START); - this->parse_header (env); + parse_error = this->parse_header (); } -void -TAO_GIOP_ServerRequest::parse_header_std (CORBA::Environment &ACE_TRY_ENV) +int +TAO_GIOP_ServerRequest::parse_header_std (void) { // Tear out the service context ... we currently ignore it, but it // should probably be passed to each ORB service as appropriate @@ -109,6 +112,8 @@ TAO_GIOP_ServerRequest::parse_header_std (CORBA::Environment &ACE_TRY_ENV) if (hdr_status) { // Do not include NULL character at the end. + // @@ This is not getting demarshaled using the codeset + // translators! this->operation_.set (input.rd_ptr (), length - 1, 0); @@ -121,13 +126,11 @@ TAO_GIOP_ServerRequest::parse_header_std (CORBA::Environment &ACE_TRY_ENV) hdr_status = input.good_bit (); } - if (!hdr_status) - ACE_THROW (CORBA::COMM_FAILURE ()); - + return hdr_status ? 0 : -1; } -void -TAO_GIOP_ServerRequest::parse_header_lite (CORBA::Environment &ACE_TRY_ENV) +int +TAO_GIOP_ServerRequest::parse_header_lite (void) { TAO_InputCDR& input = *this->incoming_; @@ -157,36 +160,37 @@ TAO_GIOP_ServerRequest::parse_header_lite (CORBA::Environment &ACE_TRY_ENV) if (hdr_status) { // Do not include NULL character at the end. + // @@ This is not getting demarshaled using the codeset + // translators! this->operation_.set (input.rd_ptr (), length - 1, 0); hdr_status = input.skip_bytes (length); } - if (!hdr_status) - ACE_THROW (CORBA::COMM_FAILURE ()); + return hdr_status ? 0 : -1; } - - -void -TAO_GIOP_ServerRequest::parse_header (CORBA::Environment &env) +int +TAO_GIOP_ServerRequest::parse_header (void) { if (this->orb_core_->orb_params ()->use_lite_protocol ()) - this->parse_header_lite (env); + return this->parse_header_lite (); else - this->parse_header_std (env); + return this->parse_header_std (); } // This constructor is used, by the locate request code -TAO_GIOP_ServerRequest::TAO_GIOP_ServerRequest (CORBA::ULong &request_id, - CORBA::Boolean &response_expected, - TAO_ObjectKey &object_key, - const ACE_CString &operation, - TAO_OutputCDR &output, - TAO_ORB_Core *orb_core, - CORBA::Environment &) +TAO_GIOP_ServerRequest:: + TAO_GIOP_ServerRequest (CORBA::ULong &request_id, + CORBA::Boolean &response_expected, + TAO_ObjectKey &object_key, + const ACE_CString &operation, + TAO_OutputCDR &output, + TAO_ORB_Core *orb_core, + const TAO_GIOP_Version &version, + int &parse_error) : operation_ (operation), incoming_ (0), outgoing_ (&output), @@ -202,11 +206,13 @@ TAO_GIOP_ServerRequest::TAO_GIOP_ServerRequest (CORBA::ULong &request_id, exception_ (0), exception_type_ (TAO_GIOP_NO_EXCEPTION), orb_core_ (orb_core), + version_ (version), service_info_ (0), request_id_ (request_id), object_key_ (object_key), requesting_principal_ (0) { + parse_error = 0; } TAO_GIOP_ServerRequest::~TAO_GIOP_ServerRequest (void) @@ -577,10 +583,11 @@ TAO_GIOP_ServerRequest::marshal (CORBA::Environment &ACE_TRY_ENV, } void -TAO_GIOP_ServerRequest::init_reply (CORBA::Environment &env) +TAO_GIOP_ServerRequest::init_reply (CORBA::Environment &ACE_TRY_ENV) { // Construct a REPLY header. - TAO_GIOP::start_message (TAO_GIOP::Reply, + TAO_GIOP::start_message (this->version_, + TAO_GIOP::Reply, *this->outgoing_, this->orb_core_); @@ -607,7 +614,12 @@ TAO_GIOP_ServerRequest::init_reply (CORBA::Environment &env) } // Any exception at all. - else if (this->exception_) + else if (this->exception_ == 0) + { + // First finish the GIOP header ... + this->outgoing_->write_ulong (TAO_GIOP_NO_EXCEPTION); + } + else { CORBA::TypeCode_ptr except_tc; @@ -620,11 +632,8 @@ TAO_GIOP_ServerRequest::init_reply (CORBA::Environment &env) // we use the any's ACE_Message_Block TAO_InputCDR cdr (this->exception_->_tao_get_cdr ()); - (void) this->outgoing_->append (except_tc, &cdr, env); + (void) this->outgoing_->append (except_tc, &cdr, ACE_TRY_ENV); } - else // Normal reply - // First finish the GIOP header ... - this->outgoing_->write_ulong (TAO_GIOP_NO_EXCEPTION); } CORBA::Object_ptr diff --git a/TAO/tao/GIOP_Server_Request.h b/TAO/tao/GIOP_Server_Request.h index 52b182a8c39..77ee397b5e1 100644 --- a/TAO/tao/GIOP_Server_Request.h +++ b/TAO/tao/GIOP_Server_Request.h @@ -34,8 +34,8 @@ public: TAO_GIOP_ServerRequest (TAO_InputCDR &input, TAO_OutputCDR &output, TAO_ORB_Core *orb_core, - CORBA_Environment &TAO_IN_ENV = - TAO_default_environment ()); + const TAO_GIOP_Version &version, + int &parse_error); // Constructor TAO_GIOP_ServerRequest (CORBA::ULong &request_id, CORBA::Boolean &response_expected, @@ -43,8 +43,8 @@ public: const ACE_CString &operation, TAO_OutputCDR &output, TAO_ORB_Core *orb_core, - CORBA_Environment &TAO_IN_ENV = - TAO_default_environment ()); + const TAO_GIOP_Version &version, + int &parse_error); virtual ~TAO_GIOP_ServerRequest (void); // Destructor. @@ -144,14 +144,14 @@ public: // get the exception type private: - void parse_header (CORBA::Environment &TAO_IN_ENV); + int parse_header (void); // Parse the request header and store the result on this object. - void parse_header_std (CORBA::Environment &TAO_IN_ENV); + int parse_header_std (void); // Parse the standard GIOP request header and store the result on // this object. - void parse_header_lite (CORBA::Environment &TAO_IN_ENV); + int parse_header_lite (void); // Parse the lightweight version of the GIOP request header and // store the result on this object. @@ -191,6 +191,10 @@ private: // A pointer to the ORB Core for the context where the request was // created. + TAO_GIOP_Version version_; + // The version for the GIOP request, the reply must have the same + // one. + TAO_GIOP_ServiceContextList service_info_; // The service context for the request (CORBA Reference?) diff --git a/TAO/tao/IIOP_Acceptor.cpp b/TAO/tao/IIOP_Acceptor.cpp index 10c14620576..05c6504e2b4 100644 --- a/TAO/tao/IIOP_Acceptor.cpp +++ b/TAO/tao/IIOP_Acceptor.cpp @@ -32,12 +32,12 @@ ACE_RCSID(tao, IIOP_Acceptor, "$Id$") TAO_IIOP_Acceptor::TAO_IIOP_Acceptor (void) : TAO_Acceptor (TAO_IOP_TAG_INTERNET_IOP), base_acceptor_ (), + version_ (TAO_DEF_GIOP_MAJOR, TAO_DEF_GIOP_MINOR), orb_core_ (0) { } // TODO = -// 1) Set the version number for IIOP for which this acceptor is is valid // 2) For V1.[1,2] there are tagged components // 3) Create multiple profiles for wild carded endpoints (may be multiple // interfaces over which we can receive requests. Thus a profile @@ -61,6 +61,7 @@ TAO_IIOP_Acceptor::create_mprofile (const TAO_ObjectKey &object_key, this->address_.get_port_number (), object_key, this->address_, + this->version_, this->orb_core_), -1); @@ -94,8 +95,13 @@ TAO_IIOP_Acceptor::close (void) int TAO_IIOP_Acceptor::open (TAO_ORB_Core *orb_core, + int major, + int minor, ACE_CString &address) { + if (major >=0 && minor >= 0) + this->version_.set_version (ACE_static_cast (CORBA::Octet,major), + ACE_static_cast (CORBA::Octet,minor)); ACE_INET_Addr addr (address.c_str ()); return this->open_i (orb_core, addr); @@ -175,7 +181,7 @@ TAO_IIOP_Acceptor::open_i (TAO_ORB_Core* orb_core, if (TAO_debug_level > 5) { ACE_DEBUG ((LM_DEBUG, - "\n\nTAO (%P|%t) IIOP_Acceptor::open_i - %p\n\n", + "\nTAO (%P|%t) IIOP_Acceptor::open_i - " "listening on: <%s:%u>\n", this->host_.c_str (), this->address_.get_port_number ())); diff --git a/TAO/tao/IIOP_Acceptor.h b/TAO/tao/IIOP_Acceptor.h index d93f475e01d..79f3d6b96e0 100644 --- a/TAO/tao/IIOP_Acceptor.h +++ b/TAO/tao/IIOP_Acceptor.h @@ -44,7 +44,10 @@ public: TAO_IIOP_Acceptor (void); // Create Acceptor object using addr. - int open (TAO_ORB_Core *orb_core, ACE_CString &address); + virtual int open (TAO_ORB_Core *orb_core, + int version_major, + int version_minor, + ACE_CString &address); // initialize acceptor for this address. virtual int open_default (TAO_ORB_Core *orb_core); @@ -91,6 +94,9 @@ private: // (0.0.0.0) then there will be possibly a different hostname for // each interface. + TAO_GIOP_Version version_; + // The GIOP version for this endpoint + TAO_ORB_Core *orb_core_; // ORB Core. }; diff --git a/TAO/tao/IIOP_Connect.cpp b/TAO/tao/IIOP_Connect.cpp index e6cec142a38..15681e34777 100644 --- a/TAO/tao/IIOP_Connect.cpp +++ b/TAO/tao/IIOP_Connect.cpp @@ -19,9 +19,6 @@ ACE_RCSID(tao, Connect, "$Id$") static const char *TAO_Connect_Timeprobe_Description[] = { - "Server_Connection_Handler::send_response - start", - "Server_Connection_Handler::send_response - end", - "Server_Connection_Handler::handle_input - start", "Server_Connection_Handler::handle_input - end", @@ -39,10 +36,7 @@ ACE_RCSID(tao, Connect, "$Id$") enum { // Timeprobe description table start key - TAO_SERVER_CONNECTION_HANDLER_SEND_RESPONSE_START = 300, - TAO_SERVER_CONNECTION_HANDLER_SEND_RESPONSE_END, - - TAO_SERVER_CONNECTION_HANDLER_HANDLE_INPUT_START, + TAO_SERVER_CONNECTION_HANDLER_HANDLE_INPUT_START = 300, TAO_SERVER_CONNECTION_HANDLER_HANDLE_INPUT_END, TAO_SERVER_CONNECTION_HANDLER_HANDLE_LOCATE_START, @@ -72,11 +66,12 @@ TAO_IIOP_Handler_Base::TAO_IIOP_Handler_Base (ACE_Thread_Manager *t) { } +// **************************************************************** + TAO_IIOP_Server_Connection_Handler::TAO_IIOP_Server_Connection_Handler (ACE_Thread_Manager *t) : TAO_IIOP_Handler_Base (t), orb_core_ (0), - tss_resources_ (0), - input_ (ACE_CDR::DEFAULT_BUFSIZE) + tss_resources_ (0) { // This constructor should *never* get called, it is just here to // make the compiler happy: the default implementation of the @@ -89,10 +84,7 @@ TAO_IIOP_Server_Connection_Handler::TAO_IIOP_Server_Connection_Handler (ACE_Thre TAO_IIOP_Server_Connection_Handler::TAO_IIOP_Server_Connection_Handler (TAO_ORB_Core *orb_core) : TAO_IIOP_Handler_Base (orb_core), orb_core_ (orb_core), - tss_resources_ (TAO_ORB_CORE_TSS_RESOURCES::instance ()), - input_ (orb_core->create_input_cdr_data_block (ACE_CDR::DEFAULT_BUFSIZE), - TAO_ENCAP_BYTE_ORDER, - orb_core) + tss_resources_ (TAO_ORB_CORE_TSS_RESOURCES::instance ()) { transport_ = new TAO_IIOP_Server_Transport (this, this->orb_core_); @@ -238,24 +230,12 @@ TAO_IIOP_Server_Connection_Handler::svc (void) return result; } -void -TAO_IIOP_Server_Connection_Handler::send_response (TAO_OutputCDR &output) -{ - TAO_FUNCTION_PP_TIMEPROBE (TAO_SERVER_CONNECTION_HANDLER_SEND_RESPONSE_START); - - TAO_GIOP::send_message (this->transport_, - output, - this->orb_core_); -} - int TAO_IIOP_Server_Connection_Handler::handle_input (ACE_HANDLE) { int result = TAO_GIOP::handle_input (this->transport (), this->orb_core_, - this->message_header_, - this->current_offset_, - this->input_); + this->transport_->message_state_); if (result == -1 && TAO_debug_level > 0) { @@ -263,17 +243,18 @@ TAO_IIOP_Server_Connection_Handler::handle_input (ACE_HANDLE) "TAO (%P|%t) - %p\n", "IIOP_Server_CH::handle_input, handle_input")); } - if (result == 1) - { - TAO_GIOP_MessageHeader header_copy = this->message_header_; - this->message_header_.message_size = 0; - TAO_GIOP::process_server_message (this->transport (), - this->orb_core_, - this->input_, - header_copy); - result = 0; - } - return result; + + if (result == 0) + return 0; + + // ACE_ASSERT (result == 1); + + TAO_GIOP::process_server_message (this->transport (), + this->orb_core_, + this->transport_->message_state_.cdr, + this->transport_->message_state_); + this->transport_->message_state_.reset (); + return 0; } // **************************************************************** diff --git a/TAO/tao/IIOP_Connect.h b/TAO/tao/IIOP_Connect.h index 8395fcad44c..c86d6e1fd97 100644 --- a/TAO/tao/IIOP_Connect.h +++ b/TAO/tao/IIOP_Connect.h @@ -130,9 +130,6 @@ public: protected: - virtual void send_response (TAO_OutputCDR &response); - // Send <response> to the client on the other end. - // = Event Handler overloads virtual int handle_input (ACE_HANDLE = ACE_INVALID_HANDLE); @@ -152,12 +149,6 @@ protected: TAO_ORB_Core_TSS_Resources *tss_resources_; // Cached tss resources of the ORB that activated this object. - - TAO_GIOP_MessageHeader message_header_; - CORBA::ULong current_offset_; - TAO_InputCDR input_; - // This keep the state of the current message, to enable - // non-blocking reads. }; #if defined (__ACE_INLINE__) diff --git a/TAO/tao/IIOP_Factory.cpp b/TAO/tao/IIOP_Factory.cpp index 5dcc786ee31..636cabeeb12 100644 --- a/TAO/tao/IIOP_Factory.cpp +++ b/TAO/tao/IIOP_Factory.cpp @@ -9,6 +9,8 @@ ACE_RCSID(tao, IIOP_Factory, "$Id$") TAO_IIOP_Protocol_Factory::TAO_IIOP_Protocol_Factory (void) + : major_ (TAO_DEF_GIOP_MAJOR), + minor_ (TAO_DEF_GIOP_MINOR) { } diff --git a/TAO/tao/IIOP_Factory.h b/TAO/tao/IIOP_Factory.h index 07f1f60a5d9..0cdbe9ee656 100644 --- a/TAO/tao/IIOP_Factory.h +++ b/TAO/tao/IIOP_Factory.h @@ -25,7 +25,6 @@ class TAO_Acceptor; class TAO_Connector; - class TAO_Export TAO_IIOP_Protocol_Factory : public TAO_Protocol_Factory { public: @@ -46,6 +45,12 @@ public: virtual TAO_Connector *make_connector (void); // create a connector + +private: + int major_; + int minor_; + // Changing the version number can be used to provide backwards + // compatibility with old clients. }; ACE_STATIC_SVC_DECLARE (TAO_IIOP_Protocol_Factory) diff --git a/TAO/tao/IIOP_Profile.cpp b/TAO/tao/IIOP_Profile.cpp index 8eb54c1e50e..fa964c2a85f 100644 --- a/TAO/tao/IIOP_Profile.cpp +++ b/TAO/tao/IIOP_Profile.cpp @@ -25,11 +25,12 @@ const char TAO_IIOP_Profile::object_key_delimiter = '/'; TAO_IIOP_Profile::TAO_IIOP_Profile (const ACE_INET_Addr &addr, const TAO_ObjectKey &object_key, + const TAO_GIOP_Version &version, TAO_ORB_Core *orb_core) : TAO_Profile (TAO_IOP_TAG_INTERNET_IOP), host_ (0), port_ (0), - version_ (DEF_IIOP_MAJOR, DEF_IIOP_MINOR), + version_ (version), object_key_ (object_key), object_addr_ (addr), hint_ (0), @@ -42,11 +43,12 @@ TAO_IIOP_Profile::TAO_IIOP_Profile (const char* host, CORBA::UShort port, const TAO_ObjectKey &object_key, const ACE_INET_Addr &addr, + const TAO_GIOP_Version &version, TAO_ORB_Core *orb_core) : TAO_Profile (TAO_IOP_TAG_INTERNET_IOP), host_ (0), port_ (port), - version_ (DEF_IIOP_MAJOR, DEF_IIOP_MINOR), + version_ (version), object_key_ (object_key), object_addr_ (addr), hint_ (0), @@ -82,7 +84,7 @@ TAO_IIOP_Profile::TAO_IIOP_Profile (const char *string, : TAO_Profile (TAO_IOP_TAG_INTERNET_IOP), host_ (0), port_ (0), - version_ (DEF_IIOP_MAJOR, DEF_IIOP_MINOR), + version_ (TAO_DEF_GIOP_MAJOR, TAO_DEF_GIOP_MINOR), object_key_ (), object_addr_ (), hint_ (0), @@ -95,7 +97,7 @@ TAO_IIOP_Profile::TAO_IIOP_Profile (TAO_ORB_Core *orb_core) : TAO_Profile (TAO_IOP_TAG_INTERNET_IOP), host_ (0), port_ (0), - version_ (DEF_IIOP_MAJOR, DEF_IIOP_MINOR), + version_ (TAO_DEF_GIOP_MAJOR, TAO_DEF_GIOP_MINOR), object_key_ (), object_addr_ (), hint_ (0), @@ -159,9 +161,9 @@ TAO_IIOP_Profile::decode (TAO_InputCDR& cdr) // XXX this doesn't actually go back and skip the whole // encapsulation... if (!(cdr.read_octet (this->version_.major) - && this->version_.major == TAO_IIOP_Profile::DEF_IIOP_MAJOR + && this->version_.major == TAO_DEF_GIOP_MAJOR && cdr.read_octet (this->version_.minor) - && this->version_.minor <= TAO_IIOP_Profile::DEF_IIOP_MINOR)) + && this->version_.minor <= TAO_DEF_GIOP_MINOR)) { if (TAO_debug_level > 0) { @@ -237,8 +239,8 @@ TAO_IIOP_Profile::parse_string (const char *string, // Skip over the "N.n@" } - if (this->version_.major != TAO_IIOP_Profile::DEF_IIOP_MAJOR || - this->version_.minor > TAO_IIOP_Profile::DEF_IIOP_MINOR) + if (this->version_.major != TAO_DEF_GIOP_MAJOR || + this->version_.minor > TAO_DEF_GIOP_MINOR) { ACE_THROW_RETURN (CORBA::MARSHAL (), -1); } @@ -490,7 +492,7 @@ TAO_IIOP_Profile::encode (TAO_OutputCDR &stream) const // CHAR describing byte order, starting the encapsulation stream.write_octet (TAO_ENCAP_BYTE_ORDER); - // IIOP::TAO_IOP_Version, two characters (version 1.0) padding + // The GIOP version stream.write_char (this->version_.major); stream.write_char (this->version_.minor); diff --git a/TAO/tao/IIOP_Profile.h b/TAO/tao/IIOP_Profile.h index be6aa11c3a1..c4d5544552f 100644 --- a/TAO/tao/IIOP_Profile.h +++ b/TAO/tao/IIOP_Profile.h @@ -20,10 +20,12 @@ #ifndef TAO_IIOP_PROFILE_H #define TAO_IIOP_PROFILE_H -#include "ace/Synch.h" -#include "ace/INET_Addr.h" #include "tao/Pluggable.h" #include "tao/Object_KeyC.h" +#include "tao/GIOP.h" + +#include "ace/Synch.h" +#include "ace/INET_Addr.h" class TAO_IIOP_Client_Connection_Handler; @@ -38,13 +40,6 @@ class TAO_Export TAO_IIOP_Profile : public TAO_Profile // This class defines the IIOP profile as specified in the CORBA // specification. public: - // = Currently, TAO supports IIOP 1.0. - enum - { - DEF_IIOP_MAJOR = 1, - DEF_IIOP_MINOR = 0 - }; - static const char object_key_delimiter; // The object key delimiter that IIOP uses or expects. @@ -53,6 +48,7 @@ public: TAO_IIOP_Profile (const ACE_INET_Addr &addr, const TAO_ObjectKey &object_key, + const TAO_GIOP_Version &version, TAO_ORB_Core *orb_core); // Profile constructor, same as above except the object_key has // already been marshaled. @@ -61,6 +57,7 @@ public: CORBA::UShort port, const TAO_ObjectKey &object_key, const ACE_INET_Addr &addr, + const TAO_GIOP_Version &version, TAO_ORB_Core *orb_core); // Profile constructor, this is the most efficient since it // doesn't require any address resolution processing. @@ -132,14 +129,10 @@ public: CORBA::UShort port (CORBA::UShort p); // Set the port number. - const TAO_IOP_Version *version (void); + const TAO_GIOP_Version& version (void) const; // Return a pointer to this profile's version. This object // maintains ownership. - const TAO_IOP_Version *version (TAO_IOP_Version *v); - // First set the version then return a pointer to it. This object - // maintains ownership. - TAO_IIOP_Client_Connection_Handler *&hint (void); // This is a hint for which connection handler to use. @@ -164,7 +157,7 @@ private: CORBA::UShort port_; // TCP port number - TAO_IOP_Version version_; + TAO_GIOP_Version version_; // IIOP version number. TAO_ObjectKey object_key_; diff --git a/TAO/tao/IIOP_Profile.i b/TAO/tao/IIOP_Profile.i index 03fd29b7202..181c534f8b8 100644 --- a/TAO/tao/IIOP_Profile.i +++ b/TAO/tao/IIOP_Profile.i @@ -44,17 +44,10 @@ TAO_IIOP_Profile::port (CORBA::UShort p) return this->port_ = p; } -ACE_INLINE const TAO_IOP_Version * -TAO_IIOP_Profile::version (void) +ACE_INLINE const TAO_GIOP_Version & +TAO_IIOP_Profile::version (void) const { - return &this->version_; -} - -ACE_INLINE const TAO_IOP_Version * -TAO_IIOP_Profile::version (TAO_IOP_Version *v) -{ - this->version_ = *v; - return &this->version_; + return this->version_; } ACE_INLINE TAO_IIOP_Client_Connection_Handler *& diff --git a/TAO/tao/IIOP_Transport.cpp b/TAO/tao/IIOP_Transport.cpp index bcd5b929ddd..45e35dac4e4 100644 --- a/TAO/tao/IIOP_Transport.cpp +++ b/TAO/tao/IIOP_Transport.cpp @@ -5,6 +5,7 @@ #include "tao/IIOP_Transport.h" #include "tao/IIOP_Connect.h" +#include "tao/IIOP_Profile.h" #include "tao/Timeprobe.h" #include "tao/CDR.h" #include "tao/Transport_Mux_Strategy.h" @@ -58,14 +59,47 @@ TAO_IIOP_Transport::~TAO_IIOP_Transport (void) { } +TAO_IIOP_Handler_Base *& +TAO_IIOP_Transport::handler (void) +{ + return this->handler_; +} + +int +TAO_IIOP_Transport::idle (void) +{ + return this->handler_->idle(); +} + +void +TAO_IIOP_Transport::close_connection (void) +{ + this->handler_->handle_close (); +} + +ACE_HANDLE +TAO_IIOP_Transport::handle (void) +{ + return this->handler_->get_handle (); +} + +// **************************************************************** + TAO_IIOP_Server_Transport:: TAO_IIOP_Server_Transport (TAO_IIOP_Server_Connection_Handler *handler, TAO_ORB_Core* orb_core) : TAO_IIOP_Transport (handler, orb_core), - server_handler_ (handler) + server_handler_ (handler), + message_state_ (orb_core) { } +TAO_IIOP_Server_Transport::~TAO_IIOP_Server_Transport (void) +{ +} + +// **************************************************************** + TAO_IIOP_Client_Transport:: TAO_IIOP_Client_Transport (TAO_IIOP_Client_Connection_Handler *handler, TAO_ORB_Core *orb_core) @@ -75,10 +109,6 @@ TAO_IIOP_Client_Transport:: { } -TAO_IIOP_Server_Transport::~TAO_IIOP_Server_Transport (void) -{ -} - TAO_IIOP_Client_Transport::~TAO_IIOP_Client_Transport (void) { } @@ -89,34 +119,84 @@ TAO_IIOP_Client_Transport::client_handler (void) return this->client_handler_; } -TAO_IIOP_Server_Connection_Handler * -TAO_IIOP_Server_Transport::server_handler (void) +void +TAO_IIOP_Client_Transport:: + start_request (TAO_ORB_Core *orb_core, + const TAO_Profile* pfile, + const char* opname, + CORBA::ULong request_id, + CORBA::Boolean is_roundtrip, + TAO_OutputCDR &output, + CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) { - return this->server_handler_; -} + const TAO_IIOP_Profile* profile = + ACE_dynamic_cast(const TAO_IIOP_Profile*,pfile); -TAO_IIOP_Handler_Base *& -TAO_IIOP_Transport::handler (void) -{ - return this->handler_; -} + // Obtain object key. + const TAO_ObjectKey& key = profile->object_key (); -int -TAO_IIOP_Transport::idle (void) -{ - return this->handler_->idle(); + // @@ This should be implemented in the transport object, which + // would query the profile to obtain the version... + if (TAO_GIOP::start_message (profile->version (), + TAO_GIOP::Request, + output, + orb_core) == 0) + ACE_THROW (CORBA::MARSHAL ()); + + // Then fill in the rest of the RequestHeader + // + // The first element of header is service context list; + // transactional context would be acquired here using the + // transaction service APIs. Other kinds of context are as yet + // undefined. + // + // Last element of request header is the principal; no portable way + // to get it, we just pass empty principal (convention: indicates + // "anybody"). Steps upward in security include passing an + // unverified user ID, and then verifying the message (i.e. a dummy + // service context entry is set up to hold a digital signature for + // this message, then patched shortly before it's sent). + static CORBA::Principal_ptr principal = 0; + + if (TAO_GIOP::write_request_header (request_id, + is_roundtrip, + key, + opname, + principal, + output, + orb_core) == 0) + ACE_THROW (CORBA::MARSHAL ()); } void -TAO_IIOP_Transport::close_connection (void) +TAO_IIOP_Client_Transport:: + start_locate (TAO_ORB_Core *orb_core, + const TAO_Profile* pfile, + CORBA::ULong request_id, + TAO_OutputCDR &output, + CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) { - this->handler_->handle_close (); -} + const TAO_IIOP_Profile* profile = + ACE_dynamic_cast(const TAO_IIOP_Profile*,pfile); -ACE_HANDLE -TAO_IIOP_Transport::handle (void) -{ - return this->handler_->get_handle (); + // Obtain object key. + const TAO_ObjectKey& key = profile->object_key (); + + // @@ This should be implemented in the transport object, which + // would query the profile to obtain the version... + if (TAO_GIOP::start_message (profile->version (), + TAO_GIOP::Request, + output, + orb_core) == 0) + ACE_THROW (CORBA::MARSHAL ()); + + + if (TAO_GIOP::write_locate_request_header (this->request_id (), + key, + output) != 0) + ACE_THROW (CORBA::MARSHAL ()); } int @@ -167,13 +247,12 @@ TAO_IIOP_Client_Transport::handle_client_input (int block) // removed. // Do I make any sense? - TAO_InputCDR* cdr = this->tms_->get_cdr_stream (); + TAO_GIOP_Message_State* message_state = + this->tms_->get_message_state (); int result = TAO_GIOP::handle_input (this, this->orb_core_, - this->message_header_, - this->current_offset_, - *cdr); + *message_state); if (result == -1) { if (TAO_debug_level > 0) @@ -187,17 +266,13 @@ TAO_IIOP_Client_Transport::handle_client_input (int block) // OK, the complete message is here... - TAO_GIOP_MessageHeader header_copy = this->message_header_; - this->message_header_.message_size = 0; - TAO_GIOP_ServiceContextList reply_ctx; CORBA::ULong request_id; CORBA::ULong reply_status; result = TAO_GIOP::parse_reply (this, this->orb_core_, - *cdr, - header_copy, + *message_state, reply_ctx, request_id, reply_status); @@ -207,26 +282,28 @@ TAO_IIOP_Client_Transport::handle_client_input (int block) ACE_DEBUG ((LM_DEBUG, "TAO (%P|%t) - %p\n", "IIOP_Transport::handle_client_input, parse reply")); + message_state->reset (); return -1; } if (this->tms_->dispatch_reply (request_id, reply_status, - header_copy.giop_version, + message_state->giop_version, reply_ctx, - cdr) != 0) + message_state) != 0) { if (TAO_debug_level > 0) ACE_ERROR ((LM_ERROR, "TAO (%P|%t) : IIOP_Client_Transport::" "handle_client_input - " "dispatch reply failed\n")); + message_state->reset (); return -1; } // This is a NOOP for the Exclusive request case, but it actually // destroys the stream in the muxed case. - this->tms_->destroy_cdr_stream (cdr); + this->tms_->destroy_message_state (message_state); // Return something to indicate the reply is received. return 1; diff --git a/TAO/tao/IIOP_Transport.h b/TAO/tao/IIOP_Transport.h index c07c71afe8b..574b4544858 100644 --- a/TAO/tao/IIOP_Transport.h +++ b/TAO/tao/IIOP_Transport.h @@ -126,6 +126,24 @@ public: TAO_IIOP_Client_Connection_Handler *client_handler (void); // return a pointer to the client's connection handler. + virtual void start_request (TAO_ORB_Core *orb_core, + const TAO_Profile *profile, + const char* opname, + CORBA::ULong request_id, + CORBA::Boolean is_twoway, + TAO_OutputCDR &output, + CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)); + // Fill into <output> the right headers to make a request. + + virtual void start_locate (TAO_ORB_Core *orb_core, + const TAO_Profile *profile, + CORBA::ULong request_id, + TAO_OutputCDR &output, + CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)); + // Fill into <output> the right headers to make a locate request. + int send_request (TAO_ORB_Core *orb_core, TAO_OutputCDR &stream, int twoway); @@ -151,11 +169,6 @@ protected: private: TAO_IIOP_Client_Connection_Handler *client_handler_; // pointer to the corresponding client side connection handler. - - TAO_GIOP_MessageHeader message_header_; - CORBA::ULong current_offset_; - // This keep the state of the current message, to enable - // non-blocking reads. }; // **************************************************************** @@ -179,12 +192,12 @@ public: ~TAO_IIOP_Server_Transport (void); // Default destructor - TAO_IIOP_Server_Connection_Handler *server_handler (void); - // Return a pointer to the underlying connection handler. - -private: TAO_IIOP_Server_Connection_Handler *server_handler_; // Pointer to the corresponding connection handler. + + TAO_GIOP_Message_State message_state_; + // This keep the state of the current message, to enable + // non-blocking reads, fragment reassembly, etc. }; #endif /* TAO_IIOP_TRANSPORT_H */ diff --git a/TAO/tao/Invocation.cpp b/TAO/tao/Invocation.cpp index 66189d7f5cf..235627153cb 100644 --- a/TAO/tao/Invocation.cpp +++ b/TAO/tao/Invocation.cpp @@ -95,9 +95,7 @@ TAO_GIOP_Invocation::~TAO_GIOP_Invocation (void) // restarted (e.g. request forwarding). This is the start/restart entry. void -TAO_GIOP_Invocation::start (CORBA::Boolean is_roundtrip, - TAO_GIOP::Message_Type message_type, - CORBA::Environment &ACE_TRY_ENV) +TAO_GIOP_Invocation::start (CORBA::Environment &ACE_TRY_ENV) ACE_THROW_SPEC ((CORBA::SystemException)) { ACE_FUNCTION_TIMEPROBE (TAO_GIOP_INVOCATION_START_ENTER); @@ -194,87 +192,6 @@ TAO_GIOP_Invocation::start (CORBA::Boolean is_roundtrip, // Obtain unique request id from the RMS. this->request_id_ = this->transport_->request_id (); - // Obtain object key. - const TAO_ObjectKey& key = this->profile_->object_key(); - - ACE_TIMEPROBE (TAO_GIOP_INVOCATION_START_CONNECT); - - // POLICY DECISION: If the client expects most agents to forward, - // then it could try to make sure that it's been forwarded at least - // once by eliciting it with a LocateRequest message. (Further - // hinting in the IIOP::ProfileData could help!) - // - // That scenario does not match an "Inter" ORB Protocol well, since - // bridges chain calls rather than forwarding them. It does match - // some kinds of "Intra" ORB scenarios well, with many agents that - // spawn new processes talking to their clients across the net. - // - // At this time, the policy noted above is followed in the sense - // that this software does NOT expect most agents to forward, so it - // doesn't bother to probe. Correctness is not affected; this is - // only a quality-of-service policy. It affects mostly performance, - // but the "best efforts" semantics for "oneway" messages would also - // be impacted in that some (by definition, buggy!) code which used - // only "oneway" messages might not work at all. - - // Build the outgoing message, starting with generic GIOP header. - - if (TAO_GIOP::start_message (message_type, - this->out_stream_, - this->orb_core_) == 0) - ACE_THROW (CORBA::MARSHAL ()); - - ACE_TIMEPROBE (TAO_GIOP_INVOCATION_START_START_MSG); - - // Then fill in the rest of the RequestHeader - // - // The first element of header is service context list; - // transactional context would be acquired here using the - // transaction service APIs. Other kinds of context are as yet - // undefined. - // - // Last element of request header is the principal; no portable way - // to get it, we just pass empty principal (convention: indicates - // "anybody"). Steps upward in security include passing an - // unverified user ID, and then verifying the message (i.e. a dummy - // service context entry is set up to hold a digital signature for - // this message, then patched shortly before it's sent). - static CORBA::Principal_ptr principal = 0; - - // @@ TODO: the service context list should be kept in the ORB, or - // maybe in TSS storage... that is required for interceptors to - // work. - // This static is only used to write into the CDR stream, once we - // have real service context (needed for the messaging spec) this - // will have to be a parameter. - static TAO_GIOP_ServiceContextList svc_ctx; - - switch (message_type) - { - case TAO_GIOP::Request: - TAO_GIOP::write_request_header (svc_ctx, - this->request_id_, - is_roundtrip, - key, - this->opname_, - principal, - this->out_stream_, - this->orb_core_); - break; - - case TAO_GIOP::LocateRequest: - TAO_GIOP::write_locate_request_header (this->request_id_, - key, - this->out_stream_); - break; - - default: - ACE_THROW (CORBA::INTERNAL ()); - } - - if (!this->out_stream_.good_bit ()) - ACE_THROW (CORBA::MARSHAL ()); - ACE_TIMEPROBE (TAO_GIOP_INVOCATION_START_REQUEST_HDR); } @@ -448,6 +365,22 @@ TAO_GIOP_Invocation::location_forward (TAO_InputCDR &inp_stream, // **************************************************************** +void +TAO_GIOP_Twoway_Invocation::start (CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + this->TAO_GIOP_Invocation::start (ACE_TRY_ENV); + ACE_CHECK; + + this->transport_->start_request (this->orb_core_, + this->profile_, + this->opname_, + this->request_id_, + 1, + this->out_stream_, + ACE_TRY_ENV); +} + int TAO_GIOP_Twoway_Invocation::invoke (CORBA::ExceptionList &exceptions, CORBA::Environment &ACE_TRY_ENV) @@ -470,7 +403,7 @@ TAO_GIOP_Twoway_Invocation::invoke (CORBA::ExceptionList &exceptions, CORBA::String_var buf; // Pull the exception ID out of the marshaling buffer. - if (this->inp_stream_.read_string (buf.inout ()) == 0) + if (this->inp_stream ().read_string (buf.inout ()) == 0) { // @@ Why do we close the connection. Only the request // failed, but the connection seems to be still @@ -501,7 +434,7 @@ TAO_GIOP_Twoway_Invocation::invoke (CORBA::ExceptionList &exceptions, // ACE_RETHROW; const ACE_Message_Block* cdr = - this->inp_stream_.start (); + this->inp_stream ().start (); CORBA_Any any (tcp, 0, cdr); CORBA_Exception *exception; ACE_NEW_THROW_EX (exception, @@ -556,7 +489,7 @@ TAO_GIOP_Twoway_Invocation::invoke (TAO_Exception_Data *excepts, CORBA::String_var buf; // Pull the exception ID out of the marshaling buffer. - if (this->inp_stream_.read_string (buf.inout ()) == 0) + if (this->inp_stream ().read_string (buf.inout ()) == 0) { // @@ Why do we close the connection. Only the request // failed, but the connection seems to be still @@ -584,9 +517,9 @@ TAO_GIOP_Twoway_Invocation::invoke (TAO_Exception_Data *excepts, ACE_THROW_RETURN (CORBA::NO_MEMORY (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_YES), TAO_INVOKE_EXCEPTION); - this->inp_stream_.decode (exception->_type (), - exception, 0, - ACE_TRY_ENV); + this->inp_stream ().decode (exception->_type (), + exception, 0, + ACE_TRY_ENV); ACE_CHECK_RETURN (TAO_INVOKE_EXCEPTION); if (TAO_debug_level > 5) @@ -717,7 +650,7 @@ TAO_GIOP_Twoway_Invocation::invoke_i (CORBA::Environment &ACE_TRY_ENV) // @@ Add the location macros for this exceptions... CORBA::String_var type_id; - if ((this->inp_stream_ >> type_id.inout ()) == 0) + if ((this->inp_stream () >> type_id.inout ()) == 0) { // Could not demarshal the exception id, raise an local // CORBA::MARSHAL @@ -727,8 +660,8 @@ TAO_GIOP_Twoway_Invocation::invoke_i (CORBA::Environment &ACE_TRY_ENV) } CORBA::ULong minor = 0; CORBA::ULong completion = 0; - if ((this->inp_stream_ >> minor) == 0 - || (this->inp_stream_ >> completion) == 0) + if ((this->inp_stream () >> minor) == 0 + || (this->inp_stream () >> completion) == 0) ACE_THROW_RETURN (CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE), TAO_INVOKE_OK); @@ -750,7 +683,7 @@ TAO_GIOP_Twoway_Invocation::invoke_i (CORBA::Environment &ACE_TRY_ENV) // @@ There should be a better way to raise this exception! - // This code works for both native and emulated exceptions, + // This code works for both native and emulated exceptions, // but it is ugly. ACE_TRY_ENV.exception (ex); return TAO_INVOKE_OK; @@ -760,7 +693,7 @@ TAO_GIOP_Twoway_Invocation::invoke_i (CORBA::Environment &ACE_TRY_ENV) case TAO_GIOP_LOCATION_FORWARD: // Handle the forwarding and return so the stub restarts the // request! - return this->location_forward (this->inp_stream_, ACE_TRY_ENV); + return this->location_forward (this->inp_stream (), ACE_TRY_ENV); // NOT REACHED. } @@ -769,8 +702,40 @@ TAO_GIOP_Twoway_Invocation::invoke_i (CORBA::Environment &ACE_TRY_ENV) // **************************************************************** +void +TAO_GIOP_Oneway_Invocation::start (CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + this->TAO_GIOP_Invocation::start (ACE_TRY_ENV); + ACE_CHECK; + + this->transport_->start_request (this->orb_core_, + this->profile_, + this->opname_, + this->request_id_, + 0, + this->out_stream_, + ACE_TRY_ENV); +} + +// **************************************************************** + // Send request, block until any reply comes back +void +TAO_GIOP_Locate_Request_Invocation::start (CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + this->TAO_GIOP_Invocation::start (ACE_TRY_ENV); + ACE_CHECK; + + this->transport_->start_locate (this->orb_core_, + this->profile_, + this->request_id_, + this->out_stream_, + ACE_TRY_ENV); +} + int TAO_GIOP_Locate_Request_Invocation::invoke (CORBA::Environment &ACE_TRY_ENV) ACE_THROW_SPEC ((CORBA::SystemException)) @@ -851,7 +816,7 @@ TAO_GIOP_Locate_Request_Invocation::invoke (CORBA::Environment &ACE_TRY_ENV) // NOTREACHED case TAO_GIOP_OBJECT_FORWARD: - return this->location_forward (this->inp_stream_, ACE_TRY_ENV); + return this->location_forward (this->inp_stream (), ACE_TRY_ENV); // NOTREACHED } diff --git a/TAO/tao/Invocation.h b/TAO/tao/Invocation.h index 33eacbd672a..1073979b2c6 100644 --- a/TAO/tao/Invocation.h +++ b/TAO/tao/Invocation.h @@ -79,9 +79,7 @@ public: // return the underlying output stream protected: - void start (CORBA::Boolean is_roundtrip, - TAO_GIOP::Message_Type message_type, - CORBA_Environment &ACE_TRY_ENV = + void start (CORBA_Environment &ACE_TRY_ENV = TAO_default_environment ()) ACE_THROW_SPEC ((CORBA::SystemException)); // Establishes a connection to the remote server, initializes @@ -199,7 +197,7 @@ private: // send/reply code and the system exceptions. private: - TAO_InputCDR inp_stream_; + TAO_GIOP_Message_State message_state_; // Stream into which the reply is placed. TAO_Synch_Reply_Dispatcher rd_; @@ -249,8 +247,11 @@ public: ACE_THROW_SPEC ((CORBA::SystemException)); // Send request, without blocking for any response. + TAO_InputCDR &inp_stream (void); + // return the underlying input stream + private: - TAO_InputCDR inp_stream_; + TAO_GIOP_Message_State message_state_; // Stream into which the request is placed. TAO_Synch_Reply_Dispatcher rd_; diff --git a/TAO/tao/Invocation.i b/TAO/tao/Invocation.i index 5379efc050e..d4dad8ee56f 100644 --- a/TAO/tao/Invocation.i +++ b/TAO/tao/Invocation.i @@ -25,18 +25,15 @@ TAO_GIOP_Twoway_Invocation (TAO_Stub *stub, const char *operation, TAO_ORB_Core *orb_core) : TAO_GIOP_Invocation (stub, operation, orb_core), - inp_stream_ (orb_core->create_input_cdr_data_block (ACE_CDR::DEFAULT_BUFSIZE), - TAO_ENCAP_BYTE_ORDER, - orb_core), - rd_ (&inp_stream_) + message_state_ (orb_core), + rd_ (&message_state_) { } -ACE_INLINE void -TAO_GIOP_Twoway_Invocation::start (CORBA::Environment &ACE_TRY_ENV) - ACE_THROW_SPEC ((CORBA::SystemException)) +ACE_INLINE TAO_InputCDR & +TAO_GIOP_Twoway_Invocation::inp_stream (void) { - TAO_GIOP_Invocation::start (1, TAO_GIOP::Request, ACE_TRY_ENV); + return this->message_state_.cdr; } ACE_INLINE void @@ -44,13 +41,7 @@ TAO_GIOP_Twoway_Invocation::get_value (CORBA::TypeCode_ptr tc, void *value, CORBA::Environment &ACE_TRY_ENV) { - (void) this->inp_stream_.decode (tc, value, 0, ACE_TRY_ENV); -} - -ACE_INLINE TAO_InputCDR & -TAO_GIOP_Twoway_Invocation::inp_stream (void) -{ - return this->inp_stream_; + (void) this->inp_stream ().decode (tc, value, 0, ACE_TRY_ENV); } // **************************************************************** @@ -64,13 +55,6 @@ TAO_GIOP_Oneway_Invocation (TAO_Stub *stub, { } -ACE_INLINE void -TAO_GIOP_Oneway_Invocation::start (CORBA::Environment &ACE_TRY_ENV) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ - TAO_GIOP_Invocation::start (0, TAO_GIOP::Request, ACE_TRY_ENV); -} - ACE_INLINE int TAO_GIOP_Oneway_Invocation::invoke (CORBA::Environment &ACE_TRY_ENV) ACE_THROW_SPEC ((CORBA::SystemException)) @@ -85,16 +69,13 @@ TAO_GIOP_Locate_Request_Invocation:: TAO_GIOP_Locate_Request_Invocation (TAO_Stub *stub, TAO_ORB_Core *orb_core) : TAO_GIOP_Invocation (stub, 0, orb_core), - inp_stream_ (orb_core->create_input_cdr_data_block(ACE_CDR::DEFAULT_BUFSIZE), - TAO_ENCAP_BYTE_ORDER, - orb_core), - rd_ (&inp_stream_) + message_state_ (orb_core), + rd_ (&message_state_) { } -ACE_INLINE void -TAO_GIOP_Locate_Request_Invocation::start (CORBA::Environment &ACE_TRY_ENV) - ACE_THROW_SPEC ((CORBA::SystemException)) +ACE_INLINE TAO_InputCDR & +TAO_GIOP_Locate_Request_Invocation::inp_stream (void) { - TAO_GIOP_Invocation::start (1, TAO_GIOP::LocateRequest, ACE_TRY_ENV); + return this->message_state_.cdr; } diff --git a/TAO/tao/ORB_Core.h b/TAO/tao/ORB_Core.h index f81503511e7..7bba214d78f 100644 --- a/TAO/tao/ORB_Core.h +++ b/TAO/tao/ORB_Core.h @@ -23,6 +23,7 @@ #include "tao/Resource_Factory.h" #include "tao/params.h" #include "tao/POAC.h" +#include "tao/GIOP.h" #include "ace/Map_Manager.h" #include "ace/Singleton.h" @@ -135,6 +136,9 @@ public: ACE_WChar_Codeset_Translator *to_unicode (void) const; // Convert from the native wide character set to UNICODE + TAO_GIOP_ServiceContextList& service_context (void); + // Obtain the service context list used to send requests... + // @@ This is just note on how could the translator database be // implemented: use the service configurator to load the // translator, and then use the CodesetId (an unsigned long) to @@ -423,6 +427,12 @@ protected: ACE_WChar_Codeset_Translator *from_unicode_; ACE_WChar_Codeset_Translator *to_unicode_; // Codeset translators for simple implementations. + + // @@ TODO: the service context list may need to be in TSS + // storage... + // NOTE: this is only used to *send* requests, not to store the + // service context list of a reply... + TAO_GIOP_ServiceContextList service_context_; }; // **************************************************************** diff --git a/TAO/tao/ORB_Core.i b/TAO/tao/ORB_Core.i index f7311a0fcd4..4c6e414ff8b 100644 --- a/TAO/tao/ORB_Core.i +++ b/TAO/tao/ORB_Core.i @@ -114,6 +114,12 @@ TAO_ORB_Core::to_unicode (void) const return this->to_unicode_; } +ACE_INLINE TAO_GIOP_ServiceContextList& +TAO_ORB_Core::service_context (void) +{ + return this->service_context_; +} + ACE_INLINE ACE_Data_Block* TAO_ORB_Core::create_input_cdr_data_block (size_t size) { diff --git a/TAO/tao/Pluggable.cpp b/TAO/tao/Pluggable.cpp index b4ed60f4ec4..053485bb736 100644 --- a/TAO/tao/Pluggable.cpp +++ b/TAO/tao/Pluggable.cpp @@ -21,49 +21,6 @@ ACE_RCSID(tao, Pluggable, "$Id$") -TAO_IOP_Version::~TAO_IOP_Version (void) -{ -} - -TAO_IOP_Version::TAO_IOP_Version (const TAO_IOP_Version &src) - : major (src.major), - minor (src.minor) -{ -} - -TAO_IOP_Version::TAO_IOP_Version (CORBA::Octet maj, CORBA::Octet min) - : major (maj), - minor (min) -{ -} - -void -TAO_IOP_Version::set_version (CORBA::Octet maj, CORBA::Octet min) -{ - this->major = maj; - this->minor = min; -} - -int -TAO_IOP_Version::operator== (const TAO_IOP_Version *&src) -{ - return this->major == src->major && this->minor == src->minor; -} - -int -TAO_IOP_Version::operator== (const TAO_IOP_Version &src) -{ - return this->major == src.major && this->minor == src.minor; -} - -TAO_IOP_Version & -TAO_IOP_Version::operator= (const TAO_IOP_Version &src) -{ - this->major = src.major; - this->minor = src.minor; - return *this; -} - // **************************************************************** TAO_Profile::~TAO_Profile (void) @@ -221,31 +178,6 @@ TAO_Transport::tag (void) const return this->tag_; } -// @@ Alex: this stream stuff belongs to the TMS, right? -// Maybe the right interface is: -// TAO_Transport::bind_reply_dispatcher (request_id, -// reply_dispatcher, -// input_cdr); - -// @@ Do you need an accessor? Or is the CDR stream simply passed by -// the TMS to the right target. We should go to the TMS and obtain -// the CDR stream from it, that way we can implement an optimized -// version of the TMS that uses a single CDR stream allocated from -// the stack. - -// Get the CDR stream for reading the input message. -TAO_InputCDR * -TAO_Transport::input_cdr_stream (void) const -{ - return this->tms_->get_cdr_stream (); -} - -void -TAO_Transport::destroy_cdr_stream (TAO_InputCDR *cdr) const -{ - this->tms_->destroy_cdr_stream (cdr); -} - // Get it. TAO_ORB_Core * TAO_Transport::orb_core (void) const @@ -305,6 +237,30 @@ TAO_Transport::wait_for_reply (void) return this->ws_->wait (); } +void +TAO_Transport::start_request (TAO_ORB_Core *, + const TAO_Profile *, + const char* , + CORBA::ULong , + CORBA::Boolean, + TAO_OutputCDR &, + CORBA::Environment &ACE_TRY_ENV) + TAO_THROW_SPEC ((CORBA::SystemException)) +{ + TAO_THROW (CORBA::INTERNAL ()); +} + +void +TAO_Transport::start_locate (TAO_ORB_Core *, + const TAO_Profile *, + CORBA::ULong, + TAO_OutputCDR &, + CORBA::Environment &ACE_TRY_ENV) + TAO_THROW_SPEC ((CORBA::SystemException)) +{ + TAO_THROW (CORBA::INTERNAL ()); +} + // ********************************************************************* // Connector diff --git a/TAO/tao/Pluggable.h b/TAO/tao/Pluggable.h index 7ba986f639f..08a38a9d1f8 100644 --- a/TAO/tao/Pluggable.h +++ b/TAO/tao/Pluggable.h @@ -23,7 +23,6 @@ #include "tao/corbafwd.h" #include "tao/Sequence.h" #include "tao/Typecode.h" -#include "tao/GIOP.h" // Forward declarations. class ACE_Addr; @@ -118,17 +117,29 @@ public: // not clear this this is the best place to specify this. The actual // timeout values will be kept in the Policies. + virtual void start_request (TAO_ORB_Core *orb_core, + const TAO_Profile *profile, + const char* opname, + CORBA::ULong request_id, + CORBA::Boolean is_twoway, + TAO_OutputCDR &output, + CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)); + // Fill into <output> the right headers to make a request. + + virtual void start_locate (TAO_ORB_Core *orb_core, + const TAO_Profile *profile, + CORBA::ULong request_id, + TAO_OutputCDR &output, + CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)); + // Fill into <output> the right headers to make a locate request. + virtual int send_request (TAO_ORB_Core *orb_core, TAO_OutputCDR &stream, int twoway) = 0; // Default action to be taken for send request. - TAO_InputCDR *input_cdr_stream (void) const; - // Get the CDR stream for reading the input message. - - void destroy_cdr_stream (TAO_InputCDR *) const; - // Release a CDR stream, simply pass it to the RMS... - // = Get and set methods for the ORB Core. // void orb_core (TAO_ORB_Core *orb_core); @@ -182,43 +193,6 @@ protected: TAO_Wait_Strategy *ws_; // Strategy for waiting for the reply after sending the request. - - TAO_GIOP_Version version_; - // Version information found in the incoming message. -}; - -class TAO_Export TAO_IOP_Version -{ - // = TITLE - // Major and Minor version number of the Inter-ORB Protocol. -public: - CORBA::Octet major; - // Major version number - - CORBA::Octet minor; - // Minor version number - - TAO_IOP_Version (const TAO_IOP_Version &src); - // Copy constructor - - TAO_IOP_Version (CORBA::Octet maj = 0, - CORBA::Octet min = 0); - // Default constructor. - - ~TAO_IOP_Version (void); - // Destructor. - - void set_version (CORBA::Octet maj, CORBA::Octet min); - // Explicitly set the major and minor version. - - TAO_IOP_Version &operator= (const TAO_IOP_Version &src); - // Copy operator. - - int operator== (const TAO_IOP_Version &src); - // Equality operator - - int operator== (const TAO_IOP_Version *&src); - // Equality operator }; class TAO_Export TAO_Profile @@ -372,7 +346,10 @@ public: TAO_MProfile &mprofile) = 0; // Create the corresponding profile for this endpoint. - virtual int open (TAO_ORB_Core *orb_core, ACE_CString &address) = 0; + virtual int open (TAO_ORB_Core *orb_core, + int version_major, + int version_minor, + ACE_CString &address) = 0; // method to initialize acceptor for address. virtual int open_default (TAO_ORB_Core *orb_core) = 0; diff --git a/TAO/tao/Pluggable.i b/TAO/tao/Pluggable.i index a4cbf97a151..934cf4e062d 100644 --- a/TAO/tao/Pluggable.i +++ b/TAO/tao/Pluggable.i @@ -1,6 +1,8 @@ // -*- C++ -*- // $Id$ +// **************************************************************** + ACE_INLINE TAO_Profile::TAO_Profile (CORBA::ULong tag) : tag_ (tag), diff --git a/TAO/tao/Reply_Dispatcher.cpp b/TAO/tao/Reply_Dispatcher.cpp index 0a205c8eeba..e4b560bfc9e 100644 --- a/TAO/tao/Reply_Dispatcher.cpp +++ b/TAO/tao/Reply_Dispatcher.cpp @@ -16,8 +16,8 @@ TAO_Reply_Dispatcher::~TAO_Reply_Dispatcher (void) { } -TAO_InputCDR * -TAO_Reply_Dispatcher::cdr (void) const +TAO_GIOP_Message_State * +TAO_Reply_Dispatcher::message_state (void) const { return 0; } @@ -25,9 +25,10 @@ TAO_Reply_Dispatcher::cdr (void) const // ********************************************************************* // Constructor. -TAO_Synch_Reply_Dispatcher::TAO_Synch_Reply_Dispatcher (TAO_InputCDR* cdr) +TAO_Synch_Reply_Dispatcher:: + TAO_Synch_Reply_Dispatcher (TAO_GIOP_Message_State* message_state) + : message_state_ (message_state) { - this->cdr_ = cdr; } // Destructor. @@ -40,8 +41,14 @@ int TAO_Synch_Reply_Dispatcher::dispatch_reply (CORBA::ULong reply_status, const TAO_GIOP_Version& version, TAO_GIOP_ServiceContextList& reply_ctx, - TAO_InputCDR*) + TAO_GIOP_Message_State* message_state) { + ACE_ASSERT (message_state == this->message_state_); + // @@ Notice that the message is ignored because we assume that + // the message_state is the same we are giving down to the ORB to + // use.... I.E. this class cannot be used with Muxed stream, but + // chances are that the way to implement that will change several + // times in the next few weeks. this->reply_status_ = reply_status; this->version_ = version; @@ -55,8 +62,8 @@ TAO_Synch_Reply_Dispatcher::dispatch_reply (CORBA::ULong reply_status, return 0; } -TAO_InputCDR * -TAO_Synch_Reply_Dispatcher::cdr (void) const +TAO_GIOP_Message_State * +TAO_Synch_Reply_Dispatcher::message_state (void) const { - return this->cdr_; + return this->message_state_; } diff --git a/TAO/tao/Reply_Dispatcher.h b/TAO/tao/Reply_Dispatcher.h index f0d9ace84ad..90132289124 100644 --- a/TAO/tao/Reply_Dispatcher.h +++ b/TAO/tao/Reply_Dispatcher.h @@ -43,11 +43,14 @@ public: virtual int dispatch_reply (CORBA::ULong reply_status, const TAO_GIOP_Version& version, TAO_GIOP_ServiceContextList& reply_ctx, - TAO_InputCDR* cdr) = 0; + TAO_GIOP_Message_State* message_state) = 0; // Dispatch the reply. - virtual TAO_InputCDR *cdr (void) const; - // Get the CDR stream (if any) + virtual TAO_GIOP_Message_State *message_state (void) const; + // Get the Message State + // By default it returns <0> but if the request can pre-allocate one + // for us then we can return it and pass it along for non-Muxed + // transports. }; class TAO_Export TAO_Synch_Reply_Dispatcher : public TAO_Reply_Dispatcher @@ -60,7 +63,7 @@ class TAO_Export TAO_Synch_Reply_Dispatcher : public TAO_Reply_Dispatcher // public: - TAO_Synch_Reply_Dispatcher (TAO_InputCDR* cdr); + TAO_Synch_Reply_Dispatcher (TAO_GIOP_Message_State* message_state); // Constructor. virtual ~TAO_Synch_Reply_Dispatcher (void); @@ -78,8 +81,8 @@ public: virtual int dispatch_reply (CORBA::ULong reply_status, const TAO_GIOP_Version& version, TAO_GIOP_ServiceContextList& reply_ctx, - TAO_InputCDR* cdr); - virtual TAO_InputCDR *cdr (void) const; + TAO_GIOP_Message_State* message_state); + virtual TAO_GIOP_Message_State *message_state (void) const; private: CORBA::ULong reply_status_; @@ -91,7 +94,7 @@ private: TAO_GIOP_ServiceContextList reply_ctx_; // The service context list - TAO_InputCDR *cdr_; + TAO_GIOP_Message_State *message_state_; // CDR stream for reading the input. }; diff --git a/TAO/tao/Server_Request.h b/TAO/tao/Server_Request.h index 577e2c4e9af..bb03b9812e5 100644 --- a/TAO/tao/Server_Request.h +++ b/TAO/tao/Server_Request.h @@ -154,7 +154,8 @@ public: virtual unsigned int operation_length (void) const = 0; // get the length of the operation name - virtual void init_reply (CORBA_Environment &TAO_IN_ENV = TAO_default_environment ()) = 0; + virtual void init_reply (CORBA_Environment &TAO_IN_ENV = + TAO_default_environment ()) = 0; // Start a Reply message. // CORBA::Context_ptr ctx (void) = 0; diff --git a/TAO/tao/Transport_Mux_Strategy.cpp b/TAO/tao/Transport_Mux_Strategy.cpp index 9133f0cc6a1..f08cc37b575 100644 --- a/TAO/tao/Transport_Mux_Strategy.cpp +++ b/TAO/tao/Transport_Mux_Strategy.cpp @@ -54,24 +54,24 @@ TAO_Muxed_TMS::dispatch_reply (CORBA::ULong request_id, CORBA::ULong reply_status, const TAO_GIOP_Version& version, TAO_GIOP_ServiceContextList& reply_ctx, - TAO_InputCDR* cdr) + TAO_GIOP_Message_State* message_state) { // @@ return -1; } -TAO_InputCDR * -TAO_Muxed_TMS::get_cdr_stream (void) +TAO_GIOP_Message_State * +TAO_Muxed_TMS::get_message_state (void) { return 0; } void -TAO_Muxed_TMS::destroy_cdr_stream (TAO_InputCDR *) +TAO_Muxed_TMS::destroy_message_state (TAO_GIOP_Message_State *) { // @@ Implement. - // delete cdr; - // cdr = 0; + // delete message_state; + // message_state = 0; } // ********************************************************************* @@ -111,7 +111,7 @@ TAO_Exclusive_TMS::dispatch_reply (CORBA::ULong request_id, CORBA::ULong reply_status, const TAO_GIOP_Version& version, TAO_GIOP_ServiceContextList& reply_ctx, - TAO_InputCDR* cdr) + TAO_GIOP_Message_State* message_state) { if (this->request_id_ != request_id) { @@ -129,20 +129,20 @@ TAO_Exclusive_TMS::dispatch_reply (CORBA::ULong request_id, return rd->dispatch_reply (reply_status, version, reply_ctx, - cdr); + message_state); } -TAO_InputCDR * -TAO_Exclusive_TMS::get_cdr_stream (void) +TAO_GIOP_Message_State * +TAO_Exclusive_TMS::get_message_state (void) { if (this->rd_ == 0) return 0; - return this->rd_->cdr (); + return this->rd_->message_state (); } // NOOP function. void -TAO_Exclusive_TMS::destroy_cdr_stream (TAO_InputCDR *) +TAO_Exclusive_TMS::destroy_message_state (TAO_GIOP_Message_State *) { } diff --git a/TAO/tao/Transport_Mux_Strategy.h b/TAO/tao/Transport_Mux_Strategy.h index f7d92ae34ef..8cdb605aec9 100644 --- a/TAO/tao/Transport_Mux_Strategy.h +++ b/TAO/tao/Transport_Mux_Strategy.h @@ -26,8 +26,6 @@ #endif /* ACE_LACKS_PRAGMA_ONCE */ class TAO_Reply_Dispatcher; -struct TAO_GIOP_Version; -class TAO_InputCDR; class TAO_Export TAO_Transport_Mux_Strategy { @@ -63,7 +61,7 @@ public: CORBA::ULong reply_status, const TAO_GIOP_Version& version, TAO_GIOP_ServiceContextList& reply_ctx, - TAO_InputCDR* cdr) = 0; + TAO_GIOP_Message_State* message_state) = 0; // Dispatch the reply for <request_id>, cleanup any resources // allocated for that request. @@ -71,10 +69,10 @@ public: // the factory simply allocates a new one, in the Exclusive case // the factory returns a pointer to the pre-allocated CDR. - virtual TAO_InputCDR *get_cdr_stream (void) = 0; + virtual TAO_GIOP_Message_State *get_message_state (void) = 0; // Get a CDR stream. - virtual void destroy_cdr_stream (TAO_InputCDR *) = 0; + virtual void destroy_message_state (TAO_GIOP_Message_State *) = 0; // Destroy a CDR stream. }; @@ -102,9 +100,9 @@ public: CORBA::ULong reply_status, const TAO_GIOP_Version& version, TAO_GIOP_ServiceContextList& reply_ctx, - TAO_InputCDR* cdr); - virtual TAO_InputCDR *get_cdr_stream (void); - virtual void destroy_cdr_stream (TAO_InputCDR *); + TAO_GIOP_Message_State* message_state); + virtual TAO_GIOP_Message_State *get_message_state (void); + virtual void destroy_message_state (TAO_GIOP_Message_State *); protected: // @@ HASH TABLE??? @@ -134,9 +132,9 @@ public: CORBA::ULong reply_status, const TAO_GIOP_Version& version, TAO_GIOP_ServiceContextList& reply_ctx, - TAO_InputCDR* cdr); - virtual TAO_InputCDR *get_cdr_stream (void); - virtual void destroy_cdr_stream (TAO_InputCDR *); + TAO_GIOP_Message_State* message_state); + virtual TAO_GIOP_Message_State *get_message_state (void); + virtual void destroy_message_state (TAO_GIOP_Message_State *); protected: CORBA::ULong request_id_generator_; diff --git a/TAO/tao/UIOP_Acceptor.cpp b/TAO/tao/UIOP_Acceptor.cpp index 6b3d19c9bfd..88d6c726df6 100644 --- a/TAO/tao/UIOP_Acceptor.cpp +++ b/TAO/tao/UIOP_Acceptor.cpp @@ -26,6 +26,7 @@ #include "tao/ORB_Core.h" #include "tao/Server_Strategy_Factory.h" #include "tao/GIOP.h" +#include "tao/debug.h" ACE_RCSID(tao, UIOP_Acceptor, "$Id$") @@ -34,6 +35,7 @@ ACE_RCSID(tao, UIOP_Acceptor, "$Id$") TAO_UIOP_Acceptor::TAO_UIOP_Acceptor (void) : TAO_Acceptor (TAO_IOP_TAG_UNIX_IOP), base_acceptor_ (), + version_ (TAO_DEF_GIOP_MAJOR, TAO_DEF_GIOP_MINOR), orb_core_ (0) { } @@ -59,6 +61,7 @@ TAO_UIOP_Acceptor::create_mprofile (const TAO_ObjectKey &object_key, ACE_NEW_RETURN (pfile, TAO_UIOP_Profile (addr, object_key, + this->version_, this->orb_core_), -1); @@ -103,8 +106,13 @@ TAO_UIOP_Acceptor::close (void) int TAO_UIOP_Acceptor::open (TAO_ORB_Core *orb_core, + int major, + int minor, ACE_CString &address) { + if (major >= 0 && minor >= 0) + this->version_.set_version (ACE_static_cast (CORBA::Octet,major), + ACE_static_cast (CORBA::Octet,minor)); ACE_UNIX_Addr addr (address.c_str ()); return this->open_i (orb_core, addr); @@ -135,13 +143,20 @@ TAO_UIOP_Acceptor::open_i (TAO_ORB_Core* orb_core, // @@ If Profile creation is slow we may need to cache the // rendezvous point here + if (TAO_debug_level > 5) + { + ACE_DEBUG ((LM_DEBUG, + "\nTAO (%P|%t) UIOP_Acceptor::open_i - " + "listening on: <%s>\n", + addr.get_path_name ())); + } + return 0; } CORBA::ULong TAO_UIOP_Acceptor::endpoint_count (void) { - // @@ for now just assume one! return 1; } diff --git a/TAO/tao/UIOP_Acceptor.h b/TAO/tao/UIOP_Acceptor.h index ba8e6d26746..4b4a19da538 100644 --- a/TAO/tao/UIOP_Acceptor.h +++ b/TAO/tao/UIOP_Acceptor.h @@ -46,7 +46,10 @@ public: TAO_UIOP_Acceptor (void); // Create Acceptor object using addr. - int open (TAO_ORB_Core *orb_core, ACE_CString &address); + int open (TAO_ORB_Core *orb_core, + int version_major, + int version_minor, + ACE_CString &address); // initialize acceptor for this address. virtual int close (void); @@ -79,6 +82,9 @@ private: TAO_UIOP_BASE_ACCEPTOR base_acceptor_; // the concrete acceptor, as a pointer to its base class. + TAO_GIOP_Version version_; + // The GIOP version for this endpoint + TAO_ORB_Core *orb_core_; // ORB Core. }; diff --git a/TAO/tao/UIOP_Connect.cpp b/TAO/tao/UIOP_Connect.cpp index 148d01ae6d1..81b553b38eb 100644 --- a/TAO/tao/UIOP_Connect.cpp +++ b/TAO/tao/UIOP_Connect.cpp @@ -17,7 +17,7 @@ ACE_RCSID(tao, UIOP_Connect, "$Id$") - TAO_UIOP_Handler_Base::TAO_UIOP_Handler_Base (TAO_ORB_Core *orb_core) +TAO_UIOP_Handler_Base::TAO_UIOP_Handler_Base (TAO_ORB_Core *orb_core) : TAO_UIOP_SVC_HANDLER (orb_core->thr_mgr (), 0, 0) { } @@ -29,13 +29,10 @@ TAO_UIOP_Handler_Base::TAO_UIOP_Handler_Base (ACE_Thread_Manager *t) // **************************************************************** -// @@ For pluggable protocols, added a reference to -// the corresponding transport obj. TAO_UIOP_Server_Connection_Handler::TAO_UIOP_Server_Connection_Handler (ACE_Thread_Manager *t) : TAO_UIOP_Handler_Base (t), orb_core_ (0), - tss_resources_ (0), - input_ (ACE_CDR::DEFAULT_BUFSIZE) + tss_resources_ (0) { // This constructor should *never* get called, it is just here to // make the compiler happy: the default implementation of the @@ -50,10 +47,7 @@ TAO_UIOP_Server_Connection_Handler::TAO_UIOP_Server_Connection_Handler (ACE_Thre TAO_UIOP_Server_Connection_Handler::TAO_UIOP_Server_Connection_Handler (TAO_ORB_Core *orb_core) : TAO_UIOP_Handler_Base (orb_core), orb_core_ (orb_core), - tss_resources_ (TAO_ORB_CORE_TSS_RESOURCES::instance ()), - input_ (orb_core->create_input_cdr_data_block (ACE_CDR::DEFAULT_BUFSIZE), - TAO_ENCAP_BYTE_ORDER, - orb_core) + tss_resources_ (TAO_ORB_CORE_TSS_RESOURCES::instance ()) { transport_ = new TAO_UIOP_Server_Transport (this, this->orb_core_); @@ -192,22 +186,12 @@ TAO_UIOP_Server_Connection_Handler::svc (void) return result; } -void -TAO_UIOP_Server_Connection_Handler::send_response (TAO_OutputCDR &output) -{ - TAO_GIOP::send_message (this->transport_, - output, - this->orb_core_); -} - int TAO_UIOP_Server_Connection_Handler::handle_input (ACE_HANDLE) { int result = TAO_GIOP::handle_input (this->transport (), this->orb_core_, - this->message_header_, - this->current_offset_, - this->input_); + this->transport_->message_state_); if (result == -1 && TAO_debug_level > 0) { @@ -215,17 +199,17 @@ TAO_UIOP_Server_Connection_Handler::handle_input (ACE_HANDLE) "TAO (%P|%t) - %p\n", "UIOP_Server_CH::handle_input, handle_input")); } - if (result == 1) - { - TAO_GIOP_MessageHeader header_copy = this->message_header_; - this->message_header_.message_size = 0; - TAO_GIOP::process_server_message (this->transport (), - this->orb_core_, - this->input_, - header_copy); - result = 0; - } - return result; + if (result == 0) + return 0; + + // ACE_ASSERT (result == 1); + + TAO_GIOP::process_server_message (this->transport (), + this->orb_core_, + this->transport_->message_state_.cdr, + this->transport_->message_state_); + this->transport_->message_state_.reset (); + return 0; } // **************************************************************** diff --git a/TAO/tao/UIOP_Connect.h b/TAO/tao/UIOP_Connect.h index 1b5e951725f..e4ae0d093d1 100644 --- a/TAO/tao/UIOP_Connect.h +++ b/TAO/tao/UIOP_Connect.h @@ -135,9 +135,6 @@ protected: TAO_UIOP_Server_Transport *transport_; // @@ New transport object reference. - virtual void send_response (TAO_OutputCDR &response); - // Send <response> to the client on the other end. - // = Event Handler overloads virtual int handle_input (ACE_HANDLE = ACE_INVALID_HANDLE); @@ -153,12 +150,6 @@ protected: TAO_ORB_Core_TSS_Resources *tss_resources_; // Cached tss resources of the ORB that activated this object. - - TAO_GIOP_MessageHeader message_header_; - CORBA::ULong current_offset_; - TAO_InputCDR input_; - // This keep the state of the current message, to enable - // non-blocking reads. }; #if defined (__ACE_INLINE__) diff --git a/TAO/tao/UIOP_Factory.cpp b/TAO/tao/UIOP_Factory.cpp index 702bc88452b..9228fd81d31 100644 --- a/TAO/tao/UIOP_Factory.cpp +++ b/TAO/tao/UIOP_Factory.cpp @@ -12,6 +12,8 @@ ACE_RCSID(tao, UIOP_Factory, "$Id$") TAO_UIOP_Protocol_Factory::TAO_UIOP_Protocol_Factory (void) + : major_ (TAO_DEF_GIOP_MAJOR), + minor_ (TAO_DEF_GIOP_MINOR) { } diff --git a/TAO/tao/UIOP_Factory.h b/TAO/tao/UIOP_Factory.h index c1da260a864..941f3447106 100644 --- a/TAO/tao/UIOP_Factory.h +++ b/TAO/tao/UIOP_Factory.h @@ -48,6 +48,12 @@ public: virtual TAO_Connector *make_connector (void); // create a connector + +private: + int major_; + int minor_; + // Changing the version number can be used to provide backwards + // compatibility with old clients. }; ACE_STATIC_SVC_DECLARE (TAO_UIOP_Protocol_Factory) diff --git a/TAO/tao/UIOP_Profile.cpp b/TAO/tao/UIOP_Profile.cpp index 706638e672d..3438134f02f 100644 --- a/TAO/tao/UIOP_Profile.cpp +++ b/TAO/tao/UIOP_Profile.cpp @@ -24,10 +24,11 @@ const char TAO_UIOP_Profile::object_key_delimiter = '|'; TAO_UIOP_Profile::TAO_UIOP_Profile (const ACE_UNIX_Addr &addr, const TAO_ObjectKey &object_key, + const TAO_GIOP_Version &version, TAO_ORB_Core *orb_core) : TAO_Profile (TAO_IOP_TAG_UNIX_IOP), rendezvous_point_ (0), - version_ (DEF_UIOP_MAJOR, DEF_UIOP_MINOR), + version_ (version), object_key_ (object_key), object_addr_ (addr), hint_ (0), @@ -39,10 +40,11 @@ TAO_UIOP_Profile::TAO_UIOP_Profile (const ACE_UNIX_Addr &addr, TAO_UIOP_Profile::TAO_UIOP_Profile (const char *rendezvous_point, const TAO_ObjectKey &object_key, const ACE_UNIX_Addr &addr, + const TAO_GIOP_Version &version, TAO_ORB_Core *orb_core) : TAO_Profile (TAO_IOP_TAG_UNIX_IOP), rendezvous_point_ (0), - version_ (DEF_UIOP_MAJOR, DEF_UIOP_MINOR), + version_ (version), object_key_ (object_key), object_addr_ (addr), hint_ (0), @@ -76,7 +78,7 @@ TAO_UIOP_Profile::TAO_UIOP_Profile (const char *string, CORBA::Environment &env) : TAO_Profile (TAO_IOP_TAG_UNIX_IOP), rendezvous_point_ (0), - version_ (DEF_UIOP_MAJOR, DEF_UIOP_MINOR), + version_ (TAO_DEF_GIOP_MAJOR, TAO_DEF_GIOP_MINOR), object_key_ (), object_addr_ (), hint_ (0), @@ -88,7 +90,7 @@ TAO_UIOP_Profile::TAO_UIOP_Profile (const char *string, TAO_UIOP_Profile::TAO_UIOP_Profile (TAO_ORB_Core *orb_core) : TAO_Profile (TAO_IOP_TAG_UNIX_IOP), rendezvous_point_ (0), - version_ (DEF_UIOP_MAJOR, DEF_UIOP_MINOR), + version_ (TAO_DEF_GIOP_MAJOR, TAO_DEF_GIOP_MINOR), object_key_ (), object_addr_ (), hint_ (0), @@ -142,8 +144,8 @@ TAO_UIOP_Profile::parse_string (const char *string, // Skip over the "N.n@" } - if (this->version_.major != TAO_UIOP_Profile::DEF_UIOP_MAJOR || - this->version_.minor > TAO_UIOP_Profile::DEF_UIOP_MINOR) + if (this->version_.major != TAO_DEF_GIOP_MAJOR || + this->version_.minor > TAO_DEF_GIOP_MINOR) { ACE_THROW_RETURN (CORBA::MARSHAL (), -1); } @@ -358,9 +360,9 @@ TAO_UIOP_Profile::decode (TAO_InputCDR& cdr) // protocol? if (!(cdr.read_octet (this->version_.major) - && this->version_.major == TAO_UIOP_Profile::DEF_UIOP_MAJOR + && this->version_.major == TAO_DEF_GIOP_MAJOR && cdr.read_octet (this->version_.minor) - && this->version_.minor <= TAO_UIOP_Profile::DEF_UIOP_MINOR)) + && this->version_.minor <= TAO_DEF_GIOP_MINOR)) { ACE_DEBUG ((LM_DEBUG, "detected new v%d.%d UIOP profile\n", @@ -442,7 +444,7 @@ TAO_UIOP_Profile::encode (TAO_OutputCDR &stream) const // CHAR describing byte order, starting the encapsulation stream.write_octet (TAO_ENCAP_BYTE_ORDER); - // UIOP::TAO_IOP_Version, two characters (version 1.0) padding + // The GIOP version stream.write_char (this->version_.major); stream.write_char (this->version_.minor); diff --git a/TAO/tao/UIOP_Profile.h b/TAO/tao/UIOP_Profile.h index ec49c4631d8..53a2c148955 100644 --- a/TAO/tao/UIOP_Profile.h +++ b/TAO/tao/UIOP_Profile.h @@ -43,13 +43,6 @@ class TAO_Export TAO_UIOP_Profile : public TAO_Profile // = DESCRIPTION // This class defines the UIOP profile. public: - // = Currently, TAO supports UIOP 1.0. - enum - { - DEF_UIOP_MAJOR = 1, // FIXME: Version numbers? - DEF_UIOP_MINOR = 0 - }; - static const char object_key_delimiter; // The object key delimiter that UIOP uses or expects. @@ -58,6 +51,7 @@ public: TAO_UIOP_Profile (const ACE_UNIX_Addr &addr, const TAO_ObjectKey &object_key, + const TAO_GIOP_Version &version, TAO_ORB_Core *orb_core); // Profile constructor, same as above except the object_key has // already been marshaled. (actually, no marshalling for this protocol) @@ -65,6 +59,7 @@ public: TAO_UIOP_Profile (const char *rendezvous_point, const TAO_ObjectKey &object_key, const ACE_UNIX_Addr &addr, + const TAO_GIOP_Version &version, TAO_ORB_Core *orb_core); // Profile constructor @@ -131,14 +126,10 @@ public: // resulting pointer. // This object maintains ownership of this string. - const TAO_IOP_Version *version (void); + const TAO_GIOP_Version &version (void) const; // Return a pointer to this profile's version. This object // maintains ownership. - const TAO_IOP_Version *version (TAO_IOP_Version *v); - // First set the version then return a pointer to it. This object - // maintains ownership. - TAO_UIOP_Client_Connection_Handler *&hint (void); // This is a hint for which connection handler to use. @@ -160,7 +151,7 @@ private: char *rendezvous_point_; // String representing the rendezvous point. - TAO_IOP_Version version_; + TAO_GIOP_Version version_; // UIOP version number. TAO_ObjectKey object_key_; diff --git a/TAO/tao/UIOP_Profile.i b/TAO/tao/UIOP_Profile.i index 84f86743705..01477bd9546 100644 --- a/TAO/tao/UIOP_Profile.i +++ b/TAO/tao/UIOP_Profile.i @@ -34,17 +34,10 @@ TAO_UIOP_Profile::rendezvous_point (void) return this->rendezvous_point_; } -ACE_INLINE const TAO_IOP_Version * -TAO_UIOP_Profile::version (void) +ACE_INLINE const TAO_GIOP_Version & +TAO_UIOP_Profile::version (void) const { - return &this->version_; -} - -ACE_INLINE const TAO_IOP_Version * -TAO_UIOP_Profile::version (TAO_IOP_Version *v) -{ - this->version_ = *v; - return &this->version_; + return this->version_; } ACE_INLINE TAO_UIOP_Client_Connection_Handler *& diff --git a/TAO/tao/UIOP_Transport.cpp b/TAO/tao/UIOP_Transport.cpp index 8c74fa2ca7f..c253800bf63 100644 --- a/TAO/tao/UIOP_Transport.cpp +++ b/TAO/tao/UIOP_Transport.cpp @@ -5,6 +5,7 @@ #include "tao/UIOP_Transport.h" #include "tao/UIOP_Connect.h" +#include "tao/UIOP_Profile.h" #include "tao/Timeprobe.h" #include "tao/CDR.h" #include "tao/Transport_Mux_Strategy.h" @@ -58,14 +59,47 @@ TAO_UIOP_Transport::~TAO_UIOP_Transport (void) { } +TAO_UIOP_Handler_Base *& +TAO_UIOP_Transport::handler (void) +{ + return this->handler_; +} + +int +TAO_UIOP_Transport::idle (void) +{ + return this->handler_->idle(); +} + +void +TAO_UIOP_Transport::close_connection (void) +{ + this->handler_->handle_close (); +} + +ACE_HANDLE +TAO_UIOP_Transport::handle (void) +{ + return this->handler_->get_handle (); +} + +// **************************************************************** + TAO_UIOP_Server_Transport:: TAO_UIOP_Server_Transport (TAO_UIOP_Server_Connection_Handler *handler, TAO_ORB_Core* orb_core) : TAO_UIOP_Transport (handler, orb_core), - server_handler_ (handler) + server_handler_ (handler), + message_state_ (orb_core) +{ +} + +TAO_UIOP_Server_Transport::~TAO_UIOP_Server_Transport (void) { } +// **************************************************************** + TAO_UIOP_Client_Transport:: TAO_UIOP_Client_Transport (TAO_UIOP_Client_Connection_Handler *handler, TAO_ORB_Core *orb_core) @@ -75,10 +109,6 @@ TAO_UIOP_Client_Transport:: { } -TAO_UIOP_Server_Transport::~TAO_UIOP_Server_Transport (void) -{ -} - TAO_UIOP_Client_Transport::~TAO_UIOP_Client_Transport (void) { } @@ -89,34 +119,84 @@ TAO_UIOP_Client_Transport::client_handler (void) return this->client_handler_; } -TAO_UIOP_Server_Connection_Handler * -TAO_UIOP_Server_Transport::server_handler (void) +void +TAO_UIOP_Client_Transport:: + start_request (TAO_ORB_Core *orb_core, + const TAO_Profile* pfile, + const char* opname, + CORBA::ULong request_id, + CORBA::Boolean is_roundtrip, + TAO_OutputCDR &output, + CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) { - return this->server_handler_; -} + const TAO_UIOP_Profile* profile = + ACE_dynamic_cast(const TAO_UIOP_Profile*,pfile); -TAO_UIOP_Handler_Base *& -TAO_UIOP_Transport::handler (void) -{ - return this->handler_; -} + // Obtain object key. + const TAO_ObjectKey& key = profile->object_key (); -int -TAO_UIOP_Transport::idle (void) -{ - return this->handler_->idle(); + // @@ This should be implemented in the transport object, which + // would query the profile to obtain the version... + if (TAO_GIOP::start_message (profile->version (), + TAO_GIOP::Request, + output, + orb_core) == 0) + ACE_THROW (CORBA::MARSHAL ()); + + // Then fill in the rest of the RequestHeader + // + // The first element of header is service context list; + // transactional context would be acquired here using the + // transaction service APIs. Other kinds of context are as yet + // undefined. + // + // Last element of request header is the principal; no portable way + // to get it, we just pass empty principal (convention: indicates + // "anybody"). Steps upward in security include passing an + // unverified user ID, and then verifying the message (i.e. a dummy + // service context entry is set up to hold a digital signature for + // this message, then patched shortly before it's sent). + static CORBA::Principal_ptr principal = 0; + + if (TAO_GIOP::write_request_header (request_id, + is_roundtrip, + key, + opname, + principal, + output, + orb_core) == 0) + ACE_THROW (CORBA::MARSHAL ()); } void -TAO_UIOP_Transport::close_connection (void) +TAO_UIOP_Client_Transport:: + start_locate (TAO_ORB_Core *orb_core, + const TAO_Profile* pfile, + CORBA::ULong request_id, + TAO_OutputCDR &output, + CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)) { - this->handler_->handle_close (); -} + const TAO_UIOP_Profile* profile = + ACE_dynamic_cast(const TAO_UIOP_Profile*,pfile); -ACE_HANDLE -TAO_UIOP_Transport::handle (void) -{ - return this->handler_->get_handle (); + // Obtain object key. + const TAO_ObjectKey& key = profile->object_key (); + + // @@ This should be implemented in the transport object, which + // would query the profile to obtain the version... + if (TAO_GIOP::start_message (profile->version (), + TAO_GIOP::Request, + output, + orb_core) == 0) + ACE_THROW (CORBA::MARSHAL ()); + + + if (TAO_GIOP::write_locate_request_header (this->request_id (), + key, + output) != 0) + ACE_THROW (CORBA::MARSHAL ()); } int @@ -167,13 +247,12 @@ TAO_UIOP_Client_Transport::handle_client_input (int block) // removed. // Do I make any sense? - TAO_InputCDR* cdr = this->tms_->get_cdr_stream (); + TAO_GIOP_Message_State* message_state = + this->tms_->get_message_state (); int result = TAO_GIOP::handle_input (this, this->orb_core_, - this->message_header_, - this->current_offset_, - *cdr); + *message_state); if (result == -1) { if (TAO_debug_level > 0) @@ -187,17 +266,13 @@ TAO_UIOP_Client_Transport::handle_client_input (int block) // OK, the complete message is here... - TAO_GIOP_MessageHeader header_copy = this->message_header_; - this->message_header_.message_size = 0; - TAO_GIOP_ServiceContextList reply_ctx; CORBA::ULong request_id; CORBA::ULong reply_status; result = TAO_GIOP::parse_reply (this, this->orb_core_, - *cdr, - header_copy, + *message_state, reply_ctx, request_id, reply_status); @@ -207,26 +282,28 @@ TAO_UIOP_Client_Transport::handle_client_input (int block) ACE_DEBUG ((LM_DEBUG, "TAO (%P|%t) - %p\n", "UIOP_Transport::handle_client_input, parse reply")); + message_state->reset (); return -1; } if (this->tms_->dispatch_reply (request_id, reply_status, - header_copy.giop_version, + message_state->giop_version, reply_ctx, - cdr) != 0) + message_state) != 0) { if (TAO_debug_level > 0) ACE_ERROR ((LM_ERROR, "TAO (%P|%t) : UIOP_Client_Transport::" "handle_client_input - " "dispatch reply failed\n")); + message_state->reset (); return -1; } // This is a NOOP for the Exclusive request case, but it actually // destroys the stream in the muxed case. - this->destroy_cdr_stream (cdr); + this->tms_->destroy_message_state (message_state); // Return something to indicate the reply is received. return 1; diff --git a/TAO/tao/UIOP_Transport.h b/TAO/tao/UIOP_Transport.h index 98d4ecfe94f..d9a999f4a3f 100644 --- a/TAO/tao/UIOP_Transport.h +++ b/TAO/tao/UIOP_Transport.h @@ -22,6 +22,7 @@ #define TAO_UIOP_TRANSPORT_H #include "tao/Pluggable.h" +#include "tao/GIOP.h" # if !defined (ACE_LACKS_UNIX_DOMAIN_SOCKETS) @@ -124,6 +125,24 @@ public: TAO_UIOP_Client_Connection_Handler *client_handler (void); // return a pointer to the client's connection handler. + virtual void start_request (TAO_ORB_Core *orb_core, + const TAO_Profile *profile, + const char* opname, + CORBA::ULong request_id, + CORBA::Boolean is_twoway, + TAO_OutputCDR &output, + CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)); + // Fill into <output> the right headers to make a request. + + virtual void start_locate (TAO_ORB_Core *orb_core, + const TAO_Profile *profile, + CORBA::ULong request_id, + TAO_OutputCDR &output, + CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((CORBA::SystemException)); + // Fill into <output> the right headers to make a locate request. + int send_request (TAO_ORB_Core *orb_core, TAO_OutputCDR &stream, int twoway); @@ -149,11 +168,6 @@ protected: private: TAO_UIOP_Client_Connection_Handler *client_handler_; // pointer to the corresponding client side connection handler. - - TAO_GIOP_MessageHeader message_header_; - CORBA::ULong current_offset_; - // This keep the state of the current message, to enable - // non-blocking reads. }; // **************************************************************** @@ -177,12 +191,12 @@ public: ~TAO_UIOP_Server_Transport (void); // Default destructor - TAO_UIOP_Server_Connection_Handler *server_handler (void); - // Return a pointer to the underlying connection handler. - -private: TAO_UIOP_Server_Connection_Handler *server_handler_; // Pointer to the corresponding connection handler. + + TAO_GIOP_Message_State message_state_; + // This keep the state of the current message, to enable + // non-blocking reads, fragment reassembly, etc. }; # endif /* !ACE_LACKS_UNIX_DOMAIN_SOCKETS */ diff --git a/TAO/tao/orbconf.h b/TAO/tao/orbconf.h index 79a021db64d..8a354bf8f5b 100644 --- a/TAO/tao/orbconf.h +++ b/TAO/tao/orbconf.h @@ -348,4 +348,16 @@ #define TAO_MESSAGING_MAX_HOPS_POLICY_TYPE 34 #define TAO_MESSAGING_QUEUE_ORDER_POLICY_TYPE 35 +// Control the default version of GIOP used by TAO. +// The ORB is always able to communicate with 1.0 and 1.1 servers, and +// it creates 1.1 endpoints (and profiles). If you need to talk to +// old clients that only understand 1.0 (and do not attempt to use 1.0 +// with 1.1 servers), then change the values below. +#if !defined(TAO_DEF_GIOP_MAJOR) +#define TAO_DEF_GIOP_MAJOR 1 +#endif /* TAO_DEF_GIOP_MAJOR */ +#if !defined(TAO_DEF_GIOP_MINOR) +#define TAO_DEF_GIOP_MINOR 1 +#endif /* TAO_DEF_GIOP_MINOR */ + #endif /* TAO_ORB_CONFIG_H */ diff --git a/TAO/utils/catior/catior.cpp b/TAO/utils/catior/catior.cpp index 7efa5406897..dd03bf00db6 100644 --- a/TAO/utils/catior/catior.cpp +++ b/TAO/utils/catior/catior.cpp @@ -592,9 +592,9 @@ cat_iiop_profile (TAO_InputCDR& stream) // encapsulation... CORBA::Octet iiop_version_major, iiop_version_minor; if (! (str.read_octet (iiop_version_major) - && iiop_version_major == TAO_IIOP_Profile::DEF_IIOP_MAJOR + && iiop_version_major == 1 && str.read_octet (iiop_version_minor) - && iiop_version_minor <= TAO_IIOP_Profile::DEF_IIOP_MINOR)) + && iiop_version_minor <= 0)) { ACE_DEBUG ((LM_DEBUG, "detected new v%d.%d IIOP profile", @@ -657,9 +657,9 @@ cat_uiop_profile (TAO_InputCDR& stream) // encapsulation... CORBA::Octet iiop_version_major, iiop_version_minor; if (! (str.read_octet (iiop_version_major) - && iiop_version_major == TAO_UIOP_Profile::DEF_UIOP_MAJOR + && iiop_version_major == 1 && str.read_octet (iiop_version_minor) - && iiop_version_minor <= TAO_UIOP_Profile::DEF_UIOP_MINOR)) + && iiop_version_minor <= 0)) { ACE_DEBUG ((LM_DEBUG, "detected new v%d.%d UIOP profile", diff --git a/TAO/utils/nslist/nslist.cpp b/TAO/utils/nslist/nslist.cpp index b2fe04212a6..4646b10719a 100644 --- a/TAO/utils/nslist/nslist.cpp +++ b/TAO/utils/nslist/nslist.cpp @@ -9,31 +9,13 @@ // nslist.cpp // // = DESCRIPTION -// Naming Service listing utility +// Naming Service listing utility // // = AUTHOR // Written 1999-06-03 by Thomas Lockhart, NASA/JPL <Thomas.Lockhart@jpl.nasa.gov> // // ============================================================================ -/* $Log$ - * Revision 1.1 1999/06/09 19:43:38 schmidt - * . - * - * Revision 1.3 1999/06/08 18:15:50 lockhart - * Clean up code and add a few comments in preparation for contributing to - * the TAO distribution. - * - * Revision 1.2 1999/06/07 21:02:39 lockhart - * Check for non-existant Naming Service. If none found, then exit with msg. - * Indent multi-level names. - * - * Revision 1.1 1999/06/03 00:21:19 lockhart - * First cut at a Naming Service utility which prints out current NS entries. - * Based on code in ACP, but can travel down trees rather than just showing - * the highest level entries. - */ - #include "tao/TAO.h" #include "orbsvcs/CosNamingC.h" @@ -41,7 +23,7 @@ static void list_context (CosNaming::NamingContext_ptr nc, int level); // Display NS entries from a finite list. -static void +static void show_chunk (CosNaming::NamingContext_ptr nc, const CosNaming::BindingList &bl, int level) @@ -53,31 +35,31 @@ show_chunk (CosNaming::NamingContext_ptr nc, ACE_DEBUG ((LM_DEBUG, "%*s", 2 * level, - bl[i].binding_name[0].id)); + bl[i].binding_name[0].id.in ())); if (ACE_OS::strlen(bl[i].binding_name[0].kind) > 0) ACE_DEBUG ((LM_DEBUG, "(%s)", - bl[i].binding_name[0].kind)); + bl[i].binding_name[0].kind.in ())); // If this is a context node, follow it down to the next // level... if (bl[i].binding_type == CosNaming::ncontext) - { + { ACE_DEBUG ((LM_DEBUG, ": context\n")); - CosNaming::Name Name; - Name.length (1); - Name[0].id = + CosNaming::Name Name; + Name.length (1); + Name[0].id = CORBA::string_dup (bl[i].binding_name[0].id); - CORBA::Object_var obj = nc->resolve (Name); + CORBA::Object_var obj = nc->resolve (Name); - CosNaming::NamingContext_var xc = + CosNaming::NamingContext_var xc = CosNaming::NamingContext::_narrow (obj); - list_context (xc, level + 1); - } + list_context (xc, level + 1); + } // Mark this node as a reference else // The next version should resolve and show the IOR... @@ -86,7 +68,7 @@ show_chunk (CosNaming::NamingContext_ptr nc, } } -static void +static void list_context (CosNaming::NamingContext_ptr nc, int level) { @@ -102,10 +84,10 @@ list_context (CosNaming::NamingContext_ptr nc, CORBA::Boolean more; do - { - more = it->next_n (CHUNK, bl); - show_chunk (nc, bl, level); - } + { + more = it->next_n (CHUNK, bl); + show_chunk (nc, bl, level); + } while (more); it->destroy(); @@ -131,7 +113,7 @@ main (int argc, char *argv[]) ACE_TRY_CHECK; CORBA::String_var str = - orb->object_to_string (root_nc.in (), + orb->object_to_string (root_nc.in (), ACE_TRY_ENV); ACE_TRY_CHECK; @@ -142,7 +124,7 @@ main (int argc, char *argv[]) ACE_DEBUG ((LM_DEBUG, "Naming Service: <%s> ---------\n", - str)); + str.in ())); list_context (root_nc, 1); } @@ -154,6 +136,5 @@ main (int argc, char *argv[]) } ACE_ENDTRY; - return 0; + return 0; } - |