summaryrefslogtreecommitdiff
path: root/ACE/ASNMP/asnmp/wpdu.h
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/ASNMP/asnmp/wpdu.h')
-rw-r--r--ACE/ASNMP/asnmp/wpdu.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/ACE/ASNMP/asnmp/wpdu.h b/ACE/ASNMP/asnmp/wpdu.h
new file mode 100644
index 00000000000..7feec356bc8
--- /dev/null
+++ b/ACE/ASNMP/asnmp/wpdu.h
@@ -0,0 +1,84 @@
+/* -*-C++-*- */
+#ifndef WPDU_H_
+#define WPDU_H_
+//=============================================================================
+/**
+ * @file wpdu.h
+ *
+ * $Id$
+ *
+ * Adapter class. Converts a Pdu and GenTarget into a format
+ * that can be stuffed out a I/O port
+ *
+ *
+ * @author Michael R. MacFaden re-worked api
+ * @author use ACE APIPeter E Mellquist wrote original class snmpmsg
+ */
+//=============================================================================
+
+
+#include "ace/config-all.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "asnmp/asn1.h"
+#include "asnmp/pdu.h"
+#include "asnmp/target.h"
+
+// this is an adapter class, it peforms the following transformations
+// PDU / Target -> iovec buffer
+// iovec buffer -> PDU / Target
+struct snmp_pdu;
+/**
+ * @class wpdu
+ *
+ * @brief Implement an Adapter pattern between CMU SNMP and HP SNMP++
+ */
+class ASNMP_Export wpdu
+{
+public:
+
+ /// construct CMU data from HP SNMP++ objects
+ /// construct HP SNMP++ objects from raw buffer via CMU SNMP datatypes
+ wpdu(const Pdu& pdu, const UdpTarget& target);
+ wpdu(const iovec& buffer);
+ wpdu(); // same as using iovec?
+
+ ~wpdu();
+
+ /// constructor completed ok? rc = 1 else 0
+ int valid() const;
+
+ /// return raw data stream via CMU code
+ const iovec& get_buffer() const;
+
+ /// return HP SNMP++ pdu
+ int get_pdu(Pdu& pdu, snmp_version& version);
+
+ /// return community strptr
+ const unsigned char *get_community() const;
+
+private:
+ int convert_vb_to_smival( Vb &tempvb, SmiVALUE *smival );
+ int load_vbs(snmp_pdu *raw_pdu, const Pdu& pdu);
+ int restore_vbs(Pdu& pdu, const snmp_pdu *raw_pdu) const;
+ void free_smival_descriptor( SmiVALUE *smival );
+ static void copy_iovec(iovec& dest, const iovec& src);
+ int set_trap_info(snmp_pdu *raw_pdu, const Pdu& pdu) const;
+
+ /// raw format
+ iovec iovec_;
+
+ /// object construction state
+ int valid_flag_;
+
+ /// snmp version
+ snmp_version version_;
+
+ unsigned char community_name[MAX_COMM_STR_LEN];
+ unsigned long comm_len; // = MAX_COMM_STR_LEN;
+};
+
+#endif // WPDU_H_