summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TAO/tao/Remote_Invocation.cpp8
-rw-r--r--TAO/tao/Transport.cpp15
-rw-r--r--TAO/tao/Transport.h5
3 files changed, 25 insertions, 3 deletions
diff --git a/TAO/tao/Remote_Invocation.cpp b/TAO/tao/Remote_Invocation.cpp
index 0efdef2dfb0..c19332acb84 100644
--- a/TAO/tao/Remote_Invocation.cpp
+++ b/TAO/tao/Remote_Invocation.cpp
@@ -108,6 +108,8 @@ namespace TAO
TAO_OutputCDR &out_stream
ACE_ENV_ARG_DECL)
{
+ this->resolver_.transport ()->clear_translators (0,
+ &out_stream);
// Send the request for the header
if (this->resolver_.transport ()->generate_request_header (this->details_,
spec,
@@ -141,16 +143,16 @@ namespace TAO
{
TAO_Protocols_Hooks *tph =
this->resolver_.stub ()->orb_core ()->get_protocols_hooks ();
-
+
CORBA::Boolean set_client_network_priority =
tph->set_client_network_priority (this->resolver_.transport ()->tag (),
this->resolver_.stub ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (TAO_INVOKE_FAILURE);
-
+
TAO_Connection_Handler *connection_handler =
this->resolver_.transport ()->connection_handler ();
-
+
connection_handler->set_dscp_codepoint (set_client_network_priority);
const int retval =
diff --git a/TAO/tao/Transport.cpp b/TAO/tao/Transport.cpp
index d4d6f4c520d..d0386a9744e 100644
--- a/TAO/tao/Transport.cpp
+++ b/TAO/tao/Transport.cpp
@@ -2339,6 +2339,21 @@ TAO_Transport::assign_translators (TAO_InputCDR *inp, TAO_OutputCDR *outp)
}
}
+void
+TAO_Transport::clear_translators (TAO_InputCDR *inp, TAO_OutputCDR *outp)
+{
+ if (inp)
+ {
+ inp->char_translator (0);
+ inp->wchar_translator (0);
+ }
+ if (outp)
+ {
+ outp->char_translator (0);
+ outp->wchar_translator (0);
+ }
+}
+
ACE_Event_Handler::Reference_Count
TAO_Transport::add_reference (void)
{
diff --git a/TAO/tao/Transport.h b/TAO/tao/Transport.h
index 265e9c0a28c..259292a1eb2 100644
--- a/TAO/tao/Transport.h
+++ b/TAO/tao/Transport.h
@@ -729,6 +729,11 @@ public:
/// and output CDRs.
void assign_translators (TAO_InputCDR *, TAO_OutputCDR *);
+ /// It is necessary to clear the codeset translator when a CDR stream
+ /// is used for more than one GIOP message. This is required since the
+ /// header must not be translated, whereas the body must be.
+ void clear_translators (TAO_InputCDR *, TAO_OutputCDR *);
+
/// Return true if the tcs has been set
CORBA::Boolean is_tcs_set() const;