summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschmidt <douglascraigschmidt@users.noreply.github.com>2007-12-03 14:29:47 +0000
committerschmidt <douglascraigschmidt@users.noreply.github.com>2007-12-03 14:29:47 +0000
commit7c9bf62b4c59b00780f0f8320dada229a35db8c0 (patch)
tree72c3f33c2eca3690389a11f3f5052bb8b59cf9af
parent5089bf5426631e637dfaa62ea189c70eb3355e60 (diff)
downloadATCD-7c9bf62b4c59b00780f0f8320dada229a35db8c0.tar.gz
ChangeLogTag:Mon
-rw-r--r--ACE/ChangeLog7
-rw-r--r--ACE/netsvcs/lib/Name_Handler.cpp53
-rw-r--r--ACE/netsvcs/lib/Name_Handler.h28
3 files changed, 45 insertions, 43 deletions
diff --git a/ACE/ChangeLog b/ACE/ChangeLog
index a42e06d4d33..e7d33eb287b 100644
--- a/ACE/ChangeLog
+++ b/ACE/ChangeLog
@@ -1,3 +1,10 @@
+Mon Dec 3 14:21:20 UTC 2007 Douglas C. Schmidt <schmidt@dre.vanderbilt.edu>
+
+ * netsvcs/lib/Name_Handler.{h,cpp}: Check the return value from
+ this->parse_args (argc, argv) and allow use all range config
+ options for ACE_Name_Acceptor::init. Thanks to Vladislav Zverev
+ vladislav at gtss dot spb dot ru> for these patches.
+
Mon Dec 3 10:06:54 UTC 2007 Johnny Willemsen <jwillemsen@remedy.nl>
* ace/OS_NS_Thread.inl:
diff --git a/ACE/netsvcs/lib/Name_Handler.cpp b/ACE/netsvcs/lib/Name_Handler.cpp
index 8be8ed89a79..e7281d39705 100644
--- a/ACE/netsvcs/lib/Name_Handler.cpp
+++ b/ACE/netsvcs/lib/Name_Handler.cpp
@@ -14,11 +14,6 @@ ACE_RCSID(lib,
Name_Handler,
"$Id$")
-#if defined (ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION)
-template ACE_Singleton<Naming_Context, ACE_SYNCH_NULL_MUTEX> *
- ACE_Singleton<Naming_Context, ACE_SYNCH_NULL_MUTEX>::singleton_;
-#endif /* ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION */
-
// Simple macro that does bitwise AND -- useful in table lookup
#define ACE_TABLE_MAP(INDEX, MASK) (INDEX & MASK)
@@ -34,21 +29,17 @@ ACE_Name_Acceptor::parse_args (int argc, ACE_TCHAR *argv[])
ACE_LOG_MSG->open (ACE_TEXT ("Name Service"));
- ACE_Get_Opt get_opt (argc, argv, ACE_TEXT ("p:"), 0);
+ this->naming_context()->name_options()->parse_args( argc, argv );
+ service_port = this->naming_context()->name_options()->nameserver_port();
- for (int c; (c = get_opt ()) != -1; )
- {
- switch (c)
- {
- case 'p':
- service_port = ACE_OS::atoi (get_opt.opt_arg ());
- break;
- default:
+ // dont allow to connect to another name serever
+ if(this->naming_context()->name_options()->context() == ACE_Naming_Context::NET_LOCAL )
+ this->naming_context()->name_options()->nameserver_host("localhost");
+
+ if (this->naming_context()->open( this->naming_context()->name_options()->context() ) ==-1 )
ACE_ERROR_RETURN ((LM_ERROR,
- ACE_TEXT ("%n:\n[-p server-port]\n")),
+ ACE_TEXT ("%n:\n open naming context failed.\n")),
-1);
- }
- }
this->service_addr_.set (service_port);
return 0;
@@ -61,7 +52,11 @@ ACE_Name_Acceptor::init (int argc, ACE_TCHAR *argv[])
// Use the options hook to parse the command line arguments and set
// options.
- this->parse_args (argc, argv);
+ if( this->parse_args (argc, argv) == -1 )
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("%p\n"),
+ ACE_TEXT ("ACE_Name_Acceptor::parse_args failed")),
+ -1);
// Set the acceptor endpoint into listen mode (use the Singleton
// global Reactor...).
@@ -147,7 +142,7 @@ ACE_Name_Handler::ACE_Name_Handler (ACE_Thread_Manager *tm)
// ACE_Name_Acceptor).
/* VIRTUAL */ int
-ACE_Name_Handler::open (void *)
+ACE_Name_Handler::open (void * v)
{
ACE_TRACE (ACE_TEXT ("ACE_Name_Handler::open"));
@@ -157,6 +152,10 @@ ACE_Name_Handler::open (void *)
ACE_TEXT ("%p\n"),
ACE_TEXT ("open")),
-1);
+
+ ACE_Name_Acceptor* acceptor_ = static_cast<ACE_Name_Acceptor*>(v);
+ naming_context_ = acceptor_->naming_context();
+
return 0;
}
@@ -374,7 +373,7 @@ ACE_Name_Handler::shared_bind (int rebind)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("request for BIND \n")));
#endif /* 0 */
- result = NAMING_CONTEXT::instance ()->bind (a_name,
+ result = this->naming_context ()->bind (a_name,
a_value,
this->name_request_.type ());
}
@@ -384,7 +383,7 @@ ACE_Name_Handler::shared_bind (int rebind)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("request for REBIND \n")));
#endif /* 0 */
- result = NAMING_CONTEXT::instance ()->rebind (a_name,
+ result = this->naming_context ()->rebind (a_name,
a_value,
this->name_request_.type ());
if (result == 1)
@@ -411,7 +410,7 @@ ACE_Name_Handler::resolve (void)
ACE_NS_WString avalue;
char *atype;
- if (NAMING_CONTEXT::instance ()->resolve (a_name, avalue, atype) == 0)
+ if (this->naming_context ()->resolve (a_name, avalue, atype) == 0)
{
ACE_Auto_Basic_Array_Ptr<ACE_WCHAR_T> avalue_urep (avalue.rep ());
ACE_Name_Request nrq (ACE_Name_Request::RESOLVE,
@@ -439,7 +438,7 @@ ACE_Name_Handler::unbind (void)
ACE_NS_WString a_name (this->name_request_.name (),
this->name_request_.name_len () / sizeof (ACE_WCHAR_T));
- if (NAMING_CONTEXT::instance ()->unbind (a_name) == 0)
+ if (this->naming_context ()->unbind (a_name) == 0)
return this->send_reply (0);
else
return this->send_reply (-1);
@@ -497,7 +496,7 @@ ACE_Name_Handler::lists (void)
ACE_DEBUG ((LM_DEBUG, list_table_[index].description_));
// Call the appropriate method
- if ((NAMING_CONTEXT::instance ()->*list_table_[index].operation_) (set, pattern) != 0)
+ if ((this->naming_context ()->*list_table_[index].operation_) (set, pattern) != 0)
{
// None found so send blank request back
ACE_Name_Request end_rq (ACE_Name_Request::MAX_ENUM, 0, 0, 0, 0, 0, 0);
@@ -554,7 +553,7 @@ ACE_Name_Handler::lists_entries (void)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("request for LIST_NAME_ENTRIES \n")));
#endif /* 0 */
- result = NAMING_CONTEXT::instance ()->
+ result = this->naming_context ()->
ACE_Naming_Context::list_name_entries (set, pattern);
}
else if (msg_type == ACE_Name_Request::LIST_VALUE_ENTRIES)
@@ -563,7 +562,7 @@ ACE_Name_Handler::lists_entries (void)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("request for LIST_VALUE_ENTRIES \n")));
#endif /* 0 */
- result = NAMING_CONTEXT::instance ()->
+ result = this->naming_context ()->
ACE_Naming_Context::list_value_entries (set, pattern);
}
else if (msg_type == ACE_Name_Request::LIST_TYPE_ENTRIES)
@@ -572,7 +571,7 @@ ACE_Name_Handler::lists_entries (void)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("request for LIST_TYPE_ENTRIES \n")));
#endif /* 0 */
- result = NAMING_CONTEXT::instance ()->
+ result = this->naming_context ()->
ACE_Naming_Context::list_type_entries (set, pattern);
}
else
diff --git a/ACE/netsvcs/lib/Name_Handler.h b/ACE/netsvcs/lib/Name_Handler.h
index 40c7e893499..83fa95ef143 100644
--- a/ACE/netsvcs/lib/Name_Handler.h
+++ b/ACE/netsvcs/lib/Name_Handler.h
@@ -28,24 +28,8 @@
#include "ace/Naming_Context.h"
#include "ace/Name_Request_Reply.h"
#include "ace/Null_Mutex.h"
-#include "ace/Singleton.h"
#include "ace/svc_export.h"
-/**
- * @class Naming_Context
- *
- * @brief This helper class adds the correct default constructor to the
- * <ACE_Naming_Context> class so that we can use it in
- * <ACE_Singleton>.
- */
-class Naming_Context : public ACE_Naming_Context
-{
-public:
- Naming_Context (void)
- : ACE_Naming_Context (ACE_Naming_Context::NET_LOCAL) {}
-};
-
-typedef ACE_Singleton<Naming_Context, ACE_SYNCH_NULL_MUTEX> NAMING_CONTEXT;
#if defined ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION_EXPORT
template class ACE_Svc_Export ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_NULL_SYNCH>;
@@ -159,6 +143,11 @@ private:
/// Address of client we are connected with.
ACE_INET_Addr addr_;
+ /// Naming Context
+ ACE_Naming_Context* naming_context_;
+
+ ACE_Naming_Context* naming_context() { return naming_context_; }
+
/// Handle binds.
int bind (void);
@@ -206,11 +195,18 @@ public:
/// Parse svc.conf arguments.
int parse_args (int argc, ACE_TCHAR *argv[]);
+ /// Naming context for acceptor /for the listening port/
+ virtual ACE_Naming_Context* naming_context() { return &naming_context_;}
+
private:
/// The scheduling strategy is designed for Reactive services.
ACE_Schedule_All_Reactive_Strategy<ACE_Name_Handler> scheduling_strategy_;
+
+ //The Naming Context
+ ACE_Naming_Context naming_context_;
};
ACE_SVC_FACTORY_DECLARE (ACE_Name_Acceptor)
+
#endif /* ACE_NAME_HANDLER_H */