00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef agentx_pdu_h_
00023 #define agentx_pdu_h_
00024
00025 #include <agent_pp/agent++.h>
00026 #include <agent_pp/snmp_pp_ext.h>
00027 #include <agent_pp/List.h>
00028
00029 #include <agentx_pp/agentx_def.h>
00030 #include <agentx_pp/agentx_peer.h>
00031
00032 #ifdef AGENTPP_NAMESPACE
00033 namespace Agentpp {
00034 #endif
00035
00036 class AGENTXPP_DECL AgentXOctets: public NS_SNMP OctetStr {
00037
00038 public:
00042 AgentXOctets(): OctetStr() { }
00043
00047 AgentXOctets(const char* string): OctetStr(string) { }
00048
00052 AgentXOctets(const unsigned char* string, unsigned long int size):
00053 OctetStr(string, size) { }
00054
00058 AgentXOctets(const AgentXOctets& octet): OctetStr((OctetStr)octet) { }
00059
00063 virtual AgentXOctets& operator+=(const OctetStr&);
00064
00068 virtual AgentXOctets& operator+=(const unsigned char);
00069
00078 virtual void append(const unsigned char*, unsigned int);
00079
00086 virtual void add_null_octets(const unsigned int);
00087
00097
00098
00099
00109 virtual void encode_int(u_int, boolean);
00110
00123 virtual unsigned int decode_int(u_int&, boolean);
00124
00137
00138
00139
00149 virtual void encode_short(u_short, boolean);
00150
00163 virtual unsigned short decode_short(u_int&, boolean);
00164
00178 virtual void encode_oid(const Oidx&, boolean, boolean=FALSE);
00179
00193 virtual Oidx decode_oid(u_int&, boolean);
00194
00212 virtual Oidx decode_oid(u_int&, boolean, boolean&);
00213
00214
00224 virtual void encode_data(SnmpSyntax*, boolean);
00225
00242 virtual SnmpSyntax* decode_data(u_int&, u_short, boolean);
00243
00253 virtual void encode_string(const OctetStr&, boolean);
00254
00268 virtual OctetStr decode_string(u_int&, boolean);
00269 protected:
00270
00271 static Oidx* internet;
00272
00273 };
00274
00275
00276
00277 class AGENTXPP_DECL AgentXRegion {
00278
00279 public:
00280 AgentXRegion() { }
00281
00288 AgentXRegion(const Oidx&);
00289
00298 AgentXRegion(const Oidx&, const Oidx&);
00299
00311 AgentXRegion(const Oidx&, unsigned char, unsigned int);
00312
00316 AgentXRegion(const AgentXRegion&);
00317
00318 virtual ~AgentXRegion() { }
00319
00320 virtual int set(const Oidx&, const u_char, const u_int);
00321 virtual boolean is_range() const { return (subid > 0); }
00322
00323 virtual void set_upper_bound(u_int u);
00324 virtual u_int get_upper_bound();
00325 virtual u_char get_subid() const { return subid; }
00326 virtual void set_subid(u_char sid) { subid = sid; }
00327
00328 virtual AgentXRegion& operator=(const AgentXRegion&);
00329
00330 virtual boolean operator<(const AgentXRegion&) const;
00331 virtual boolean operator>(const AgentXRegion&) const;
00332 virtual boolean operator==(const AgentXRegion&) const;
00333
00334 virtual boolean covers(const AgentXRegion&) const;
00335 virtual boolean overlaps(const AgentXRegion&) const;
00336 virtual boolean includes(const Oidx&) const;
00337 virtual boolean includes_excl(const Oidx&) const;
00338
00339 virtual boolean is_empty() const;
00340
00341 void set_single(boolean s) { single = s; }
00342 boolean is_single() const { return single; }
00343
00350 Oidx get_lower() const { return range.lower; }
00351
00352 Oidx& lower() { return range.lower; }
00353
00360 Oidx get_upper() const { return range.upper; }
00361
00362 Oidx& upper() { return range.upper; }
00363
00370 void set_upper(const Oidx& o) { range.upper = o; }
00371
00378 void set_lower(const Oidx& o) { range.lower = o; }
00379
00380 protected:
00381 OidxRange range;
00382 u_char subid;
00383 boolean single;
00384 };
00385
00386
00387
00396 class AGENTXPP_DECL AgentXSearchRange {
00397
00398 public:
00402 AgentXSearchRange();
00403
00416 AgentXSearchRange(const Oidx&, const Oidx&, boolean = FALSE);
00417
00424 AgentXSearchRange(const AgentXSearchRange&);
00425
00432 AgentXSearchRange(const OidxRange&);
00433
00437 virtual ~AgentXSearchRange();
00438
00445 virtual AgentXSearchRange* clone() const;
00446
00447 virtual AgentXSearchRange& operator=(const AgentXSearchRange&);
00448
00457 virtual int operator==(const AgentXSearchRange&) const;
00458
00468 virtual int operator<(const AgentXSearchRange&) const;
00469
00479 virtual int operator>(const AgentXSearchRange&) const;
00480
00488 void set_include(boolean inc) { include = inc; }
00489
00499 virtual int includes(const Oidx&) const;
00500
00510 virtual int includes_excl(const Oidx&) const;
00511
00519 virtual boolean is_lower_included() const { return include; }
00520
00524 void no_upper_bound() { range.upper.clear(); }
00525
00532 boolean is_unbounded() { return (range.upper.len() == 0); }
00533
00540 void set_reference(int ref) { reference = ref; }
00541
00548 int get_reference() const { return reference; }
00549
00556 Oidx get_lower() const { return range.lower; }
00557
00564 Oidx get_upper() const { return range.upper; }
00565
00566 protected:
00567 OidxRange range;
00568 boolean include;
00569 int reference;
00570 };
00571
00572 #if !defined (AGENTXPP_DECL_TEMPL_LIST_AGENTXSEARCHRANGE)
00573 #define AGENTXPP_DECL_TEMPL_LIST_AGENTXSEARCHRANGE
00574 AGENTXPP_DECL_TEMPL template class AGENTXPP_DECL List<AgentXSearchRange>;
00575 #endif
00576
00577 class AGENTXPP_DECL AgentXPdu: public Pdux {
00578
00579 public:
00583 AgentXPdu();
00593 AgentXPdu(boolean, u_char);
00594
00598 AgentXPdu(const AgentXPdu&);
00599
00603 virtual Pdux* clone() const { return new AgentXPdu(*this); }
00604
00609 virtual void set_version(u_char v) { version = v; }
00610 virtual u_char get_version() const { return version; }
00611
00615 virtual u_char get_flags() const { return flags; }
00616 virtual void set_flags(const u_char f) { flags = f; }
00617
00621 virtual u_int get_session_id() const { return session_id; }
00622 virtual void set_session_id(const u_int i) { session_id = i; }
00623
00627 virtual u_int get_transaction_id() const
00628 { return (u_int)get_request_id(); }
00629 virtual void set_transaction_id(const u_int i)
00630 { set_request_id(i); }
00631
00635 virtual u_int get_packet_id() const { return packet_id; }
00636 virtual void set_packet_id(const u_int i) { packet_id = i; }
00637
00641 virtual NS_SNMP OctetStr get_context() const { return context; }
00642 virtual void set_context(const NS_SNMP OctetStr& s)
00643 { context = s; }
00644 virtual boolean non_default_context()
00645 { return (context.len()>0); }
00646
00650 virtual u_char get_timeout() const { return timeout; }
00651 virtual void set_timeout(const u_char c) { timeout = c; }
00652
00656 virtual u_char get_priority() const { return priority; }
00657 virtual void set_priority(const u_char c) { priority = c; }
00658
00662 virtual u_char get_reason() const { return reason; }
00663 virtual void set_reason(const u_char c) { reason = c; }
00664
00668 virtual AgentXRegion get_region() const { return region; }
00669 virtual int set_region(const Oidx& o, const int sid,
00670 const u_long u)
00671 { return region.set(o, sid, u); }
00672 virtual void set_region(const AgentXRegion& r)
00673 { region = r; }
00674
00678 virtual int get_range_count() const
00679 { return ranges.size(); }
00680 AgentXSearchRange* range(const int i) { return ranges.getNth(i);}
00681 virtual AgentXSearchRange get_range(const int i) const
00682 { return *ranges.getNth(i); }
00683 virtual void add_range(const AgentXSearchRange& r)
00684 { ranges.add(r.clone()); }
00685 virtual int trim_ranges(const int n)
00686 { return ranges.trim(n); }
00687 virtual void set_range(AgentXSearchRange* r, const int i)
00688 { ranges.overwriteNth(i, r); }
00689 virtual ListCursor<AgentXSearchRange> get_ranges() {
00690 return ListCursor<AgentXSearchRange>(&ranges); }
00691
00695 u_int get_non_repeaters() const { return get_error_status();}
00696 void set_non_repeaters(const u_int i)
00697 { set_error_status(i); }
00698 void inc_non_repeaters() {
00699 set_error_status(get_error_status()+1); }
00700
00704 virtual u_int get_max_repetitions() const {return get_error_index();}
00705 virtual void set_max_repetitions(u_int i) { set_error_index(i); }
00706
00710
00711
00712
00713
00714
00718
00719
00720
00721
00722
00723
00727 virtual time_t get_timestamp() const { return timestamp; }
00728 virtual void set_timestamp(time_t t) { timestamp = t; }
00729
00733 virtual time_t get_time() const { return sysUpTime; }
00734 virtual void set_time(u_int i) { sysUpTime = i; }
00735
00736 virtual boolean network_byte_order() const { return byteOrder; }
00737
00738 u_char get_agentx_type() const { return ax_type; }
00739 void set_agentx_type(u_char t);
00740
00741 Oidx get_id();
00742 NS_SNMP OctetStr get_descr();
00743
00747 virtual AgentXPeer* get_peer() { return peer; }
00748 virtual void set_peer(AgentXPeer* p) { peer = p; }
00749
00753 virtual AgentXPdu& operator=(const AgentXPdu&);
00754
00761 virtual AgentXPdu& operator+=(const Vbx&);
00762
00766 virtual boolean operator<(const AgentXPdu&) const;
00767 virtual boolean operator==(const AgentXPdu&) const;
00768 virtual boolean operator>(const AgentXPdu&) const;
00769
00773 virtual int encode(AgentXOctets&) const;
00774 virtual int decode(AgentXOctets&);
00775
00780 virtual void build_vbs_from_ranges();
00781
00782 protected:
00783
00784 virtual void copy_from(const AgentXPdu&);
00785
00786 virtual void encode_header(AgentXOctets&, int) const;
00787 virtual void encode_ranges(AgentXOctets&) const;
00788 virtual void decode_ranges(AgentXOctets&, u_int&);
00789 virtual void encode_region(AgentXOctets&,
00790 const AgentXRegion&) const;
00791 virtual AgentXRegion decode_region(AgentXOctets&, u_int&,
00792 u_char) const;
00793 virtual void encode_vbs(AgentXOctets&, Vbx*,
00794 const int) const;
00795 virtual boolean decode_vbs(AgentXOctets&, u_int&);
00796 virtual void encode_oids(AgentXOctets&, Vbx*,
00797 const int) const;
00798 virtual void decode_oids(AgentXOctets&, u_int&);
00799
00800 static AgentXOctets null_octets(const int);
00801
00802 u_char version;
00803 u_int session_id;
00804 u_int packet_id;
00805
00806 u_char ax_type;
00807 u_char flags;
00808 NS_SNMP OctetStr context;
00809 u_char timeout;
00810 u_char priority;
00811 u_char reason;
00812 AgentXRegion region;
00813
00814 List<AgentXSearchRange> ranges;
00815
00816
00817
00818
00819
00820
00821 time_t timestamp;
00822 u_int sysUpTime;
00823
00824 boolean byteOrder;
00825
00826 AgentXPeer* peer;
00827
00828 private:
00829 void copy(const AgentXPdu&);
00830
00831 int encode_open_pdu(AgentXOctets&) const;
00832 void init();
00833 };
00834
00835 #ifdef AGENTPP_NAMESPACE
00836 }
00837 #endif
00838
00839
00840 #endif
00841