diff options
author | msmit <msmit@remedy.nl> | 2009-03-12 07:52:59 +0000 |
---|---|---|
committer | msmit <msmit@remedy.nl> | 2009-03-12 07:52:59 +0000 |
commit | fbaac60441571ce7523e2d71adbfd32c21fed57d (patch) | |
tree | ba0e30bbb40885c2036f743a26ebd6bcd272cef1 /TAO/tao/ZIOP | |
parent | 104b31273555015bbb9542b10443508fe9460165 (diff) | |
download | ATCD-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.cpp | 12 | ||||
-rw-r--r-- | TAO/tao/ZIOP/ZIOP_Policy_i.cpp | 8 | ||||
-rw-r--r-- | TAO/tao/ZIOP/ZIOP_Stub.cpp | 69 |
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 (); } } } |