diff options
Diffstat (limited to 'ACE/TAO/tao/BiDir_GIOP/BiDir_Service_Context_Handler.cpp')
-rw-r--r-- | ACE/TAO/tao/BiDir_GIOP/BiDir_Service_Context_Handler.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/ACE/TAO/tao/BiDir_GIOP/BiDir_Service_Context_Handler.cpp b/ACE/TAO/tao/BiDir_GIOP/BiDir_Service_Context_Handler.cpp new file mode 100644 index 00000000000..447b62f147e --- /dev/null +++ b/ACE/TAO/tao/BiDir_GIOP/BiDir_Service_Context_Handler.cpp @@ -0,0 +1,58 @@ +// $Id$ + +#include "tao/BiDir_GIOP/BiDir_Service_Context_Handler.h" + +ACE_RCSID (BiDir_GIOP, + BiDir_Service_Context_Handler, + "$Id$") + +#include "tao/CDR.h" +#include "tao/TAO_Server_Request.h" +#include "tao/Transport.h" +#include "tao/ORB_Core.h" +#include "tao/GIOP_Message_Base.h" +#include "tao/operation_details.h" +#include "tao/Transport_Mux_Strategy.h" + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +int +TAO_BiDIR_Service_Context_Handler::process_service_context ( + TAO_Transport& transport, + const IOP::ServiceContext& context) +{ + TAO_InputCDR cdr (reinterpret_cast<const char*> ( + context.context_data.get_buffer ()), + context.context_data.length ()); + return transport.tear_listen_point_list (cdr); +} + +int +TAO_BiDIR_Service_Context_Handler::generate_service_context ( + TAO_Stub *, + TAO_Transport& transport, + TAO_Operation_Details &opdetails, + TAO_Target_Specification &, + TAO_OutputCDR &msg) +{ + if (transport.orb_core ()->bidir_giop_policy () && + transport.messaging_object ()->is_ready_for_bidirectional (msg) && + transport.bidirectional_flag () < 0) + { + transport.set_bidir_context_info (opdetails); + + // Set the flag to 1 (i.e., originating side) + transport.bidirectional_flag (1); + + // At the moment we enable BiDIR giop we have to get a new + // request id to make sure that we follow the even/odd rule + // for request id's. We only need to do this when enabled + // it, after that the Transport Mux Strategy will make sure + // that the rule is followed + opdetails.request_id (transport.tms ()->request_id ()); + } + + return 0; +} + +TAO_END_VERSIONED_NAMESPACE_DECL |