summaryrefslogtreecommitdiff
path: root/TAO/tao/ZIOP
diff options
context:
space:
mode:
authormsmit <msmit@remedy.nl>2009-03-12 07:52:59 +0000
committermsmit <msmit@remedy.nl>2009-03-12 07:52:59 +0000
commitfbaac60441571ce7523e2d71adbfd32c21fed57d (patch)
treeba0e30bbb40885c2036f743a26ebd6bcd272cef1 /TAO/tao/ZIOP
parent104b31273555015bbb9542b10443508fe9460165 (diff)
downloadATCD-fbaac60441571ce7523e2d71adbfd32c21fed57d.tar.gz
Thu Mar 12 07:42:57 UTC 2009 Marcel Smit <msmit@remedy.nl>
* tao/GIOP_Message_Base.cpp: * tao/Transport.cpp: * tao/ZIOP/ZIOP.cpp: Refactored decompression of large data blocks. * tao/GIOP_Message_State.cpp: * tao/GIOP_Message_State.h: * tao/GIOP_Message_State.inl: Always set the compressed flag. Now, a ZIOP client connecting to a non-ZIOP server receives an exception. * tao/ZIOP/ZIOP_Policy_i.cpp: Return the compressor ID/Level list instead of a copy of this list. * tao/ZIOP/ZIOP_Stub.cpp: Refactored. Make a copy of an existing policy instead of creating a new one. * tests/ZIOP/client.cpp: Refactored. Extended tests. * tests/ZIOP/Hello.cpp: * tests/ZIOP/server.cpp: * tests/ZIOP/ZIOP.mpc: Extended tests.
Diffstat (limited to 'TAO/tao/ZIOP')
-rw-r--r--TAO/tao/ZIOP/ZIOP.cpp12
-rw-r--r--TAO/tao/ZIOP/ZIOP_Policy_i.cpp8
-rw-r--r--TAO/tao/ZIOP/ZIOP_Stub.cpp69
3 files changed, 41 insertions, 48 deletions
diff --git a/TAO/tao/ZIOP/ZIOP.cpp b/TAO/tao/ZIOP/ZIOP.cpp
index 0dde436e2aa..9a44202013e 100644
--- a/TAO/tao/ZIOP/ZIOP.cpp
+++ b/TAO/tao/ZIOP/ZIOP.cpp
@@ -197,7 +197,7 @@ TAO_ZIOP_Loader::decompress (ACE_Data_Block **db, TAO_Queued_Data& qd,
if (!CORBA::is_nil(manager.in ()))
{
ZIOP::CompressedData data;
- //first set the read pointer after the header
+ // first set the read pointer after the header
size_t begin = qd.msg_block ()-> rd_ptr() - qd.msg_block ()->base ();
char * initial_rd_ptr = qd.msg_block ()-> rd_ptr();
size_t const wr = qd.msg_block ()->wr_ptr () - qd.msg_block ()->base ();
@@ -221,8 +221,10 @@ TAO_ZIOP_Loader::decompress (ACE_Data_Block **db, TAO_Queued_Data& qd,
if (decompress(compressor.in(), data.data, myout))
{
- ACE_Message_Block mb ((size_t)(data.original_length +
- TAO_GIOP_MESSAGE_HEADER_LEN));
+ size_t new_data_length = (size_t)(data.original_length +
+ TAO_GIOP_MESSAGE_HEADER_LEN);
+
+ ACE_Message_Block mb (new_data_length);
qd.msg_block ()->rd_ptr (initial_rd_ptr);
mb.copy(qd.msg_block ()->base () + begin,
TAO_GIOP_MESSAGE_HEADER_LEN);
@@ -247,9 +249,7 @@ TAO_ZIOP_Loader::decompress (ACE_Data_Block **db, TAO_Queued_Data& qd,
}
//replace data block
*db = mb.data_block ()->duplicate ();
- qd.msg_block ()->replace_data_block (mb.data_block ());
-
-
+ (*db)->size (new_data_length);
return true;
}
}
diff --git a/TAO/tao/ZIOP/ZIOP_Policy_i.cpp b/TAO/tao/ZIOP/ZIOP_Policy_i.cpp
index c6306341d7a..8a25e5b902c 100644
--- a/TAO/tao/ZIOP/ZIOP_Policy_i.cpp
+++ b/TAO/tao/ZIOP/ZIOP_Policy_i.cpp
@@ -81,13 +81,7 @@ CompressorIdLevelListPolicy::destroy (void)
::Compression::CompressorIdLevelList *
CompressorIdLevelListPolicy::compressor_ids (void)
{
- ::Compression::CompressorIdLevelList *tmp = 0;
- ACE_NEW_THROW_EX (tmp,
- ::Compression::CompressorIdLevelList (this->value_),
- CORBA::NO_MEMORY (TAO::VMCID,
- CORBA::COMPLETED_NO));
-
- return tmp;
+ return &this->value_;
}
TAO_Cached_Policy_Type
diff --git a/TAO/tao/ZIOP/ZIOP_Stub.cpp b/TAO/tao/ZIOP/ZIOP_Stub.cpp
index 6b28377c9a0..fb245ff9cfe 100644
--- a/TAO/tao/ZIOP/ZIOP_Stub.cpp
+++ b/TAO/tao/ZIOP/ZIOP_Stub.cpp
@@ -5,6 +5,7 @@
#if defined (TAO_HAS_CORBA_MESSAGING) && TAO_HAS_CORBA_MESSAGING != 0
#include "tao/ZIOP/ZIOP_Policy_i.h"
+#include "tao/ZIOP/ZIOP.h"
#include "tao/ORB_Core.h"
#include "tao/Policy_Set.h"
#include "tao/Policy_Manager.h"
@@ -187,19 +188,19 @@ TAO_ZIOP_Stub::effective_compression_id_list_policy (void)
CORBA::Policy_var exposed =
this->exposed_compression_id_list_policy ();
- // Reconcile client-exposed and locally set values.
- if (CORBA::is_nil (exposed.in ()))
- return override._retn ();
-
- if (CORBA::is_nil (override.in ()))
- return exposed._retn ();
-
ZIOP::CompressorIdLevelListPolicy_var override_policy_var =
ZIOP::CompressorIdLevelListPolicy::_narrow (override.in ());
ZIOP::CompressorIdLevelListPolicy_var exposed_policy_var =
ZIOP::CompressorIdLevelListPolicy::_narrow (exposed.in ());
+ // Reconcile client-exposed and locally set values.
+ if (CORBA::is_nil (exposed_policy_var.in ()))
+ return override._retn ();
+
+ if (CORBA::is_nil (override_policy_var.in ()))
+ return exposed._retn ();
+
// Check which compressor id we should use and which level
for (CORBA::ULong nr_exposed = 0;
nr_exposed < exposed_policy_var->compressor_ids ()->length ();
@@ -212,10 +213,12 @@ TAO_ZIOP_Stub::effective_compression_id_list_policy (void)
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) - ")
- ACE_TEXT ("TAO_ZIOP_Stub::effective_compression_id_list_policy,")
- ACE_TEXT ("exposed_policy = %d, compressor_id = %d, ")
+ ACE_TEXT ("TAO_ZIOP_Stub::effective_compression_id_list_policy, ")
+ ACE_TEXT ("exposed_policy = %d, compressor_id = %C, ")
ACE_TEXT ("compression_level = %d\n"),
- nr_exposed, exposed_compressor.ptr ()->compressor_id,
+ nr_exposed,
+ TAO_ZIOP_Loader::ziop_compressorid_name (
+ exposed_compressor.ptr ()->compressor_id),
exposed_compressor.ptr ()->compression_level));
}
// check if a local policy matches this exposed policy
@@ -229,35 +232,31 @@ TAO_ZIOP_Stub::effective_compression_id_list_policy (void)
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) - ")
- ACE_TEXT ("TAO_ZIOP_Stub::effective_compression_id_list_policy,")
- ACE_TEXT ("checking override_policy = %d, compressor_id = %d, ")
+ ACE_TEXT ("TAO_ZIOP_Stub::effective_compression_id_list_policy, ")
+ ACE_TEXT ("checking override_policy = %d, compressor_id = %C, ")
ACE_TEXT ("compression_level = %d\n"),
- nr_override, override_compressor.ptr ()->compressor_id,
- override_compressor.ptr ()->compression_level));
+ nr_override,
+ TAO_ZIOP_Loader::ziop_compressorid_name (
+ override_compressor->compressor_id),
+ override_compressor->compression_level));
}
- if (override_compressor.ptr ()->compressor_id ==
- exposed_compressor.ptr ()->compressor_id)
+ if (override_compressor->compressor_id ==
+ exposed_compressor->compressor_id)
{
- ::Compression::CompressorIdLevelList compressor_id_list(1);
- compressor_id_list.length(1);
- compressor_id_list[0].compressor_id = override_compressor.ptr ()->compressor_id;
-
+ CORBA::Policy_var tmp_policy = override_policy_var->copy ();
+ ZIOP::CompressorIdLevelListPolicy_var idlevellist_policy_var =
+ ZIOP::CompressorIdLevelListPolicy::_narrow (tmp_policy.in ());
+ if (CORBA::is_nil (idlevellist_policy_var.in ()))
+ return override._retn ();
+
+ idlevellist_policy_var->compressor_ids ()->operator [] (0).compressor_id =
+ override_compressor->compressor_id;
//according to ZIOP spec, return the compressor with the lowest compression level.
- if (override_compressor.ptr ()->compression_level <
- exposed_compressor.ptr ()->compression_level)
- {
- compressor_id_list[0].compression_level =
- override_compressor.ptr ()->compression_level;
- }
- else
- {
- compressor_id_list[0].compression_level =
- exposed_compressor.ptr ()->compression_level;
- }
-
- CORBA::Any compressor_id_any;
- compressor_id_any <<= compressor_id_list;
- return this->orb_->create_policy (ZIOP::COMPRESSOR_ID_LEVEL_LIST_POLICY_ID, compressor_id_any);
+ idlevellist_policy_var.ptr ()->compressor_ids ()->operator [] (0).compression_level =
+ ACE_MIN (override_compressor->compression_level,
+ exposed_compressor->compression_level);
+
+ return idlevellist_policy_var._retn ();
}
}
}