summaryrefslogtreecommitdiff
path: root/TAO/tao/Connector_Registry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Connector_Registry.cpp')
-rw-r--r--TAO/tao/Connector_Registry.cpp308
1 files changed, 161 insertions, 147 deletions
diff --git a/TAO/tao/Connector_Registry.cpp b/TAO/tao/Connector_Registry.cpp
index 3570475cff3..94b9c251c55 100644
--- a/TAO/tao/Connector_Registry.cpp
+++ b/TAO/tao/Connector_Registry.cpp
@@ -5,7 +5,7 @@
#include "tao/Connector_Registry.h"
#include "tao/ORB_Core.h"
#include "tao/Profile.h"
-#include "tao/Pluggable.h"
+#include "tao/Transport_Connector.h"
#include "tao/Protocol_Factory.h"
#include "tao/Endpoint.h"
#include "tao/Environment.h"
@@ -54,6 +54,8 @@ TAO_Connector_Registry::get_connector (CORBA::ULong tag)
return 0;
}
+
+
int
TAO_Connector_Registry::open (TAO_ORB_Core *orb_core)
{
@@ -123,152 +125,6 @@ TAO_Connector_Registry::close_all (void)
}
int
-TAO_Connector_Registry::preconnect (TAO_ORB_Core *orb_core,
- TAO_EndpointSet &preconnections)
-{
- // Put the preconnects in a form that makes it simple for protocol
- // implementers to parse.
- if (this->preprocess_preconnects (orb_core, preconnections) != 0)
- {
- if (TAO_debug_level > 0)
- ACE_ERROR ((LM_ERROR,
- ACE_LIB_TEXT ("TAO (%P|%t) Unable to preprocess the preconnections.\n")));
-
- return -1;
- }
-
- TAO_EndpointSetIterator preconnects = preconnections.begin ();
-
- for (ACE_CString *i = 0;
- preconnects.next (i) != 0;
- preconnects.advance ())
- {
- TAO_ConnectorSetIterator first_connector = this->begin ();
- TAO_ConnectorSetIterator last_connector = this->end ();
-
- for (TAO_ConnectorSetIterator connector = first_connector;
- connector != last_connector;
- ++connector)
- if (*connector)
- (*connector)->preconnect (i->c_str ());
- }
-
- // No longer need the preconnect set since all associated
- // preconnections have been opened by now. Reclaim the memory used
- // by the preconnect set.
- preconnections.reset ();
-
- return 0; // Success
-}
-
-int
-TAO_Connector_Registry::preprocess_preconnects (TAO_ORB_Core *orb_core,
- TAO_EndpointSet &preconnects)
-{
- // Organize all matching protocol endpoints and addrs into a single
- // endpoint for the given protocol.
- //
- // For example, the following endpoints:
- //
- // uiop://1.1@/tmp/foobar,/tmp/chicken
- // iiop://1.0@localhost
- // uiop:///tmp/soup
- // iiop://1.1@mopbucket
- //
- // will be merged to create the following preconnects:
- //
- // uiop://1.1@/tmp/foobar,/tmp/chicken,/tmp/soup
- // iiop://1.0@localhost,1.1@mopbucket
- //
- // The four elements in the preconnect set will be squeezed into two
- // elements, in this case. This is done to simplify the preconnect
- // parsing code in each protocol specific connector and to make sure
- // that all preconnections are established during the first
- // attempt. Otherwise, secondary attempts to establish
- // preconnections will not be successful since all preconnections
- // will have been idled after during the first attempt, hence the
- // need to pass all preconnects during the first attempt.
-
- const size_t num_protocols =
- orb_core->protocol_factories ()->size ();
-
- ACE_CString *processed = 0;
-
- ACE_NEW_RETURN (processed,
- ACE_CString[num_protocols],
- -1);
-
- // Open one connector for each loaded protocol!
- TAO_ProtocolFactorySetItor begin =
- orb_core->protocol_factories ()->begin ();
- TAO_ProtocolFactorySetItor end =
- orb_core->protocol_factories ()->end ();
-
- ACE_CString *tmp = processed;
-
- // Iterate over the protocols, *not* the connectors!
- for (TAO_ProtocolFactorySetItor factory = begin;
- factory != end;
- ++factory, ++tmp)
- {
- (*tmp) =
- ACE_CString ((*factory)->factory ()->prefix ()) + ACE_CString ("://");
-
- TAO_EndpointSetIterator p = preconnects.begin ();
-
- for (ACE_CString *i = 0;
- p.next (i) != 0;
- p.advance ())
- {
- const int slot = i->find ("://");
-
- ACE_CString protocol_name = i->substring (0, slot);
-
- if (slot != ACE_CString::npos &&
- (slot != ACE_static_cast (int, i->length ()) - 3) &&
- (*factory)->factory ()->match_prefix (protocol_name.c_str ()))
- {
- (*tmp) += i->substring (slot + 3); // +3 due to "://"
- (*tmp) += ACE_CString (',');
- }
- }
-
- // Remove the trailing comma ','.
- if ((*tmp)[tmp->length () - 1] == ',')
- (*tmp) = tmp->substring (0, tmp->length () - 1);
- }
-
- // Empty the preconnect container.
- preconnects.reset ();
-
- // Now enqueue the re-formed preconnect strings.
- for (size_t n = 0; n < num_protocols; ++n)
- {
- // If no preconnects for the given protocol exist then don't
- // enqueue the empty preconnect list for that protocol.
- // Such an empty preconnect string should be of the form
- //
- // protocol://
- //
- // so check for the forward slash '/' at the end of the string.
- if (processed[n][processed[n].length () - 1] != '/')
- {
- if (preconnects.enqueue_tail (processed[n]) != 0)
- {
- delete [] processed;
-
- return -1;
- }
- }
- }
-
- delete [] processed;
-
- return 0;
-}
-
-
-int
TAO_Connector_Registry::connect (TAO_GIOP_Invocation *invocation,
TAO_Transport_Descriptor_Interface *desc
ACE_ENV_ARG_DECL)
@@ -424,3 +280,161 @@ TAO_Connector_Registry::object_key_delimiter (const char *ior)
// against the provided string.
return 0;
}
+
+
+#if 0
+
+/*
+ * To be removed..
+ *
+ * These methods are not needed since they have been deprecated. But
+ * just having them in the bottom of the file to be removed later.
+ *
+ */
+int
+TAO_Connector_Registry::preconnect (TAO_ORB_Core *orb_core,
+ TAO_EndpointSet &preconnections)
+{
+ // Put the preconnects in a form that makes it simple for protocol
+ // implementers to parse.
+ if (this->preprocess_preconnects (orb_core, preconnections) != 0)
+ {
+ if (TAO_debug_level > 0)
+ ACE_ERROR ((LM_ERROR,
+ ACE_LIB_TEXT ("TAO (%P|%t) Unable to preprocess the preconnections.\n")));
+
+ return -1;
+ }
+
+ TAO_EndpointSetIterator preconnects = preconnections.begin ();
+
+ for (ACE_CString *i = 0;
+ preconnects.next (i) != 0;
+ preconnects.advance ())
+ {
+ TAO_ConnectorSetIterator first_connector = this->begin ();
+ TAO_ConnectorSetIterator last_connector = this->end ();
+
+ for (TAO_ConnectorSetIterator connector = first_connector;
+ connector != last_connector;
+ ++connector)
+ if (*connector)
+ (*connector)->preconnect (i->c_str ());
+ }
+
+ // No longer need the preconnect set since all associated
+ // preconnections have been opened by now. Reclaim the memory used
+ // by the preconnect set.
+ preconnections.reset ();
+
+ return 0; // Success
+}
+
+int
+TAO_Connector_Registry::preprocess_preconnects (TAO_ORB_Core *orb_core,
+ TAO_EndpointSet &preconnects)
+{
+ // Organize all matching protocol endpoints and addrs into a single
+ // endpoint for the given protocol.
+ //
+ // For example, the following endpoints:
+ //
+ // uiop://1.1@/tmp/foobar,/tmp/chicken
+ // iiop://1.0@localhost
+ // uiop:///tmp/soup
+ // iiop://1.1@mopbucket
+ //
+ // will be merged to create the following preconnects:
+ //
+ // uiop://1.1@/tmp/foobar,/tmp/chicken,/tmp/soup
+ // iiop://1.0@localhost,1.1@mopbucket
+ //
+ // The four elements in the preconnect set will be squeezed into two
+ // elements, in this case. This is done to simplify the preconnect
+ // parsing code in each protocol specific connector and to make sure
+ // that all preconnections are established during the first
+ // attempt. Otherwise, secondary attempts to establish
+ // preconnections will not be successful since all preconnections
+ // will have been idled after during the first attempt, hence the
+ // need to pass all preconnects during the first attempt.
+
+ const size_t num_protocols =
+ orb_core->protocol_factories ()->size ();
+
+ ACE_CString *processed = 0;
+
+ ACE_NEW_RETURN (processed,
+ ACE_CString[num_protocols],
+ -1);
+
+ // Open one connector for each loaded protocol!
+ TAO_ProtocolFactorySetItor begin =
+ orb_core->protocol_factories ()->begin ();
+ TAO_ProtocolFactorySetItor end =
+ orb_core->protocol_factories ()->end ();
+
+ ACE_CString *tmp = processed;
+
+ // Iterate over the protocols, *not* the connectors!
+ for (TAO_ProtocolFactorySetItor factory = begin;
+ factory != end;
+ ++factory, ++tmp)
+ {
+ (*tmp) =
+ ACE_CString ((*factory)->factory ()->prefix ()) + ACE_CString ("://");
+
+ TAO_EndpointSetIterator p = preconnects.begin ();
+
+ for (ACE_CString *i = 0;
+ p.next (i) != 0;
+ p.advance ())
+ {
+ const int slot = i->find ("://");
+
+ ACE_CString protocol_name = i->substring (0, slot);
+
+ if (slot != ACE_CString::npos &&
+ (slot != ACE_static_cast (int, i->length ()) - 3) &&
+ (*factory)->factory ()->match_prefix (protocol_name.c_str ()))
+ {
+ (*tmp) += i->substring (slot + 3); // +3 due to "://"
+ (*tmp) += ACE_CString (',');
+ }
+ }
+
+ // Remove the trailing comma ','.
+ if ((*tmp)[tmp->length () - 1] == ',')
+ (*tmp) = tmp->substring (0, tmp->length () - 1);
+ }
+
+ // Empty the preconnect container.
+ preconnects.reset ();
+
+ // Now enqueue the re-formed preconnect strings.
+ for (size_t n = 0; n < num_protocols; ++n)
+ {
+ // If no preconnects for the given protocol exist then don't
+ // enqueue the empty preconnect list for that protocol.
+ // Such an empty preconnect string should be of the form
+ //
+ // protocol://
+ //
+ // so check for the forward slash '/' at the end of the string.
+ if (processed[n][processed[n].length () - 1] != '/')
+ {
+ if (preconnects.enqueue_tail (processed[n]) != 0)
+ {
+ delete [] processed;
+
+ return -1;
+ }
+ }
+ }
+
+ delete [] processed;
+
+ return 0;
+}
+
+// End of the portion that needs to be removed.
+#endif /*If 0 */