#include <On_Demand_Fragmentation_Strategy.h>
Public Member Functions | |
TAO_On_Demand_Fragmentation_Strategy (TAO_Transport *transport, ACE_CDR::ULong max_message_size) | |
Constructor. | |
virtual | ~TAO_On_Demand_Fragmentation_Strategy (void) |
virtual int | fragment (TAO_OutputCDR &cdr, ACE_CDR::ULong pending_alignment, ACE_CDR::ULong pending_length) |
Fragment the (potentially partially) encoded GIOP message. | |
Private Member Functions | |
TAO_On_Demand_Fragmentation_Strategy (TAO_On_Demand_Fragmentation_Strategy const &) | |
void | operator= (TAO_On_Demand_Fragmentation_Strategy const &) |
Private Attributes | |
TAO_Transport *const | transport_ |
Pointer to the underlying transport object. | |
ACE_CDR::ULong const | max_message_size_ |
Size of GIOP message at which fragmentation will occur. |
Definition at line 43 of file On_Demand_Fragmentation_Strategy.h.
TAO_On_Demand_Fragmentation_Strategy::TAO_On_Demand_Fragmentation_Strategy | ( | TAO_Transport * | transport, | |
ACE_CDR::ULong | max_message_size | |||
) |
Constructor.
TAO_On_Demand_Fragmentation_Strategy::~TAO_On_Demand_Fragmentation_Strategy | ( | void | ) | [virtual] |
Definition at line 19 of file On_Demand_Fragmentation_Strategy.cpp.
{ }
TAO_On_Demand_Fragmentation_Strategy::TAO_On_Demand_Fragmentation_Strategy | ( | TAO_On_Demand_Fragmentation_Strategy const & | ) | [private] |
int TAO_On_Demand_Fragmentation_Strategy::fragment | ( | TAO_OutputCDR & | cdr, | |
ACE_CDR::ULong | pending_alignment, | |||
ACE_CDR::ULong | pending_length | |||
) | [virtual] |
Fragment the (potentially partially) encoded GIOP message.
Fragmentation the contents of the CDR output stream cdr into smaller chunks of data of size that fits within the configured ORB fragmentation threshold, and send each fragment "over the wire."
cdr | Output CDR stream. | |
pending_alignment | Size of alignment boundary for next data to be marshaled (e.g. 4 for a CORBA::ULong). | |
pending_length | Size of next data to be marshaled (e.g. 2 for a CORBA::UShort). |
Implements TAO_GIOP_Fragmentation_Strategy.
Definition at line 25 of file On_Demand_Fragmentation_Strategy.cpp.
{ if (this->transport_ == 0) return 0; // No transport. Can't fragment. TAO_GIOP_Message_Version giop_version; cdr.get_version (giop_version); // GIOP fragments are supported in GIOP 1.1 and better, but TAO only // supports them in 1.2 or better since GIOP 1.1 fragments do not // have a fragment message header. if (giop_version.major == 1 && giop_version.minor < 2) return -1; // Determine increase in CDR stream length if pending data is // marshaled, taking into account the alignment for the given data // type. ACE_CDR::ULong const total_pending_length = ACE_align_binary (cdr.total_length (), pending_alignment) + pending_length; // Except for the last fragment, fragmented GIOP messages must // always be aligned on an 8-byte boundary. Padding will be added // if necessary. ACE_CDR::ULong const aligned_length = ACE_align_binary (total_pending_length, ACE_CDR::MAX_ALIGNMENT); // this->max_message_size_ must be >= 24 bytes, i.e.: // 12 for GIOP protocol header // + 4 for GIOP fragment header // + 8 for payload (including padding) // since fragments must be aligned on an 8 byte boundary. if (aligned_length > this->max_message_size_) { // Pad the outgoing fragment if necessary. if (cdr.align_write_ptr (ACE_CDR::MAX_ALIGNMENT) != 0) return -1; // More fragments to come. cdr.more_fragments (true); if (TAO_debug_level > 0) ACE_DEBUG ((LM_DEBUG, "TAO (%P|%t) - On_Demand_Fragmentation_Strategy::fragment, " "sending fragment of size %d\n", cdr.total_length ())); // Send the current CDR stream contents through the transport, // making sure to switch on the the GIOP flags "more fragments" // bit. if (this->transport_->send_message (cdr, cdr.stub (), cdr.message_semantics (), cdr.timeout ()) == -1 // Now generate a fragment header. || this->transport_->messaging_object ()->generate_fragment_header ( cdr, cdr.request_id ()) != 0) return -1; } return 0; }
void TAO_On_Demand_Fragmentation_Strategy::operator= | ( | TAO_On_Demand_Fragmentation_Strategy const & | ) | [private] |
Size of GIOP message at which fragmentation will occur.
Definition at line 69 of file On_Demand_Fragmentation_Strategy.h.
TAO_Transport* const TAO_On_Demand_Fragmentation_Strategy::transport_ [private] |
Pointer to the underlying transport object.
Definition at line 66 of file On_Demand_Fragmentation_Strategy.h.