diff options
Diffstat (limited to 'TAO/tao/Incoming_Message_Queue.h')
-rw-r--r-- | TAO/tao/Incoming_Message_Queue.h | 162 |
1 files changed, 18 insertions, 144 deletions
diff --git a/TAO/tao/Incoming_Message_Queue.h b/TAO/tao/Incoming_Message_Queue.h index 660a207090b..3adfc3d24ac 100644 --- a/TAO/tao/Incoming_Message_Queue.h +++ b/TAO/tao/Incoming_Message_Queue.h @@ -27,7 +27,6 @@ class ACE_Allocator; class TAO_ORB_Core; class TAO_Queued_Data; class TAO_Transport; -class TAO_Pluggable_Messaging; /** * @class TAO_Incoming_Message_Queue @@ -76,68 +75,31 @@ public: /// Return the length of the queue.. CORBA::ULong queue_length (void); - /*! - @name Node Inspection Predicates - - \brief These methods allow inspection of head and tail nodes for "completeness". - - These methods check to see whether the node on the head or tail is - "complete" and ready for further processing. See each method's - documentation for its definition of "complete". - */ - //@{ - /*! - "complete" == the GIOP message at the tail is not missing any data (it may be a complete GIOP Fragment, though) - - \return -1 queue is empty - \return 0 tail is not "complete" - \return 1 tail is "complete" - */ + /// Methods for sanity check. Checks to see whether the node on the + /// head or tail is complete or not and ready for further + /// processing. int is_tail_complete (void); - - /*! - - "complete" == the GIOP message at the head is not missing any data - AND, if it's the first message in a series of GIOP fragments, all - the fragments have been received, parsed, and placed into the - queue - - \return -1 if queue is empty - \return 0 if head is not "complete" - \return 1 if head is "complete" - */ int is_head_complete (void); - //@} - /*! - \brief Check to see if the message at the tail (complete or incomplete) is a GIOP Fragment. - */ + /// This method checks whether the last message that was queued up + /// was fragmented... int is_tail_fragmented (void); /// Return the size of data that is missing in tail of the queue. size_t missing_data_tail (void) const; /// void missing_data (size_t data); - /// Find the first fragment that matches the GIOP version - TAO_Queued_Data *find_fragment (CORBA::Octet major, - CORBA::Octet minor) const; - - /// Find the first fragment that matches the request id - TAO_Queued_Data *find_fragment (CORBA::ULong request_id) const; - private: friend class TAO_Transport; + /// Make a node for the queue. + TAO_Queued_Data *get_node (void); + private: - /*! - \brief A circular linked list of messages awaiting processing. - \a last_message_added_ points to the most recent message added to - the list. The earliest addition can be easily accessed via - \a last_message_added_->next_. - */ - TAO_Queued_Data *last_added_; + /// A linked listof messages that await processing + TAO_Queued_Data *queued_data_; /// The size of the queue CORBA::ULong size_; @@ -161,73 +123,20 @@ private: class TAO_Export TAO_Queued_Data { -protected: +public: /// Default Constructor TAO_Queued_Data (ACE_Allocator *alloc = 0); /// Constructor. TAO_Queued_Data (ACE_Message_Block *mb, ACE_Allocator *alloc = 0); -public: /// Copy constructor. TAO_Queued_Data (const TAO_Queued_Data &qd); - /*! - \name Factory Methods - - These methods manufacture instances of TAO_Queued_Data and return - them. These instances should be removed via TAO_Queued_Data::release. - - Instances are initialized from data in the ACE_Message_Block, - interpreted according to rules defined in the - TAO_Pluggable_Messaging object. - - The manufactured instance adopts the message block \em without - duplicating it; therefore, the caller must duplicate or orphan the - message block. The caller also must insure that the message block - can be released via ACE_Message_Block::release, and that its life - endures beyond the calling scope. - - For the purposes of TAO_Queued_Data, a completed message is a - completely received message as defined by the messaging protocol - object. For GIOP, that means that the number of bytes specified - in the general GIOP header have been completely received. It - specifically DOES NOT mean that all \em fragments have been - received. Fragment reassembly is another matter altogether. - */ - //@{ - /*! - \brief Make and return an instance of TAO_Queued_Data suitable for use as an uncompleted message. - */ - static TAO_Queued_Data* make_uncompleted_message (ACE_Message_Block *mb, - TAO_Pluggable_Messaging &msging_obj, - ACE_Allocator *alloc = 0); - /*! - \brief Make and return an instance of TAO_Queued_Data suitable for use as a completed message. - */ - // THIS IMPLEMENTATION DOESN'T WORK THE SAME AS ITS USAGE! - // WE CAN'T JUST ADOPT mb, BECAUSE IT MAY CONTAIN MORE THAN - // ONE PROTOCOL MESSAGE. WE THEREFORE NEED TO CLONE IT. THIS - // MEANS UPDATING THE DOCUMENTATION, AND IT ALSO MEANS THAT IT - // BEHAVES DIFFERENTLY FROM make_uncompleted_message. - static TAO_Queued_Data* make_completed_message (ACE_Message_Block &mb, - TAO_Pluggable_Messaging &msging_obj, - ACE_Allocator *alloc = 0); - - /// Consolidate this fragments chained message blocks into one. - void consolidate (void); - - /*! - \brief Creation and deletion of a node in the queue. - \todo Maybe this should be private? - */ -private: - static TAO_Queued_Data* make_queued_data (ACE_Allocator *alloc = 0); -public: - //@} + /// Creation and deletion of a node in the queue. + static TAO_Queued_Data* get_queued_data (ACE_Allocator *alloc = 0); static void release (TAO_Queued_Data *qd); - void release (void); /// Duplicate ourselves. This creates a copy of ourselves on the /// heap and returns a pointer to the duplicated node. @@ -237,43 +146,11 @@ public: /// The message block that contains the message. ACE_Message_Block *msg_block_; - /*! - @name Missing Data details - - The \a missing_data_bytes_ member contains the number of bytes of - data missing from \a msg_block_. However, there can be two places - where data is missing: header and payload. We cannot know how - much data is missing from the payload until we have a complete - header. Fortunately, headers are a fixed length, so we can know - how much we're missing from the header. - - We use \param current_state_ to indicate which portion of the message - \param missing_data_bytes_ refers to, as well as the general state of - the message. - */ - //@{ - /*! - Describes the meaning given to the number stored in \a missing_data_bytes_. - */ - enum Queued_Data_State - { - INVALID = -1, //!< The queued data is in an invalid/uninitialized state, and no data should be trusted. - COMPLETED = 0, //!< Message is complete; \a missing_data_bytes_ should be zero. - WAITING_TO_COMPLETE_HEADER, //!< Value in \a missing_data_bytes_ indicates part of header is missing. - WAITING_TO_COMPLETE_PAYLOAD //!< Value in \a missing_data_bytes_ indicates part of payload is missing. - }; - - /*! - Indicates the current state of the message, including hints at - how to interpret the value stored in \a missing_data_bytes_. - */ - Queued_Data_State current_state_; - - /*! Data missing in the above message that hasn't been read or processed yet. */ - size_t missing_data_bytes_; - //@} - - /*! The byte order of the message that is stored in the node. */ + /// Data missing in the above message that hasn't been read or + /// processed yet. + CORBA::Long missing_data_; + + /// The byte order of the message that is stored in the node.. CORBA::Octet byte_order_; /// Many protocols like GIOP have a major and minor version @@ -288,9 +165,6 @@ public: /// queue already has more fragments that is missing.. CORBA::Octet more_fragments_; - /// The fragment request id - CORBA::ULong request_id_; - /// The message type of the message TAO_Pluggable_Message_Type msg_type_; |