summaryrefslogtreecommitdiff
path: root/trunk/ACE/ASNMP/asnmp/transaction.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/ACE/ASNMP/asnmp/transaction.h')
-rw-r--r--trunk/ACE/ASNMP/asnmp/transaction.h83
1 files changed, 83 insertions, 0 deletions
diff --git a/trunk/ACE/ASNMP/asnmp/transaction.h b/trunk/ACE/ASNMP/asnmp/transaction.h
new file mode 100644
index 00000000000..d114bd40d1f
--- /dev/null
+++ b/trunk/ACE/ASNMP/asnmp/transaction.h
@@ -0,0 +1,83 @@
+/* -*-C++-*- */
+#ifndef TRANSACTION_
+#define TRANSACTION_
+//=============================================================================
+/**
+ * @file transaction.h
+ *
+ * $Id$
+ *
+ * @brief
+ *
+ * @author Michael R. MacFaden port to ACE / use Reactor pattern
+ */
+//=============================================================================
+
+
+#include "ace/Event_Handler.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "asnmp/target.h"
+#include "asnmp/pdu.h"
+#include "asnmp/transaction_result.h"
+#include "asnmp/wpdu.h" // cmu adapter class
+#include "ace/SOCK_Dgram.h"
+
+/**
+ * @class transaction
+ *
+ * @brief Used to manage the details of a particular transaction betwen
+ * two SNMP agents. Uses SnmpTarget class to implement retry/timeout
+ */
+class ASNMP_Export transaction : public ACE_Event_Handler
+
+{
+ int retry_counter_;
+ transaction_result * result_;
+
+public:
+ /// constructor
+ /// destructor
+ transaction(const Pdu& pdu, const UdpTarget& target, ACE_SOCK_Dgram& io);
+ transaction(ACE_SOCK_Dgram& io);
+ ~transaction();
+
+ /// begin polling for values
+ int run();
+ int run(transaction_result *r); // Async interface, with callback object
+
+ /// return pdu with result from agent after run() is completed rc = 0
+ /// optionally get community str
+ int result(Pdu& pdu, char *comm_str = 0, ACE_INET_Addr *from_addr = 0);
+
+ /// called by reactor when data is ready to be read in from OS memory
+ /// used for resend in asynchronous run()
+ virtual int handle_input (ACE_HANDLE fd);
+ virtual int handle_timeout (const ACE_Time_Value &, const void *);
+
+ /// transmit buffer command to network...
+ int send();
+
+ /// pre: handle_input called
+ /// retrieve the sender's from address from the last pkt
+ const ACE_INET_Addr& get_from_addr() const;
+
+ /// Return session_ handle.
+ ACE_HANDLE get_handle () const;
+
+private:
+ /// disallow copy construction
+ transaction(const transaction&);
+
+ wpdu wp_; // wire pdu
+ UdpTarget params_; // params
+ ACE_INET_Addr addr_; // to address
+ ACE_SOCK_Dgram session_; // io object
+ iovec receive_iovec_; // receive buffer
+ ACE_INET_Addr receive_addr_; // from address
+};
+
+#endif // TRANSACTION_