summaryrefslogtreecommitdiff
path: root/ACE/bin/FOCUS/specializations
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/bin/FOCUS/specializations')
-rw-r--r--ACE/bin/FOCUS/specializations/Context-Specific-Optimizations/Dispatch-Resolution-Optimization.spl172
-rw-r--r--ACE/bin/FOCUS/specializations/Flushing_Strategy/Leader_Follower_Flushing_Strategy.spl211
-rw-r--r--ACE/bin/FOCUS/specializations/Messaging_Strategy/GIOP.spl246
-rw-r--r--ACE/bin/FOCUS/specializations/Protocol_Family/IIOP/iiop.spl995
-rw-r--r--ACE/bin/FOCUS/specializations/README16
-rw-r--r--ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_MT.spl452
-rw-r--r--ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_ST.spl468
-rw-r--r--ACE/bin/FOCUS/specializations/Reactor_Family/TP_Reactor.spl439
-rw-r--r--ACE/bin/FOCUS/specializations/Wait_Strategy/Wait_On_Read.spl105
9 files changed, 3104 insertions, 0 deletions
diff --git a/ACE/bin/FOCUS/specializations/Context-Specific-Optimizations/Dispatch-Resolution-Optimization.spl b/ACE/bin/FOCUS/specializations/Context-Specific-Optimizations/Dispatch-Resolution-Optimization.spl
new file mode 100644
index 00000000000..c56543cf54f
--- /dev/null
+++ b/ACE/bin/FOCUS/specializations/Context-Specific-Optimizations/Dispatch-Resolution-Optimization.spl
@@ -0,0 +1,172 @@
+<?xml version="1.0"?>
+
+<!-- Dispatch Resolution Optimization
+ * ================================
+ * This optimization should be applied with the requests
+ * from a client are delivered to the same operation in
+ * an IDL interface. In general this optimization applies
+ * to IDL interfaces that have a single operation defined
+ * on them
+ *
+ * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu>
+ * $Id$
+-->
+
+<transform>
+
+<module name="TAO/tao">
+
+<file name="Connection_Handler.h">
+
+<!-- Include file to be added for this specialization -->
+<add>
+ <hook>CONNECTION_HANDLER_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>
+ class TAO_Servant_Base;
+ #include "tao/Abstract_Servant_Base.h"
+ </data>
+</add>
+
+<!-- Add get and set operations to hold operation signature -->
+<add>
+ <hook>CONNECTION_HANDLER_SPL_PRIVATE_DATA_ADD_HOOK</hook>
+ <data>
+TAO_Skeleton op_signature_;
+TAO_Servant_Base *servant_;
+ </data>
+</add>
+
+<!-- Add get and set public operations for the data -->
+<add>
+ <hook>CONNECTION_HANDLER_SPL_PUBLIC_METHODS_ADD_HOOK</hook>
+ <data>
+void set_op_signature (TAO_Skeleton &amp;skeleton,
+ TAO_Servant_Base *&amp;servant);
+void get_op_signature (TAO_Skeleton &amp;operation_ptr,
+ TAO_Servant_Base *&amp;servant);
+ </data>
+</add>
+
+</file>
+
+<file name="Connection_Handler.inl">
+
+<!-- Add operations to get and set the operation signature -->
+<add>
+ <hook>CONNECTION_HANDLER_SPL_METHODS_ADD_HOOK</hook>
+ <data>
+ ACE_INLINE void
+ TAO_Connection_Handler::set_op_signature (TAO_Skeleton &amp;skeleton,
+ TAO_Servant_Base *&amp;servant)
+{
+ this->op_signature_ = skeleton;
+ this->servant_ = servant;
+}
+
+ACE_INLINE void
+TAO_Connection_Handler::get_op_signature (TAO_Skeleton &amp;operation_ptr,
+ TAO_Servant_Base *&amp;servant)
+{
+ operation_ptr = this->op_signature_;
+ servant = this->servant_;
+}
+
+ </data>
+</add>
+</file>
+
+<file name="GIOP_Message_Base.h">
+
+<add>
+<hook>GIOP_MESSAGE_BASE_DATA_MEMBER_ADD_HOOK</hook>
+<data>bool once__;</data>
+</add>
+</file>
+
+<file name="GIOP_Message_Base.cpp">
+
+<add>
+ <hook>GIOP_MESSAGE_BASE_INCLUDE_ADD_HOOK</hook>
+ <data>#include "tao/Connection_Handler.h"</data>
+</add>
+
+<!-- Add a once__ data member to the class that will
+ only resolve the dispatch once -->
+<substitute match-line="yes">
+ <search>TAO_DEF_GIOP_MINOR\)</search>
+ <replace>TAO_DEF_GIOP_MINOR)
+ , once__ (1)
+ </replace>
+</substitute>
+
+<!-- Comment code that resolves dispatch normally -->
+<comment>
+ <start-hook>TAO_DISPATCH_RESOLUTION_OPT_COMMENT_HOOK_START</start-hook>
+ <end-hook>TAO_DISPATCH_RESOLUTION_OPT_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<!-- Add the optimized path code -->
+<add>
+ <hook>TAO_DISPATCH_RESOLUTION_OPT_COMMENT_HOOK_END</hook>
+ <data>
+ if (once__)
+ {
+ once__ = false;
+
+ // Normal path the first time
+ this->orb_core_->request_dispatcher ()->dispatch (
+ this->orb_core_,
+ request,
+ forward_to
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ else
+ {
+ // Dispatch directly to the skeleton
+ TAO_Connection_Handler *handler =
+ transport->connection_handler ();
+ TAO_Skeleton skel;
+ TAO_Servant_Base *skeleton_ptr;
+ handler->get_op_signature (skel, skeleton_ptr);
+
+ // Convert references to void *
+ void *upcall_ptr = 0;
+ skel (request,
+ upcall_ptr,
+ (void *)skeleton_ptr
+ ACE_ENV_ARG_PARAMETER);
+ if (response_required)
+ request.tao_send_reply ();
+ }
+ </data>
+</add>
+</file>
+</module>
+
+<module name="TAO/tao/PortableServer">
+<file name="Servant_Base.cpp">
+
+<!-- Add necessary include files -->
+<add>
+ <hook>TAO_SERVANT_BASE_INCLUDE_ADD_HOOK</hook>
+ <data>#include "tao/Transport.h"</data>
+ <data>#include "tao/Connection_Handler.h"</data>
+</add>
+
+<!-- After processing the first request, set the operation signature on
+ the connection handler for subsequent request processing -->
+<add>
+ <hook>TAO_DISPATCH_RESOLUTION_OPT_ADD_HOOK</hook>
+ <data>
+ TAO_Connection_Handler *handler =
+ req.transport ()->connection_handler ();
+ handler->set_op_signature (skel,
+ static_cast&lt;TAO_Servant_Base *&gt; (derived_this));
+ </data>
+</add>
+</file>
+
+</module>
+
+</transform>
diff --git a/ACE/bin/FOCUS/specializations/Flushing_Strategy/Leader_Follower_Flushing_Strategy.spl b/ACE/bin/FOCUS/specializations/Flushing_Strategy/Leader_Follower_Flushing_Strategy.spl
new file mode 100644
index 00000000000..a33b90ba255
--- /dev/null
+++ b/ACE/bin/FOCUS/specializations/Flushing_Strategy/Leader_Follower_Flushing_Strategy.spl
@@ -0,0 +1,211 @@
+<?xml version="1.0"?>
+
+<!-- Leader Follower Flushing Strategy Specializations
+ * =================================================
+ * Details all the specialization transformations necessary
+ * to specialize the Flushing Strategy with the concrete
+ * Leader_Follower flushing strategy.
+ *
+ * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu>
+ * $Id$
+-->
+
+<transform>
+
+<module name="TAO/tao">
+
+<!-- Transformations to L/F Flushing Strategy -->
+<file name="Leader_Follower_Flushing_Strategy.h">
+
+<!-- Comment out Flushing_Strategy include -->
+<remove>#include "Flushing_Strategy.h"</remove>
+
+<!-- Add the forward declarations -->
+<add>
+ <hook>FLUSHING_STRATEGY_SPL_INCLUDE_ADD_HOOK</hook>
+ <data>
+class TAO_Transport;
+class TAO_Queued_Message;
+class ACE_Time_Value;
+
+#include "TAO_Export.h"
+ </data>
+</add>
+
+<!-- Remove all virtual key words -->
+<remove>virtual</remove>
+
+<!-- Remove inheritance from Flushing strategy -->
+<remove>: public TAO_Flushing_Strategy</remove>
+
+</file>
+
+<!-- Do not build other Flushing Strategies -->
+<file name="tao.mpc">
+
+ <substitute>
+ <search>Flushing_Strategy.h</search>
+ <replace>// Flushing_Strategy.h</replace>
+ </substitute>
+ <substitute>
+ <search>Flushing_Strategy.cpp</search>
+ <replace>// Flushing_Strategy.cpp</replace>
+ </substitute>
+
+ <substitute>
+ <search>Block_Flushing_Strategy.h</search>
+ <replace>// Block_Flushing_Strategy.h</replace>
+ </substitute>
+ <substitute>
+ <search>Block_Flushing_Strategy.cpp</search>
+ <replace>// Block_Flushing_Strategy.cpp</replace>
+ </substitute>
+
+ <substitute>
+ <search>Reactive_Flushing_Strategy.h</search>
+ <replace>// Reactive_Flushing_Strategy.h</replace>
+ </substitute>
+ <substitute>
+ <search>Reactive_Flushing_Strategy.cpp</search>
+ <replace>// Reactive_Flushing_Strategy.cpp</replace>
+ </substitute>
+
+</file>
+
+<file name="default_resource.cpp">
+
+<substitute match-line="yes">
+ <search>#include "tao/Reactive_Flushing_Strategy.h"</search>
+ <replace> // #include "tao/Reactive_Flushing_Strategy.h"</replace>
+</substitute>
+
+<substitute match-line="yes">
+ <search>#include "tao/Block_Flushing_Strategy.h"</search>
+ <replace>// #include "tao/Block_Flushing_Strategy.h"</replace>
+</substitute>
+
+<!-- Replace all occurences of Flushing_Strategy with
+ L/F Flushing Strategy -->
+<substitute>
+ <search>TAO_Flushing_Strategy</search>
+ <replace>TAO_Leader_Follower_Flushing_Strategy</replace>
+</substitute>
+
+<!-- Comment out region specified by comment hooks -->
+<comment>
+ <start-hook>FLUSHING_STRATEGY_SPL_COMMENT_HOOK_START</start-hook>
+ <end-hook>FLUSHING_STRATEGY_SPL_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<!-- Add the L/F specialization after the hook -->
+<add>
+ <hook>FLUSHING_STRATEGY_SPL_COMMENT_HOOK_END</end-hook>
+ <data>this->flushing_strategy_type_ = TAO_LEADER_FOLLOWER_FLUSHING;
+ </data>
+</add>
+
+<!-- Comment out creation of all other flushing strategies -->
+<comment>
+ <start-hook>FLUSHING_STRATEGY_CREATION_SPL_HOOK_START</start-hook>
+ <end-hook>FLUSHING_STRATEGY_CREATION_SPL_HOOK_END</end-hook>
+</comment>
+
+<!-- Create the L/F flushing strategy directly -->
+<add>
+ <hook>FLUSHING_STRATEGY_CREATION_SPL_HOOK_END</hook>
+ <data>ACE_NEW_RETURN (strategy,
+ TAO_Leader_Follower_Flushing_Strategy,
+ 0);
+ </data>
+</add>
+
+</file>
+
+<file name="default_resource.h">
+
+<!-- Replace all occurences of Flushing_Strategy with L/F strategy -->
+<substitute>
+ <search>TAO_Flushing_Strategy</search>
+ <replace>TAO_Leader_Follower_Flushing_Strategy</replace>
+</substitute>
+
+</file>
+
+<file name="ORB_Core.h">
+
+<!-- Replace all occurences of base strategy with most
+ derived strategy -->
+<substitute>
+ <search>TAO_Flushing_Strategy</search>
+ <replace>TAO_Leader_Follower_Flushing_Strategy</replace>
+</substitute>
+
+</file>
+
+<file name="ORB_Core.cpp">
+
+<!-- Replace the Flushing Strategy inclue with L/F
+ flushing include -->
+<substitute match-line="yes">
+ <search>#include "Flushing_Strategy.h"</search>
+ <replace>#include "Leader_Follower_Flushing_Strategy</replace>
+</substitute>
+
+</file>
+
+<file name="ORB_Core.i">
+
+<!-- Replace all occurences of base strategy with most
+ derived strategy -->
+<substitute>
+ <search>TAO_Flushing_Strategy</search>
+ <replace>TAO_Leader_Follower_Flushing_Strategy</replace>
+</substitute>
+
+</file>
+
+<file name="Transport.h">
+
+<!-- Remove the friend declaration of Reactive_Flushing -->
+<substitute match-line="yes">
+ <search>friend class TAO_Reactive_Flushing_Strategy;</search>
+ <replace>// friend class TAO_Reactive_Flushing_Strategy;</replace>
+</substitute>
+
+<!-- Remove friend declaration of Block Flushing -->
+<substitute match-line="yes">
+ <search>friend class TAO_Block_Flushing_Strategy;</search>
+ <replace>// friend class TAO_Block_Flushing_Strategy;</replace>
+</substitute>
+
+</file>
+
+<file name="Transport.cpp">
+
+<substitute match-line="yes">
+ <search>#include "Flushing_Strategy.h"</search>
+ <replace>#include "Leader_Follower_Flushing_Strategy.h</replace>
+</substitute>
+
+<!-- Replace all occurences of TAO_Flushing_Strategy with
+ TAO_Leader_Follower_Flushing -->
+<substitute>
+ <search>TAO_Flushing_Strategy</search>
+ <replace>TAO_Leader_Follower_Flushing_strategy</replace>
+</substitute>
+
+</file>
+
+<file name="Resource_Factor.h">
+
+<!-- Replace TAO_Flushing_Strategy with L/F version -->
+<substitute>
+ <search>TAO_Flushing_Strategy</search>
+ <replace>TAO_Leader_Follower_Flushing_Strategy</replace>
+</substitute>
+
+</file>
+
+</module>
+
+</transform>
diff --git a/ACE/bin/FOCUS/specializations/Messaging_Strategy/GIOP.spl b/ACE/bin/FOCUS/specializations/Messaging_Strategy/GIOP.spl
new file mode 100644
index 00000000000..76e27509848
--- /dev/null
+++ b/ACE/bin/FOCUS/specializations/Messaging_Strategy/GIOP.spl
@@ -0,0 +1,246 @@
+<?xml version="1.0"?>
+
+<!-- Pluggable Messaging Specializations:
+ * When the concrete pluggable messaging is selected,
+ * this specialization removes the need for the Pluggable
+ * messaging interface completely from within TAO.
+ *
+ * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu>
+ * $Id$
+-->
+
+<transform>
+
+<!-- Define the module where there are multiple files -->
+<module name="TAO/tao">
+
+<file name="tao.mpc">
+
+<!-- Remove Pluggable messaging include altogether -->
+<substitute>
+ <search>GIOP_Message_Lite.cpp</search>
+ <replace>// GIOP_Message_Lite.cpp </replace>
+</substitute>
+<substitute>
+ <search>GIOP_Message_Lite.h</search>
+ <replace>// GIOP_Message_Lite.h</replace>
+</substitute>
+<substitute>
+ <search>Pluggable_Messaging.h</search>
+ <replace>// Pluggable_Messaging.h</replace>
+</substitute>
+<substitute>
+ <search>Pluggable_Messaging.cpp</search>
+ <replace>// Pluggable_Messaging.cpp</replace>
+</substitute>
+
+</file>
+
+<file name="GIOP_Message_Base.h">
+
+<!-- Remove Pluggable Messaging include directive -->
+<remove>#include "tao/Pluggable_Messaging.h"</remove>
+
+<!-- Remove all occurences of virtual keyword -->
+<remove>virtual</remove>
+
+<!-- Remove inheritance from Pluggable Messaging replace with
+ concrete class
+-->
+<remove>: public TAO_Pluggable_Messaging</remove>
+
+<!-- Typedef the concrete type, GIOP_Message_Base as the
+ underlying pluggable messaging type
+ -->
+<add>
+ <hook>MESSAGING_SPL_EXTERN_ADD_HOOK</hook>
+ <data>typedef TAO_GIOP_Message_Base TAO_Pluggable_Messaging;</data>
+</add>
+
+<!-- The method is_ready_for_bi_directional_giop is procted, this
+ should be made public -->
+<substitute match-line="yes">
+ <!-- Operation signature -->
+ <search>int is_ready_for_bidirectional \(TAO_OutputCDR &amp;msg\);</search>
+ <replace>
+
+public:
+ int is_ready_for_bidirectional (TAO_OutputCDR &amp;msg);
+
+protected:
+ </replace>
+</substitute>
+
+</file>
+
+<file name="IIOP_Connection_Handler.h">
+
+<!-- remove forward decls -->
+<remove>class TAO_Pluggable_Messaging;</remove>
+
+</file>
+
+<file name="IIOP_Transport.h">
+
+<!-- remove forward decls -->
+<remove>class TAO_Pluggable_Messaging;</remove>
+
+</file>
+
+<file name="TAO_Server_Request.h">
+
+<!-- Remove Pluggable messaging include altogether -->
+<substitute match-line="yes">
+ <search>class TAO_Pluggable_Messaging;</search>
+ <replace>#include "tao/GIOP_Message_Base.h"</replace>
+</substitute>
+
+</file>
+
+<file name="TAO_Server_Request.cpp">
+
+<!-- Remove Pluggable messaging include altogether -->
+<remove>#include "Pluggable_Messaging.h"</remove>
+
+</file>
+
+<file name="Transport.h">
+<!-- Remove Pluggable messaging include altogether -->
+<substitute match-line="yes">
+ <search>class TAO_Pluggable_Messaging;</search>
+ <replace>#include "tao/GIOP_Message_Base.h"</replace>
+</substitute>
+</file>
+
+<file name="Transport.cpp">
+ <remove>#include "Pluggable_Messaging.h"</remove>
+</file>
+
+</module>
+
+<!-- Transformations to the Messaging Directory -->
+<module name="TAO/tao/Messaging">
+
+<file name="AMH_Response_Handler.h">
+
+<substitute match-line="yes">
+ <search>class TAO_Pluggable_Messaging;</search>
+ <replace>#include "tao/GIOP_Message_Base.h"</replace>
+</substitute>
+
+</file>
+
+<file name="AMH_Response_Handler.cpp">
+ <remove>#include "tao/Pluggable_Messaging.h"</remove>
+</file>
+
+<file name="AMH_Response_Handler.cpp">
+<substitute match-line="yes">
+ <search>#include "tao/Pluggable_Messaging.h"</search>
+ <replace>#include "tao/GIOP_Message_Base.h"</replace>
+</substitute>
+</file>
+
+<file name="Asynch_Invocation.cpp">
+ <remove>#include "tao/Pluggable_Messaging.h"</remove>
+</file>
+
+</module>
+
+<module name="TAO/tao/Strategies">
+
+<file name="DIOP_Connection_Handler.h">
+ <remove>class TAO_Pluggable_Messaging;</remove>
+</file>
+
+<file name="DIOP_Transport.h">
+ <remove>class TAO_Pluggable_Messaging;</remove>
+</file>
+
+<file name="DIOP_Transport.cpp">
+
+ <!-- Replace GIOP_Lite with GIOP -->
+<comment>
+ <start-hook>MESSAGING_SPL_COMMENT_HOOK_START</start-hook>
+ <end-hook>MESSAGING_SPL_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<add>
+ <hook>MESSAGING_SPL_COMMENT_HOOK_END</hook>
+ <data>
+ ACE_NEW (this->messaging_object_,
+ TAO_GIOP_Message_Base (orb_core,
+ ACE_MAX_DGRAM_SIZE));
+ </data>
+</add>
+
+ <remove>#include "tao/GIOP_Message_Lite.h"</remove>
+
+</file>
+
+<file name="SHMIOP_Transport.h">
+ <remove>class TAO_Pluggable_Messaging;</remove>
+</file>
+
+<file name="SHMIOP_Transport.cpp">
+ <remove>#include "tao/GIOP_Message_Lite.h"</remove>
+
+ <!-- Replace GIOP_Lite with GIOP -->
+<comment>
+ <start-hook>MESSAGING_SPL_COMMENT_HOOK_START</start-hook>
+ <end-hook>MESSAGING_SPL_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<add>
+ <hook>MESSAGING_SPL_COMMENT_HOOK_END</hook>
+ <data>
+ ACE_NEW (this->messaging_object_,
+ TAO_GIOP_Message_Base (orb_core,
+ ACE_MAX_DGRAM_SIZE));
+ </data>
+</add>
+
+</file>
+
+<file name="UIOP_Connection_Handler.h">
+ <remove>class TAO_Pluggable_Messaging;</remove>
+</file>
+
+<file name="UIOP_Connection_Handler.cpp">
+ <remove>#include "tao/GIOP_Message_Lite.h"</remove>
+</file>
+
+<file name="UIOP_Transport.h">
+ <remove>class TAO_Pluggable_Messaging;</remove>
+</file>
+
+<file name="UIOP_Transport.cpp">
+
+ <!-- Replace GIOP_Lite with GIOP -->
+<comment>
+ <start-hook>MESSAGING_SPL_COMMENT_HOOK_START</start-hook>
+ <end-hook>MESSAGING_SPL_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<add>
+ <hook>MESSAGING_SPL_COMMENT_HOOK_END</hook>
+ <data>
+ ACE_NEW (this->messaging_object_,
+ TAO_GIOP_Message_Base (orb_core,
+ ACE_MAX_DGRAM_SIZE));
+ </data>
+</add>
+ <remove>#include "tao/GIOP_Message_Lite.h"</remove>
+</file>
+</module>
+
+<module name="TAO/tao/DynamicInterface">
+ <file name="DII_Invocation_Adapter.cpp">
+ <substitute match-line="yes">
+ <search>#include "tao/Pluggable_Messaging.h"</search>
+ <replace>#include "tao/GIOP_Message_Base.h"</replace>
+ </substitute>
+ </file>
+</module>
+
+</transform>
diff --git a/ACE/bin/FOCUS/specializations/Protocol_Family/IIOP/iiop.spl b/ACE/bin/FOCUS/specializations/Protocol_Family/IIOP/iiop.spl
new file mode 100644
index 00000000000..d0da22a42f9
--- /dev/null
+++ b/ACE/bin/FOCUS/specializations/Protocol_Family/IIOP/iiop.spl
@@ -0,0 +1,995 @@
+<?xml version="1.0"?>
+
+<!-- IIOP Pluggable Protocol specialization
+ * ======================================
+ * This specializes the pluggable protocol framework within
+ * TAO for the IIOP concrete protocol implementation. This
+ * specialization encompasses specializations, such as
+ * specializations for the Transport, Profile, end-point,
+ * Acceptor and Connector implementations within ACE+TAO.
+ *
+ * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu>
+ * $Id$
+-->
+<transform>
+
+<module name="TAO/tao">
+
+<!-- Transformations to Transport implementation in TAO -->
+<file name="Transport.h">
+
+<!-- Search for TAO_Connection_Handler -->
+<substitute match-line="yes">
+ <search>class TAO_Connection_Handler;</search>
+ <replace>#include "tao/Connection_Handler.h"</replace>
+</substitute>
+
+<!-- Add forward declarations and includes specific to
+ IIOP -->
+<add>
+ <hook>TAO_TRANSPORT_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>
+namespace IIOP
+{
+ class ListenPointList;
+}
+
+class TAO_Acceptor;
+class TAO_Adapter;
+ </data>
+</add>
+
+<!-- Remove all virtual and pure virtual methods in this
+ class -->
+<remove>virtual</remove>
+
+<substitute match-line="yes">
+ <search>= 0;</search>
+ <replace>;</replace>
+</substitute>
+
+<!-- Replace the base class constructor with the derive
+ classes's constructor -->
+<substitute match-line="yes">
+ <search>TAO_Transport \(CORBA::ULong tag,</search>
+ <replace>TAO_Transport (TAO_IIOP_Connection_Handler *, CORBA::ULong tag,
+ </replace>
+</substitute>
+
+<!-- Add public methods defined in IIOP_Transport -->
+<add>
+ <hook>TAO_TRANSPORT_SPL_PUBLIC_METHODS_ADD_HOOK</hook>
+ <data>
+
+ /// Bridge method to call a similar method on the connection handler
+ void update_protocol_properties (int send_buffer_size,
+ int recv_buffer_size,
+ int no_delay,
+ int enable_network_priority);
+
+ /// Generate the request header
+ int generate_request_header (TAO_Operation_Details &amp;opd,
+ TAO_Target_Specification &amp;spec,
+ TAO_OutputCDR &amp;msg);
+ </data>
+</add>
+
+<!-- Add private methods from IIOP_Transport -->
+<add>
+ <hook>TAO_TRANSPORT_SPL_PRIVATE_METHODS_ADD_HOOK</hook>
+ <data>
+ void set_bidir_context_info (TAO_Operation_Details &amp;opdetails);
+ int get_listen_point (IIOP::ListenPointList &amp;listen_point_list,
+ TAO_Acceptor *acceptor);
+ </data>
+</add>
+
+<!-- Add private data from IIOP_Transport -->
+<add>
+ <hook>TAO_TRANSPORT_SPL_DATA_MEMBERS_ADD_HOOK</hook>
+ <data>
+ /// The connection service handler used for accessing lower layer
+ /// communication protocols.
+ TAO_IIOP_Connection_Handler *connection_handler_;
+
+ /// Our messaging object.
+ TAO_Pluggable_Messaging *messaging_object_;
+ </data>
+</add>
+
+<!-- Typedef the TAO_Transport as IIOP_Transport -->
+<add>
+ <hook>TAO_TRANSPORT_SPL_EXTERN_ADD_HOOK</hook>
+ <data>typedef TAO_Transport TAO_IIOP_Transport;</data>
+</add>
+
+<!-- This method is overridden in the derived class -->
+<substitute>
+ <search>generate_request_header</search>
+ <replace>generate_request_header_base__</replace>
+</substitute>
+
+</file>
+
+<file name="Transport.cpp">
+
+<!-- Add necessary includes -->
+<add>
+ <hook>TAO_TRANSPORT_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>
+#include "Transport_Acceptor.h"
+#include "IIOPC.h"
+#include "Acceptor_Registry.h"
+#include "operation_details.h"
+#include "GIOP_Message_Base.h"
+#include "Protocols_Hooks.h"
+ </data>
+</add>
+
+<!-- Modify the TAO constructor adding the IIOP Transport's data -->
+<substitute match-line="yes">
+ <search>TAO_Transport::TAO_Transport \(CORBA::ULong tag,</search>
+ <replace>TAO_Transport::TAO_Transport (TAO_IIOP_Connection_Handler *handler,
+ CORBA::ULong tag,
+ </replace>
+</substitute>
+
+<substitute match-line="yes">
+ <search>, partial_message_ \(0\)</search>
+ <replace> , partial_message_ (0)
+ , connection_handler_ (handler)
+ , messaging_object_ (0)
+ </replace>
+</substitute>
+
+<!-- Within the constructor create/initialize the messaging object -->
+<add>
+ <hook>TAO_TRANSPORT_SPL_CONSTRUCTOR_ADD_HOOK</hook>
+ <data>
+ // Use the normal GIOP object
+ ACE_NEW (this->messaging_object_,
+ TAO_GIOP_Message_Base (orb_core));
+ </data>
+</add>
+
+<add>
+ <hook>TAO_TRANSPORT_SPL_DESTRUCTOR_ADD_HOOK</hook>
+ <data>delete this->messaging_object_;</data>
+</add>
+
+<!-- comment out unimplemented base class methods -->
+<comment>
+ <start-hook>TAO_TRANSPORT_SPL_COMMENT_HOOK_START</start-hook>
+ <end-hook>TAO_TRANSPORT_SPL_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<!-- Add the concrete methods from IIOP_Transport implementation -->
+<copy-from-source>
+ <source>IIOP_Transport.cpp</source>
+
+ <copy-hook-start>TAO_TRANSPORT_SPL_COPY_HOOK_START</copy-hook-start>
+ <copy-hook-end>TAO_TRANSPORT_SPL_COPY_HOOK_END</copy-hook-end>
+
+ <dest-hook>TAO_TRANSPORT_SPL_METHODS_ADD_HOOK</dest-hook>
+</copy-from-source>
+
+<!-- The derived class calls this method. Override this -->
+<substitute>
+ <search>TAO_Transport::generate_request_header</search>
+ <replace>TAO_Transport::generate_request_header_base__</replace>
+</substitute>
+
+</file>
+
+<!-- Transformations to specialize Connection_Handler class -->
+<file name="Connection_Handler.h">
+
+<!-- Remove the default constructor, NOTE: we use regular expressions
+ to match the constructor but not the destructor -->
+<remove>\s+TAO_Connection_Handler\s*\(void\);</remove>
+
+<!-- Make sure that Connection_Handler inherits from SVC_HANDLER -->
+<substitute match-line="yes">
+ <search>: public TAO_LF_CH_Event</search>
+ <replace>: public TAO_IIOP_SVC_HANDLER,
+ public TAO_LF_CH_Event
+ </replace>
+</substitute>
+
+<!-- Forward declarations -->
+<add>
+ <hook>CONNECTION_HANDLER_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>
+#include "ace/Svc_Handler.h"
+#include "ace/SOCK_Stream.h"
+
+typedef ACE_Svc_Handler &lt; ACE_SOCK_STREAM, ACE_NULL_SYNCH &gt;
+ TAO_IIOP_SVC_HANDLER;
+
+namespace IIOP
+{
+ class ListenPointList;
+}
+ </data>
+</add>
+
+<!-- Public methods from IIOP_Connection_Handler class -->
+<add>
+ <hook>CONNECTION_HANDLER_SPL_PUBLIC_METHODS_ADD_HOOK</hook>
+ <data>
+ int open (void *);
+ int close (u_long = 0);
+
+ int resume_handler (void);
+ int handle_output (ACE_HANDLE);
+ int handle_close (ACE_HANDLE, ACE_Reactor_Mask);
+ int handle_timeout (const ACE_Time_Value &amp;current_time,
+ const void *act = 0);
+
+ /// Add ourselves to Cache.
+ int add_transport_to_cache (void);
+
+ /// Process the @a listen_list
+ int process_listen_point_list (IIOP::ListenPointList &amp;listen_list);
+
+ /// Check if network priority needs to be enabled
+ int enable_network_priority (void);
+
+ TAO_Connection_Handler (ACE_Thread_Manager * = 0);
+
+ /// Constructor.
+ TAO_Connection_Handler (TAO_ORB_Core *orb_core,
+ CORBA::Boolean flag);
+ </data>
+</add>
+
+<!-- Private data members -->
+<add>
+ <hook>CONNECTION_HANDLER_SPL_PRIVATE_DATA_ADD_HOOK</hook>
+ <data>int dscp_codepoint_;</data>
+</add>
+
+<!-- Typedef the class -->
+<add>
+ <hook>CONNECTION_HANDLER_SPL_EXTERN_ADD_HOOK</hook>
+ <data>typedef TAO_Connection_Handler TAO_IIOP_Connection_Handler;</data>
+</add>
+
+<!-- Remove all virtuals and =0; from the code -->
+<remove>virtual</remove>
+
+<substitute match-line="yes">
+ <search>= 0;</search>
+ <replace>;</replace>
+</substitute>
+
+</file>
+
+<file name="Connection_Handler.cpp">
+
+<!-- Add the include hook -->
+<add>
+ <hook>CONNECTION_HANDLER_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>
+#include "IIOPC.h"
+#include "Thread_Lane_Resources.h"
+#include "Base_Transport_Property.h"
+#include "Protocols_Hooks.h"
+#include "Wait_Strategy.h"
+
+#include "ace/os_include/netinet/os_tcp.h"
+#include "ace/os_include/os_netdb.h"
+ </data>
+</add>
+
+<!-- IIOP_Connection_Handler constructors added -->
+<add>
+ <hook>CONNECTION_HANDLER_SPL_METHODS_ADD_HOOK</hook>
+ <data>
+TAO_Connection_Handler::TAO_Connection_Handler (ACE_Thread_Manager *t)
+ : TAO_IIOP_SVC_HANDLER (t, 0 , 0),
+ orb_core_ (0),
+ dscp_codepoint_ (IPDSFIELD_DSCP_DEFAULT &lt;&lt; 2)
+{
+ ACE_ASSERT (0);
+}
+
+TAO_Connection_Handler::TAO_Connection_Handler (
+ TAO_ORB_Core *orb_core,
+ CORBA::Boolean flag)
+ : TAO_IIOP_SVC_HANDLER (orb_core->thr_mgr (), 0, 0),
+ orb_core_ (orb_core),
+ transport_ (0),
+ dscp_codepoint_ (IPDSFIELD_DSCP_DEFAULT &lt;&lt; 2)
+{
+ TAO_IIOP_Transport* specific_transport = 0;
+ ACE_NEW (specific_transport,
+ TAO_IIOP_Transport (this, IOP::TAG_INTERNET_IOP, orb_core));
+
+ // store this pointer (indirectly increment ref count)
+ this->transport (specific_transport);
+
+ // @@todo: We need to have a distinct option/ method in the resource
+ // factory for this and TAO_Transport.
+ this->lock_ =
+ this->orb_core_->resource_factory ()->create_cached_connection_lock ();
+
+ // Put ourselves in the connection wait state as soon as we get
+ // created
+ this->state_changed (TAO_LF_Event::LFS_CONNECTION_WAIT,
+ this->orb_core_->leader_follower ());
+}
+ </data>
+</add>
+
+<!-- Replace all occurances of IIOP_Connection_Handler with that
+ of TAO_Connection_Handler -->
+<substitute>
+ <search>TAO_IIOP_Connection_Handler</search>
+ <replace>TAO_Connection_Handler</replace>
+</substitute>
+
+<!-- Comment out base class methods that are over-ridden in the
+ derived class -->
+<comment>
+ <start-hook>CONNECTION_HANDLER_SPL_COMMENT_HOOK_START</start-hook>
+ <end-hook>CONNECTION_HANDLER_SPL_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<!-- Copy operations from IIOP_Connection_Handler class and put them
+ in the Connection_Handler class -->
+
+<copy-from-source>
+
+ <source>IIOP_Connection_Handler.cpp</source>
+ <copy-hook-start>CONNECTION_HANDLER_SPL_COPY_HOOK_START</copy-hook-start>
+ <copy-hook-end>CONNECTION_HANDLER_SPL_COPY_HOOK_END</copy-hook-end>
+ <dest-hook>CONNECTION_HANDLER_SPL_METHODS_ADD_HOOK</dest-hook>
+
+</copy-from-source>
+
+<add>
+ <hook>CONNECTION_HANDLER_DESTRUCTOR_ADD_HOOK</hook>
+ <data>delete this->transport ();</data>
+</add>
+
+</file>
+
+<!-- Modifications to Acceptor and Connector Components in TAO -->
+<file name="Transport_Acceptor.h">
+
+<!-- Forward declaration -->
+<add>
+ <hook>TAO_ACCEPTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>
+#include "tao/Connection_Handler.h"
+#include "tao/Acceptor_Impl.h"
+#include "tao/GIOP_Message_Version.h"
+#include "ace/Acceptor.h"
+#include "ace/SOCK_Acceptor.h"
+ </data>
+</add>
+
+<!-- Methods from IIOP_Acceptor components -->
+<copy-from-source>
+ <source>IIOP_Acceptor.h</source>
+ <copy-hook-start>TAO_ACCEPTOR_SPL_CONCRETE_METHODS_COPY_HOOK_START</copy-hook-start>
+ <copy-hook-end>TAO_ACCEPTOR_SPL_CONCRETE_METHODS_COPY_HOOK_END</copy-hook-end>
+ <dest-hook>TAO_ACCEPTOR_SPL_PUBLIC_METHODS_ADD_HOOK</dest-hook>
+</copy-from-source>
+
+<!-- Typedef hook -->
+<add>
+ <hook>TAO_ACCEPTOR_SPL_EXTERN_ADD_HOOK</hook>
+ <data>typedef TAO_Acceptor TAO_IIOP_Acceptor;
+ #if defined(__ACE_INLINE__)
+ #include "tao/IIOP_Acceptor.i"
+ #endif /* __ACE_INLINE__ */
+ </data>
+</add>
+
+<!-- Private data memeber -->
+<copy-from-source>
+ <source>IIOP_Acceptor.h</source>
+
+ <copy-hook-start>TAO_ACCEPTOR_SPL_DATA_MEMBERS_COPY_HOOK_START</copy-hook-start>
+ <copy-hook-end>TAO_ACCEPTOR_SPL_DATA_MEMBERS_COPY_HOOK_END</copy-hook-end>
+
+ <dest-hook>TAO_ACCEPTOR_SPL_DATA_MEMBERS_ADD_HOOK</dest-hook>
+</copy-from-source>
+
+<!-- Eliminate the virtual functions -->
+<remove>virtual</remove>
+<substitute match-line="yes">
+ <search>= 0;</search>
+ <replace>;</replace>
+</substitute>
+
+<!-- Remove destructor -->
+<remove>~TAO_IIOP_Acceptor \(void\);</remove>
+
+<substitute>
+ <search>TAO_IIOP_Acceptor</search>
+ <replace>TAO_Acceptor</replace>
+</substitute>
+
+</file>
+
+<!-- Transformations to Transport_Acceptor.cpp -->
+<file name="Transport_Acceptor.cpp">
+
+<copy-from-source>
+ <source>IIOP_Acceptor.cpp</source>
+
+ <copy-hook-start>TAO_ACCEPTOR_SPL_COPY_HOOK_START</copy-hook-start>
+ <copy-hook-end>TAO_ACCEPTOR_SPL_COPY_HOOK_END</copy-hook-end>
+
+ <dest-hook>TAO_ACCEPTOR_SPL_METHODS_ADD_HOOK</dest-hook>
+</copy-from-source>
+
+<!-- Modify the constructor -->
+<substitute match-line="yes">
+ <search>: TAO_Acceptor \(IOP::TAG_INTERNET_IOP\),</search>
+ <replace>: tag_ (IOP::TAG_INTERNET_IOP),
+ </replace>
+</substitute>
+
+<!-- Add mthods to the destructor -->
+<add>
+ <hook>TAO_ACCEPTOR_DESTRUCTOR_ADD_HOOK</hook>
+ <data>
+ this->close ();
+ delete this->creation_strategy_;
+ delete this->concurrency_strategy_;
+ delete this->accept_strategy_;
+
+ delete [] this->addrs_;
+
+ for (CORBA::ULong i = 0; i &lt; this->endpoint_count_; ++i)
+ CORBA::string_free (this->hosts_[i]);
+
+ delete [] this->hosts_;
+ </data>
+</add>
+
+<!-- Trasnform IIOP_Acceptor to TAO_Acceptor -->
+<substitute match-line="yes">
+ <search>#include "tao/IIOP_Acceptor.h"</search>
+ <replace> </replace>
+</substitute>
+
+<substitute match-line="yes">
+ <search>#include "tao/IIOP_Profile.h"</search>
+ <replace>#include "tao/Profile.h"</replace>
+</substitute>
+
+<substitute>
+ <search>TAO_IIOP_Acceptor::TAO_IIOP_Acceptor</search>
+ <replace>TAO_Acceptor::TAO_Acceptor</replace>
+</substitute>
+
+</file>
+
+<file name="tao.mpc">
+
+<!-- Do not build all IIOP_* files as the specializations
+ are moved to the base classes -->
+
+<substitute>
+ <search>IIOP_Transport.cpp</search>
+ <replace>// IIOP_Transport.cpp </replace>
+</substitute>
+
+<substitute>
+ <search>IIOP_Transport.h</search>
+ <replace>// IIOP_Transport.h</replace>
+</substitute>
+
+<substitute>
+ <search>IIOP_Connection_Handler.cpp</search>
+ <replace>// IIOP_Connection_Handler.cpp</replace>
+</substitute>
+<substitute>
+ <search>IIOP_Connection_Handler.h</search>
+ <replace>// IIOP_Connection_Handler.h</replace>
+</substitute>
+
+<substitute>
+ <search>IIOP_Acceptor.cpp</search>
+ <replace>// IIOP_Acceptor.cpp</replace>
+</substitute>
+<substitute>
+ <search>IIOP_Acceptor.h</search>
+ <replace>// IIOP_Acceptor.h</replace>
+</substitute>
+
+<substitute>
+ <search>IIOP_Connector.cpp</search>
+ <replace>// IIOP_Connector.cpp</replace>
+</substitute>
+
+<substitute>
+ <search>IIOP_Endpoint.cpp</search>
+ <replace>// IIOP_Endpoint.cpp</replace>
+</substitute>
+
+<substitute>
+ <search>IIOP_Connector.h</search>
+ <replace>// IIOP_Connector.h</replace>
+</substitute>
+
+<substitute>
+ <search>IIOP_Endpoint.h</search>
+ <replace>// IIOP_Endpoint.h</replace>
+</substitute>
+
+<substitute>
+ <search>IIOP_Profile.cpp</search>
+ <replace>// IIOP_Profile.cpp</replace>
+</substitute>
+<substitute>
+ <search>IIOP_Profile.h</search>
+ <replace>// IIOP_Profile.h</replace>
+</substitute>
+
+</file>
+
+<file name="Endpoint.h">
+
+<!-- Include and forward declation add hook -->
+<add>
+ <hook>TAO_ENDPOINT_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>
+#include "tao/IIOP_EndpointsC.h"
+#include "ace/INET_Addr.h"
+ </data>
+</add>
+
+<!-- Copy the private member declarations from IIOP_Endpoint
+ implementation -->
+
+<copy-from-source>
+ <source>IIOP_Endpoint.h</source>
+
+ <copy-hook-start>TAO_ENDPOINT_SPL_PRIVATE_DATA_COPY_HOOK_START</copy-hook-start>
+ <copy-hook-end>TAO_ENDPOINT_SPL_PRIVATE_DATA_COPY_HOOK_END</copy-hook-end>
+
+ <dest-hook>TAO_ENDPOINT_SPL_PRIVATE_DATA_ADD_HOOK</dest-hook>
+</copy-from-source>
+
+<copy-from-source>
+ <source>IIOP_Endpoint.h</source>
+ <copy-hook-start>TAO_ENDPOINT_SPL_PUBLIC_METHODS_COPY_HOOK_START</copy-hook-start>
+ <copy-hook-end>TAO_ENDPOINT_SPL_PUBLIC_METHODS_COPY_HOOK_END</copy-hook-end>
+ <dest-hook>TAO_ENDPOINT_SPL_PUBLIC_METHODS_ADD_HOOK</dest-hook>
+</copy-from-source>
+
+<!-- Remove the unimplemented copy constructor of the base class -->
+<remove>ACE_UNIMPLEMENTED_FUNC \(TAO_Endpoint \(const TAO_Endpoint&amp;\)\)</remove>
+
+<substitute>
+ <search>TAO_IIOP_Endpoint</search>
+ <replace>TAO_Endpoint</replace>
+</substitute>
+
+<substitute>
+ <search>TAO_IIOP_Profile</search>
+ <replace>TAO_Profile</replace>
+</substitute>
+
+<add>
+ <hook>TAO_ENDPOINT_SPL_EXTERN_ADD_HOOK</hook>
+ <data>typedef TAO_Endpoint TAO_IIOP_Endpoint;
+ #if defined (__ACE_INLINE__)
+ # include "tao/IIOP_Endpoint.i"
+ #endif /* __ACE_INLINE__ */
+ </data>
+</add>
+
+<!-- Eliminate the virtual functions -->
+<remove>virtual</remove>
+<substitute match-line="yes">
+ <search>= 0;</search>
+ <replace>;</replace>
+</substitute>
+
+</file>
+
+<file name="Endpoint.cpp">
+
+ <copy-from-source>
+ <source>IIOP_Endpoint.cpp</source>
+ <copy-hook-start>TAO_ENDPOINT_SPL_COPY_HOOK_START</copy-hook-start>
+ <copy-hook-end>TAO_ENDPOINT_SPL_COPY_HOOK_END</copy-hook-end>
+ <dest-hook>TAO_ENDPOINT_SPL_METHODS_ADD_HOOK</dest-hook>
+ </copy-from-source>
+
+ <!-- In the constructors copied from the derived class, there is a
+ invocation of the base class constructor. Expand it -->
+ <substitute match-line="yes">
+ <search>: TAO_Endpoint \(IOP::TAG_INTERNET_IOP\)</search>
+ <replace>: addr_lookup_lock_ ()
+ , hash_val_ (0)
+ , tag_ (IOP::TAG_INTERNET_IOP)
+ , priority_ (TAO_INVALID_PRIORITY)
+ </replace>
+ </substitute>
+
+ <substitute match-line="yes">
+ <search>: TAO_Endpoint \(IOP::TAG_INTERNET_IOP, priority\)</search>
+ <replace>: addr_lookup_lock_ ()
+ , hash_val_ (0)
+ , tag_ (IOP::TAG_INTERNET_IOP)
+ , priority_ (priority)
+ </replace>
+ </substitute>
+
+ <substitute match-line="yes">
+ <search>: TAO_Endpoint \(rhs.tag_, rhs.priority_\)</search>
+ <replace>: addr_lookup_lock_ ()
+ , hash_val_ (0)
+ , tag_ (rhs.tag_)
+ , priority_ (rhs.priority_)
+ </replace>
+ </substitute>
+
+<substitute>
+ <search>TAO_IIOP_Endpoint</search>
+ <replace>TAO_Endpoint</replace>
+</substitute>
+
+<remove>#include "IIOP_Endpoint.h"</remove>
+
+</file>
+
+<file name="Transport_Connector.h">
+
+<add>
+ <hook>TAO_CONNECTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>
+#include "ace/SOCK_Connector.h"
+#include "ace/Connector.h"
+#include "tao/Connector_Impl.h"
+#include "tao/Connection_Handler.h"
+ </data>
+</add>
+
+<copy-from-source>
+ <source>IIOP_Connector.h</source>
+ <copy-hook-start>TAO_CONNECTOR_SPL_PUBLIC_METHODS_COPY_HOOK_START</copy-hook-start>
+ <copy-hook-end>TAO_CONNECTOR_SPL_PUBLIC_METHODS_COPY_HOOK_END</copy-hook-end>
+ <dest-hook>TAO_CONNECTOR_SPL_PUBLIC_METHODS_ADD_HOOK</dest-hook>
+</copy-from-source>
+
+<!-- IIOP_Connector's constructor -->
+<add>
+ <hook>TAO_CONNECTOR_SPL_PUBLIC_METHODS_ADD_HOOK</hook>
+ <data> TAO_Connector (CORBA::Boolean flag = 0);</data>
+</add>
+
+<copy-from-source>
+ <source>IIOP_Connector.h</source>
+ <copy-hook-start>TAO_CONNECTOR_SPL_COPY_HOOK_START</copy-hook-start>
+ <copy-hook-end>TAO_CONNECTOR_SPL_COPY_HOOK_END</copy-hook-end>
+ <dest-hook>TAO_CONNECTOR_SPL_PRIVATE_DATA_ADD_HOOK</dest-hook>
+</copy-from-source>
+
+<add>
+ <hook>TAO_CONNECTOR_SPL_EXTERN_ADD_HOOK</hook>
+ <data>typedef TAO_Connector TAO_IIOP_Connector;</data>
+</add>
+
+<!-- eliminate all virtual methods -->
+<remove>virtual</remove>
+
+<substitute match-line="yes">
+ <search>= 0;</search>
+ <replace>;</replace>
+</substitute>
+
+<substitute match-line="yes">
+ <search>class TAO_Endpoint;</search>
+ <replace>#include "tao/Endpoint.h"</replace>
+</substitute>
+
+</file>
+
+<file name="Transport_Connector.cpp">
+
+<add>
+ <hook>TAO_CONNECTOR_SPL_INCLUDE_ADD_HOOK</hook>
+ <data>
+#include "ace/OS_NS_strings.h"
+ </data>
+</add>
+
+<!-- Instrument the constructor -->
+<substitute match-line="yes">
+ <search>: TAO_Connector \(IOP::TAG_INTERNET_IOP\)</search>
+ <replace>: active_connect_strategy_ (0)
+ , tag_ (IOP::TAG_INTERNET_IOP)
+ , orb_core_ (0)
+ </replace>
+</substitute>
+
+<copy-from-source>
+ <source>IIOP_Connector.cpp</source>
+
+ <copy-hook-start>TAO_CONNECTOR_SPL_COPY_HOOK_START</copy-hook-start>
+ <copy-hook-end>TAO_CONNECTOR_SPL_COPY_HOOK_END</copy-hook-end>
+
+ <dest-hook>TAO_CONNECTOR_SPL_METHODS_ADD_HOOK</dest-hook>
+</copy-from-source>
+
+<!-- replace all IIOP_Connector with TAO_Connector -->
+<substitute>
+ <search>TAO_IIOP_Connector</search>
+ <replace>TAO_Connector</replace>
+</substitute>
+
+</file>
+
+<file name="IIOP_Factory.cpp">
+
+<substitute match-line="yes">
+ <search>#include "IIOP_Acceptor.h"</search>
+ <replace>#include "Transport_Acceptor.h"</replace>
+</substitute>
+
+<substitute match-line="yes">
+ <search>#include "IIOP_Connector.h"</search>
+ <replace>#include "Transport_Connector.h"</replace>
+</substitute>
+</file>
+
+<file name="IIOP_Lite_Factory.cpp">
+
+<substitute match-line="yes">
+ <search>#include "IIOP_Acceptor.h"</search>
+ <replace>#include "Transport_Acceptor.h"</replace>
+</substitute>
+
+<substitute match-line="yes">
+ <search>#include "IIOP_Connector.h"</search>
+ <replace>#include "Transport_Connector.h"</replace>
+</substitute>
+</file>
+
+<!-- Transformations to Profile class to make it tailored for IIOP
+ Profile -->
+<file name="Profile.h">
+
+<!-- include and forward declarations -->
+<substitute match-line="yes">
+ <search>class TAO_Endpoint;</search>
+ <replace>#include "tao/Endpoint.h"</replace>
+</substitute>
+
+<!-- Remove all virtual methods -->
+<remove>virtual</remove>
+<substitute match-line="yes">
+ <search>= 0;</search>
+ <replace>;</replace>
+</substitute>
+
+<!-- Copy all public methods from IIOP_Profile.h -->
+<copy-from-source>
+ <source>IIOP_Profile.h</source>
+ <copy-hook-start>TAO_PROFILE_SPL_PUBLIC_METHODS_COPY_HOOK_START</copy-hook-start>
+ <copy-hook-end>TAO_PROFILE_SPL_PUBLIC_METHODS_COPY_HOOK_END</copy-hook-end>
+ <dest-hook>TAO_PROFILE_SPL_PUBLIC_METHODS_ADD_HOOK</dest-hook>
+</copy-from-source>
+
+<!-- Add proteccted data from IIOP_Profile class -->
+<copy-from-source>
+ <source>IIOP_Profile.h</source>
+ <copy-hook-start>TAO_PROFILE_SPL_PROTECTED_METHODS_COPY_HOOK_START</copy-hook-start>
+ <copy-hook-end>TAO_PROFILE_SPL_PROTECTED_METHODS_COPY_HOOK_END</copy-hook-end>
+ <dest-hook>TAO_PROFILE_SPL_PROTECTED_METHODS_ADD_HOOK</dest-hook>
+</copy-from-source>
+
+<!-- Add all the private data methods -->
+<copy-from-source>
+ <source>IIOP_Profile.h</source>
+ <copy-hook-start>TAO_PROFILE_SPL_PRIVATE_DATA_COPY_HOOK_START</copy-hook-start>
+ <copy-hook-end>TAO_PROFILE_SPL_PRIVATE_DATA_COPY_HOOK_END</copy-hook-end>
+ <dest-hook>TAO_PROFILE_SPL_PRIVATE_DATA_ADD_HOOK</dest-hook>
+</copy-from-source>
+
+<!-- Typedef the Profile class as IIOP_Profile -->
+<add>
+ <hook>TAO_PROFILE_SPL_EXTERN_ADD_HOOK</hook>
+ <data>
+typedef TAO_Profile TAO_IIOP_Profile;
+ </data>
+</add>
+
+<substitute>
+ <search>TAO_IIOP_Profile</search>
+ <replace>TAO_Profile</replace>
+</substitute>
+
+
+</file>
+
+<!-- Transformations to Profile.cpp file specialized with the
+ IIOP_Profile implementation -->
+<file name="Profile.cpp">
+
+<!-- comment out virtual methods in the base class that do nothing
+ but have implementations due to compiler issues -->
+<comment>
+ <start-hook>TAO_PROFILE_SPL_COMMENT_HOOK_START</start-hook>
+ <end-hook>TAO_PROFILE_SPL_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<copy-from-source>
+ <source>IIOP_Profile.cpp</source>
+
+ <copy-hook-start>TAO_PROFILE_SPL_COPY_HOOK_START</copy-hook-start>
+ <copy-hook-end>TAO_PROFILE_SPL_COPY_HOOK_END</copy-hook-end>
+
+ <dest-hook>TAO_PROFILE_SPL_METHODS_ADD_HOOK</dest-hook>
+</copy-from-source>
+
+<!-- Add methods to the constructor of the Profile -->
+<!-- Constructors are the exceptional case, we need to add
+ them specifically -->
+
+<add>
+ <hook>TAO_PROFILE_SPL_METHODS_ADD_HOOK</hook>
+ <data>
+TAO_Profile::TAO_Profile (const ACE_INET_Addr &amp;addr,
+ const TAO::ObjectKey &amp;object_key,
+ const TAO_GIOP_Message_Version &amp;version,
+ TAO_ORB_Core *orb_core)
+ : version_ (version)
+ , are_policies_parsed_ (false)
+ , addressing_mode_ (0)
+ , tagged_profile_ (0)
+ , ref_object_key_ (0)
+ , tag_ (IOP::TAG_INTERNET_IOP)
+ , orb_core_ (orb_core)
+ , forward_to_ (0)
+ , refcount_lock_ (0)
+ , refcount_ (1)
+ , endpoint_ (addr,
+ orb_core->orb_params ()->use_dotted_decimal_addresses ())
+ , count_ (1)
+{
+ // @@ NOTE: Need to probably use a different type of lock.
+ this->refcount_lock_ =
+ this->orb_core_->client_factory ()->create_profile_lock ();
+
+ (void) this->orb_core_->object_key_table ().bind (object_key,
+ this->ref_object_key_);
+}
+
+TAO_Profile::TAO_Profile (const char* host,
+ CORBA::UShort port,
+ const TAO::ObjectKey &amp;object_key,
+ const ACE_INET_Addr &amp;addr,
+ const TAO_GIOP_Message_Version &amp;version,
+ TAO_ORB_Core *orb_core)
+ : version_ (version)
+ , are_policies_parsed_ (false)
+ , addressing_mode_ (0)
+ , tagged_profile_ (0)
+ , ref_object_key_ (0)
+ , tag_ (IOP::TAG_INTERNET_IOP)
+ , orb_core_ (orb_core)
+ , forward_to_ (0)
+ , refcount_lock_ (0)
+ , refcount_ (1)
+ , endpoint_ (host, port, addr)
+ , count_ (1)
+{
+ // @@ NOTE: Need to probably use a different type of lock.
+ this->refcount_lock_ =
+ this->orb_core_->client_factory ()->create_profile_lock ();
+ (void) this->orb_core_->object_key_table ().bind (object_key,
+ this->ref_object_key_);
+}
+
+TAO_Profile::TAO_Profile (TAO_ORB_Core *orb_core)
+ : version_ (TAO_GIOP_Message_Version (TAO_DEF_GIOP_MAJOR,
+ TAO_DEF_GIOP_MINOR))
+ , are_policies_parsed_ (false)
+ , addressing_mode_ (0)
+ , tagged_profile_ (0)
+ , ref_object_key_ (0)
+ , tag_ (IOP::TAG_INTERNET_IOP)
+ , orb_core_ (orb_core)
+ , forward_to_ (0)
+ , refcount_lock_ (0)
+ , refcount_ (1)
+ , endpoint_ ()
+ , count_ (1)
+{
+ this->refcount_lock_ =
+ this->orb_core_->client_factory ()->create_profile_lock ();
+}
+</data>
+</add>
+
+<add>
+ <hook>TAO_PROFILE_SPL_DESTRUCTOR_ADD_HOOK</hook>
+ <data>
+TAO_Endpoint *tmp = 0;
+for (TAO_Endpoint *next = this->endpoint ()->next ();
+ next != 0;
+ next = tmp)
+{
+ tmp = next->next ();
+ delete next;
+}
+ </data>
+</add>
+
+<!-- Replace all occurances of IIOP_Profile
+ with TAO_Profile -->
+<substitute>
+ <search>TAO_IIOP_Profile</search>
+ <replace>TAO_Profile</replace>
+</substitute>
+
+<!-- remove the dynamic casts, as now there is no
+ inheritance hiearchy -->
+<substitute>
+ <search>dynamic_cast</search>
+ <replace>static_cast</replace>
+</substitute>
+
+</file>
+
+<file name="Invocation_Endpoint_Selectors.cpp">
+
+<substitute match-line="yes">
+ <search>#include "tao/IIOP_Endpoint.h"</search>
+ <replace>#include "tao/Endpoint.h"</replace>
+</substitute>
+</file>
+
+<file name="orbconf.h">
+
+<substitute match-line="yes">
+ <search>TAO_HAS_UIOP 1</search>
+ <replace>TAO_HAS_UIOP 0</replace>
+</substitute>
+
+<substitute match-line="yes">
+ <search>TAO_HAS_SHMIOP 1</search>
+ <replace>TAO_HAS_SHMIOP 0</replace>
+</substitute>
+
+<substitute match-line="yes">
+ <search>TAO_HAS_MIOP 1</search>
+ <replace>TAO_HAS_MIOP 0</replace>
+</substitute>
+
+<substitute match-line="yes">
+ <search>TAO_HAS_DIOP 1</search>
+ <replace>TAO_HAS_DIOP 0</replace>
+</substitute>
+</file>
+</module>
+
+<module name="/TAO/tao/RTPortableServer">
+
+<file name="RT_Servant_Dispatcher.cpp">
+
+<substitute>
+ <search>IIOP_Transport.h</search>
+ <replace>Transport.h</replace>
+</substitute>
+
+<substitute>
+ <search>IIOP_Connection_Handler.h</search>
+ <replace>Connection_Handler.h</replace>
+</substitute>
+
+</file>
+
+</module>
+
+</transform>
diff --git a/ACE/bin/FOCUS/specializations/README b/ACE/bin/FOCUS/specializations/README
new file mode 100644
index 00000000000..e2126bf6566
--- /dev/null
+++ b/ACE/bin/FOCUS/specializations/README
@@ -0,0 +1,16 @@
+@file README
+============
+
+This file describes certain common conventions regarding how the
+specializations rules are integrated/added to this specialization
+database. This directory will serve as a repository that will host all
+the specialization rules for the different families/components. At the
+moment, all the specialization transformations are specific to the
+ACE+TAO middleware.
+
+For each component framework, the following are the rules for adding
+the specializations:
+
+. Create a directory with the name of the component family, e.g., Reactor_Family
+. Within this directory, create the <<Specific_Component>>.spl file that has the
+ individual transformations defined.
diff --git a/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_MT.spl b/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_MT.spl
new file mode 100644
index 00000000000..6d4ecf6609b
--- /dev/null
+++ b/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_MT.spl
@@ -0,0 +1,452 @@
+<?xml version="1.0"?>
+
+<!-- Select Reactor Specializations:
+ * ===============================
+ * Details all the specialization transformations necessary
+ * to specialize the Reactor framework when the target reactor
+ * is a select reactor.
+ *
+ * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu>
+ * $Id$
+-->
+
+<transform>
+
+<!-- Define the module where there are multiple files -->
+<module name="ace">
+
+<!-- File where the transformations happen -->
+<file name="Select_Reactor_Base.h">
+
+<!-- Add the following lines based on a hook -->
+<add>
+ <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>class ACE_Sig_Handler;</data>
+ <data>class ACE_Sig_Action;</data>
+ <data>class ACE_Sig_Set;</data>
+</add>
+
+<add>
+ <hook>REACTOR_SPL_PUBLIC_METHODS_ADD_HOOK</hook>
+ <data>
+//--- How can we devirtualize these methods?
+virtual ~ACE_Select_Reactor_Impl () {}
+
+virtual int notify (ACE_Event_Handler *event_handler = 0,
+ ACE_Reactor_Mask mask = ACE_Event_Handler::EXCEPT_MASK,
+ ACE_Time_Value * = 0) =0;
+
+virtual int remove_handler (ACE_Event_Handler *eh,
+ ACE_Reactor_Mask mask) =0;
+
+virtual int register_handler (ACE_HANDLE handle,
+ ACE_Event_Handler *eh,
+ ACE_Reactor_Mask mask) =0;
+ </data>
+</add>
+
+<!-- Remove what ever is present in the tag from the file -->
+<remove>virtual</remove>
+<remove>: public ACE_Reactor_Impl</remove>
+<remove>#include "ace/Reactor_Impl.h"</remove>
+
+<!-- Replace a with b -->
+<substitute>
+ <search>public ACE_Reactor_Notify</search>
+ <replace>public ACE_Event_Handler</replace>
+</substitute>
+
+<!-- Replace the generic versions with the Select specialized versions -->
+<substitute>
+ <search>ACE_Reactor_Notify</search>
+ <replace>ACE_Select_Reactor_Notify</replace>
+</substitute>
+
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor_Impl</replace>
+</substitute>
+
+<!-- After the specialization, the following functions are still virtual -->
+<substitute>
+ <search>void renew</search>
+ <replace>virtual void renew</replace>
+</substitute>
+<substitute>
+ <search>int is_suspended_i</search>
+ <replace>virtual int is_suspended_i</replace>
+</substitute>
+<substitute>
+ <search>void clear_dispatch_mask</search>
+ <replace>virtual void clear_dispatch_mask</replace>
+</substitute>
+
+</file>
+
+<file name="Select_Reactor_Base.cpp">
+
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor_Impl</replace>
+</substitute>
+
+</file>
+
+<file name="Select_Reactor_Base.inl">
+
+<remove>#include "ace/Reactor.h"</remove>
+
+</file>
+
+<!-- Transformations to Reactor_Token_T.h -->
+<file name="Reactor_Token_T.h">
+
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor_Impl</replace>
+</substitute>
+
+<substitute match-line="yes">
+ <search>#include "ace/Reactor_Impl.h"</search>
+ <replace>#include "ace/Select_Reactor_Base.h"</replace>
+</substitute>
+
+</file>
+
+<file name="Reactor_Token_T.cpp">
+
+<!-- Search for ACE_Reactor_Impl and replace it with
+ ACE_Select_Reactor_Impl -->
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor_Impl</replace>
+</substitute>
+
+</file>
+
+<file name="Select_Reactor_T.h">
+
+<add>
+<hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+<data>class ACE_Sig_Handler;</data>
+<data>class ACE_Sig_Action;</data>
+<data>class ACE_Sig_Set;</data>
+</add>
+
+<substitute>
+ <search>ACE_Reactor_Notify</search>
+ <replace>ACE_Select_Reactor_Notify</replace>
+</substitute>
+
+<remove>virtual</remove>
+
+</file>
+
+<file name="Select_Reactor_T.cpp">
+
+<add>
+ <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>#include "ace/Countdown_Time.h"</data>
+</add>
+
+<substitute>
+ <search>ACE_Reactor_Notify</search>
+ <replace>ACE_Select_Reactor_Notify</replace>
+</substitute>
+
+</file>
+
+<!--
+<file name="Select_Reactor_T.inl">
+
+<remove>#include "ace/Reactor.h"</remove>
+
+</file>
+-->
+
+<file name="Reactor.h">
+
+<add>
+<hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+<data>#include "ace/Select_Reactor.h"</data>
+</add>
+
+<remove>class ACE_Reactor_Impl;</remove>
+<remove>virtual</remove>
+
+<substitute>
+<search>ACE_Reactor_Impl</search>
+<replace>ACE_Select_Reactor</replace>
+</substitute>
+
+<!-- Remove the Reactor_Timer interface include -->
+<remove>: public ACE_Reactor_Timer_Interface</remove>
+<remove>#include "ace/Reactor_Timer_Interface.h"</remove>
+
+</file>
+
+<file name="Event_Handler.h">
+
+<!-- remove the ACE_Event_Handler forware declaration -->
+<remove>class ACE_Reactor_Timer_Interface;</remove>
+
+<!-- substitute ACE_Reactor_Timer operations with ACE_Reactor -->
+<substitute>
+ <search>ACE_Reactor_Timer_Interface</search>
+ <replace>ACE_Reactor</replace>
+</substitute>
+</file>
+
+<file name="Event_Handler.cpp">
+ <substitute>
+ <search>ACE_Reactor_Timer_Interface</search>
+ <replace>ACE_Reactor</replace>
+ </substitute>
+</file>
+
+<file name="Timer_Queue_T.cpp">
+
+<!-- Remove the Reactor_Timer_Interface include -->
+<remove>#include "ace/Reactor_Timer_Interface.h"</remove>
+
+</file>
+
+
+<file name="Reactor.cpp">
+
+<!-- Comment the conditional includes in the file -->
+<comment>
+ <start-hook>REACTOR_SPL_COMMENT_INCLUDE_START_HOOK</start-hook>
+ <end-hook>REACTOR_SPL_COMMENT_INCLUDE_END_HOOK</end-hook>
+</comment>
+
+<!-- Comment out conditional includes files in the Reactor's
+ constructor
+-->
+<comment>
+ <start-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_START</start-hook>
+ <end-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<!-- Within the constructor now create the right Reactor -->
+<add>
+ <hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</hook>
+ <data>
+ ACE_NEW (impl,
+ ACE_Select_Reactor);
+ </data>
+</add>
+
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor</replace>
+</substitute>
+
+</file>
+
+<file name="Reactor.inl">
+
+<add>
+ <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>
+// Check if this is necessary
+#include "ace/Select_Reactor.h"
+ </data>
+</add>
+
+</file>
+
+<!-- Do not build the other reactors than the Select Reactor! -->
+<file name="ace.mpc">
+
+<!-- Here is where regular expressions can come handy. Such
+ a capability is not currently provided
+ -->
+<substitute>
+ <search>TP_Reactor.h</search>
+ <replace>// TP_Reactor.h </replace>
+</substitute>
+<substitute>
+ <search>TP_Reactor.cpp</search>
+ <replace>// TP_Reactor.cpp</replace>
+</substitute>
+
+<!-- Do not build the Msg_WFMO_Reactor -->
+<substitute>
+ <search>Msg_WFMO_Reactor.cpp</search>
+ <replace>// Msg_WFMO_Reactor.cpp</replace>
+</substitute>
+
+<!-- Do not build the WFMO Reactor -->
+<substitute>
+ <search>WFMO_Reactor.cpp</search>
+ <replace>// WFMO_Reactor.cpp</replace>
+</substitute>
+
+<!-- Do not build the Reactor Impl -->
+<substitute>
+ <search>Reactor_Impl.cpp</search>
+ <replace>// Reactor_Impl.cpp</replace>
+</substitute>
+<substitute>
+ <search>Reactor_Impl.h</search>
+ <replace>// Reactor_Impl.h</replace>
+</substitute>
+
+<!-- Do not build the Dev Poll Reactor -->
+<substitute>
+ <search>Dev_Poll_Reactor.cpp</search>
+ <replace>// Dev_Poll_Reactor.cpp</replace>
+</substitute>
+
+<!-- Do not build the priority Reactor -->
+<substitute>
+ <search>Priority_Reactor.cpp</search>
+ <replace>// Priority_Reactor.cpp</replace>
+</substitute>
+
+<!-- Do not build the Reactor_Timer_Interface -->
+<substitute>
+ <search>Reactor_Timer_Interface.h</search>
+ <replace>// Reactor_Timer_Interface.h</replace>
+</substitute>
+<substitute>
+ <search>Reactor_Timer_Interface.cpp</search>
+ <replace>// Reactor_Timer_Interface.cpp </replace>
+</substitute>
+
+</file>
+
+</module>
+
+<!-- transformations required in TAO to work with a select reactor -->
+<module name="TAO/tao">
+
+<!-- Changes to default_resource.h -->
+<file name="default_resource.h">
+
+<!-- Remove the forward declaration of ACE_Reactor_Impl -->
+<substitute match-line="yes">
+<search>class ACE_Reactor_Impl;</search>
+<replace>#include "ace/Reactor.h"</replace>
+</substitute>
+
+<!-- Replace all occurences of ACE_Reactor_Impl with
+ ACE_Select_Reactor -->
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor</replace>
+</substitute>
+
+</file>
+
+<!-- Changes to default_resource.cpp -->
+<file name="default_resource.cpp">
+
+<!-- Remove the occurence of TP_Reactor -->
+<remove>#include "ace/TP_Reactor.h"</remove>
+
+<!-- Replace all occurences of ACE_Reactor_Impl with
+ ACE_Select_Reactor -->
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor</replace>
+</substitute>
+
+<!-- Comment out the code that creates TP_Reactor -->
+<comment>
+ <start-hook>TAO_REACTOR_SPL_COMMENT_HOOK_START</start-hook>
+ <end-hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<!-- Add hook to add code that creates the select reactor
+ component -->
+<add>
+ <!-- We use the same hook that signifies where the comment code
+ ended to add the concrete Reactor type -->
+ <hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</hook>
+ <data>
+ ACE_NEW_RETURN (impl,
+ TAO_REACTOR ((ACE_Sig_Handler*)0,
+ (ACE_Timer_Queue*)0,
+ 0,
+ (ACE_Select_Reactor_Notify*)0,
+ this->reactor_mask_signals_),
+ 0);
+ </data>
+</add>
+</file>
+
+<!-- changes to tao.mpc -->
+<file name="tao.mpc">
+ <substitute>
+ <search>GUIResource_Factory.cpp</search>
+ <replace>// GUIResource_Factory.cpp</replace>
+ </substitute>
+ <substitute>
+ <search>GUIResource_Factory.h</search>
+ <replace>// GUIResource_Factory.h</replace>
+ </substitute>
+</file>
+
+</module>
+
+<module name="TAO/tao/Strategies">
+
+<file name="advanced_resource.h">
+
+<!-- Replace all occurances of ACE_Reactor_Impl with
+ Select_Reactor
+ -->
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor</replace>
+</substitute>
+
+</file>
+
+<file name="advanced_resource.cpp">
+
+<!-- Comment out all other reactor includes -->
+<remove>#include "ace/FlReactor.h"</remove>
+<remove>#include "ace/TkReactor.h"</remove>
+<remove>#include "ace/WFMO_Reactor.h"</remove>
+<remove>#include "ace/TP_Reactor.h"</remove>
+<remove>#include "ace/Msg_WFMO_Reactor.h"</remove>
+
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor</replace>
+</substitute>
+
+<!-- Replace Select_Reactor.h with Reactor.h -->
+<substitute>
+ <search>ace/Select_Reactor.h</search>
+ <replace>ace/Reactor.h</replace>
+</substitute>
+
+<!-- Comment out creation code for all other reactors -->
+<comment>
+ <start-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_START</start-hook>
+ <end-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<!-- Use the end hook to insert code that will create right reactor -->
+<add>
+ <hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</hook>
+ <data>
+ ACE_NEW_RETURN (impl,
+ TAO_REACTOR ((ACE_Sig_Handler*)0,
+ (ACE_Timer_Queue*)0,
+ 0,
+ (ACE_Select_Reactor_Notify*)0,
+ this->reactor_mask_signals_),
+ 0);
+ </data>
+</add>
+
+</file>
+
+</module>
+
+</transform>
diff --git a/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_ST.spl b/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_ST.spl
new file mode 100644
index 00000000000..145136455a2
--- /dev/null
+++ b/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_ST.spl
@@ -0,0 +1,468 @@
+<?xml version="1.0"?>
+
+<!-- Select Reactor Specializations:
+ * ===============================
+ * Details all the specialization transformations necessary
+ * to specialize the Reactor framework when the target reactor
+ * is a select reactor.
+ *
+ * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu>
+ * $Id$
+-->
+
+<transform>
+
+<!-- Define the module where there are multiple files -->
+<module name="ace">
+
+<!-- File where the transformations happen -->
+<file name="Select_Reactor_Base.h">
+
+<!-- Add the following lines based on a hook -->
+<add>
+ <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>class ACE_Sig_Handler;</data>
+ <data>class ACE_Sig_Action;</data>
+ <data>class ACE_Sig_Set;</data>
+</add>
+
+<add>
+ <hook>REACTOR_SPL_PUBLIC_METHODS_ADD_HOOK</hook>
+ <data>
+//These methods needs to be virtual as they are used by
+//Select_Reactor_Notify classes which use the base class
+virtual ~ACE_Select_Reactor_Impl () {}
+
+virtual int notify (ACE_Event_Handler *event_handler = 0,
+ ACE_Reactor_Mask mask = ACE_Event_Handler::EXCEPT_MASK,
+ ACE_Time_Value * = 0) =0;
+
+virtual int remove_handler (ACE_Event_Handler *eh,
+ ACE_Reactor_Mask mask) =0;
+
+virtual int register_handler (ACE_HANDLE handle,
+ ACE_Event_Handler *eh,
+ ACE_Reactor_Mask mask) =0;
+ </data>
+</add>
+
+<!-- Remove what ever is present in the tag from the file -->
+<remove>virtual</remove>
+<remove>: public ACE_Reactor_Impl</remove>
+<remove>#include "ace/Reactor_Impl.h"</remove>
+
+<!-- Replace a with b -->
+<substitute>
+ <search>public ACE_Reactor_Notify</search>
+ <replace>public ACE_Event_Handler</replace>
+</substitute>
+
+<!-- Replace the generic versions with the Select specialized versions -->
+<substitute>
+ <search>ACE_Reactor_Notify</search>
+ <replace>ACE_Select_Reactor_Notify</replace>
+</substitute>
+
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor_Impl</replace>
+</substitute>
+
+<!-- After the specialization, the following functions are still virtual -->
+<substitute>
+ <search>void renew</search>
+ <replace>virtual void renew</replace>
+</substitute>
+<substitute>
+ <search>int is_suspended_i</search>
+ <replace>virtual int is_suspended_i</replace>
+</substitute>
+<substitute>
+ <search>void clear_dispatch_mask</search>
+ <replace>virtual void clear_dispatch_mask</replace>
+</substitute>
+
+</file>
+
+<file name="Select_Reactor_Base.cpp">
+
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor_Impl</replace>
+</substitute>
+
+</file>
+
+<file name="Select_Reactor_Base.inl">
+
+<remove>#include "ace/Reactor.h"</remove>
+
+</file>
+
+<file name="Select_Reactor_T.h">
+
+<add>
+<hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+<data>class ACE_Sig_Handler;</data>
+<data>class ACE_Sig_Action;</data>
+<data>class ACE_Sig_Set;</data>
+</add>
+
+<substitute>
+ <search>ACE_Reactor_Notify</search>
+ <replace>ACE_Select_Reactor_Notify</replace>
+</substitute>
+
+<remove>virtual</remove>
+
+</file>
+
+<file name="Select_Reactor_T.cpp">
+
+<add>
+ <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>#include "ace/Countdown_Time.h"</data>
+</add>
+
+<substitute>
+ <search>ACE_Reactor_Notify</search>
+ <replace>ACE_Select_Reactor_Notify</replace>
+</substitute>
+
+</file>
+
+<!--
+<file name="Select_Reactor_T.inl">
+
+<remove>#include "ace/Reactor.h"</remove>
+
+</file>
+-->
+
+<!-- Transformations to Reactor_Token_T.h -->
+<file name="Reactor_Token_T.h">
+
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor_Impl</replace>
+</substitute>
+
+<substitute match-line="yes">
+ <search>#include "ace/Reactor_Impl.h"</search>
+ <replace>#include "ace/Select_Reactor_Base.h"</replace>
+</substitute>
+
+</file>
+
+<file name="Reactor_Token_T.cpp">
+
+<!-- Search for ACE_Reactor_Impl and replace it with
+ ACE_Select_Reactor_Impl -->
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor_Impl</replace>
+</substitute>
+
+</file>
+
+<file name="Reactor.h">
+
+<add>
+<hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+<data>#include "ace/Select_Reactor.h"</data>
+</add>
+
+<remove>class ACE_Reactor_Impl;</remove>
+<remove>virtual</remove>
+
+<substitute>
+<search>ACE_Reactor_Impl</search>
+<replace>ACE_Select_Reactor</replace>
+</substitute>
+
+<!-- Remove the Reactor_Timer interface include -->
+<remove>: public ACE_Reactor_Timer_Interface</remove>
+<remove>#include "ace/Reactor_Timer_Interface.h"</remove>
+
+</file>
+
+<file name="Event_Handler.h">
+
+<!-- remove the ACE_Event_Handler forware declaration -->
+<remove>class ACE_Reactor_Timer_Interface;</remove>
+
+<!-- substitute ACE_Reactor_Timer operations with ACE_Reactor -->
+<substitute>
+ <search>ACE_Reactor_Timer_Interface</search>
+ <replace>ACE_Reactor</replace>
+</substitute>
+</file>
+
+<file name="Event_Handler.cpp">
+ <substitute>
+ <search>ACE_Reactor_Timer_Interface</search>
+ <replace>ACE_Reactor</replace>
+ </substitute>
+</file>
+
+<file name="Timer_Queue_T.cpp">
+
+<!-- Remove the Reactor_Timer_Interface include -->
+<remove>#include "ace/Reactor_Timer_Interface.h"</remove>
+
+</file>
+
+<file name="Reactor.cpp">
+
+<!-- Comment the conditional includes in the file -->
+<comment>
+ <start-hook>REACTOR_SPL_COMMENT_INCLUDE_START_HOOK</start-hook>
+ <end-hook>REACTOR_SPL_COMMENT_INCLUDE_END_HOOK</end-hook>
+</comment>
+
+<!-- Comment out conditional includes files in the Reactor's
+ constructor
+-->
+<comment>
+ <start-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_START</start-hook>
+ <end-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<!-- Within the constructor now create the right Reactor -->
+<add>
+ <hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</hook>
+ <data>
+ ACE_NEW (impl,
+ ACE_Select_Reactor);
+ </data>
+</add>
+
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor</replace>
+</substitute>
+
+</file>
+
+<file name="Reactor.inl">
+
+<add>
+ <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>
+// Check if this is necessary
+#include "ace/Select_Reactor.h"
+ </data>
+</add>
+
+</file>
+
+<file name="Select_Reactor.h">
+
+<!-- comment out the lock based select reactor, which is a select_mt -->
+<comment>
+ <start-hook>TAO_REACTOR_SPL_COMMENT_HOOK_START</start-hook>
+ <end-hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<add>
+ <hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</hook>
+ <data>
+ typedef ACE_Select_Reactor_T &lt;ACE_Reactor_Token_T &lt; ACE_Noop_Token &gt; &gt; ACE_Select_Reactor;
+ </data>
+</add>
+</file>
+
+<!-- Do not build the other reactors than the Select Reactor! -->
+<file name="ace.mpc">
+
+<!-- Here is where regular expressions can come handy. Such
+ a capability is not currently provided
+ -->
+<substitute>
+ <search>TP_Reactor.h</search>
+ <replace>// TP_Reactor.h </replace>
+</substitute>
+<substitute>
+ <search>TP_Reactor.cpp</search>
+ <replace>// TP_Reactor.cpp</replace>
+</substitute>
+
+<!-- Do not build the Msg_WFMO_Reactor -->
+<substitute>
+ <search>Msg_WFMO_Reactor.cpp</search>
+ <replace>// Msg_WFMO_Reactor.cpp</replace>
+</substitute>
+
+<!-- Do not build the WFMO Reactor -->
+<substitute>
+ <search>WFMO_Reactor.cpp</search>
+ <replace>// WFMO_Reactor.cpp</replace>
+</substitute>
+
+<!-- Do not build the Reactor Impl -->
+<substitute>
+ <search>Reactor_Impl.cpp</search>
+ <replace>// Reactor_Impl.cpp</replace>
+</substitute>
+<substitute>
+ <search>Reactor_Impl.h</search>
+ <replace>// Reactor_Impl.h</replace>
+</substitute>
+
+<!-- Do not build the Dev Poll Reactor -->
+<substitute>
+ <search>Dev_Poll_Reactor.cpp</search>
+ <replace>// Dev_Poll_Reactor.cpp</replace>
+</substitute>
+
+<!-- Do not build the priority Reactor -->
+<substitute>
+ <search>Priority_Reactor.cpp</search>
+ <replace>// Priority_Reactor.cpp</replace>
+</substitute>
+
+<!-- Do not build the Reactor_Timer_Interface -->
+<substitute>
+ <search>Reactor_Timer_Interface.h</search>
+ <replace>// Reactor_Timer_Interface.h</replace>
+</substitute>
+<substitute>
+ <search>Reactor_Timer_Interface.cpp</search>
+ <replace>// Reactor_Timer_Interface.cpp </replace>
+</substitute>
+
+</file>
+
+</module>
+
+<!-- transformations required in TAO to work with a select reactor -->
+<module name="TAO/tao">
+
+<!-- Changes to default_resource.h -->
+<file name="default_resource.h">
+
+<!-- Remove the forward declaration of ACE_Reactor_Impl -->
+<substitute match-line="yes">
+<search>class ACE_Reactor_Impl;</search>
+<replace>#include "ace/Reactor.h"</replace>
+</substitute>
+
+<!-- Replace all occurences of ACE_Reactor_Impl with
+ ACE_Select_Reactor -->
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor</replace>
+</substitute>
+
+</file>
+
+<!-- Changes to default_resource.cpp -->
+<file name="default_resource.cpp">
+
+<!-- Remove the occurence of TP_Reactor -->
+<remove>#include "ace/TP_Reactor.h"</remove>
+
+<!-- Replace all occurences of ACE_Reactor_Impl with
+ ACE_Select_Reactor -->
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor</replace>
+</substitute>
+
+<!-- Comment out the code that creates TP_Reactor -->
+<comment>
+ <start-hook>TAO_REACTOR_SPL_COMMENT_HOOK_START</start-hook>
+ <end-hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<!-- Add hook to add code that creates the select reactor
+ component -->
+<add>
+ <!-- We use the same hook that signifies where the comment code
+ ended to add the concrete Reactor type -->
+ <hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</hook>
+ <data>
+ ACE_NEW_RETURN (impl,
+ TAO_NULL_LOCK_REACTOR ((ACE_Sig_Handler*)0,
+ (ACE_Timer_Queue*)0,
+ 0,
+ (ACE_Select_Reactor_Notify*)0,
+ this->reactor_mask_signals_),
+ 0);
+ </data>
+</add>
+</file>
+
+<!-- changes to tao.mpc -->
+<file name="tao.mpc">
+ <substitute>
+ <search>GUIResource_Factory.cpp</search>
+ <replace>// GUIResource_Factory.cpp</replace>
+ </substitute>
+ <substitute>
+ <search>GUIResource_Factory.h</search>
+ <replace>// GUIResource_Factory.h</replace>
+ </substitute>
+</file>
+
+</module>
+
+<module name="TAO/tao/Strategies">
+
+<file name="advanced_resource.h">
+
+<!-- Replace all occurances of ACE_Reactor_Impl with
+ Select_Reactor
+ -->
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor</replace>
+</substitute>
+
+</file>
+
+<file name="advanced_resource.cpp">
+
+<!-- Comment out all other reactor includes -->
+<remove>#include "ace/FlReactor.h"</remove>
+<remove>#include "ace/TkReactor.h"</remove>
+<remove>#include "ace/WFMO_Reactor.h"</remove>
+<remove>#include "ace/TP_Reactor.h"</remove>
+<remove>#include "ace/Msg_WFMO_Reactor.h"</remove>
+
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor</replace>
+</substitute>
+
+<!-- Replace Select_Reactor.h with Reactor.h -->
+<substitute>
+ <search>ace/Select_Reactor.h</search>
+ <replace>ace/Reactor.h</replace>
+</substitute>
+
+<!-- Comment out creation code for all other reactors -->
+<comment>
+ <start-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_START</start-hook>
+ <end-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<!-- Use the end hook to insert code that will create right reactor -->
+<add>
+ <hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</hook>
+ <data>
+ ACE_NEW_RETURN (impl,
+ TAO_NULL_LOCK_REACTOR ((ACE_Sig_Handler*)0,
+ (ACE_Timer_Queue*)0,
+ 0,
+ (ACE_Select_Reactor_Notify*)0,
+ this->reactor_mask_signals_),
+ 0);
+ </data>
+</add>
+
+</file>
+
+</module>
+
+</transform>
diff --git a/ACE/bin/FOCUS/specializations/Reactor_Family/TP_Reactor.spl b/ACE/bin/FOCUS/specializations/Reactor_Family/TP_Reactor.spl
new file mode 100644
index 00000000000..f25c5fe5416
--- /dev/null
+++ b/ACE/bin/FOCUS/specializations/Reactor_Family/TP_Reactor.spl
@@ -0,0 +1,439 @@
+<?xml version="1.0"?>
+
+<!-- Thread Pool Reactor Specializations:
+ * ======================================
+ * Thread Pool reactor is a variation of the Select Reactor.
+ * This specialization includes all of the specializations
+ * that are present in Select_Reactor.spl
+ *
+ * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu>
+ * $Id$
+-->
+
+<transform>
+
+<module name="ace">
+
+<!-- File where the transformations happen -->
+<file name="Select_Reactor_Base.h">
+
+<!-- Add the following lines based on a hook -->
+<add>
+ <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>class ACE_Sig_Handler;</data>
+ <data>class ACE_Sig_Action;</data>
+ <data>class ACE_Sig_Set;</data>
+</add>
+
+<!-- Remove what ever is present in the tag from the file -->
+<remove>#include "ace/Reactor_Impl.h"</remove>
+<remove>virtual</remove>
+<remove>: public ACE_Reactor_Impl</remove>
+
+<!-- Replace a with b -->
+<substitute>
+ <search>public ACE_Reactor_Notify</search>
+ <replace>public ACE_Event_Handler</replace>
+</substitute>
+
+<add>
+ <hook>REACTOR_SPL_PUBLIC_METHODS_ADD_HOOK</hook>
+ <data>
+//--- How can we devirtualize these methods?
+virtual ~ACE_Select_Reactor_Impl () {}
+
+virtual int notify (ACE_Event_Handler *event_handler = 0,
+ ACE_Reactor_Mask mask = ACE_Event_Handler::EXCEPT_MASK,
+ ACE_Time_Value * = 0) = 0;
+
+virtual int remove_handler (ACE_Event_Handler *eh,
+ ACE_Reactor_Mask mask) = 0;
+
+virtual int register_handler (ACE_HANDLE handle,
+ ACE_Event_Handler *eh,
+ ACE_Reactor_Mask mask) =0;
+//--------------------------------------------
+ </data>
+</add>
+
+<substitute>
+ <search>ACE_Reactor_Notify</search>
+ <replace>ACE_Select_Reactor_Notify</replace>
+</substitute>
+
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor_Impl</replace>
+</substitute>
+
+<!-- After the specialization, the following functions are still virtual -->
+<substitute>
+ <search>void renew</search>
+ <replace>virtual void renew</replace>
+</substitute>
+<substitute>
+ <search>int is_suspended_i</search>
+ <replace>virtual int is_suspended_i</replace>
+</substitute>
+<substitute>
+ <search>void clear_dispatch_mask</search>
+ <replace>virtual void clear_dispatch_mask</replace>
+</substitute>
+
+</file>
+
+<file name="Select_Reactor_Base.cpp">
+
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor_Impl</replace>
+</substitute>
+
+</file>
+
+<file name="Select_Reactor_Base.inl">
+
+<remove>#include "ace/Reactor.h"</remove>
+
+</file>
+
+<file name="Select_Reactor_T.h">
+
+<add>
+<hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+<data>class ACE_Sig_Handler;</data>
+<data>class ACE_Sig_Action;</data>
+<data>class ACE_Sig_Set;</data>
+</add>
+
+<substitute>
+ <search>ACE_Reactor_Notify</search>
+ <replace>ACE_Select_Reactor_Notify</replace>
+</substitute>
+</file>
+
+<file name="Select_Reactor_T.cpp">
+
+<add>
+ <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>#include "ace/Countdown_Time.h"</data>
+</add>
+
+<substitute>
+ <search>ACE_Reactor_Notify</search>
+ <replace>ACE_Select_Reactor_Notify</replace>
+</substitute>
+
+</file>
+
+<!-- Transformations to Reactor_Token_T.h -->
+<file name="Reactor_Token_T.h">
+
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor_Impl</replace>
+</substitute>
+
+<substitute match-line="yes">
+ <search>#include "ace/Reactor_Impl.h"</search>
+ <replace>#include "ace/Select_Reactor_Base.h"</replace>
+</substitute>
+
+</file>
+
+<file name="Reactor_Token_T.cpp">
+
+<!-- Search for ACE_Reactor_Impl and replace it with
+ ACE_Select_Reactor_Impl -->
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_Select_Reactor_Impl</replace>
+</substitute>
+
+</file>
+
+<!-- Starting below is the specialization for TP_Reactor -->
+
+<!-- Transformations to Reactor.h -->
+<file name="Reactor.h">
+
+<!-- Replace all occurences of ACE_Reactor_Impl with TP_Reactor -->
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_TP_Reactor</replace>
+</substitute>
+
+<!-- Remove all occurences of the word virtual -->
+<remove>virtual</remove>
+
+<!-- Remove the Reactor_Timer interface include -->
+<remove>: public ACE_Reactor_Timer_Interface</remove>
+<remove>#include "ace/Reactor_Timer_Interface.h"</remove>
+
+</file>
+
+<file name="Event_Handler.h">
+
+<!-- remove the ACE_Event_Handler forware declaration -->
+<remove>class ACE_Reactor_Timer_Interface;</remove>
+
+<!-- substitute ACE_Reactor_Timer operations with ACE_Reactor -->
+<substitute>
+ <search>ACE_Reactor_Timer_Interface</search>
+ <replace>ACE_Reactor</replace>
+</substitute>
+</file>
+
+<file name="Event_Handler.cpp">
+ <substitute>
+ <search>ACE_Reactor_Timer_Interface</search>
+ <replace>ACE_Reactor</replace>
+ </substitute>
+</file>
+
+<file name="Timer_Queue_T.cpp">
+
+<!-- Remove the Reactor_Timer_Interface include -->
+<remove>#include "ace/Reactor_Timer_Interface.h"</remove>
+
+</file>
+
+<!-- Transformations to Reactor.inl -->
+<file name="Reactor.inl">
+
+<add>
+ <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>
+// Check if this is necessary
+#include "ace/Select_Reactor.h"
+ </data>
+</add>
+
+</file>
+
+<file name="Reactor.cpp">
+
+<!-- Replace ACE_Reactor_Impl with ACE_TP_Reactor -->
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_TP_Reactor</replace>
+</substitute>
+
+<!-- Comment the conditional includes in the file -->
+<comment>
+ <start-hook>REACTOR_SPL_COMMENT_INCLUDE_START_HOOK</start-hook>
+ <end-hook>REACTOR_SPL_COMMENT_INCLUDE_END_HOOK</end-hook>
+</comment>
+
+<!-- Comment out conditional includes files in the Reactor's
+ constructor
+-->
+<comment>
+ <start-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_START</start-hook>
+ <end-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<!-- Add the TP_Reactor include file -->
+<add>
+ <hook>REACTOR_SPL_COMMENT_INCLUDE_END_HOOK</hook>
+ <data>#include "ace/TP_Reactor.h"</data>
+</add>
+
+<!-- Within the constructor now create the right Reactor -->
+<add>
+ <hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</hook>
+ <data>
+ ACE_NEW (impl,
+ ACE_TP_Reactor);
+ </data>
+</add>
+
+</file>
+
+<!-- Transformations to TP_Reactor.h -->
+<file name="TP_Reactor.h">
+
+<!-- Remove all occurances of virtual -->
+<remove>virtual</remove>
+
+</file>
+
+<!-- Transformations to TP_Reactor.cpp -->
+<file name="TP_Reactor.cpp">
+
+<!-- Comment hook -->
+<comment>
+ <start-hook>REACTOR_SPL_COMMENT_HOOK_START</start-hook>
+ <end-hook>REACTOR_SPL_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<!-- Add this function to the -->
+<add>
+ <hook>REACTOR_SPL_COMMENT_HOOK_END</hook>
+ <data>
+int
+ACE_TP_Reactor::register_handler (int signum,
+ ACE_Event_Handler *new_sh,
+ ACE_Sig_Action *new_disp,
+ ACE_Event_Handler **old_sh,
+ ACE_Sig_Action *old_disp)
+{
+ return ACE_Select_Reactor::register_handler (signum,
+ new_sh,
+ new_disp,
+ old_sh,
+ old_disp);
+}
+ </data>
+</add>
+
+</file>
+
+<!-- Transformations to Asynch_Pseudo_Task.h -->
+<file name="Asynch_Pseudo_Task.h">
+
+<!-- Remove the Select_Reacto.h include -->
+<remove>#include "ace/Select_Reactor.h"</remove>
+
+<substitute>
+ <search>ACE_Select_Reactor</search>
+ <replace>ACE_TP_Reactor</replace>
+</substitute>
+
+<!-- Add the TP_Reactor which is the concrete reactor -->
+<add>
+ <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook>
+ <data>#include "ace/TP_Reactor.h"</data>
+</add>
+
+</file>
+
+<file name="ace.mpc">
+
+<!-- Do not build the WFMO Reactor -->
+<substitute>
+ <search>WFMO_Reactor.cpp</search>
+ <replace>// WFMO_Reactor.cpp</replace>
+</substitute>
+
+<!-- Do not build the Reactor Impl -->
+<substitute>
+ <search>Reactor_Impl.cpp</search>
+ <replace>// Reactor_Impl.cpp</replace>
+</substitute>
+<substitute>
+ <search>Reactor_Impl.h</search>
+ <replace>// Reactor_Impl.h</replace>
+</substitute>
+
+<!-- Do not build the Dev Poll Reactor -->
+<substitute>
+ <search>Dev_Poll_Reactor.cpp</search>
+ <replace>// Dev_Poll_Reactor.cpp</replace>
+</substitute>
+
+
+<!-- Do not build the Msg_WFMO_Reactor -->
+<substitute>
+ <search>Msg_WFMO_Reactor.cpp</search>
+ <replace>// Msg_WFMO_Reactor.cpp</replace>
+</substitute>
+
+
+<!-- Do not build the priority Reactor -->
+<substitute>
+ <search>Priority_Reactor.cpp</search>
+ <replace>// Priority_Reactor.cpp</replace>
+</substitute>
+
+<!-- Do not build the Reactor_Timer_Interface -->
+<substitute>
+ <search>Reactor_Timer_Interface.h</search>
+ <replace>// Reactor_Timer_Interface.h</replace>
+</substitute>
+<substitute>
+ <search>Reactor_Timer_Interface.cpp</search>
+ <replace>// Reactor_Timer_Interface.cpp </replace>
+</substitute>
+
+</file>
+
+</module>
+<!-- end of Changes to ace -->
+
+<!-- Transformations to TAO module -->
+<module name="TAO/tao">
+
+<file name="default_resource.h">
+
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_TP_Reactor</replace>
+</substitute>
+
+</file>
+
+<file name="default_resource.cpp">
+
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_TP_Reactor</replace>
+</substitute>
+
+</file>
+
+</module>
+
+<module name="TAO/tao/Strategies">
+
+<file name="advanced_resource.h">
+
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_TP_Reactor</replace>
+</substitute>
+
+</file>
+
+<file name="advanced_resource.cpp">
+
+<!-- Comment out all other reactor includes -->
+
+<remove>#include "ace/FlReactor.h"</remove>
+<remove>#include "ace/TkReactor.h"</remove>
+<remove>#include "ace/WFMO_Reactor.h"</remove>
+<!-- <remove>#include "ace/Select_Reactor.h"</remove> -->
+<remove>#include "ace/Msg_WFMO_Reactor.h"</remove>
+
+<!-- Substitute ACE_Reactor_Impl with ACE_TP_Reactor -->
+<substitute>
+ <search>ACE_Reactor_Impl</search>
+ <replace>ACE_TP_Reactor</replace>
+</substitute>
+
+<!-- Comment out creation code for all other reactors -->
+<comment>
+ <start-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_START</start-hook>
+ <end-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</end-hook>
+</comment>
+
+<!-- Use the end hook to insert code that will create right reactor -->
+<add>
+ <hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</hook>
+ <data>
+ ACE_NEW_RETURN (impl,
+ ACE_TP_Reactor (ACE::max_handles (),
+ 1,
+ (ACE_Sig_Handler*)0,
+ (ACE_Timer_Queue*)0,
+ this->reactor_mask_signals_,
+ ACE_Select_Reactor_Token::LIFO),
+ 0);
+ </data>
+</add>
+
+</file>
+
+</module>
+
+</transform>
diff --git a/ACE/bin/FOCUS/specializations/Wait_Strategy/Wait_On_Read.spl b/ACE/bin/FOCUS/specializations/Wait_Strategy/Wait_On_Read.spl
new file mode 100644
index 00000000000..ab76b9c8eef
--- /dev/null
+++ b/ACE/bin/FOCUS/specializations/Wait_Strategy/Wait_On_Read.spl
@@ -0,0 +1,105 @@
+<?xml version="1.0"?>
+
+<!-- Wait Strategy Specialization
+ * ===============================
+ * Details all the specialization transformations necessary
+ * to specialize the Wait_Strategy with the Wait_On_Read strategy
+ *
+ * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu>
+ * $Id$
+-->
+
+<transform>
+
+<module name="TAO/tao">
+
+<file name="Wait_Strategy.cpp">
+
+<!-- Copy specialized code from the Wait_On_Read strategy
+ to this file -->
+
+<copy-from-source>
+
+ <!-- Name of the source file from which to copy. In this case, this is
+ the Wait_On_Read source file -->
+ <source>Wait_On_Read.cpp</source>
+
+ <!-- Copy data between the following hooks defined in the aforementioned
+ file -->
+ <copy-hook-start>WAIT_STRATEGY_SPL_COPY_HOOK_START</copy-hook-start>
+ <copy-hook-end>WAIT_STRATEGY_SPL_COPY_HOOK_END</copy-hook-end>
+
+ <!-- Destination hook in the Wait_Strategy.h file where the code
+ should be placed -->
+ <dest-hook>TAO_WAIT_STRATEGY_SPL_ADD_HOOK</dest-hook>
+
+</copy-from-source>
+
+<!-- Copy include files to the hook to get the necessary include files -->
+<add>
+ <hook>WAIT_STRATEGY_SPL_COPY_HOOK_START</hook>
+ <data>
+#include "Wait_On_Read.h"
+#include "Transport.h"
+#include "Resume_Handle.h"
+#include "Synch_Reply_Dispatcher.h"
+#include "Client_Strategy_Factory.h"
+#include "ORB_Core.h"
+#include "ace/Reactor.h"
+#include "ace/Countdown_Time.h"
+ </data>
+</add>
+
+<!-- Once this is done, replace all occurences of TAO_Wait_On_Read with
+ TAO_Wait_Strategy -->
+<substitute>
+ <search>TAO_Wait_On_Read</search>
+ <replace>TAO_Wait_Strategy</replace>
+</substitute>
+
+</file>
+
+<file name="tao.mpc">
+
+<!-- Do not build the other Wait strategy classes -->
+<substitute>
+ <search>Wait_On_Read.h</search>
+ <replace>// Wait_On_Read.cpp</replace>
+</substitute>
+<substitute>
+ <search>Wait_On_Read.cpp</search>
+ <replace>// Wait_On_Read.cpp</replace>
+</substitute>
+
+<substitute>
+ <search>Wait_On_Reactor.h</search>
+ <replace>// Wait_On_Reactor.cpp</replace>
+</substitute>
+<substitute>
+ <search>Wait_On_Reactor.cpp</search>
+ <replace>// Wait_On_Reactor.cpp</replace>
+</substitute>
+
+<substitute>
+ <search>Wait_On_Leader_Follower.h</search>
+ <replace>// Wait_On_Leader_Follower.cpp</replace>
+</substitute>
+<substitute>
+ <search>Wait_On_Leader_Follower.cpp</search>
+ <replace>// Wait_On_Leader_Follower.cpp</replace>
+</substitute>
+
+<substitute>
+ <search>Wait_On_LF_No_Upcall.h</search>
+ <replace>// Wait_On_LF_No_Upcall.cpp</replace>
+</substitute>
+<substitute>
+ <search>Wait_On_LF_No_Upcall.cpp</search>
+ <replace>// Wait_On_LF_No_Upcall.cpp</replace>
+</substitute>
+
+</file>
+
+</module>
+
+</transform>