summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils.h')
-rw-r--r--TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils.h238
1 files changed, 238 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils.h b/TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils.h
new file mode 100644
index 00000000000..eb1740a5e85
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/IFRService/IFR_Service_Utils.h
@@ -0,0 +1,238 @@
+// -*- C++ -*-
+
+
+//=============================================================================
+/**
+ * @file IFR_Service_Utils.h
+ *
+ * $Id$
+ *
+ * Implement wrappers useful to IFR Service clients and servers.
+ *
+ *
+ * @author Jeff Parsons <j.parsons@vanderbilt.edu> Jaiganesh Balasubramanian <jai@doc.ece.uci.edu> Priyanka Gontla <pgontla@doc.ece.uci.edu>
+ */
+//=============================================================================
+
+
+#ifndef TAO_IFR_SERVICE_UTILS_H
+#define TAO_IFR_SERVICE_UTILS_H
+
+#include /**/ "ace/pre.h"
+
+#include "orbsvcs/IFRService/ifr_service_export.h"
+#include "tao/IFR_Client/IFR_BasicC.h"
+#include "tao/PortableServer/PortableServer.h"
+#include "tao/ORB.h"
+
+#include "ace/Configuration.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+class ACE_Configuration;
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+class TAO_IOR_Multicast;
+class TAO_Repository_i;
+class TAO_IDLType_i;
+class TAO_Container_i;
+class TAO_Contained_i;
+
+class TAO_IFRService_Export TAO_IFR_Server
+{
+public:
+ TAO_IFR_Server (void);
+
+ //// Initialize the IFR Service with the command line arguments and
+ //// the ORB.
+ int init_with_orb (int argc,
+ ACE_TCHAR *argv [],
+ CORBA::ORB_ptr orb,
+ int use_multicast_server = 0);
+
+ //// Destroy the child POA created in <init_with_orb>.
+ int fini (void);
+
+ //// Destructor.
+ ~TAO_IFR_Server (void);
+
+protected:
+
+ /// Two persistent POAs, one using a servant locator.
+ int create_poa (void);
+
+ /// Open an ACE_Configuration of the appropriate type.
+ int open_config (void);
+
+ /// Create and initialize the repository.
+ int create_repository (void);
+
+ /// Enable the Interface Repository to answer multicast requests
+ /// for its IOR.
+ int init_multicast_server (void);
+
+ /// Reference to our ORB.
+ CORBA::ORB_var orb_;
+
+ /// Root POA reference.
+ PortableServer::POA_ptr root_poa_;
+
+ /// The Repository's POA reference.
+ PortableServer::POA_ptr repo_poa_;
+
+ /// Event handler that responds to multicast requests.
+ TAO_IOR_Multicast *ior_multicast_;
+
+ /// Database for the IFR.
+ ACE_Configuration *config_;
+
+ /// Interface Repository's IOR.
+ CORBA::String_var ifr_ior_;
+};
+
+class TAO_IFR_Service_Utils
+{
+public:
+ TAO_IFR_Service_Utils (void);
+
+ ~TAO_IFR_Service_Utils (void);
+
+ typedef int (*name_clash_checker)(const char *);
+
+ /// Convert the hex form of an 4-byte unsigned int to a string.
+ static char *int_to_string (CORBA::ULong number);
+
+ /// The error-checking methods below all return void because
+ /// they throw a spec-defined exception for every error case
+ /// (specifically one of the BAD_PARAM minor versions).
+
+ /// Checks for illegal member type in given container type.
+ static void valid_container (CORBA::DefinitionKind container_kind,
+ CORBA::DefinitionKind contained_kind);
+
+ /// Wrapper for id_exists() and name_exists().
+ static void pre_exist (const char *id,
+ name_clash_checker checker,
+ ACE_Configuration_Section_Key &key,
+ TAO_Repository_i *repo,
+ CORBA::DefinitionKind kind);
+
+ /// Checks for a global repository id clash.
+ static void id_exists (const char *id,
+ TAO_Repository_i *repo);
+
+ /// Checks for a local name clash.
+ static void name_exists (name_clash_checker checker,
+ ACE_Configuration_Section_Key &key,
+ TAO_Repository_i *repo,
+ CORBA::DefinitionKind kind);
+
+ /// Used by interfaces and components to check for name clashes
+ /// in the attributes, operations, or component ports subsections.
+ static void check_subsection (name_clash_checker checker,
+ const char *sub_section,
+ ACE_Configuration *config,
+ ACE_Configuration_Section_Key &key);
+
+ /// Top-level method which calls all the above error-checking methods.
+ static void valid_creation (CORBA::DefinitionKind container_kind,
+ CORBA::DefinitionKind contained_kind,
+ const char *id,
+ name_clash_checker checker,
+ ACE_Configuration_Section_Key &key,
+ TAO_Repository_i *repo);
+
+ /// Code common to the creation of an entry for any non-anonymous type.
+ static ACE_TString create_common (
+ CORBA::DefinitionKind container_kind,
+ CORBA::DefinitionKind contained_kind,
+ ACE_Configuration_Section_Key container_key,
+ ACE_Configuration_Section_Key &new_key,
+ TAO_Repository_i *repo,
+ const char *id,
+ const char *name,
+ name_clash_checker checker,
+ const char *version,
+ const char *sub_section_name
+ );
+
+ /// Common to Container::create_value() and ValueDef::supported_interfaces(),
+ /// Container::create_component() and Component::supported_interfaces().
+ static void set_supported_interfaces (
+ const CORBA::InterfaceDefSeq &supported_interfaces,
+ ACE_Configuration *config,
+ ACE_Configuration_Section_Key &key
+ );
+
+ /// Common code for operations, attributes, and valuetype initializers.
+ static void set_exceptions (ACE_Configuration *config,
+ ACE_Configuration_Section_Key &key,
+ const char *sub_section,
+ const CORBA::ExceptionDefSeq &exceptions);
+
+ /// Implemented here to avoid recursion in the servant classes.
+ static CORBA::TypeCode_ptr gen_valuetype_tc_r (
+ ACE_Configuration_Section_Key &,
+ TAO_Repository_i *
+ );
+
+ /// Called from the above function.
+ static void fill_valuemember_seq (CORBA::ValueMemberSeq &,
+ ACE_Configuration_Section_Key &,
+ TAO_Repository_i *);
+
+ /// Converison from IR Object reference to key location path.
+ static char *reference_to_path (CORBA::IRObject_ptr obj);
+
+ /// Conversion from key location path to CORBA::DefinitionKind.
+ static CORBA::DefinitionKind path_to_def_kind (ACE_TString &path,
+ TAO_Repository_i *repo);
+
+ /// Conversion from IR Object reference to CORBA::DefinitionKind.
+ static CORBA::DefinitionKind reference_to_def_kind (
+ CORBA::IRObject_ptr obj,
+ TAO_Repository_i *repo
+ );
+
+ /// Converion from key location path to IDLType.
+ static TAO_IDLType_i *path_to_idltype (ACE_TString &path,
+ TAO_Repository_i *repo);
+
+ /// Converion from key location path to IDLType.
+ static TAO_Contained_i *path_to_contained (ACE_TString &path,
+ TAO_Repository_i *repo);
+
+ /// Converion from key location path to IDLType.
+ static TAO_Container_i *path_to_container (ACE_TString &path,
+ TAO_Repository_i *repo);
+
+ /// Conversion from key location path to IR Object reference.
+ static CORBA::Object_ptr path_to_ir_object (ACE_TString &path,
+ TAO_Repository_i *repo);
+
+ /// Can be called from the above method or directly from a derived class.
+ static CORBA::Object_ptr create_objref (CORBA::DefinitionKind def_kind,
+ const char *obj_id,
+ TAO_Repository_i *repo);
+
+ /// Copy and octet sequence to a string..
+ static char *oid_to_string (PortableServer::ObjectId &oid);
+
+public:
+ /// To hold a key created by one method for another method to use.
+ /// Calls to this class will be made after an IFR lock (if any)
+ /// has been acquired, so thread safety is not an issue with this
+ /// static variable.
+ static ACE_Configuration_Section_Key tmp_key_;
+
+ /// Needed by TAO_InterfaceDef_i::name_clash, probably can be used
+ /// all over the place now that it's here.
+ static TAO_Repository_i *repo_;
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_IFR_SERVICE_UTILS_H */