AgentX++  2.0.5
agentx_pdu.h
Go to the documentation of this file.
1 /*_############################################################################
2  _##
3  _## agentx_pdu.h
4  _##
5  _##
6  _## AgentX++ 2
7  _## -------------------------------------
8  _## Copyright (C) 2000-2013 - Frank Fock
9  _##
10  _## Use of this software is subject to the license agreement you received
11  _## with this software and which can be downloaded from
12  _## http://www.agentpp.com
13  _##
14  _## This is licensed software and may not be used in a commercial
15  _## environment, except for evaluation purposes, unless a valid
16  _## license has been purchased.
17  _##
18  _##########################################################################*/
19 
20 #ifndef agentx_pdu_h_
21 #define agentx_pdu_h_
22 
23 #include <agent_pp/agent++.h>
24 #include <agent_pp/snmp_pp_ext.h>
25 #include <agent_pp/List.h>
26 
27 #include <agentx_pp/agentx_def.h>
28 #include <agentx_pp/agentx_peer.h>
29 
30 #ifdef AGENTPP_NAMESPACE
31 namespace Agentpp {
32 #endif
33 
34 class AGENTXPP_DECL AgentXOctets: public NS_SNMP OctetStr {
35 
36 public:
40  AgentXOctets(): OctetStr() { }
41 
45  AgentXOctets(const char* string): OctetStr(string) { }
46 
50  AgentXOctets(const unsigned char* string, unsigned long int size):
51  OctetStr(string, size) { }
52 
56  AgentXOctets(const AgentXOctets& octet): OctetStr((OctetStr)octet) { }
57 
61  virtual AgentXOctets& operator+=(const OctetStr&);
62 
66  virtual AgentXOctets& operator+=(const unsigned char);
67 
76  virtual void append(const unsigned char*, unsigned int);
77 
84  virtual void add_null_octets(const unsigned int);
85 
95  /*
96  virtual void encode_int(int, bool);
97  */
107  virtual void encode_int(u_int, bool);
108 
121  virtual unsigned int decode_int(u_int&, bool);
122 
135  /*
136  virtual int decode_sint(u_int&, bool);
137  */
147  virtual void encode_short(u_short, bool);
148 
161  virtual unsigned short decode_short(u_int&, bool);
162 
176  virtual void encode_oid(const Oidx&, bool, bool=FALSE);
177 
191  virtual Oidx decode_oid(u_int&, bool);
192 
210  virtual Oidx decode_oid(u_int&, bool, bool&);
211 
212 
222  virtual void encode_data(SnmpSyntax*, bool);
223 
240  virtual SnmpSyntax* decode_data(u_int&, u_short, bool);
241 
251  virtual void encode_string(const OctetStr&, bool);
252 
266  virtual OctetStr decode_string(u_int&, bool);
267  protected:
268 
269  static const Oidx* internet;
270 
271 };
272 
273 
274 
276 
277 public:
279 
286  AgentXRegion(const Oidx&);
287 
296  AgentXRegion(const Oidx&, const Oidx&);
297 
309  AgentXRegion(const Oidx&, unsigned char, unsigned int);
310 
314  AgentXRegion(const AgentXRegion&);
315 
316  virtual ~AgentXRegion() { }
317 
318  virtual int set(const Oidx&, const u_char, const u_int);
319  virtual bool is_range() const { return (subid > 0); }
320 
321  virtual void set_upper_bound(u_int u);
322  virtual u_int get_upper_bound();
323  virtual u_char get_subid() const { return subid; }
324  virtual void set_subid(u_char sid) { subid = sid; }
325 
326  virtual AgentXRegion& operator=(const AgentXRegion&);
327 
328  virtual bool operator<(const AgentXRegion&) const;
329  virtual bool operator>(const AgentXRegion&) const;
330  virtual bool operator==(const AgentXRegion&) const;
331 
332  virtual bool covers(const AgentXRegion&) const;
333  virtual bool overlaps(const AgentXRegion&) const;
334  virtual bool includes(const Oidx&) const;
335  virtual bool includes_excl(const Oidx&) const;
336 
337  virtual bool is_empty() const;
338 
339  void set_single(bool s) { single = s; }
340  bool is_single() const { return single; }
341 
348  Oidx get_lower() const { return range.lower; }
349 
350  Oidx& lower() { return range.lower; }
351 
358  Oidx get_upper() const { return range.upper; }
359 
360  Oidx& upper() { return range.upper; }
361 
368  void set_upper(const Oidx& o) { range.upper = o; }
369 
376  void set_lower(const Oidx& o) { range.lower = o; }
377 
378 protected:
379  OidxRange range;
380  u_char subid;
381  bool single;
382 };
383 
384 /*----------------------- class AgentXSearchRange-------------------*/
385 
395 
396  public:
401 
414  AgentXSearchRange(const Oidx&, const Oidx&, bool = FALSE);
415 
423 
430  AgentXSearchRange(const OidxRange&);
431 
435  virtual ~AgentXSearchRange();
436 
443  virtual AgentXSearchRange* clone() const;
444 
445  virtual AgentXSearchRange& operator=(const AgentXSearchRange&);
446 
455  virtual bool operator==(const AgentXSearchRange&) const;
456 
466  virtual bool operator<(const AgentXSearchRange&) const;
467 
477  virtual bool operator>(const AgentXSearchRange&) const;
478 
486  void set_include(bool inc) { include = inc; }
487 
497  virtual bool includes(const Oidx&) const;
498 
508  virtual bool includes_excl(const Oidx&) const;
509 
517  virtual bool is_lower_included() const { return include; }
518 
522  void no_upper_bound() { range.upper.clear(); }
523 
530  bool is_unbounded() { return (range.upper.len() == 0); }
531 
538  void set_reference(int ref) { reference = ref; }
539 
546  int get_reference() const { return reference; }
547 
554  Oidx get_lower() const { return range.lower; }
555 
562  Oidx get_upper() const { return range.upper; }
563 
564  protected:
565  OidxRange range;
566  bool include;
568 };
569 
570 #if !defined (AGENTXPP_DECL_TEMPL_LIST_AGENTXSEARCHRANGE)
571 #define AGENTXPP_DECL_TEMPL_LIST_AGENTXSEARCHRANGE
573 #endif
574 
575 class AGENTXPP_DECL AgentXPdu: public Pdux {
576 
577 public:
581  AgentXPdu();
591  AgentXPdu(bool, u_char);
592 
596  AgentXPdu(const AgentXPdu&);
597 
601  virtual Pdux* clone() const { return new AgentXPdu(*this); }
602 
607  virtual void set_version(u_char v) { version = v; }
608  virtual u_char get_version() const { return version; }
609 
613  virtual u_char get_flags() const { return flags; }
614  virtual void set_flags(const u_char f) { flags = f; }
615 
619  virtual u_int get_session_id() const { return session_id; }
620  virtual void set_session_id(const u_int i) { session_id = i; }
621 
625  virtual u_int get_transaction_id() const
626  { return (u_int)get_request_id(); }
627  virtual void set_transaction_id(const u_int i)
628  { set_request_id(i); }
629 
633  virtual u_int get_packet_id() const { return packet_id; }
634  virtual void set_packet_id(const u_int i) { packet_id = i; }
635 
639  virtual NS_SNMP OctetStr get_context() const { return context; }
640  virtual void set_context(const NS_SNMP OctetStr& s)
641  { context = s; }
642  virtual bool non_default_context()
643  { return (context.len()>0); }
644 
648  virtual u_char get_timeout() const { return timeout; }
649  virtual void set_timeout(const u_char c) { timeout = c; }
650 
654  virtual u_char get_priority() const { return priority; }
655  virtual void set_priority(const u_char c) { priority = c; }
656 
660  virtual u_char get_reason() const { return reason; }
661  virtual void set_reason(const u_char c) { reason = c; }
662 
666  virtual AgentXRegion get_region() const { return region; }
667  virtual int set_region(const Oidx& o, const int sid,
668  const u_long u)
669  { return region.set(o, sid, u); }
670  virtual void set_region(const AgentXRegion& r)
671  { region = r; }
672 
676  virtual int get_range_count() const
677  { return ranges.size(); }
678  AgentXSearchRange* range(const int i) { return ranges.getNth(i);}
679  virtual AgentXSearchRange get_range(const int i) const
680  { return *ranges.getNth(i); }
681  virtual void add_range(const AgentXSearchRange& r)
682  { ranges.add(r.clone()); }
683  virtual int trim_ranges(const int n)
684  { return ranges.trim(n); }
685  virtual void set_range(AgentXSearchRange* r, const int i)
686  { ranges.overwriteNth(i, r); }
687  virtual ListCursor<AgentXSearchRange> get_ranges() {
688  return ListCursor<AgentXSearchRange>(&ranges); }
689 
693  u_int get_non_repeaters() const { return get_error_status();}
694  void set_non_repeaters(const u_int i)
695  { set_error_status(i); }
697  set_error_status(get_error_status()+1); }
698 
702  virtual u_int get_max_repetitions() const {return get_error_index();}
703  virtual void set_max_repetitions(u_int i) { set_error_index(i); }
704 
708  /*
709  virtual u_int get_error_status()
710  { return (u_int)pdu.get_error_status(); }
711  virtual void set_error_status(u_int i) { pdu.set_error_status(i); }
712  */
716  /*
717  virtual u_int get_error_index()
718  { return (u_int)pdu.get_error_index(); }
719  virtual void set_error_index(u_int i) { pdu.set_error_index(i); }
720  */
721 
725  virtual time_t get_timestamp() const { return timestamp; }
726  virtual void set_timestamp(time_t t) { timestamp = t; }
727 
731  virtual time_t get_time() const { return sysUpTime; }
732  virtual void set_time(u_int i) { sysUpTime = i; }
733 
734  virtual bool network_byte_order() const { return byteOrder; }
735 
736  u_char get_agentx_type() const { return ax_type; }
737  void set_agentx_type(u_char t);
738 
739  Oidx get_id();
740  NS_SNMP OctetStr get_descr();
741 
745  virtual AgentXPeer* get_peer() { return peer; }
746  virtual void set_peer(AgentXPeer* p) { peer = p; }
747 
751  virtual AgentXPdu& operator=(const AgentXPdu&);
752 
759  virtual AgentXPdu& operator+=(const Vbx&);
760 
764  virtual bool operator<(const AgentXPdu&) const;
765  virtual bool operator==(const AgentXPdu&) const;
766  virtual bool operator>(const AgentXPdu&) const;
767 
771  virtual int encode(AgentXOctets&) const;
772  virtual int decode(AgentXOctets&);
773 
778  virtual void build_vbs_from_ranges();
779 
780 protected:
781 
782  virtual void copy_from(const AgentXPdu&);
783 
784  virtual void encode_header(AgentXOctets&, int) const;
785  virtual void encode_ranges(AgentXOctets&) const;
786  virtual void decode_ranges(AgentXOctets&, u_int&);
787  virtual void encode_region(AgentXOctets&,
788  const AgentXRegion&) const;
789  virtual AgentXRegion decode_region(AgentXOctets&, u_int&,
790  u_char) const;
791  virtual void encode_vbs(AgentXOctets&, Vbx*,
792  const int) const;
793  virtual bool decode_vbs(AgentXOctets&, u_int&);
794  virtual void encode_oids(AgentXOctets&, Vbx*,
795  const int) const;
796  virtual void decode_oids(AgentXOctets&, u_int&);
797 
798  static AgentXOctets null_octets(const int);
799 
800  u_char version;
801  u_int session_id;
802  u_int packet_id;
803 
804  u_char ax_type;
805  u_char flags;
806  NS_SNMP OctetStr context;
807  u_char timeout;
808  u_char priority;
809  u_char reason;
811 
813  /*
814  u_int non_repeaters;
815  u_int max_repetitions;
816  Pdux pdu;
817  */
818 
819  time_t timestamp;
820  u_int sysUpTime;
821 
822  bool byteOrder;
823 
825 
826 private:
827  void copy(const AgentXPdu&);
828 
829  int encode_open_pdu(AgentXOctets&) const;
830  void init();
831 };
832 
833 #ifdef AGENTPP_NAMESPACE
834 }
835 #endif
836 
837 
838 #endif
839