From 7c9bf62b4c59b00780f0f8320dada229a35db8c0 Mon Sep 17 00:00:00 2001 From: schmidt Date: Mon, 3 Dec 2007 14:29:47 +0000 Subject: ChangeLogTag:Mon --- ACE/ChangeLog | 7 ++++++ ACE/netsvcs/lib/Name_Handler.cpp | 53 ++++++++++++++++++++-------------------- ACE/netsvcs/lib/Name_Handler.h | 28 +++++++++------------ 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 + + * 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 * 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 * - ACE_Singleton::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(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 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 - * class so that we can use it in - * . - */ -class Naming_Context : public ACE_Naming_Context -{ -public: - Naming_Context (void) - : ACE_Naming_Context (ACE_Naming_Context::NET_LOCAL) {} -}; - -typedef ACE_Singleton NAMING_CONTEXT; #if defined ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION_EXPORT template class ACE_Svc_Export ACE_Svc_Handler; @@ -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 scheduling_strategy_; + + //The Naming Context + ACE_Naming_Context naming_context_; }; ACE_SVC_FACTORY_DECLARE (ACE_Name_Acceptor) + #endif /* ACE_NAME_HANDLER_H */ -- cgit v1.2.1