summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam R. Otte <wotte@dre.vanderbilt.edu>2009-12-08 21:56:31 +0000
committerWilliam R. Otte <wotte@dre.vanderbilt.edu>2009-12-08 21:56:31 +0000
commitab639f59e1f98eda1efb92b6c04b0290a0710045 (patch)
tree16c463b965b69b63c57d900071c7a186ecccd7c3
parent858324f25e6995eb070bddda467c91875d5442f9 (diff)
downloadATCD-ab639f59e1f98eda1efb92b6c04b0290a0710045.tar.gz
Tue Dec 8 21:54:06 UTC 2009 William R. Otte <wotte@dre.vanderbilt.edu>
-rw-r--r--CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp8
-rw-r--r--CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp34
-rw-r--r--CIAO/connectors/ami4ccm/examples/Hello/AMI/AMI.idl3
-rw-r--r--CIAO/connectors/ami4ccm/examples/Hello/AMI/AMI_exec.cpp29
-rw-r--r--CIAO/connectors/ami4ccm/examples/Hello/AMI/AMI_exec.h4
-rw-r--r--CIAO/connectors/ami4ccm/examples/Hello/Hello_Base/Hello_Base.idl44
-rw-r--r--CIAO/connectors/ami4ccm/examples/Hello/Hello_Base/Hello_Base.mpc4
-rw-r--r--CIAO/connectors/ami4ccm/examples/Hello/Sender/Hello_Sender.idl5
-rw-r--r--CIAO/connectors/ami4ccm/examples/Hello/Sender/Hello_Sender_exec.cpp12
-rw-r--r--CIAO/connectors/ami4ccm/examples/Hello/Sender/Hello_Sender_exec.h6
-rw-r--r--CIAO/connectors/ami4ccm/examples/Hello/descriptors/Plan.cdp22
-rwxr-xr-xCIAO/connectors/ami4ccm/examples/Hello/descriptors/run_test.pl3
12 files changed, 81 insertions, 93 deletions
diff --git a/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp b/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp
index f9d70e37262..34871bd3938 100644
--- a/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp
+++ b/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp
@@ -335,7 +335,7 @@ DomainApplicationManager_Impl::split_plan (const Deployment::DeploymentPlan & pl
Deployment::PlanConnectionDescription * connection_copied = 0;
for (CORBA::ULong m = 0; m < child_plan.connection.length(); ++m)
{
- if (plan.connection[j].name == child_plan.connection[m].name)
+ if (ACE_OS::strcmp (plan.connection[j].name, child_plan.connection[m].name) == 0)
{
connection_copied = &child_plan.connection[m];
break;
@@ -354,6 +354,12 @@ DomainApplicationManager_Impl::split_plan (const Deployment::DeploymentPlan & pl
// Copy the endpoint
CORBA::ULong const index_ep = connection_copied->internalEndpoint.length();
+
+ DANCE_DEBUG ((LM_TRACE, DLINFO
+ ACE_TEXT("DomainApplicationManager_Impl::split_plan - ")
+ ACE_TEXT ("Copying endpoint %u from connection into endpoint %u\n"),
+ k, index_ep));
+
connection_copied->internalEndpoint.length (index_ep + 1);
connection_copied->internalEndpoint[index_ep] = plan.connection[j].internalEndpoint[k];
connection_copied->internalEndpoint[index_ep].instanceRef = index_ins - 1;
diff --git a/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp b/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp
index 6ba94f41d6a..16194c001e3 100644
--- a/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp
+++ b/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp
@@ -1927,9 +1927,37 @@ NodeApplication_Impl::finishLaunch (const ::Deployment::Connections & providedRe
{
// What we should do with Cookie, returned from connect call???
DANCE_DEBUG((LM_DEBUG, DLINFO ACE_TEXT("NodeApplication_Impl::finishLaunch - set for receptacle\n")));
- this->connect_receptacle (obj.in(),
- conn.internalEndpoint[0].portName.in(),
- providedReference[i].endpoint[0].in());
+
+ if (conn.internalEndpoint.length () == 2 &&
+ conn.internalEndpoint[1].kind == ::Deployment::LocalFacet)
+ {
+ ::Components::CCMObject_var facet =
+ ::Components::CCMObject::_narrow (providedReference[i].endpoint[0].in ());
+
+ ::CIAO::Deployment::Container_var cont =
+ ::CIAO::Deployment::Container::_narrow (this->instances_[conn.internalEndpoint[1].instanceRef]->container->ref.in ());
+
+ if (CORBA::is_nil (facet.in ()) ||
+ CORBA::is_nil (cont.in ()))
+ {
+ DANCE_ERROR ((LM_ERROR, DLINFO ACE_TEXT("NodeApplication_Impl::finishLaunch -")
+ ACE_TEXT ("Unable to narrow all participants for a local facet connection\n")));
+ throw ::Deployment::InvalidConnection ("", "");
+ }
+
+ this->connect_local_receptacle (facet.in (),
+ conn.internalEndpoint[1].portName.in (),
+ obj.in (),
+ conn.internalEndpoint[0].portName.in (),
+ cont.in ());
+ }
+ else
+ {
+ this->connect_receptacle (obj.in(),
+ conn.internalEndpoint[0].portName.in(),
+ providedReference[i].endpoint[0].in());
+ }
+
break;
}
case ::Deployment::EventEmitter:
diff --git a/CIAO/connectors/ami4ccm/examples/Hello/AMI/AMI.idl b/CIAO/connectors/ami4ccm/examples/Hello/AMI/AMI.idl
index e264aea4b8c..b409eb8c21d 100644
--- a/CIAO/connectors/ami4ccm/examples/Hello/AMI/AMI.idl
+++ b/CIAO/connectors/ami4ccm/examples/Hello/AMI/AMI.idl
@@ -18,9 +18,6 @@ module Hello_AMI_AMI
//uses the interface of the Receiver ('server')
uses Hello::MyFoo my_foo_receiver;
-
- //uses the callback interface of the sender
- uses Hello_AMI::AMI_MyFooCallback callback_my_foo;
};
home AMIHome manages AMI
diff --git a/CIAO/connectors/ami4ccm/examples/Hello/AMI/AMI_exec.cpp b/CIAO/connectors/ami4ccm/examples/Hello/AMI/AMI_exec.cpp
index f243f9a2786..f6c49890d88 100644
--- a/CIAO/connectors/ami4ccm/examples/Hello/AMI/AMI_exec.cpp
+++ b/CIAO/connectors/ami4ccm/examples/Hello/AMI/AMI_exec.cpp
@@ -70,10 +70,10 @@ namespace CIAO_Hello_AMI_AMI_AMI_Impl
// Facet Executor Implementation Class: AMI_MyFoo_exec_i
//============================================================
AMI_MyFoo_exec_i::AMI_MyFoo_exec_i (
- ::Hello_AMI::AMI_MyFooCallback_ptr foo_callback,
::Hello::MyFoo_ptr receiver_foo)
- : foo_callback_ (::Hello_AMI::AMI_MyFooCallback::_duplicate (foo_callback))
{
+ // @@TODO: This is all sorts of wrong. We should be using the container ORB.
+
//initialize AMI client
int argc = 2;
ACE_TCHAR **argv = new ACE_TCHAR *[argc];
@@ -114,12 +114,12 @@ namespace CIAO_Hello_AMI_AMI_AMI_Impl
void
AMI_MyFoo_exec_i::sendc_foo (
- ::Hello_AMI::AMI_MyFooCallback_ptr /*ami_handler*/,
+ ::Hello_AMI::AMI_MyFooCallback_ptr ami_handler,
const char * in_str)
{
printf ("AMI (FOO) :\tsendc_foo <%s>\n", in_str);
::CCM_CORBA_AMI_MyFoo_Impl::AMI_MyFoo_reply_handler* handler =
- new ::CCM_CORBA_AMI_MyFoo_Impl::AMI_MyFoo_reply_handler (foo_callback_);
+ new ::CCM_CORBA_AMI_MyFoo_Impl::AMI_MyFoo_reply_handler (ami_handler);
//Create a reply handler the CORBA-way
Hello::AMI_MyFooHandler_var the_handler_var = handler->_this ();
printf ("AMI (FOO) :\tSending string <%s> to AMI CORBA server\n", in_str);
@@ -129,12 +129,12 @@ namespace CIAO_Hello_AMI_AMI_AMI_Impl
void
AMI_MyFoo_exec_i::sendc_hello (
- ::Hello_AMI::AMI_MyFooCallback_ptr /*ami_handler*/)
+ ::Hello_AMI::AMI_MyFooCallback_ptr ami_handler)
{
printf ("AMI (FOO) :\tsendc_hello\n");
::CCM_CORBA_AMI_MyFoo_Impl::AMI_MyFoo_reply_handler* handler =
- new ::CCM_CORBA_AMI_MyFoo_Impl::AMI_MyFoo_reply_handler (foo_callback_);
+ new ::CCM_CORBA_AMI_MyFoo_Impl::AMI_MyFoo_reply_handler (ami_handler);
//Create a reply handler the CORBA-way
Hello::AMI_MyFooHandler_var the_handler_var = handler->_this ();
printf ("AMI (FOO) :\tCalling AMI CORBA server\n");
@@ -144,11 +144,11 @@ namespace CIAO_Hello_AMI_AMI_AMI_Impl
void
AMI_MyFoo_exec_i::sendc_get_rw_attrib (
- ::Hello_AMI::AMI_MyFooCallback_ptr /*ami_handler*/)
+ ::Hello_AMI::AMI_MyFooCallback_ptr ami_handler)
{
printf ("AMI (FOO) :\tsendc_get_rw_attrib\n");
::CCM_CORBA_AMI_MyFoo_Impl::AMI_MyFoo_reply_handler* handler =
- new ::CCM_CORBA_AMI_MyFoo_Impl::AMI_MyFoo_reply_handler (foo_callback_);
+ new ::CCM_CORBA_AMI_MyFoo_Impl::AMI_MyFoo_reply_handler (ami_handler);
//Create a reply handler the CORBA-way
Hello::AMI_MyFooHandler_var the_handler_var = handler->_this ();
ami_foo_server_->sendc_get_rw_attrib (the_handler_var.in ());
@@ -157,12 +157,12 @@ namespace CIAO_Hello_AMI_AMI_AMI_Impl
void
AMI_MyFoo_exec_i::sendc_set_rw_attrib (
- ::Hello_AMI::AMI_MyFooCallback_ptr /*ami_handler*/,
+ ::Hello_AMI::AMI_MyFooCallback_ptr ami_handler,
CORBA::Short rw_attrib)
{
printf ("AMI (FOO) :\tsendc_set_rw_attrib\n");
::CCM_CORBA_AMI_MyFoo_Impl::AMI_MyFoo_reply_handler* handler =
- new ::CCM_CORBA_AMI_MyFoo_Impl::AMI_MyFoo_reply_handler (foo_callback_);
+ new ::CCM_CORBA_AMI_MyFoo_Impl::AMI_MyFoo_reply_handler (ami_handler);
//Create a reply handler the CORBA-way
Hello::AMI_MyFooHandler_var the_handler_var = handler->_this ();
printf ("AMI (FOO) : \tSet rw_attrib <%d>\n", rw_attrib);
@@ -172,11 +172,11 @@ namespace CIAO_Hello_AMI_AMI_AMI_Impl
void
AMI_MyFoo_exec_i::sendc_get_ro_attrib (
- ::Hello_AMI::AMI_MyFooCallback_ptr /*ami_handler*/)
+ ::Hello_AMI::AMI_MyFooCallback_ptr ami_handler)
{
printf ("AMI (FOO) :\tsendc_get_ro_attrib\n");
::CCM_CORBA_AMI_MyFoo_Impl::AMI_MyFoo_reply_handler* handler =
- new ::CCM_CORBA_AMI_MyFoo_Impl::AMI_MyFoo_reply_handler (foo_callback_);
+ new ::CCM_CORBA_AMI_MyFoo_Impl::AMI_MyFoo_reply_handler (ami_handler);
//Create a reply handler the CORBA-way
Hello::AMI_MyFooHandler_var the_handler_var = handler->_this ();
ami_foo_server_->sendc_get_ro_attrib (the_handler_var.in ());
@@ -203,10 +203,7 @@ namespace CIAO_Hello_AMI_AMI_AMI_Impl
::Hello_AMI::CCM_AMI_MyFoo_ptr
AMI_exec_i::get_perform_asynch_my_foo (void)
{
- ::Hello_AMI::AMI_MyFooCallback_var foo_callback =
- this->context_->get_connection_callback_my_foo ();
- return new AMI_MyFoo_exec_i (foo_callback.in (),
- receiver_foo_.in ());
+ return new AMI_MyFoo_exec_i (receiver_foo_.in ());
}
// Operations from Components::SessionComponent.
diff --git a/CIAO/connectors/ami4ccm/examples/Hello/AMI/AMI_exec.h b/CIAO/connectors/ami4ccm/examples/Hello/AMI/AMI_exec.h
index 2afed3b025f..e5c56d9e438 100644
--- a/CIAO/connectors/ami4ccm/examples/Hello/AMI/AMI_exec.h
+++ b/CIAO/connectors/ami4ccm/examples/Hello/AMI/AMI_exec.h
@@ -59,8 +59,7 @@ namespace CIAO_Hello_AMI_AMI_AMI_Impl
public virtual ::CORBA::LocalObject
{
public:
- AMI_MyFoo_exec_i (::Hello_AMI::AMI_MyFooCallback_ptr foo_callback,
- ::Hello::MyFoo_ptr receiver_foo);
+ AMI_MyFoo_exec_i (::Hello::MyFoo_ptr receiver_foo);
virtual ~AMI_MyFoo_exec_i (void);
virtual void
@@ -85,7 +84,6 @@ namespace CIAO_Hello_AMI_AMI_AMI_Impl
private:
Hello::MyFoo_var ami_foo_server_;
- ::Hello_AMI::AMI_MyFooCallback_ptr foo_callback_;
};
class AMI_exec_i
diff --git a/CIAO/connectors/ami4ccm/examples/Hello/Hello_Base/Hello_Base.idl b/CIAO/connectors/ami4ccm/examples/Hello/Hello_Base/Hello_Base.idl
index cf356190ca7..34ed31d82ce 100644
--- a/CIAO/connectors/ami4ccm/examples/Hello/Hello_Base/Hello_Base.idl
+++ b/CIAO/connectors/ami4ccm/examples/Hello/Hello_Base/Hello_Base.idl
@@ -9,37 +9,37 @@
module Hello_AMI
{
// callback interface from AMI-component to Sender component
- interface AMI_MyFooCallback : ::Messaging::ReplyHandler
- {
- void foo (in long ami_return_val, in string answer);
- void foo_excep (in Messaging::ExceptionHolder excep_holder);
+ local interface AMI_MyFooCallback : ::Messaging::ReplyHandler
+ {
+ void foo (in long ami_return_val, in string answer);
+ void foo_excep (in Messaging::ExceptionHolder excep_holder);
- void hello (in long ami_return_val);
- void hello_excep (in Messaging::ExceptionHolder excep_holder);
+ void hello (in long ami_return_val);
+ void hello_excep (in Messaging::ExceptionHolder excep_holder);
- void get_rw_attrib (in short ami_return_val);
- void get_rw_attrib_excep (in Messaging::ExceptionHolder excep_holder);
+ void get_rw_attrib (in short ami_return_val);
+ void get_rw_attrib_excep (in Messaging::ExceptionHolder excep_holder);
- void set_rw_attrib ();
- void set_rw_attrib_excep (in Messaging::ExceptionHolder excep_holder);
+ void set_rw_attrib ();
+ void set_rw_attrib_excep (in Messaging::ExceptionHolder excep_holder);
- void get_ro_attrib (in short ami_return_val);
- void get_ro_attrib_excep (in Messaging::ExceptionHolder excep_holder);
- };
+ void get_ro_attrib (in short ami_return_val);
+ void get_ro_attrib_excep (in Messaging::ExceptionHolder excep_holder);
+ };
// AMI component. Sender calls AMI-component and AMI-component calls Receiver
// using the AMI_foo interface.
// Example of a global reply handler
- interface AMI_MyFoo
- {
- void sendc_foo (in AMI_MyFooCallback ami_handler, in string in_str);
- void sendc_hello (in AMI_MyFooCallback ami_handler);
+ local interface AMI_MyFoo
+ {
+ void sendc_foo (in AMI_MyFooCallback ami_handler, in string in_str);
+ void sendc_hello (in AMI_MyFooCallback ami_handler);
- //asynch method for handling attributes
- void sendc_get_rw_attrib (in AMI_MyFooCallback ami_handler);
- void sendc_set_rw_attrib (in AMI_MyFooCallback ami_handler, in short rw_attrib);
- void sendc_get_ro_attrib (in AMI_MyFooCallback ami_handler);
- };
+ //asynch method for handling attributes
+ void sendc_get_rw_attrib (in AMI_MyFooCallback ami_handler);
+ void sendc_set_rw_attrib (in AMI_MyFooCallback ami_handler, in short rw_attrib);
+ void sendc_get_ro_attrib (in AMI_MyFooCallback ami_handler);
+ };
};
#endif /* HELLO_BASE_IDL */
diff --git a/CIAO/connectors/ami4ccm/examples/Hello/Hello_Base/Hello_Base.mpc b/CIAO/connectors/ami4ccm/examples/Hello/Hello_Base/Hello_Base.mpc
index 9e57b95951a..572ad2500e2 100644
--- a/CIAO/connectors/ami4ccm/examples/Hello/Hello_Base/Hello_Base.mpc
+++ b/CIAO/connectors/ami4ccm/examples/Hello/Hello_Base/Hello_Base.mpc
@@ -11,7 +11,6 @@ project(AMI_Hello_idl_gen) : componentidldefaults, ami {
-Wb,exec_export_include=Hello_exec_export.h -I..
IDL_Files {
- Hello.idl
}
}
@@ -23,7 +22,6 @@ project(AMI_Hello_lem_gen) : ciaoidldefaults {
-Wb,export_include=Hello_exec_export.h -I.. -SS
IDL_Files {
- HelloE.idl
}
}
@@ -38,6 +36,7 @@ project(AMI_Hello_Base_idl_gen) : componentidldefaults {
IDL_Files {
Hello_Base.idl
+ Hello.idl
}
}
@@ -50,6 +49,7 @@ project(AMI_Hello_Base_lem_gen) : ciaoidldefaults {
IDL_Files {
Hello_BaseE.idl
+ HelloE.idl
}
}
diff --git a/CIAO/connectors/ami4ccm/examples/Hello/Sender/Hello_Sender.idl b/CIAO/connectors/ami4ccm/examples/Hello/Sender/Hello_Sender.idl
index 766847fced3..6af31bce82b 100644
--- a/CIAO/connectors/ami4ccm/examples/Hello/Sender/Hello_Sender.idl
+++ b/CIAO/connectors/ami4ccm/examples/Hello/Sender/Hello_Sender.idl
@@ -13,14 +13,11 @@ module Hello_AMI
{
component Sender
{
- // for asynch invocation.
+ // for asynch invocation. @@implied
uses Hello_AMI::AMI_MyFoo run_asynch_my_foo;
// for synchronous invocation
uses Hello::MyFoo run_my_foo;
-
- //provides the callback function/exception for the AMI component.
- provides Hello_AMI::AMI_MyFooCallback the_my_foo_callback;
};
home SenderHome manages Sender
diff --git a/CIAO/connectors/ami4ccm/examples/Hello/Sender/Hello_Sender_exec.cpp b/CIAO/connectors/ami4ccm/examples/Hello/Sender/Hello_Sender_exec.cpp
index 22272db56d5..15c66c77a5f 100644
--- a/CIAO/connectors/ami4ccm/examples/Hello/Sender/Hello_Sender_exec.cpp
+++ b/CIAO/connectors/ami4ccm/examples/Hello/Sender/Hello_Sender_exec.cpp
@@ -281,18 +281,6 @@ namespace CIAO_Hello_AMI_Sender_Impl
// Component attributes.
// Port operations.
-
- ::Hello_AMI::CCM_AMI_MyFooCallback_ptr
- Sender_exec_i::get_the_my_foo_callback ()
- {
- if (CORBA::is_nil (global_foo_callback_))
- {
- global_foo_callback_ = new MyFoo_callback_exec_i ();
- }
-
- return global_foo_callback_;
- }
-
// Operations from Components::SessionComponent.
void
diff --git a/CIAO/connectors/ami4ccm/examples/Hello/Sender/Hello_Sender_exec.h b/CIAO/connectors/ami4ccm/examples/Hello/Sender/Hello_Sender_exec.h
index 976a4c5981c..25d88d09451 100644
--- a/CIAO/connectors/ami4ccm/examples/Hello/Sender/Hello_Sender_exec.h
+++ b/CIAO/connectors/ami4ccm/examples/Hello/Sender/Hello_Sender_exec.h
@@ -140,11 +140,7 @@ namespace CIAO_Hello_AMI_Sender_Impl
// Component attributes.
// Port operations.
-
- virtual ::Hello_AMI::CCM_AMI_MyFooCallback_ptr
- get_the_my_foo_callback (void);
- // Operations from Components::SessionComponent.
-
+
virtual void
set_session_context (
::Components::SessionContext_ptr ctx);
diff --git a/CIAO/connectors/ami4ccm/examples/Hello/descriptors/Plan.cdp b/CIAO/connectors/ami4ccm/examples/Hello/descriptors/Plan.cdp
index 72f2cd3c627..3f8b39ff7aa 100644
--- a/CIAO/connectors/ami4ccm/examples/Hello/descriptors/Plan.cdp
+++ b/CIAO/connectors/ami4ccm/examples/Hello/descriptors/Plan.cdp
@@ -194,7 +194,7 @@
<instance xmi:id="Hello.ComponentImplementations.HelloImplementation.Hello.AMI">
<name>Hello.ComponentImplementations.HelloImplementation.Hello.AMI</name>
- <node>AMI</node>
+ <node>Sender</node>
<source/>
<implementation xmi:idref="Hello_AMIHomeImplementation"/>
<configProperty>
@@ -213,31 +213,15 @@
<connection>
<name>run_asynch_foo_connection</name>
<internalEndpoint>
- <portName>perform_asynch_my_foo</portName>
- <provider>true</provider>
- <kind>Facet</kind>
- <instance xmi:idref="Hello.ComponentImplementations.HelloImplementation.Hello.AMI" />
- </internalEndpoint>
- <internalEndpoint>
<portName>run_asynch_my_foo</portName>
<provider>false</provider>
<kind>SimplexReceptacle</kind>
<instance xmi:idref="Hello.ComponentImplementations.HelloImplementation.Hello.Sender" />
</internalEndpoint>
- </connection>
-
- <connection>
- <name>foo_callback_connection</name>
<internalEndpoint>
- <portName>the_my_foo_callback</portName>
+ <portName>perform_asynch_my_foo</portName>
<provider>true</provider>
- <kind>Facet</kind>
- <instance xmi:idref="Hello.ComponentImplementations.HelloImplementation.Hello.Sender" />
- </internalEndpoint>
- <internalEndpoint>
- <portName>callback_my_foo</portName>
- <provider>false</provider>
- <kind>SimplexReceptacle</kind>
+ <kind>LocalFacet</kind>
<instance xmi:idref="Hello.ComponentImplementations.HelloImplementation.Hello.AMI" />
</internalEndpoint>
</connection>
diff --git a/CIAO/connectors/ami4ccm/examples/Hello/descriptors/run_test.pl b/CIAO/connectors/ami4ccm/examples/Hello/descriptors/run_test.pl
index be04df44296..f6f7d3e7c77 100755
--- a/CIAO/connectors/ami4ccm/examples/Hello/descriptors/run_test.pl
+++ b/CIAO/connectors/ami4ccm/examples/Hello/descriptors/run_test.pl
@@ -44,9 +44,6 @@ $status = 0;
$cdp_file = "Plan.cdp";
PerlACE::add_lib_path ('../lib');
-$ENV{"DANCE_TRACE_ENABLE"} = 0;
-$ENV{"CIAO_TRACE_ENABLE"} = 0;
-
sub create_targets {
# naming service