AgentX++  2.0.5
agentx_subagent.h
Go to the documentation of this file.
1 /*_############################################################################
2  _##
3  _## agentx_subagent.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_subagent_h_
21 #define agentx_subagent_h_
22 
23 
24 #include <agent_pp/mib.h>
25 #include <agentx_pp/agentx.h>
27 #include <agentx_pp/agentx_index.h>
28 
29 #ifdef AGENTPP_NAMESPACE
30 namespace Agentpp {
31 #endif
32 
33 
34 typedef enum {
42 
43 
44 typedef enum {
71 
73 
74 
75 class SubAgentXMib;
76 
77 /*--------------------- class AgentXSharedTable ----------------------*/
78 
100 class AGENTXPP_DECL AgentXSharedTable: public MibTable {
101  public:
106 
133  AgentXSharedTable(const Oidx&, const index_info*, unsigned int,
134  const Oidx*, SubAgentXMib*, const NS_SNMP OctetStr&);
135 
139  virtual ~AgentXSharedTable();
140 
155  MibTableRow* add_row(const Oidx&);
156 
165  void remove_row(const Oidx&);
166 
182  virtual MibTableRow* init_row(const Oidx&, Vbx*);
183 
192  virtual void new_index();
193 
201  virtual void any_index();
202 
203 
220  virtual bool allocate_index(const Oidx&);
221 
243  virtual void index_allocated(const Oidx&, int, int,
244  Vbx* vbs=0, u_int vbs_length=0);
245 
261  Oidx get_index_from_vbs(Vbx*, u_int);
262 
269  SubAgentXMib* get_subagent_mib() { return backReference; }
270 
284  void set_timeout(unsigned int t) { timeout = t; }
285 
294  unsigned int get_timeout() { return timeout; }
295 
299  virtual void clear();
300 
305  virtual void reinit();
306 
328  void set_index_strategy(agentx_index_strategy is)
329  { indexStrategy = is; }
330 
339  agentx_index_strategy get_index_strategy() { return indexStrategy; }
340 
341  protected:
342 
343  void get_index_value(NS_SNMP SmiUINT32, const Oidx&, Vbx& vb);
344  Vbx* create_index_vbs(const Oidx&);
345 
346  NS_SNMP OctetStr myContext;
347  Oidx* indexOIDs;
349  unsigned int timeout;
350 
352 };
353 
354 
355 /*------------------ class AgentXPendingIndex ------------------------*/
356 
369  public:
370 
372  packet_id(pid) { receiver = o; row_index = NULL; }
373  AgentXPendingMessage(u_int pid, AgentXSharedTable* o, Oidx* alloc_index):
374  packet_id(pid) { receiver = o; row_index = alloc_index; }
375 
377  { if (row_index) { delete row_index; } }
378 
379  u_int packet_id;
381  Oidx* row_index;
382 };
383 
384 
385 /*-------------------------- class SubAgentXMib -----------------------*/
386 
393 #if !defined (AGENTXPP_DECL_TEMPL_LIST_AGENTXPENDINGMESSAGE)
394 #define AGENTXPP_DECL_TEMPL_LIST_AGENTXPENDINGMESSAGE
396 #endif
397 
398 class AGENTXPP_DECL SubAgentXMib: public Mib {
399 
400  friend class AgentXResponse;
401 
402  public:
403 
407  SubAgentXMib();
408 
416  SubAgentXMib(const NS_SNMP OctetStr&);
417 
421  virtual ~SubAgentXMib();
422 
432  virtual bool init();
433 
445  virtual MibEntryPtr add(MibEntryPtr);
446 
460  virtual MibEntryPtr add_no_reg(MibEntryPtr);
461 
480  virtual MibEntry* add(const NS_SNMP OctetStr&, MibEntry*);
481 
503  virtual MibEntry* register_entry(const NS_SNMP OctetStr&,
504  MibEntry*,
505  u_int);
506 
526  virtual MibEntry* add_no_reg(const NS_SNMP OctetStr&, MibEntry*);
527 
554  virtual bool remove(const Oidx&);
555 
567  virtual bool remove_no_unreg(const Oidx&);
568 
597  virtual bool remove(const NS_SNMP OctetStr&, const Oidx&);
598 
599 
613  virtual bool remove_no_unreg(const NS_SNMP OctetStr&, const Oidx&);
614 
615 
619  virtual int open_session();
620 
626  virtual void reconnect();
627 
634  void set_default_priority(const u_char p)
635  { priority = p; }
636 
647 #ifndef STATIC_REQUEST_LIST
648  void set_request_list(AgentXRequestList*);
649 #else
650  static void set_request_list(AgentXRequestList*);
651 #endif
652 
669  virtual int notify(const NS_SNMP OctetStr&, const Oidx&,
670  Vbx*, int, unsigned int=0);
671 
678  static AgentXSlave* get_agentx() { return agentx; }
679 
688  virtual unsigned long ping_master();
689 
697  virtual void ping_received(const AgentXPdu&);
698 
721  virtual bool register_region(const NS_SNMP OctetStr&,
722  const AgentXRegion&,
723  u_int timeout,
724  bool,
725  AgentXSharedTable* t=0);
726 
739  virtual void registration_failed(const AgentXRegion&, int,
741 
752  virtual void registration_success(const AgentXRegion&,
754 
788  virtual u_int allocate_index(const NS_SNMP OctetStr&,
789  Vbx*, int,
790  AgentXSharedTable* t=0,
791  u_char indexType=0,
792  Oidx* rowIndex=0);
793 
822  virtual u_int deallocate_index(const NS_SNMP OctetStr&,
823  Vbx*, int,
824  AgentXSharedTable* table=0,
825  Oidx* rowIndex=0);
826 
854  virtual void index_allocated(u_int, u_int,
855  Vbx*, int, AgentXSharedTable*,
856  u_int, Oidx*);
857 
885  virtual void index_deallocated(u_int, u_int,
886  Vbx*, int,
888  u_int,
889  Oidx*) {}
890 
907  virtual bool add_agent_caps(const NS_SNMP OctetStr&,
908  const Oidx&,
909  const NS_SNMP OctetStr&);
910 
920  virtual void remove_agent_caps(const NS_SNMP OctetStr&,
921  const Oidx&);
922 
933  AgentXSession* get_session() { return session; }
934 
943  AgentXIndexDB* get_index_registry() { return indexRegistry; }
944 
945  protected:
946 
956  virtual AgentXSession* create_session();
957 
963  virtual void not_connected();
964 
988  virtual int find_next(MibContext*, const Oidx&, MibEntryPtr&,
989  Request* req, const int, Oidx& nextOid);
990 
997  virtual void do_process_request(Request*);
998 
1005  virtual void process_response(AgentXRequest*);
1006 
1013  virtual void synchronize_uptime(u_int);
1014 
1015 
1022  void remove_pending_messages(MibEntry*);
1023 
1024 
1025  AgentXPendingMessage* get_pending_message(u_int);
1026 
1030  virtual void init_response_pool();
1031 
1032 
1040  virtual void delete_request(Request* req);
1041 
1045  u_char priority;
1046 
1048 
1049 
1051  Synchronized pendingMessagesLock;
1052 #ifdef _THREADS
1053  QueuedThreadPool* responsePool;
1054 #endif
1055 };
1056 
1057 #ifdef AGENTPP_NAMESPACE
1058 }
1059 #endif
1060 
1061 
1062 #endif