summaryrefslogtreecommitdiff
path: root/TAO/examples/PluggableUDP/DIOP/DIOP_Connection_Handler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/examples/PluggableUDP/DIOP/DIOP_Connection_Handler.cpp')
-rw-r--r--TAO/examples/PluggableUDP/DIOP/DIOP_Connection_Handler.cpp451
1 files changed, 0 insertions, 451 deletions
diff --git a/TAO/examples/PluggableUDP/DIOP/DIOP_Connection_Handler.cpp b/TAO/examples/PluggableUDP/DIOP/DIOP_Connection_Handler.cpp
deleted file mode 100644
index 1b8b16447a8..00000000000
--- a/TAO/examples/PluggableUDP/DIOP/DIOP_Connection_Handler.cpp
+++ /dev/null
@@ -1,451 +0,0 @@
-// $Id$
-
-
-#include "DIOP_Connection_Handler.h"
-#include "tao/Timeprobe.h"
-#include "tao/debug.h"
-#include "tao/ORB_Core.h"
-#include "tao/ORB.h"
-#include "tao/CDR.h"
-#include "tao/Messaging_Policy_i.h"
-#include "tao/Server_Strategy_Factory.h"
-#include "DIOP_Transport.h"
-#include "DIOP_Endpoint.h"
-#include "tao/Connection_Cache_Manager.h"
-#include "tao/Base_Connection_Property.h"
-
-#if !defined (__ACE_INLINE__)
-# include "DIOP_Connection_Handler.i"
-#endif /* ! __ACE_INLINE__ */
-
-ACE_RCSID(tao, DIOP_Connect, "$Id$")
-
-
-
-TAO_DIOP_Connection_Handler::TAO_DIOP_Connection_Handler (ACE_Thread_Manager *t)
- : TAO_DIOP_SVC_HANDLER (t, 0 , 0),
- TAO_Connection_Handler (0),
- transport_ (this, 0, 0),
- refcount_ (1),
- tcp_properties_ (0)
-{
- // This constructor should *never* get called, it is just here to
- // make the compiler happy: the default implementation of the
- // Creation_Strategy requires a constructor with that signature, we
- // don't use that implementation, but some (most?) compilers
- // instantiate it anyway.
- ACE_ASSERT (this->orb_core () != 0);
-}
-
-
-TAO_DIOP_Connection_Handler::TAO_DIOP_Connection_Handler (TAO_ORB_Core *orb_core,
- CORBA::Boolean flag,
- void *arg)
- : TAO_DIOP_SVC_HANDLER (orb_core->thr_mgr (), 0, 0),
- TAO_Connection_Handler (orb_core),
- transport_ (this, orb_core, flag),
- refcount_ (1),
- tcp_properties_ (ACE_static_cast
- (TAO_DIOP_Properties *, arg))
-{
-}
-
-
-TAO_DIOP_Connection_Handler::~TAO_DIOP_Connection_Handler (void)
-{
- // If the socket has not already been closed.
- if (this->get_handle () != ACE_INVALID_HANDLE)
- {
- // Cannot deal with errors, and therefore they are ignored.
- this->transport_.send_buffered_messages ();
- }
- else
- {
- // Dequeue messages and delete message blocks.
- this->transport_.dequeue_all ();
- }
-
- // @@ Frank: Added from DIOP_Connect.cpp
- this->handle_cleanup ();
-
- udp_socket_.close ();
-}
-
-// @@ Frank: Added from DIOP_Connect.cpp
-ACE_HANDLE
-TAO_DIOP_Connection_Handler::get_handle (void) const
-{
- return this->udp_socket_.get_handle ();
-}
-
-
-const ACE_INET_Addr &
-TAO_DIOP_Connection_Handler::addr (void)
-{
- return this->addr_;
-}
-
-
-void
-TAO_DIOP_Connection_Handler::addr (const ACE_INET_Addr &addr)
-{
- this->addr_ = addr;
-}
-
-
-const ACE_SOCK_Dgram &
-TAO_DIOP_Connection_Handler::dgram (void)
-{
- return this->udp_socket_;
-}
-// @@ Frank: End DIOP_Connect.cpp
-
-
-int
-TAO_DIOP_Connection_Handler::open (void*)
-{
- // @@ Frank: Not needed for DIOP
- /*
- if (this->set_socket_option (this->peer (),
- this->tcp_properties_->send_buffer_size,
- this->tcp_properties_->recv_buffer_size) == -1)
- return -1;
-
-#if !defined (ACE_LACKS_TCP_NODELAY)
-
- if (this->peer ().set_option (ACE_IPPROTO_TCP,
- TCP_NODELAY,
- (void *) &tcp_properties_->no_delay,
- sizeof (int)) == -1)
- return -1;
-#endif ! ACE_LACKS_TCP_NODELAY
-
- if (this->transport_.wait_strategy ()->non_blocking ())
- {
- if (this->peer ().enable (ACE_NONBLOCK) == -1)
- return -1;
- }
-
- // Called by the <Strategy_Acceptor> when the handler is
- // completely connected.
- ACE_INET_Addr addr;
-
- char client[MAXHOSTNAMELEN + 16];
-
- // Get the peername.
- if (this->peer ().get_remote_addr (addr) == -1)
- return -1;
-
- // Verify that we can resolve the peer hostname.
- else if (addr.addr_to_string (client, sizeof (client)) == -1)
- return -1;
-
- if (TAO_debug_level > 0)
- {
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("TAO (%P|%t) DIOP connection from client")
- ACE_TEXT ("<%s> on %d\n"),
- client, this->peer ().get_handle ()));
- }
- */
-
- // @@ Frank: From DIOP_Connect.cpp
- this->udp_socket_.open (ACE_sap_any_cast (ACE_INET_Addr &));
- ACE_DEBUG ((LM_DEBUG,
- "Opened connector on %s:%d\n",
- this->addr_.get_host_name (),
- this->addr_.get_port_number ()));
-
- return 0;
-}
-
-int
-TAO_DIOP_Connection_Handler::open_server (void)
-{
- this->udp_socket_.open (this->addr_);
- ACE_DEBUG ((LM_DEBUG,
- "Opened acceptor on %s:%d\n",
- this->addr_.get_host_name (),
- this->addr_.get_port_number ()));
- return 0;
-}
-
-int
-TAO_DIOP_Connection_Handler::activate (long flags,
- int n_threads,
- int force_active,
- long priority,
- int grp_id,
- ACE_Task_Base *task,
- ACE_hthread_t thread_handles[],
- void *stack[],
- size_t stack_size[],
- ACE_thread_t thread_names[])
-{
- if (TAO_debug_level)
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("TAO (%P|%t) DIOP_Connection_Handler::activate %d ")
- ACE_TEXT ("threads, flags = %d\n"),
- n_threads,
- flags,
- THR_BOUND));
- // @@ Michael: I believe we do not need active service handlers right now.
- // @@ Frank: Not disabled yet...
-
- return TAO_DIOP_SVC_HANDLER::activate (flags,
- n_threads,
- force_active,
- priority,
- grp_id,
- task,
- thread_handles,
- stack,
- stack_size,
- thread_names);
-}
-
-int
-TAO_DIOP_Connection_Handler::svc (void)
-{
- // @@ Michael: I believe we do not need active service handlers right now.
- // @@ Frank: Not yet...
-
- // This method is called when an instance is "activated", i.e.,
- // turned into an active object. Presumably, activation spawns a
- // thread with this method as the "worker function".
-
- // Clear the non-blocking mode here
- ACE_Flag_Manip::clr_flags (this->get_handle (),
- ACE_NONBLOCK);
-
- // Call the implementation here
- return this->svc_i ();
-}
-
-
-int
-TAO_DIOP_Connection_Handler::handle_close (ACE_HANDLE handle,
- ACE_Reactor_Mask rm)
-{
- // @@ Alex: we need to figure out if the transport decides to close
- // us or something else. If it is something else (for example
- // the cached connector trying to make room for other
- // connections) then we should let the transport know, so it can
- // in turn take appropiate action (such as sending exceptions to
- // all waiting reply handlers).
- if (TAO_debug_level)
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("TAO (%P|%t) ")
- ACE_TEXT ("DIOP_Connection_Handler::handle_close ")
- ACE_TEXT ("(%d, %d)\n"),
- handle,
- rm));
-
- --this->refcount_;
- if (this->refcount_ == 0 &&
- this->is_registered ())
- {
- // @@ Frank: Added reactor check. not sure if this is right?
- if (this->reactor ())
- {
- // Make sure there are no timers.
- this->reactor ()->cancel_timer (this);
- }
-
- // Set the flag to indicate that it is no longer registered with
- // the reactor, so that it isn't included in the set that is
- // passed to the reactor on ORB destruction.
- this->is_registered (0);
-
- // Close the handle..
- if (this->get_handle () != ACE_INVALID_HANDLE)
- {
- // Send the buffered messages first
- this->transport_.send_buffered_messages ();
-
- this->peer ().close ();
-
- // Purge the entry too
- this->mark_invalid ();
- }
-
- // Decrement the reference count
- this->decr_ref_count ();
-
-
- }
-
- return 0;
-}
-
-ACE_HANDLE
-TAO_DIOP_Connection_Handler::fetch_handle (void)
-{
- return this->get_handle ();
-}
-
-
-int
-TAO_DIOP_Connection_Handler::handle_timeout (const ACE_Time_Value &,
- const void *)
-{
- // This method is called when buffering timer expires.
- //
- ACE_Time_Value *max_wait_time = 0;
-
- TAO_Stub *stub = 0;
- int has_timeout;
- this->orb_core ()->call_timeout_hook (stub,
- has_timeout,
- *max_wait_time);
-
- // Cannot deal with errors, and therefore they are ignored.
- this->transport ()->send_buffered_messages (max_wait_time);
-
- return 0;
-}
-
-
-int
-TAO_DIOP_Connection_Handler::close (u_long)
-{
- this->decr_ref_count ();
-
- return 0;
-}
-
-
-int
-TAO_DIOP_Connection_Handler::add_handler_to_cache (void)
-{
- ACE_INET_Addr addr;
-
- // Get the peername.
- if (this->peer ().get_remote_addr (addr) == -1)
- return -1;
-
- // Construct an DIOP_Endpoint object
- TAO_DIOP_Endpoint endpoint (addr,
- 0);
-
- // Construct a property object
- TAO_Base_Connection_Property prop (&endpoint);
-
- // Add the handler to Cache
- return this->orb_core ()->connection_cache ().cache_handler (&prop,
- this);
-}
-
-// @@ Frank: Hopefully this isn't needed
-/*
-int
-TAO_DIOP_Connection_Handler::process_listen_point_list (
- DIOP::ListenPointList &listen_list)
-{
- // Get the size of the list
- CORBA::ULong len = listen_list.length ();
-
- for (CORBA::ULong i = 0; i < len; ++ i)
- {
- DIOP::ListenPoint listen_point = listen_list[i];
- ACE_INET_Addr addr (listen_point.port,
- listen_point.host.in ());
-
-
- // Construct an DIOP_Endpoint object
- TAO_DIOP_Endpoint endpoint (addr,
- 0);
-
- // Construct a property object
- TAO_Base_Connection_Property prop (&endpoint);
-
- // Mark the connection as bidirectional
- prop.set_bidir_flag (1);
-
- // The property for this handler has changed. Recache the
- // handler with this property
- int retval = this->recache_handler (&prop);
- if (retval == -1)
- return retval;
-
- // Make the handler idle and ready for use
- this->make_idle ();
- }
-
- return 0;
-}
-*/
-
-int
-TAO_DIOP_Connection_Handler::handle_input (ACE_HANDLE h)
-{
- return this->handle_input_i (h);
-}
-
-
-int
-TAO_DIOP_Connection_Handler::handle_input_i (ACE_HANDLE,
- ACE_Time_Value *max_wait_time)
-{
- this->refcount_++;
-
- // Call the transport read the message
- int result = this->transport_.read_process_message (max_wait_time);
-
- // Now the message has been read
- if (result == -1 && TAO_debug_level > 0)
- {
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("TAO (%P|%t) - %p\n"),
- ACE_TEXT ("DIOP_Connection_Handler::read_message \n")));
-
- }
-
- // The upcall is done. Bump down the reference count
- --this->refcount_;
- if (this->refcount_ == 0)
- this->decr_ref_count ();
-
- if (result == -1)
- return result;
- else if (result == 0)
- // Requires another call to handle_input ()
- return 1;
-
- return 0;
-}
-
-// @@ Frank: From DIOP_Connect.cpp
-int
-TAO_DIOP_Connection_Handler::handle_cleanup (void)
-{
- // 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);
- }
-
- return 0;
-}
-
-
-
-
-// ****************************************************************
-
-#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
-
-template class ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_NULL_SYNCH>;
-
-#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
-
-#pragma instantiate ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_NULL_SYNCH>
-
-#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */