diff options
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/AV/sfp.cpp')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/AV/sfp.cpp | 86 |
1 files changed, 18 insertions, 68 deletions
diff --git a/TAO/orbsvcs/orbsvcs/AV/sfp.cpp b/TAO/orbsvcs/orbsvcs/AV/sfp.cpp index f103e7aa9a5..a588e05a55f 100644 --- a/TAO/orbsvcs/orbsvcs/AV/sfp.cpp +++ b/TAO/orbsvcs/orbsvcs/AV/sfp.cpp @@ -3,23 +3,6 @@ // $Id$ -// default arguments to pass to use for the ORB -const char *TAO_SFP::TAO_SFP_ORB_ARGUMENTS = "-ORBobjrefstyle URL"; - -// SFP magic numbers -const char *TAO_SFP::TAO_SFP_MAGIC_NUMBER = "=SFP"; -const char *TAO_SFP::TAO_SFP_FRAGMENT_MAGIC_NUMBER = "FRAG"; -const char *TAO_SFP::TAO_SFP_START_MAGIC_NUMBER = "=STA"; -const char *TAO_SFP::TAO_SFP_CREDIT_MAGIC_NUMBER = "=CRE"; -const char *TAO_SFP::TAO_SFP_STARTREPLY_MAGIC_NUMBER = "=STR"; - -// SFP version 1.0 -const unsigned char TAO_SFP::TAO_SFP_MAJOR_VERSION = 1; -const unsigned char TAO_SFP::TAO_SFP_MINOR_VERSION = 0; - -// lengths of various SFP headers -const unsigned char TAO_SFP::TAO_SFP_FRAME_HEADER_LEN = 12; - int operator< (const TAO_SFP_Fragment_Node& left, const TAO_SFP_Fragment_Node& right) @@ -35,10 +18,10 @@ TAO_SFP::TAO_SFP (CORBA::ORB_ptr orb, SFP_Callback *callback) :orb_ (orb), reactor_ (reactor), - start_tries_ (10), - startReply_tries_ (10), timeout1_ (timeout1), timeout2_ (timeout2), + start_tries_ (10), + startReply_tries_ (10), callback_ (callback), sequence_num_ (0), credit_num_ (10), @@ -229,6 +212,7 @@ TAO_SFP::start_stream (const char *local_addr,int Credit) } else ACE_ERROR_RETURN ((LM_ERROR,"Invalid messaged received while Start expected\n"),-1); + return 0; } // Sends the ACE_Message_Block data as a frame, fragmenting if necessary. @@ -490,8 +474,7 @@ TAO_SFP::send_cdr_buffer (TAO_OutputCDR &cdr,ACE_Message_Block *mb) // from the heap. iovec iov[TAO_WRITEV_MAX]; int iovcnt = 0; - const ACE_Message_Block* b = 0; - for (b = cdr.begin (); + for (const ACE_Message_Block* b = cdr.begin (); b != cdr.end () && iovcnt < TAO_WRITEV_MAX; b = b->cont ()) { @@ -587,9 +570,6 @@ TAO_SFP::handle_timeout (const ACE_Time_Value &tv, { this->end_stream (); } - break; - default: - ACE_DEBUG ((LM_DEBUG,"Handle_timeout: No Action in this state %d",this->state_)); } return 0; } @@ -667,6 +647,7 @@ TAO_SFP::handle_input (ACE_HANDLE fd) sender); if (n != sizeof (credit)) ACE_ERROR_RETURN ((LM_ERROR,"SFP::handle_input - Credit\n"),0); + this->credit_num_ += credit.cred_num; break; } case flowProtocol::start: @@ -725,8 +706,6 @@ TAO_SFP::handle_input (ACE_HANDLE fd) this->callback_->end_stream (); return -1; } - default: - break; } break; case REPLY_RECEIVED: @@ -744,14 +723,7 @@ TAO_SFP::handle_input (ACE_HANDLE fd) else ACE_DEBUG ((LM_DEBUG,"start reply consumed\n")); } - break; - default: - ACE_DEBUG ((LM_DEBUG,"Invalid message in state REPLY_RECEIVED\n")); - break; } - break; - default: - break; } return 0; } @@ -759,9 +731,7 @@ TAO_SFP::handle_input (ACE_HANDLE fd) int TAO_SFP::end_stream (void) { - int result; - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY + ACE_TRY_NEW_ENV { ACE_DEBUG ((LM_DEBUG,"SFP - ending the stream\n")); // send the EndofStream message. @@ -778,9 +748,9 @@ TAO_SFP::end_stream (void) this->receiver_inet_addr_); if ((n==-1) || (n==0)) ACE_ERROR_RETURN ((LM_ERROR,"Error sending endofstream message:%p",""),-1); - result = this->reactor_->remove_handler (this, + int result = this->reactor_->remove_handler (this, ACE_Event_Handler::READ_MASK); - + return result; } ACE_CATCHANY { @@ -788,8 +758,6 @@ TAO_SFP::end_stream (void) return -1; } ACE_ENDTRY; - ACE_CHECK_RETURN (-1); - return result; } int @@ -810,7 +778,6 @@ TAO_SFP::get_handle (void) const ACE_Message_Block * TAO_SFP::read_simple_frame (void) { - ACE_Message_Block *message_block = 0; ACE_DECLARE_NEW_CORBA_ENV; ACE_TRY { @@ -826,7 +793,9 @@ TAO_SFP::read_simple_frame (void) return 0; int byte_order = frame_header.flags & 0x1; int message_len = frame_header.message_size; - + if (frame_header.message_size < 0) + ACE_ERROR_RETURN ((LM_ERROR,"Negative message size\n"),0); + ACE_Message_Block *message_block; ACE_NEW_RETURN (message_block, ACE_Message_Block (message_len), 0); @@ -905,6 +874,8 @@ TAO_SFP::read_simple_frame (void) return 0; } } + else + return message_block; } ACE_CATCHANY { @@ -913,7 +884,6 @@ TAO_SFP::read_simple_frame (void) } ACE_ENDTRY; ACE_CHECK_RETURN (0); - return message_block; } int @@ -973,9 +943,7 @@ TAO_SFP::read_frame_header (flowProtocol::frameHeader &frame_header) ACE_Message_Block * TAO_SFP::read_fragment (void) { - TAO_SFP_Fragment_Table_Entry *fragment_entry = 0; - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY + ACE_TRY_NEW_ENV { flowProtocol::fragment fragment; ACE_INET_Addr sender; @@ -1015,6 +983,8 @@ TAO_SFP::read_fragment (void) ACE_DEBUG ((LM_DEBUG,"frag number = %d, frag size = %d,source id = %d\n", fragment.frag_number,fragment.frag_sz,fragment.source_id)); + if (fragment.frag_sz < 0) + ACE_ERROR_RETURN ((LM_ERROR,"negative fragment size:\n"),0); ACE_Message_Block *data; ACE_NEW_RETURN (data, ACE_Message_Block(fragment.frag_sz), @@ -1030,7 +1000,7 @@ TAO_SFP::read_fragment (void) ACE_DEBUG ((LM_DEBUG,"length of %dth fragment is: %d\n", fragment.frag_number, data->length ())); - + TAO_SFP_Fragment_Table_Entry *fragment_entry; TAO_SFP_Fragment_Node *new_node; ACE_NEW_RETURN (new_node, TAO_SFP_Fragment_Node, @@ -1066,7 +1036,7 @@ TAO_SFP::read_fragment (void) // since fragment number starts from 0 to n-1 we add 1. fragment_entry->num_fragments_ = fragment.frag_number + 1; } - + return check_all_fragments (fragment_entry); } ACE_CATCHANY { @@ -1074,8 +1044,6 @@ TAO_SFP::read_fragment (void) return 0; } ACE_ENDTRY; - ACE_CHECK_RETURN (0); - return check_all_fragments (fragment_entry); } ACE_Message_Block* @@ -1126,21 +1094,3 @@ TAO_SFP::dump_buf(char *buffer,int size) ACE_DEBUG ((LM_DEBUG,"%d ",buf[i])); ACE_DEBUG ((LM_DEBUG,"n========================================n")); } - -#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) -template class ACE_DNode<TAO_SFP_Fragment_Node>; -template class ACE_Ordered_MultiSet<TAO_SFP_Fragment_Node>; -template class ACE_Ordered_MultiSet_Iterator<TAO_SFP_Fragment_Node>; -template class ACE_Hash_Map_Manager<CORBA::ULong,TAO_SFP_Fragment_Table_Entry*,ACE_Null_Mutex>; -template class ACE_Hash_Map_Manager_Ex<unsigned int, TAO_SFP_Fragment_Table_Entry *, ACE_Hash<unsigned int>, ACE_Equal_To<unsigned int>, ACE_Null_Mutex>; -template class ACE_Hash_Map_Entry<unsigned int, TAO_SFP_Fragment_Table_Entry *>; -template class ACE_Hash_Map_Iterator_Base_Ex<unsigned int, TAO_SFP_Fragment_Table_Entry *, ACE_Hash<unsigned int>, ACE_Equal_To<unsigned int>, ACE_Null_Mutex>; -#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) -#pragma instantiate ACE_DNode<TAO_SFP_Fragment_Node> -#pragma instantiate ACE_Ordered_MultiSet<TAO_SFP_Fragment_Node> -#pragma instantiate ACE_Ordered_MultiSet_Iterator<TAO_SFP_Fragment_Node> -#pragma instantiate ACE_Hash_Map_Manager<CORBA::ULong,TAO_SFP_Fragment_Table_Entry*,ACE_Null_Mutex> -#pragma instantiate ACE_Hash_Map_Manager_Ex<unsigned int, TAO_SFP_Fragment_Table_Entry *, ACE_Hash<unsigned int>, ACE_Equal_To<unsigned int>, ACE_Null_Mutex> -#pragma instantiate ACE_Hash_Map_Entry<unsigned int, TAO_SFP_Fragment_Table_Entry *> -#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<unsigned int, TAO_SFP_Fragment_Table_Entry *, ACE_Hash<unsigned int>, ACE_Equal_To<unsigned int>, ACE_Null_Mutex> -#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ |