TAO_GIOP_Message_Generator_Parser Class Reference

Base class for the GIOP Message generator and parser. More...

#include <GIOP_Message_Generator_Parser.h>

Inheritance diagram for TAO_GIOP_Message_Generator_Parser:

Inheritance graph
[legend]
List of all members.

Public Member Functions

virtual ~TAO_GIOP_Message_Generator_Parser (void)
virtual int write_request_header (const TAO_Operation_Details &opdetails, TAO_Target_Specification &spec, TAO_OutputCDR &msg)=0
 Write the request header in to msg.

virtual int write_locate_request_header (CORBA::ULong request_id, TAO_Target_Specification &spec, TAO_OutputCDR &msg)=0
 Write the LocateRequest header.

virtual int write_reply_header (TAO_OutputCDR &output, TAO_Pluggable_Reply_Params_Base &reply)=0 throw (CORBA::SystemException)
 Write the reply header in to output.

virtual int write_locate_reply_mesg (TAO_OutputCDR &output, CORBA::ULong request_id, TAO_GIOP_Locate_Status_Msg &status)=0
 Writes the locate _reply message in to the output.

virtual bool write_fragment_header (TAO_OutputCDR &cdr, CORBA::ULong request_id)=0
virtual int parse_request_header (TAO_ServerRequest &)=0
virtual int parse_locate_header (TAO_GIOP_Locate_Request_Header &)=0
virtual int parse_reply (TAO_InputCDR &input, TAO_Pluggable_Reply_Params &params)
 Parse the reply message.

virtual int parse_locate_reply (TAO_InputCDR &input, TAO_Pluggable_Reply_Params &params)
 Parse the locate reply message from the server.

virtual CORBA::Octet major_version (void)=0
 Our versions.

virtual CORBA::Octet minor_version (void)=0
virtual int is_ready_for_bidirectional (void)
virtual size_t fragment_header_length (void) const=0
 The header length of a fragment.


Protected Member Functions

void marshal_reply_status (TAO_OutputCDR &output, TAO_Pluggable_Reply_Params_Base &reply)
 Marshall the reply status.


Detailed Description

Base class for the GIOP Message generator and parser.

Version specific classes would inherit from this class. Strategy to determine which version of the GIOP request have we received and which version do we need to use to send messages.

Definition at line 47 of file GIOP_Message_Generator_Parser.h.


Constructor & Destructor Documentation

TAO_BEGIN_VERSIONED_NAMESPACE_DECL TAO_GIOP_Message_Generator_Parser::~TAO_GIOP_Message_Generator_Parser void   )  [virtual]
 

Definition at line 18 of file GIOP_Message_Generator_Parser.cpp.

00019 {
00020 }


Member Function Documentation

virtual size_t TAO_GIOP_Message_Generator_Parser::fragment_header_length void   )  const [pure virtual]
 

The header length of a fragment.

Implemented in TAO_GIOP_Message_Generator_Parser_10, and TAO_GIOP_Message_Generator_Parser_12.

Referenced by TAO_GIOP_Message_Base::fragment_header_length().

int TAO_GIOP_Message_Generator_Parser::is_ready_for_bidirectional void   )  [virtual]
 

Is the messaging object ready for processing BiDirectional request/response?

Reimplemented in TAO_GIOP_Message_Generator_Parser_12.

Definition at line 139 of file GIOP_Message_Generator_Parser.cpp.

Referenced by TAO_GIOP_Message_Base::is_ready_for_bidirectional().

00140 {
00141   return 0;
00142 }

virtual CORBA::Octet TAO_GIOP_Message_Generator_Parser::major_version void   )  [pure virtual]
 

Our versions.

Implemented in TAO_GIOP_Message_Generator_Parser_10, and TAO_GIOP_Message_Generator_Parser_12.

void TAO_GIOP_Message_Generator_Parser::marshal_reply_status TAO_OutputCDR output,
TAO_Pluggable_Reply_Params_Base reply
[protected]
 

Marshall the reply status.

Definition at line 145 of file GIOP_Message_Generator_Parser.cpp.

References TAO_Pluggable_Reply_Params_Base::reply_status_, TAO_GIOP_LOCATION_FORWARD, TAO_GIOP_NO_EXCEPTION, TAO_GIOP_SYSTEM_EXCEPTION, TAO_GIOP_USER_EXCEPTION, TAO_PLUGGABLE_MESSAGE_LOCATION_FORWARD, TAO_PLUGGABLE_MESSAGE_NO_EXCEPTION, TAO_PLUGGABLE_MESSAGE_SYSTEM_EXCEPTION, TAO_PLUGGABLE_MESSAGE_USER_EXCEPTION, and ACE_OutputCDR::write_ulong().

00149 {
00150   switch (reply.reply_status_)
00151     {
00152     case TAO_PLUGGABLE_MESSAGE_NO_EXCEPTION:
00153       output.write_ulong (TAO_GIOP_NO_EXCEPTION);
00154       break;
00155     case TAO_PLUGGABLE_MESSAGE_LOCATION_FORWARD:
00156       output.write_ulong (TAO_GIOP_LOCATION_FORWARD);
00157       break;
00158     case TAO_PLUGGABLE_MESSAGE_SYSTEM_EXCEPTION:
00159       output.write_ulong (TAO_GIOP_SYSTEM_EXCEPTION);
00160       break;
00161     case TAO_PLUGGABLE_MESSAGE_USER_EXCEPTION:
00162       output.write_ulong (TAO_GIOP_USER_EXCEPTION);
00163       break;
00164     default:
00165       // Some other specific exception
00166       output.write_ulong (reply.reply_status_);
00167       break;
00168     }
00169 }

virtual CORBA::Octet TAO_GIOP_Message_Generator_Parser::minor_version void   )  [pure virtual]
 

Implemented in TAO_GIOP_Message_Generator_Parser_10, TAO_GIOP_Message_Generator_Parser_11, and TAO_GIOP_Message_Generator_Parser_12.

virtual int TAO_GIOP_Message_Generator_Parser::parse_locate_header TAO_GIOP_Locate_Request_Header  )  [pure virtual]
 

Parse the Loacte Request Header from the incoming stream. This will do a version specific parsing of the incoming Request header

Implemented in TAO_GIOP_Message_Generator_Parser_10, and TAO_GIOP_Message_Generator_Parser_12.

Referenced by TAO_GIOP_Message_Base::process_locate_request().

int TAO_GIOP_Message_Generator_Parser::parse_locate_reply TAO_InputCDR input,
TAO_Pluggable_Reply_Params params
[virtual]
 

Parse the locate reply message from the server.

Reimplemented in TAO_GIOP_Message_Generator_Parser_10, and TAO_GIOP_Message_Generator_Parser_12.

Definition at line 101 of file GIOP_Message_Generator_Parser.cpp.

References ACE_ERROR, ACE_TEXT, LM_ERROR, ACE_InputCDR::read_ulong(), TAO_Pluggable_Reply_Params_Base::reply_status_, TAO_Pluggable_Reply_Params_Base::request_id_, and TAO_debug_level.

Referenced by TAO_GIOP_Message_Generator_Parser_12::parse_locate_reply(), TAO_GIOP_Message_Generator_Parser_10::parse_locate_reply(), and TAO_GIOP_Message_Base::process_reply_message().

00104 {
00105   // Read the request id
00106   if (!cdr.read_ulong (params.request_id_))
00107     {
00108       if (TAO_debug_level > 0)
00109         ACE_ERROR ((LM_ERROR,
00110                     ACE_TEXT ("TAO (%P|%t|%N|%l):parse_locate_reply, ")
00111                     ACE_TEXT ("extracting request id\n")));
00112 
00113       return -1;
00114     }
00115 
00116   // and the reply status type.  status can be NO_EXCEPTION,
00117   // SYSTEM_EXCEPTION, USER_EXCEPTION, LOCATION_FORWARD
00118   // LOCATION_FORWARD_PERM
00119 
00120   // Please note here that we are NOT converting to the Pluggable
00121   // messaging layer exception as this is GIOP specific. Not many
00122   // messaging protocols have the locate_* messages.
00123   if (!cdr.read_ulong (params.reply_status_))
00124     {
00125       if (TAO_debug_level > 0)
00126         ACE_ERROR ((LM_ERROR,
00127                     ACE_TEXT ("TAO N|(%P|%t|l) parse_locate_reply, ")
00128                     ACE_TEXT ("extracting reply  status\n")));
00129 
00130       return -1;
00131     }
00132 
00133   return 0;
00134 
00135 }

int TAO_GIOP_Message_Generator_Parser::parse_reply TAO_InputCDR input,
TAO_Pluggable_Reply_Params params
[virtual]
 

Parse the reply message.

Reimplemented in TAO_GIOP_Message_Generator_Parser_10, and TAO_GIOP_Message_Generator_Parser_12.

Definition at line 23 of file GIOP_Message_Generator_Parser.cpp.

References ACE_DEBUG, ACE_ERROR, ACE_TEXT, LM_DEBUG, LM_ERROR, ACE_InputCDR::read_ulong(), TAO_Pluggable_Reply_Params_Base::reply_status_, TAO_Pluggable_Reply_Params_Base::request_id_, TAO_debug_level, TAO_GIOP_LOCATION_FORWARD, TAO_GIOP_LOCATION_FORWARD_PERM, TAO_GIOP_NEEDS_ADDRESSING_MODE, TAO_GIOP_NO_EXCEPTION, TAO_GIOP_SYSTEM_EXCEPTION, TAO_GIOP_USER_EXCEPTION, TAO_PLUGGABLE_MESSAGE_LOCATION_FORWARD, TAO_PLUGGABLE_MESSAGE_LOCATION_FORWARD_PERM, TAO_PLUGGABLE_MESSAGE_NEEDS_ADDRESSING_MODE, TAO_PLUGGABLE_MESSAGE_NO_EXCEPTION, TAO_PLUGGABLE_MESSAGE_SYSTEM_EXCEPTION, and TAO_PLUGGABLE_MESSAGE_USER_EXCEPTION.

Referenced by TAO_GIOP_Message_Generator_Parser_12::parse_reply(), TAO_GIOP_Message_Generator_Parser_10::parse_reply(), and TAO_GIOP_Message_Base::process_reply_message().

00026 {
00027 
00028   // Read the request id
00029   if (!stream.read_ulong (params.request_id_))
00030     {
00031       if (TAO_debug_level)
00032         {
00033           ACE_ERROR ((LM_ERROR,
00034                       ACE_TEXT ("TAO (%P|%t) : TAO_GIOP_Message_Generator_Parser::parse_reply :")
00035                       ACE_TEXT ("extracting request id\n")));
00036         }
00037     }
00038 
00039   // and the reply status type.  status can be NO_EXCEPTION,
00040   // SYSTEM_EXCEPTION, USER_EXCEPTION, LOCATION_FORWARD,
00041   // LOCATION_FORWARD_PERM
00042   CORBA::ULong rep_stat = 0;
00043   if (!stream.read_ulong (rep_stat))
00044     {
00045       if (TAO_debug_level > 0)
00046         ACE_ERROR ((LM_ERROR,
00047                     ACE_TEXT ("TAO (%P|%t) : TAO_GIOP_Message_Generator_Parser::parse_reply, ")
00048                     ACE_TEXT ("extracting reply status\n")));
00049       return -1;
00050     }
00051 
00052 
00053   // Pass the right Pluggable interface code to the transport layer
00054   switch (rep_stat)
00055     {
00056       // Request completed successfully
00057     case TAO_GIOP_NO_EXCEPTION:
00058       params.reply_status_ =
00059         TAO_PLUGGABLE_MESSAGE_NO_EXCEPTION;
00060       break;
00061 
00062       // Request terminated with user exception
00063     case TAO_GIOP_USER_EXCEPTION:
00064       params.reply_status_ =
00065         TAO_PLUGGABLE_MESSAGE_USER_EXCEPTION;
00066       break;
00067       // Request terminated with system exception
00068     case TAO_GIOP_SYSTEM_EXCEPTION:
00069       params.reply_status_ =
00070         TAO_PLUGGABLE_MESSAGE_SYSTEM_EXCEPTION;
00071       break;
00072       // Reply is a location forward type
00073     case TAO_GIOP_LOCATION_FORWARD:
00074       params.reply_status_ =
00075         TAO_PLUGGABLE_MESSAGE_LOCATION_FORWARD;
00076       break;
00077       // Reply is a location forward perm type
00078      // LOCATION_FORWARD_PERM is only allowed in context of
00079      // FaultTolerant featured requests and requires PortableGroup
00080      // features in forwarded object and service context
00081     case TAO_GIOP_LOCATION_FORWARD_PERM:
00082       params.reply_status_ =
00083         TAO_PLUGGABLE_MESSAGE_LOCATION_FORWARD_PERM;
00084       break;
00085       // Reply is a location forward type
00086     case TAO_GIOP_NEEDS_ADDRESSING_MODE:
00087       params.reply_status_ =
00088         TAO_PLUGGABLE_MESSAGE_NEEDS_ADDRESSING_MODE;
00089       break;
00090     default:
00091       if (TAO_debug_level > 0)
00092         ACE_DEBUG ((LM_DEBUG,
00093                     ACE_TEXT ("(%N|%l) Unknown reply status \n")));
00094     }
00095 
00096   return 0;
00097 }

virtual int TAO_GIOP_Message_Generator_Parser::parse_request_header TAO_ServerRequest  )  [pure virtual]
 

Parse the Request Header from the incoming stream. This will do a version specific parsing of the incoming Request header

Implemented in TAO_GIOP_Message_Generator_Parser_10, and TAO_GIOP_Message_Generator_Parser_12.

Referenced by TAO_GIOP_Message_Base::process_request().

virtual bool TAO_GIOP_Message_Generator_Parser::write_fragment_header TAO_OutputCDR cdr,
CORBA::ULong  request_id
[pure virtual]
 

Write the GIOP fragment message header to the output CDR stream cdr.

Implemented in TAO_GIOP_Message_Generator_Parser_10, and TAO_GIOP_Message_Generator_Parser_12.

Referenced by TAO_GIOP_Message_Base::generate_fragment_header().

virtual int TAO_GIOP_Message_Generator_Parser::write_locate_reply_mesg TAO_OutputCDR output,
CORBA::ULong  request_id,
TAO_GIOP_Locate_Status_Msg status
[pure virtual]
 

Writes the locate _reply message in to the output.

Implemented in TAO_GIOP_Message_Generator_Parser_10, and TAO_GIOP_Message_Generator_Parser_12.

Referenced by TAO_GIOP_Message_Base::make_send_locate_reply().

virtual int TAO_GIOP_Message_Generator_Parser::write_locate_request_header CORBA::ULong  request_id,
TAO_Target_Specification spec,
TAO_OutputCDR msg
[pure virtual]
 

Write the LocateRequest header.

Implemented in TAO_GIOP_Message_Generator_Parser_10, and TAO_GIOP_Message_Generator_Parser_12.

Referenced by TAO_GIOP_Message_Base::generate_locate_request_header().

virtual int TAO_GIOP_Message_Generator_Parser::write_reply_header TAO_OutputCDR output,
TAO_Pluggable_Reply_Params_Base reply
throw (CORBA::SystemException) [pure virtual]
 

Write the reply header in to output.

Implemented in TAO_GIOP_Message_Generator_Parser_10, and TAO_GIOP_Message_Generator_Parser_12.

Referenced by TAO_GIOP_Message_Base::generate_reply_header().

virtual int TAO_GIOP_Message_Generator_Parser::write_request_header const TAO_Operation_Details opdetails,
TAO_Target_Specification spec,
TAO_OutputCDR msg
[pure virtual]
 

Write the request header in to msg.

Implemented in TAO_GIOP_Message_Generator_Parser_10, and TAO_GIOP_Message_Generator_Parser_12.

Referenced by TAO_GIOP_Message_Base::generate_request_header().


The documentation for this class was generated from the following files:
Generated on Thu Nov 9 12:14:07 2006 for TAO by doxygen 1.3.6