summaryrefslogtreecommitdiff
path: root/TAO/tao/ZIOP
diff options
context:
space:
mode:
authormsmit <msmit@remedy.nl>2009-03-02 15:12:34 +0000
committermsmit <msmit@remedy.nl>2009-03-02 15:12:34 +0000
commitad1516f1ed5e65b12eaaa583803071d299f780bd (patch)
tree3677d8385455a06f3525a897390a0b57b093fb72 /TAO/tao/ZIOP
parent658c4c8e37b9a2b9072f019fa9ace1927739b5bb (diff)
downloadATCD-ad1516f1ed5e65b12eaaa583803071d299f780bd.tar.gz
Mon Mar 2 15:09:21 UTC 2009 Marcel Smit <msmit@remedy.nl>
* tao/GIOP_Message_Base.cpp: * tao/GIOP_Message_Base.h: * tao/ZIOP/ZIOP.cpp: * tao/ZIOP/ZIOP.h: * tao/ZIOP_Adapter.h: Changed decompress interface to handle incoming and outgoing message blocks and errors better. * tests/ZIOP/client.cpp: Temporary blocked some tests.
Diffstat (limited to 'TAO/tao/ZIOP')
-rw-r--r--TAO/tao/ZIOP/ZIOP.cpp32
-rw-r--r--TAO/tao/ZIOP/ZIOP.h2
2 files changed, 16 insertions, 18 deletions
diff --git a/TAO/tao/ZIOP/ZIOP.cpp b/TAO/tao/ZIOP/ZIOP.cpp
index 910811b7fc9..73d18fc3b0e 100644
--- a/TAO/tao/ZIOP/ZIOP.cpp
+++ b/TAO/tao/ZIOP/ZIOP.cpp
@@ -124,10 +124,12 @@ TAO_ZIOP_Loader::decompress (Compression::Compressor_ptr compressor,
return true;
}
-bool
-TAO_ZIOP_Loader::decompress (ACE_Data_Block **db, TAO_Queued_Data& qd,
+ACE_Data_Block *
+TAO_ZIOP_Loader::decompress (ACE_Data_Block& db, TAO_Queued_Data& qd,
TAO_ORB_Core& orb_core)
{
+ ACE_Data_Block *db_ret = &db;
+
CORBA::Object_var compression_manager =
orb_core.resolve_compression_manager();
@@ -141,8 +143,8 @@ TAO_ZIOP_Loader::decompress (ACE_Data_Block **db, TAO_Queued_Data& qd,
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 ();
-
- TAO_InputCDR cdr (*db,
+
+ TAO_InputCDR cdr (db.duplicate (),
qd.msg_block ()->self_flags (),
begin + TAO_GIOP_MESSAGE_HEADER_LEN,
wr,
@@ -161,17 +163,13 @@ TAO_ZIOP_Loader::decompress (ACE_Data_Block **db, TAO_Queued_Data& qd,
if (decompress(compressor.in(), data.data, myout))
{
- ACE_Message_Block *mb = new ACE_Message_Block();
-
- mb->size ((size_t)(data.original_length +
+ ACE_Message_Block mb ((size_t)(data.original_length +
TAO_GIOP_MESSAGE_HEADER_LEN));
-
qd.msg_block ()->rd_ptr (initial_rd_ptr);
-
- mb->copy(qd.msg_block ()->base () + begin,
+ mb.copy(qd.msg_block ()->base () + begin,
TAO_GIOP_MESSAGE_HEADER_LEN);
- if (mb->copy((char*)myout.get_buffer(true),
+ if (mb.copy((char*)myout.get_buffer(true),
(size_t)data.original_length) != 0)
ACE_ERROR_RETURN((LM_ERROR,
ACE_TEXT ("TAO - (%P|%t) - ")
@@ -179,18 +177,18 @@ TAO_ZIOP_Loader::decompress (ACE_Data_Block **db, TAO_Queued_Data& qd,
ACE_TEXT ("Buffer too small\n")),
false);
//change it into a GIOP message..
- mb->base ()[0] = 0x47;
- ACE_CDR::mb_align (mb);
- *db = mb->data_block ();
- return true;
+ mb.base ()[0] = 0x47;
+ ACE_CDR::mb_align (&mb);
+ db_ret = mb.data_block ();
+ return db_ret->duplicate ();
}
}
else
{
- return false;
+ return 0;
}
- return true;
+ return db_ret;
}
CORBA::ULong
diff --git a/TAO/tao/ZIOP/ZIOP.h b/TAO/tao/ZIOP/ZIOP.h
index f8639f3789e..418782b1c6a 100644
--- a/TAO/tao/ZIOP/ZIOP.h
+++ b/TAO/tao/ZIOP/ZIOP.h
@@ -47,7 +47,7 @@ public:
/// Destructor
virtual ~TAO_ZIOP_Loader (void);
- virtual bool decompress (ACE_Data_Block **db, TAO_Queued_Data& qd, TAO_ORB_Core& orb_core);
+ virtual ACE_Data_Block * decompress (ACE_Data_Block& db, TAO_Queued_Data& qd, TAO_ORB_Core& orb_core);
// Compress the @a stream. Starting point of the compression is rd_ptr()
virtual bool marshal_data (TAO_OutputCDR& cdr, TAO_Stub& stub);