summaryrefslogtreecommitdiff
path: root/TAO/tao/GIOP_Message_Generator_Parser_10.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/GIOP_Message_Generator_Parser_10.cpp')
-rw-r--r--TAO/tao/GIOP_Message_Generator_Parser_10.cpp484
1 files changed, 0 insertions, 484 deletions
diff --git a/TAO/tao/GIOP_Message_Generator_Parser_10.cpp b/TAO/tao/GIOP_Message_Generator_Parser_10.cpp
deleted file mode 100644
index c76d5b60b18..00000000000
--- a/TAO/tao/GIOP_Message_Generator_Parser_10.cpp
+++ /dev/null
@@ -1,484 +0,0 @@
-// -*- C++ -*-
-
-#include "tao/GIOP_Message_Generator_Parser_10.h"
-#include "tao/GIOP_Utils.h"
-#include "tao/GIOP_Message_Locate_Header.h"
-#include "tao/operation_details.h"
-#include "tao/debug.h"
-#include "tao/Pluggable_Messaging_Utils.h"
-#include "tao/TAO_Server_Request.h"
-#include "tao/ORB_Constants.h"
-#include "tao/CDR.h"
-#include "tao/SystemException.h"
-
-#include "ace/Log_Msg.h"
-
-ACE_RCSID (tao,
- GIOP_Message_Gen_Parser_10,
- "$Id$")
-
-int
-TAO_GIOP_Message_Generator_Parser_10::write_request_header (
- const TAO_Operation_Details &opdetails,
- TAO_Target_Specification &spec,
- TAO_OutputCDR &msg)
-{
- // Write the service context list
- msg << opdetails.request_service_info ();
-
- // The request ID
- msg << opdetails.request_id ();
-
- const CORBA::Octet response_flags = opdetails.response_flags ();
-
- // Write the response flags
- if (response_flags == TAO_TWOWAY_RESPONSE_FLAG)
- {
- msg << CORBA::Any::from_octet (1);
- }
- else
- {
- msg << CORBA::Any::from_octet (0);
- }
-
- // In this case we cannot recognise anything other than the Object
- // key as the address disposition variable. But we do a sanity check
- // anyway.
- const TAO::ObjectKey *key = spec.object_key ();
-
- if (key)
- {
- // Put in the object key
- msg << *key;
- }
- else
- {
- if (TAO_debug_level)
- {
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("(%N |%l) Unable to handle this request \n")));
- }
- return 0;
- }
-
- msg.write_string (opdetails.opname_len (),
- opdetails.opname ());
-
- // Last element of request header is the principal; no portable way
- // to get it, we just pass empty principal (convention: indicates
- // "anybody"). Steps upward in security include passing an
- // unverified user ID, and then verifying the message (i.e. a dummy
- // service context entry is set up to hold a digital signature for
- // this message, then patched shortly before it's sent).
-
- /***** This has been deprecated in the 2.4 spec ******/
-
-#if defined (TAO_PEER_REQUIRES_PRINCIPAL)
-
- char username[BUFSIZ];
- char *result =
- ACE_OS::cuserid (username,
- BUFSIZ);
-
- if (result != 0)
- {
- const CORBA::ULong username_size =
- static_cast<CORBA::ULong> (ACE_OS::strlen (username));
-
- CORBA::Octet *buffer =
- CORBA::OctetSeq::allocbuf (username_size + 1);
-
- ACE_OS::memcpy (buffer,
- username,
- username_size + 1);
-
- req_principal.replace (username_size + 1,
- username_size + 1,
- buffer,
- 1);
- }
-
-#else
-
- CORBA::OctetSeq req_principal (0);
- req_principal.length (0);
-
-#endif /* TAO_PEER_REQUIRES_PRINCIPAL */
-
- msg << req_principal;
-
- return 1;
-}
-
-
-
-
-int
-TAO_GIOP_Message_Generator_Parser_10::write_locate_request_header (
- CORBA::ULong request_id,
- TAO_Target_Specification &spec,
- TAO_OutputCDR &msg)
-{
- msg << request_id;
-
- // In this case we cannot recognise anything other than the Object
- // key as the address disposition variable. But we do a sanity check
- // anyway.
- const TAO::ObjectKey *key = spec.object_key ();
-
- if (key)
- {
- // Everything is fine
- msg << *key;
- }
- else
- {
- if (TAO_debug_level)
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("(%N | %l) Unable to handle this request \n")));
- return 0;
- }
-
- return 1;
-}
-
-
-int
-TAO_GIOP_Message_Generator_Parser_10::write_reply_header (
- TAO_OutputCDR &output,
- TAO_Pluggable_Reply_Params_Base &reply
- ACE_ENV_ARG_DECL
- )
- ACE_THROW_SPEC ((CORBA::SystemException))
-{
- // Write the service context list.
-#if (TAO_HAS_MINIMUM_CORBA == 1)
- output << reply.service_context_notowned ();
- ACE_ENV_ARG_NOT_USED; // FUZZ: ignore check_for_ace_check
-#else
- if (reply.is_dsi_ == 0)
- {
- output << reply.service_context_notowned ();
- }
- else
- {
- // If lazy evaluation is enabled then we are going to insert an
- // extra node at the end of the service context list, just to
- // force the appropriate padding.
- // But first we take it out any of them..
- CORBA::ULong count = 0;
- IOP::ServiceContextList &svc_ctx =
- reply.service_context_notowned ();
- CORBA::ULong l = svc_ctx.length ();
- CORBA::ULong i;
-
- for (i = 0; i != l; ++i)
- {
- if (svc_ctx[i].context_id == TAO_SVC_CONTEXT_ALIGN)
- {
- continue;
- }
-
- count++;
- }
-
- // Now increment it to account for the last dummy one...
- count++;
-
- // Now marshal the rest of the service context objects
- output << count;
- for (i = 0; i != l; ++i)
- {
- if (svc_ctx[i].context_id == TAO_SVC_CONTEXT_ALIGN)
- {
- continue;
- }
-
- output << svc_ctx[i];
- }
-
- }
-
- if (reply.is_dsi_ == 1)
- {
- // @@ Much of this code is GIOP 1.1 specific and should be
- ptrdiff_t target = reply.dsi_nvlist_align_;
-
- ptrdiff_t current =
- ptrdiff_t (output.current_alignment ()) % ACE_CDR::MAX_ALIGNMENT;
-
- CORBA::ULong pad = 0;
-
- if (target == 0)
- {
- // We want to generate adequate padding to start the request
- // id on a 8 byte boundary, two cases:
- // - If the dummy tag starts on a 4 byte boundary and the
- // dummy sequence has 0 elements then we have:
- // 4:tag 8:sequence_length 4:sequence_body 4:request_id
- // 8:payload
- // - If the dummy tag starts on an 8 byte boundary, with 4
- // elements we get:
- // 8:tag 4:sequence_length 8:sequence_body 4:request_id
- // 8:payload
- if (current != 0 && current <= ACE_CDR::LONG_ALIGN)
- {
- pad = 4;
- }
- }
- else if (target != ACE_CDR::LONG_ALIGN)
- {
- // The situation reverses, we want to generate adequate
- // padding to start the request id on a 4 byte boundary, two
- // cases:
- // - If the dummy tag starts on a 4 byte boundary and the
- // dummy sequence has 4 elements then we have:
- // 4:tag 8:sequence_length 4:sequence_body 8:request_id
- // 4:payload
- // - If the dummy tag starts on an 8 byte boundary, with 0
- // elements we get:
- // 8:tag 4:sequence_length 8:sequence_body 8:request_id
- // 4:payload
- if (current > ACE_CDR::LONG_ALIGN)
- {
- pad = 4;
- }
- }
- else if (target == ACE_CDR::MAX_ALIGNMENT)
- {
- pad = 0;
- }
- else
- {
- // <target> can only have the values above
- ACE_THROW_RETURN (CORBA::MARSHAL (),
- 0);
- }
-
- output << CORBA::ULong (TAO_SVC_CONTEXT_ALIGN);
- output << pad;
-
- for (CORBA::ULong j = 0; j != pad; ++j)
- {
- output << ACE_OutputCDR::from_octet(0);
- }
- }
-#endif /* TAO_HAS_MINIMUM_CORBA */
-
- // Write the request ID
- output.write_ulong (reply.request_id_);
-
- // Write the reply status
- this->marshal_reply_status (output,
- reply);
-
- return 1;
-}
-
-
-int
-TAO_GIOP_Message_Generator_Parser_10::write_locate_reply_mesg (
- TAO_OutputCDR &output,
- CORBA::ULong request_id,
- TAO_GIOP_Locate_Status_Msg &status_info
- )
-{
- // Make the header for the locate request
- output.write_ulong (request_id);
- output.write_ulong (status_info.status);
-
- if (status_info.status == TAO_GIOP_OBJECT_FORWARD)
- {
- CORBA::Object_ptr object_ptr =
- status_info.forward_location_var.in ();
-
- if ((output << object_ptr) == 0)
- {
- if (TAO_debug_level > 0)
- {
- ACE_DEBUG ((
- LM_DEBUG,
- ACE_TEXT ("TAO (%P|%t|%N|%l) write_locate_reply_mesg-")
- ACE_TEXT (" cannot marshal object reference\n")
- ));
- }
- }
- }
-
- return 1;
-}
-
-int
-TAO_GIOP_Message_Generator_Parser_10::parse_request_header (
- TAO_ServerRequest &request)
-{
- // Tear out the service context ... we currently ignore it, but it
- // should probably be passed to each ORB service as appropriate
- // (e.g. transactions, security).
- //
- // NOTE: As security support kicks in, this is a good place to
- // verify a digital signature, if that is required in this security
- // environment. It may be required even when using IPSEC security
- // infrastructure.
-
- // Get the input CDR in the request class
- TAO_InputCDR & input = *request.incoming ();
-
- IOP::ServiceContextList &service_info =
- request.request_service_info ();
-
- input >> service_info;
-
- CORBA::Boolean hdr_status =
- (CORBA::Boolean) input.good_bit ();
-
- CORBA::ULong req_id;
-
- // Get the rest of the request header ...
- hdr_status = hdr_status && input.read_ulong (req_id);
-
- request.request_id (req_id);
-
- CORBA::Octet response_flags;
- hdr_status = hdr_status && input.read_octet (response_flags);
- request.response_expected ((response_flags != 0));
-
- // This is not supported now in GIOP 1.1
- request.sync_with_server (0);
-
- // We use ad-hoc demarshalling here: there is no need to increase
- // the reference count on the CDR message block, because this key
- // will not outlive the request (or the message block).
-
- hdr_status =
- hdr_status && request.profile ().unmarshall_object_key (input);
-
- // According to the CORBA 2.6.1 (and older) specification, the operation
- // name is an IDL Identifier. Identifiers must be composed of ASCII letters,
- // numbers, and underscores, starting with a letter. Based on this, and
- // the fact that I could find no text explicitly requiring operation name
- // translation, nor could others in the CORBA community, the operation name
- // will not be translated regardless of the translation of other strings.
- //
- CORBA::ULong length = 0;
- hdr_status = hdr_status && input.read_ulong (length);
-
- if (hdr_status)
- {
- // Do not include NULL character at the end.
- // @@ This is not getting demarshaled using the codeset
- // translators!
-
- // Notice that there are no memory allocations involved
- // here!
- request.operation (input.rd_ptr (),
- length - 1,
- 0 /* TAO_ServerRequest does NOT own string */);
- hdr_status = input.skip_bytes (length);
- }
-
- if (hdr_status)
- {
- /**** This has been deprecated in 2.4 ****/
- /*CORBA::Principal_var principal;
-
- input >> principal.out ();
-
- request.requesting_principal (principal.in ()); */
-
- CORBA::OctetSeq oct_seq;
- input >> oct_seq;
- request.requesting_principal (oct_seq);
- hdr_status = (CORBA::Boolean) input.good_bit ();
- }
-
-
- return hdr_status ? 0 : -1;
-}
-
-
-
-int
-TAO_GIOP_Message_Generator_Parser_10::parse_locate_header (
- TAO_GIOP_Locate_Request_Header &request
- )
-{
- // Get the stream
- TAO_InputCDR &msg = request.incoming_stream ();
-
- CORBA::Boolean hdr_status = 1;
-
- // Get the request id
- CORBA::ULong req_id = 0;
- hdr_status = msg.read_ulong (req_id);
-
- // Store it in the Locate request classes
- request.request_id (req_id);
-
- // Get the object key
- hdr_status =
- hdr_status && request.profile ().unmarshall_object_key (msg);
-
- return hdr_status ? 0 : -1;
-}
-
-
-
-int
-TAO_GIOP_Message_Generator_Parser_10::parse_reply (
- TAO_InputCDR &cdr,
- TAO_Pluggable_Reply_Params &params)
-
-{
- // Read the service context list first
- if ((cdr >> params.svc_ctx_) == 0)
- {
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("TAO (%P|%t) parse_reply, ")
- ACE_TEXT ("extracting context\n")));
- return -1;
- }
-
- // Call the base class for further processing
- if (TAO_GIOP_Message_Generator_Parser::parse_reply (cdr,
- params) == -1)
- return -1;
-
- return 0;
-}
-
-
-int
-TAO_GIOP_Message_Generator_Parser_10::parse_locate_reply (
- TAO_InputCDR &cdr,
- TAO_Pluggable_Reply_Params &params
- )
-{
- if (TAO_GIOP_Message_Generator_Parser::parse_locate_reply (cdr,
- params) == -1)
-
- return -1;
-
- return 0;
-}
-
-CORBA::Octet
-TAO_GIOP_Message_Generator_Parser_10::major_version (void)
-{
- // Any harm in hardcoding??
- return (CORBA::Octet) 1;
-}
-
-CORBA::Octet
-TAO_GIOP_Message_Generator_Parser_10::minor_version (void)
-{
- // Any harm in hardcoding??
- return 0;
-}
-
-size_t
-TAO_GIOP_Message_Generator_Parser_10::fragment_header_length (void) const
-{
- return 0;
-}