summaryrefslogtreecommitdiff
path: root/TAO/tao/Connection_Handler.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Connection_Handler.h')
-rw-r--r--TAO/tao/Connection_Handler.h157
1 files changed, 157 insertions, 0 deletions
diff --git a/TAO/tao/Connection_Handler.h b/TAO/tao/Connection_Handler.h
new file mode 100644
index 00000000000..3ee33268792
--- /dev/null
+++ b/TAO/tao/Connection_Handler.h
@@ -0,0 +1,157 @@
+/* -*- C++ -*- */
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// tao
+//
+// = FILENAME
+// Connection_Handler.h
+//
+// = AUTHOR
+// Bala Natarajan <bala@cs.wustl.edu>
+//
+// ============================================================================
+
+#ifndef TAO_CONNECTION_HANDLER_H
+#define TAO_CONNECTION_HANDLER_H
+#include "ace/pre.h"
+
+#include "ace/SOCK.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/Connection_Cache_Manager.h"
+
+#if defined(_MSC_VER)
+#if (_MSC_VER >= 1200)
+#pragma warning(push)
+#endif /* _MSC_VER >= 1200 */
+#pragma warning(disable:4250)
+#endif /* _MSC_VER */
+
+class TAO_ORB_Core;
+class TAO_ORB_Core_TSS_Resources;
+class ACE_Reactor;
+class ACE_Event_Handler;
+
+class TAO_Connection_Handler
+{
+ // = TITLE
+ // TAO_Connection_Handler
+ //
+ // = DESCRIPTION
+ // This class is an abstraction for the connection handlers. The
+ // connections handler in every protocol can derive from this
+ // class as well as the ACE_Svc_Handler specialised for the
+ // right protocol. This way, most of the common code for the
+ // different protocls would be in this implementation. Further,
+ // this class wold be of immense use in storing the handlers in
+ // the Cache for TAO. This would help in purging entries which
+ // is generally accompanied by closing the open handles and
+ // deleting memory associated with the handlers.
+
+ // Note: This class has NOT abstracted the GIOP specific
+ // details. It is just to be safe so that, we can reuse this
+ // class for any messaging protocol underneath. This way we need
+ // not touch the Cache setup even when using other protocols (I
+ // mean messaging). BUT, I doubt whether this abstraction will
+ // satisfy the needs of other messaging protocols. (will not?).
+
+public:
+
+ TAO_Connection_Handler (void);
+ // Constructor
+
+ TAO_Connection_Handler (TAO_ORB_Core *orb_core);
+ // Constructor
+
+ virtual ~TAO_Connection_Handler (void);
+ // Destructor
+
+ void cache_map_entry (
+ TAO_Connection_Cache_Manager::HASH_MAP_ENTRY *entry);
+
+ TAO_Connection_Cache_Manager::HASH_MAP_ENTRY *cache_map_entry (void);
+ // Set/Get the Cache Map entry
+
+ int make_idle (void);
+ // Make ourselves ready for use
+
+ void incr_ref_count (void);
+ // Increment the reference count
+
+ void decr_ref_count (void);
+ // Decrement the reference count
+
+ CORBA::Boolean is_registered (void);
+ void is_registered (CORBA::Boolean);
+ // Get and set method for the flag that indicates whether the
+ // handler has been registered with the reactor or not.
+
+ virtual ACE_HANDLE fetch_handle (void) = 0;
+ // Get the underlying handle
+
+protected:
+
+ void remove_handle (ACE_HANDLE handle);
+ // Remove the handle from the ORB Core's handle set so that it
+ // isn't included in the set that is passed to the reactor upon
+ // ORB destruction.
+
+ TAO_ORB_Core *orb_core (void);
+ // Return our TAO_ORB_Core pointer
+
+ TAO_ORB_Core_TSS_Resources* tss_resources (void);
+ // Return our TSS Resources pointer
+
+ int set_socket_option (ACE_SOCK &sock,
+ int snd_size,
+ int rcv_size);
+ // Set options on the socket
+
+ int svc_i (void);
+ // This method is invoked from the svc () method of the Svc_Handler
+ // Object.
+
+ virtual int handle_input_i (ACE_HANDLE = ACE_INVALID_HANDLE,
+ ACE_Time_Value *max_wait_time = 0) = 0;
+ // Need to be implemented by the underlying protocol
+
+ ACE_Time_Value *handle_timeout_i (const ACE_Time_Value &,
+ const void *);
+ // Implementation of the method handle_timout () which would be
+ // called when the buffering timer expires.
+
+ int handle_cleanup_i (ACE_Reactor *reactor,
+ ACE_Event_Handler *handler);
+ // Implementation of the call handle_cleanup () in
+ // Service_Handler.
+
+private:
+
+ TAO_ORB_Core *orb_core_;
+ // Pointer to the TAO_ORB_Core
+
+ TAO_ORB_Core_TSS_Resources *tss_resources_;
+ // Cached tss resources of the ORB that activated this object.
+
+ u_long ref_count_;
+ // Reference count to the number of external references -- ie. the
+ // count of the number of places our references are being held.
+
+ TAO_Connection_Cache_Manager::HASH_MAP_ENTRY *cache_map_entry_;
+ // The cache map entry -- where we are in the Connection Cache
+
+ CORBA::Boolean is_registered_;
+ // Are we registered with the reactor?
+};
+
+#if defined (__ACE_INLINE__)
+#include "tao/Connection_Handler.inl"
+#endif /* __ACE_INLINE__ */
+
+#endif /*TAO_CONNECTION_HANDLER_H*/