diff options
Diffstat (limited to 'ace/Svc_Handler.cpp')
-rw-r--r-- | ace/Svc_Handler.cpp | 266 |
1 files changed, 0 insertions, 266 deletions
diff --git a/ace/Svc_Handler.cpp b/ace/Svc_Handler.cpp deleted file mode 100644 index f461b9081bc..00000000000 --- a/ace/Svc_Handler.cpp +++ /dev/null @@ -1,266 +0,0 @@ -// Svc_Handler.cpp -// $Id$ - -#if !defined (ACE_SVC_HANDLER_C) -#define ACE_SVC_HANDLER_C - -#define ACE_BUILD_DLL -#include "ace/Svc_Handler.h" -#include "ace/Object_Manager.h" -#include "ace/Strategies.h" - -#if !defined (__ACE_INLINE__) -#include "ace/Svc_Handler.i" -#endif /* __ACE_INLINE__ */ - -#define PR_ST_1 ACE_PEER_STREAM_1 -#define PR_ST_2 ACE_PEER_STREAM_2 - -template <PR_ST_1, ACE_SYNCH_DECL> void * -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::operator new (size_t n) -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::operator new"); - // Allocate the memory and store it (usually in thread-specific - // storage, depending on config flags). - DYNAMIC::instance ()->set (); - return ::new char[n]; -} - -template <PR_ST_1, ACE_SYNCH_DECL> void -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::destroy (void) -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::destroy"); - - // Only delete ourselves if we've been allocated dynamically. - if (this->dynamic_ && this->closing_ == 0) - // Will call the destructor, which automatically calls <shutdown>. - // Note that if we are *not* allocated dynamically then the - // destructor will call <shutdown> automatically when it gets run - // during cleanup. - delete this; -} - -template <PR_ST_1, ACE_SYNCH_DECL> void -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::operator delete (void *obj) -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::delete"); - // You cannot delete a 'void*' (X3J16/95-0087 5.3.5.3), but we know - // the pointer was created using new char[] (see operator new code), - // so we use a cast: - char *tmp = (char *) obj; - ::delete [] tmp; -} - -// Default constructor. - -template <PR_ST_1, ACE_SYNCH_DECL> -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::ACE_Svc_Handler (ACE_Thread_Manager *tm, - ACE_Message_Queue<ACE_SYNCH_USE> *mq, - ACE_Reactor *reactor) - : ACE_Task<ACE_SYNCH_USE> (tm, mq), - closing_ (0), - recycler_ (0), - recycling_act_ (0) -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::ACE_Svc_Handler"); - - this->reactor (reactor); - - // This clever idiom transparently checks if we were allocated - // dynamically. This information is used by the <destroy> method to - // decide if we need to delete <this>... The idiom is based on a - // paper by Michael van Rooyen (mrooyen@cellnet.co.uk) that appeared - // in the April '96 issue of the C++ Report. We've spruced it up to - // work correctly in multi-threaded programs by using our ACE_TSS - // class. - this->dynamic_ = DYNAMIC::instance ()->is_dynamic (); - if (this->dynamic_) - // Make sure to reset the flag - DYNAMIC::instance ()->reset (); -} - -// Default behavior for a ACE_Svc_Handler object is to be registered with -// the ACE_Reactor (thereby ensuring single threading). - -template <PR_ST_1, ACE_SYNCH_DECL> int -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::open (void *) -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::open"); -#if defined (DEBUGGING) - char buf[BUFSIZ]; - ACE_PEER_STREAM_ADDR client_addr; - - if (this->peer_.get_remote_addr (client_addr) == -1) - ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "get_remote_addr"), -1); - - if (client_addr.addr_to_string (buf, sizeof buf) == -1) - ACE_ERROR_RETURN ((LM_ERROR, "%p\n", - "can't obtain peer's address"), -1); - - ACE_DEBUG ((LM_DEBUG, "connected to %s on fd %d\n", - buf, this->peer_.get_handle ())); -#endif /* DEBUGGING */ - if (this->reactor () - && this->reactor ()->register_handler - (this, ACE_Event_Handler::READ_MASK) == -1) - ACE_ERROR_RETURN ((LM_ERROR, "%p", - "unable to register client handler"), -1); - return 0; -} - -// Perform termination activities. - -template <PR_ST_1, ACE_SYNCH_DECL> void -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::shutdown (void) -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::shutdown"); - - // Deregister this handler with the ACE_Reactor. - if (this->reactor ()) - { - ACE_Reactor_Mask mask = ACE_Event_Handler::ALL_EVENTS_MASK | - ACE_Event_Handler::DONT_CALL; - - // Make sure there are no timers. - this->reactor ()->cancel_timer (this); - - // Remove self from reactor. - this->reactor ()->remove_handler (this, mask); - } - - // Remove self from the recycler. - if (this->recycler ()) - this->recycler ()->purge (this->recycling_act_); - - this->peer ().close (); -} - -template <PR_ST_1, ACE_SYNCH_DECL> void -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::dump (void) const -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::dump"); -} - -template <PR_ST_1, ACE_SYNCH_DECL> ACE_PEER_STREAM & -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::peer (void) const -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::peer"); - return (ACE_PEER_STREAM &) this->peer_; -} - -// Extract the underlying I/O descriptor. - -template <PR_ST_1, ACE_SYNCH_DECL> ACE_HANDLE -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::get_handle (void) const -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::get_handle"); - return this->peer_.get_handle (); -} - -// Set the underlying I/O descriptor. - -template <PR_ST_1, ACE_SYNCH_DECL> void -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::set_handle (ACE_HANDLE h) -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::set_handle"); - this->peer_.set_handle (h); -} - -template <PR_ST_1, ACE_SYNCH_DECL> -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::~ACE_Svc_Handler (void) -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::~ACE_Svc_Handler"); - - if (this->closing_ == 0) - { - // We're closing down now, so make sure not to call ourselves - // recursively via other calls to handle_close() (e.g., from the - // Timer_Queue). - this->closing_ = 1; - - this->shutdown (); - } -} - -template <PR_ST_1, ACE_SYNCH_DECL> int -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::handle_close (ACE_HANDLE, - ACE_Reactor_Mask) -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::handle_close"); - - this->destroy (); - return 0; -} - -template <PR_ST_1, ACE_SYNCH_DECL> int -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::handle_timeout (const ACE_Time_Value &, - const void *) -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::handle_timeout"); - return this->handle_close (); -} - -template <PR_ST_1, ACE_SYNCH_DECL> int -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::close (unsigned long) -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::close"); - return this->handle_close (); -} - -template <PR_ST_1, ACE_SYNCH_DECL> int -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::init (int, char *[]) -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::init"); - return -1; -} - -template <PR_ST_1, ACE_SYNCH_DECL> int -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::fini (void) -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::fini"); - return -1; -} - -template <PR_ST_1, ACE_SYNCH_DECL> int -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::info (char **, size_t) const -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::info"); - return -1; -} - -template <PR_ST_1, ACE_SYNCH_DECL> int -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::idle (u_long flags) -{ - if (this->recycler ()) - return this->recycler ()->cache (this->recycling_act_); - else - return this->close (flags); -} - -template <PR_ST_1, ACE_SYNCH_DECL> void -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::recycler (ACE_Connection_Recycling_Strategy *recycler, - const void *recycling_act) -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::recycler"); - this->recycler_ = recycler; - this->recycling_act_ = recycling_act; -} - -template <PR_ST_1, ACE_SYNCH_DECL> ACE_Connection_Recycling_Strategy * -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::recycler (void) const -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::recycler"); - return this->recycler_; -} - -template <PR_ST_1, ACE_SYNCH_DECL> int -ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::recycle (void *) -{ - ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::recycle"); - // By default, the object is ready and willing to be recycled. - return 0; -} - -#undef PR_ST_1 -#undef PR_ST_2 -#endif /* ACE_SVC_HANDLER_C */ |