summaryrefslogtreecommitdiff
path: root/ACE/TAO/orbsvcs/orbsvcs/FtRtEvent/EventChannel/Fault_Detector_T.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/TAO/orbsvcs/orbsvcs/FtRtEvent/EventChannel/Fault_Detector_T.cpp')
-rw-r--r--ACE/TAO/orbsvcs/orbsvcs/FtRtEvent/EventChannel/Fault_Detector_T.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/ACE/TAO/orbsvcs/orbsvcs/FtRtEvent/EventChannel/Fault_Detector_T.cpp b/ACE/TAO/orbsvcs/orbsvcs/FtRtEvent/EventChannel/Fault_Detector_T.cpp
new file mode 100644
index 00000000000..4669b5331a4
--- /dev/null
+++ b/ACE/TAO/orbsvcs/orbsvcs/FtRtEvent/EventChannel/Fault_Detector_T.cpp
@@ -0,0 +1,66 @@
+
+// $Id$
+
+#include "ace/INET_Addr.h"
+#include "ace/os_include/os_netdb.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+template <class ACCEPTOR, class CONNECTOR, class DETECTION_HANDLER>
+Fault_Detector_T<ACCEPTOR, CONNECTOR, DETECTION_HANDLER>::Fault_Detector_T()
+{
+}
+
+template <class ACCEPTOR, class CONNECTOR, class DETECTION_HANDLER>
+Fault_Detector_T<ACCEPTOR, CONNECTOR, DETECTION_HANDLER>::~Fault_Detector_T()
+{
+}
+
+
+template <class ACCEPTOR, class CONNECTOR, class DETECTION_HANDLER>
+int
+Fault_Detector_T<ACCEPTOR, CONNECTOR, DETECTION_HANDLER>::init_acceptor()
+{
+ typename CONNECTOR::PEER_ADDR listen_addr;
+ if (acceptor_.open(listen_addr, &reactor_task_.reactor_) != 0)
+ ACE_ERROR_RETURN((LM_ERROR, "Connot open acceptor\n"), -1);
+
+ if (acceptor_.acceptor().get_local_addr(listen_addr) !=0)
+ ACE_ERROR_RETURN((LM_ERROR, "Connot get local addr\n"), -1);
+
+ ACE_DEBUG((LM_DEBUG, "listening at %s:%d\n", listen_addr.get_host_name(),
+ listen_addr.get_port_number()));
+ ACE_TCHAR tcharbuf [MAXHOSTNAMELEN];
+ listen_addr.addr_to_string(tcharbuf, MAXHOSTNAMELEN, 0);
+ char* buf = CORBA::string_dup(ACE_TEXT_ALWAYS_CHAR(tcharbuf));
+ location_.length(1);
+ location_[0].id = buf;
+ return 0;
+}
+
+template <class ACCEPTOR, class CONNECTOR, class DETECTION_HANDLER>
+int
+Fault_Detector_T<ACCEPTOR, CONNECTOR, DETECTION_HANDLER>::connect(const FTRT::Location& location)
+{
+ if (location.length() == 0)
+ return -1;
+
+ typename CONNECTOR::PEER_ADDR prev_addr(location[0].id);
+
+ DETECTION_HANDLER* handler = 0;
+ ACE_NEW_RETURN(handler, DETECTION_HANDLER(listener_), 0) ;
+
+ handler->reactor(&reactor_task_.reactor_);
+ ACE_DEBUG((LM_DEBUG, "connecting to %s\n", location[0].id.in()));
+
+ int result = connector_.connect(handler->peer(), prev_addr);
+
+ if (result == 0)
+ handler->open(this);
+ else
+ handler->close();
+
+ return result ;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL