summaryrefslogtreecommitdiff
path: root/TAO/tao/CDR.cpp
diff options
context:
space:
mode:
authorJohnny Willemsen <jwillemsen@remedy.nl>2006-04-20 12:40:50 +0000
committerJohnny Willemsen <jwillemsen@remedy.nl>2006-04-20 12:40:50 +0000
commit1939a15774cacdf268c47b0bd7eb851ca4f149ab (patch)
tree8eaa757e26eff9e7ac20b3083429ff45aa4faefb /TAO/tao/CDR.cpp
parent2f8a860d14adb56c57241b6e76a665e3835b1d04 (diff)
downloadATCD-1939a15774cacdf268c47b0bd7eb851ca4f149ab.tar.gz
ChangeLogTag: Thu Apr 20 11:50:12 UTC 2006 Johnny Willemsen <jwillemsen@remedy.nl>
Diffstat (limited to 'TAO/tao/CDR.cpp')
-rw-r--r--TAO/tao/CDR.cpp131
1 files changed, 98 insertions, 33 deletions
diff --git a/TAO/tao/CDR.cpp b/TAO/tao/CDR.cpp
index e738a4843ad..31efb9b0ea6 100644
--- a/TAO/tao/CDR.cpp
+++ b/TAO/tao/CDR.cpp
@@ -5,6 +5,7 @@
#include "tao/ORB_Core.h"
#include "tao/Environment.h"
#include "tao/SystemException.h"
+#include "tao/GIOP_Fragmentation_Strategy.h"
#if !defined (__ACE_INLINE__)
# include "tao/CDR.i"
@@ -25,7 +26,9 @@ static const char *TAO_CDR_Timeprobe_Description[] =
"OutputCDR::ctor[2] - enter",
"OutputCDR::ctor[2] - leave",
"OutputCDR::ctor[3] - enter",
- "OutputCDR::ctor[3] - leave"
+ "OutputCDR::ctor[3] - leave",
+ "OutputCDR::ctor[4] - enter",
+ "OutputCDR::ctor[4] - leave"
};
enum
@@ -35,7 +38,9 @@ enum
TAO_OUTPUT_CDR_CTOR2_ENTER,
TAO_OUTPUT_CDR_CTOR2_LEAVE,
TAO_OUTPUT_CDR_CTOR3_ENTER,
- TAO_OUTPUT_CDR_CTOR3_LEAVE
+ TAO_OUTPUT_CDR_CTOR3_LEAVE,
+ TAO_OUTPUT_CDR_CTOR4_ENTER,
+ TAO_OUTPUT_CDR_CTOR4_LEAVE
};
// Setup Timeprobes
@@ -54,14 +59,20 @@ TAO_OutputCDR::TAO_OutputCDR (size_t size,
size_t memcpy_tradeoff,
ACE_CDR::Octet major_version,
ACE_CDR::Octet minor_version)
- : ACE_OutputCDR (size,
- byte_order,
- buffer_allocator,
- data_block_allocator,
- message_block_allocator,
- memcpy_tradeoff,
- major_version,
- minor_version)
+ : ACE_OutputCDR (size,
+ byte_order,
+ buffer_allocator,
+ data_block_allocator,
+ message_block_allocator,
+ memcpy_tradeoff,
+ major_version,
+ minor_version)
+ , fragmentation_strategy_ (0)
+ , more_fragments_ (false)
+ , request_id_ (0)
+ , stub_ (0)
+ , message_semantics_ (-1)
+ , timeout_ (0)
{
ACE_FUNCTION_TIMEPROBE (TAO_OUTPUT_CDR_CTOR1_ENTER);
}
@@ -75,33 +86,73 @@ TAO_OutputCDR::TAO_OutputCDR (char *data,
size_t memcpy_tradeoff,
ACE_CDR::Octet major_version,
ACE_CDR::Octet minor_version)
- : ACE_OutputCDR (data,
- size,
- byte_order,
- buffer_allocator,
- data_block_allocator,
- message_block_allocator,
- memcpy_tradeoff,
- major_version,
- minor_version)
+ : ACE_OutputCDR (data,
+ size,
+ byte_order,
+ buffer_allocator,
+ data_block_allocator,
+ message_block_allocator,
+ memcpy_tradeoff,
+ major_version,
+ minor_version)
+ , fragmentation_strategy_ (0)
+ , more_fragments_ (false)
+ , request_id_ (0)
+ , stub_ (0)
+ , message_semantics_ (-1)
+ , timeout_ (0)
{
ACE_FUNCTION_TIMEPROBE (TAO_OUTPUT_CDR_CTOR2_ENTER);
}
-TAO_OutputCDR::TAO_OutputCDR (ACE_Message_Block *data,
+TAO_OutputCDR::TAO_OutputCDR (char *data,
+ size_t size,
int byte_order,
+ ACE_Allocator* buffer_allocator,
+ ACE_Allocator* data_block_allocator,
+ ACE_Allocator* message_block_allocator,
size_t memcpy_tradeoff,
+ TAO_GIOP_Fragmentation_Strategy * fs,
ACE_CDR::Octet major_version,
ACE_CDR::Octet minor_version)
- : ACE_OutputCDR (data,
- byte_order,
- memcpy_tradeoff,
- major_version,
- minor_version)
+ : ACE_OutputCDR (data,
+ size,
+ byte_order,
+ buffer_allocator,
+ data_block_allocator,
+ message_block_allocator,
+ memcpy_tradeoff,
+ major_version,
+ minor_version)
+ , fragmentation_strategy_ (fs)
+ , more_fragments_ (false)
+ , request_id_ (0)
+ , stub_ (0)
+ , message_semantics_ (-1)
+ , timeout_ (0)
{
ACE_FUNCTION_TIMEPROBE (TAO_OUTPUT_CDR_CTOR3_ENTER);
}
+TAO_OutputCDR::TAO_OutputCDR (ACE_Message_Block *data,
+ int byte_order,
+ size_t memcpy_tradeoff,
+ ACE_CDR::Octet major_version,
+ ACE_CDR::Octet minor_version)
+ : ACE_OutputCDR (data,
+ byte_order,
+ memcpy_tradeoff,
+ major_version,
+ minor_version)
+ , fragmentation_strategy_ (0)
+ , more_fragments_ (false)
+ , request_id_ (0)
+ , stub_ (0)
+ , message_semantics_ (-1)
+ , timeout_ (0)
+{
+ ACE_FUNCTION_TIMEPROBE (TAO_OUTPUT_CDR_CTOR4_ENTER);
+}
void
TAO_OutputCDR::throw_stub_exception (int error_num ACE_ENV_ARG_DECL)
@@ -112,15 +163,16 @@ TAO_OutputCDR::throw_stub_exception (int error_num ACE_ENV_ARG_DECL)
break;
case EINVAL : // wchar from a GIOP 1.0
ACE_THROW (CORBA::MARSHAL (CORBA::OMGVMCID | 5, CORBA::COMPLETED_NO));
- ACE_NOTREACHED(break);
+ ACE_NOTREACHED (break);
#if (ERANGE != EINVAL)
case ERANGE : // untranslatable character
- ACE_THROW (CORBA::DATA_CONVERSION (CORBA::OMGVMCID | 1, CORBA::COMPLETED_NO));
- ACE_NOTREACHED(break);
+ ACE_THROW (CORBA::DATA_CONVERSION (CORBA::OMGVMCID | 1,
+ CORBA::COMPLETED_NO));
+ ACE_NOTREACHED (break);
#endif
case EACCES : // wchar but no codeset
- ACE_THROW(CORBA::INV_OBJREF (CORBA::OMGVMCID | 2, CORBA::COMPLETED_NO));
- ACE_NOTREACHED(break);
+ ACE_THROW (CORBA::INV_OBJREF (CORBA::OMGVMCID | 2, CORBA::COMPLETED_NO));
+ ACE_NOTREACHED (break);
default :
ACE_THROW (CORBA::MARSHAL ());
}
@@ -136,18 +188,18 @@ TAO_OutputCDR::throw_skel_exception (int error_num ACE_ENV_ARG_DECL)
case EINVAL : // wchar from a GIOP 1.0
ACE_THROW (CORBA::MARSHAL (CORBA::OMGVMCID | 5, CORBA::COMPLETED_YES));
- ACE_NOTREACHED(break);
+ ACE_NOTREACHED (break);
case EACCES : // wchar but no codeset
ACE_THROW (CORBA::BAD_PARAM (CORBA::OMGVMCID | 23,
CORBA::COMPLETED_YES));
- ACE_NOTREACHED(break);
+ ACE_NOTREACHED (break);
#if (ERANGE != EINVAL)
case ERANGE : // untranslatable character
ACE_THROW (CORBA::DATA_CONVERSION (CORBA::OMGVMCID | 1,
CORBA::COMPLETED_YES));
- ACE_NOTREACHED(break);
+ ACE_NOTREACHED (break);
#endif
default :
@@ -156,6 +208,19 @@ TAO_OutputCDR::throw_skel_exception (int error_num ACE_ENV_ARG_DECL)
}
}
+bool
+TAO_OutputCDR::fragment_stream (ACE_CDR::ULong pending_alignment,
+ ACE_CDR::ULong pending_length)
+{
+ if (this->fragmentation_strategy_)
+ {
+ return (this->fragmentation_strategy_->fragment (*this,
+ pending_alignment,
+ pending_length) == 0);
+ }
+
+ return true; // Success.
+}
// ****************************************************************