eventlistholder.h
上传用户:uncom666
上传日期:2020-03-30
资源大小:1426k
文件大小:4k
源码类别:

SNMP编程

开发平台:

Visual C++

  1. /*_############################################################################
  2.   _## 
  3.   _##  eventlistholder.h  
  4.   _##
  5.   _##  SNMP++v3.2.24
  6.   _##  -----------------------------------------------
  7.   _##  Copyright (c) 2001-2009 Jochen Katz, Frank Fock
  8.   _##
  9.   _##  This software is based on SNMP++2.6 from Hewlett Packard:
  10.   _##  
  11.   _##    Copyright (c) 1996
  12.   _##    Hewlett-Packard Company
  13.   _##  
  14.   _##  ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS.
  15.   _##  Permission to use, copy, modify, distribute and/or sell this software 
  16.   _##  and/or its documentation is hereby granted without fee. User agrees 
  17.   _##  to display the above copyright notice and this license notice in all 
  18.   _##  copies of the software and any documentation of the software. User 
  19.   _##  agrees to assume all liability for the use of the software; 
  20.   _##  Hewlett-Packard and Jochen Katz make no representations about the 
  21.   _##  suitability of this software for any purpose. It is provided 
  22.   _##  "AS-IS" without warranty of any kind, either express or implied. User 
  23.   _##  hereby grants a royalty-free license to any and all derivatives based
  24.   _##  upon this software code base. 
  25.   _##  
  26.   _##  Stuttgart, Germany, Fri May 29 22:35:14 CEST 2009 
  27.   _##  
  28.   _##########################################################################*/
  29. #ifndef _EVENTLISTHOLDER_H_
  30. #define _EVENTLISTHOLDER_H_
  31. //----[ includes ]-----------------------------------------------------
  32. #include "snmp_pp/config_snmp_pp.h"
  33. #include "snmp_pp/snmperrs.h"
  34. #include "snmp_pp/eventlist.h"
  35. #include "snmp_pp/reentrant.h"
  36. #ifdef SNMP_PP_NAMESPACE
  37. namespace Snmp_pp {
  38. #endif
  39. class CSNMPMessageQueue;
  40. class CNotifyEventQueue;
  41. class Pdu;
  42. class v3MP;
  43. class Snmp;
  44. typedef unsigned long Uint32;
  45. class DLLOPT EventListHolder
  46. {
  47.  public:
  48.   EventListHolder(Snmp *snmp_session);
  49.   ~EventListHolder() {};
  50.   CSNMPMessageQueue *&snmpEventList()   { return m_snmpMessageQueue; };
  51.   CNotifyEventQueue *&notifyEventList() { return m_notifyEventQueue; };
  52.   Uint32 SNMPGetNextTimeout();
  53. #ifdef HAVE_POLL_SYSCALL
  54.   int GetFdCount();
  55.   bool GetFdArray(struct pollfd *readfds, int &remaining);
  56. #endif
  57.   void SNMPGetFdSets(int &  maxfds,
  58.      fd_set & readfds,
  59.      fd_set & writefds,
  60.      fd_set & exceptfds);
  61.   //---------[ Main Loop ]------------------------------------------
  62.   /**
  63.    * Infinite loop which blocks when there is nothing to do and handles
  64.    * any events.
  65.    *
  66.    * @note If no messages are outstanding, select() is called with the
  67.    *       given timeout, so any async messages that are sent out later
  68.    *       are not processed until this select call returns.
  69.    */
  70.   void SNMPMainLoop(const int max_block_milliseconds = 0 /* = infinite */);
  71.   //---------[ Exit Main Loop ]---------------------------------------
  72.   // Force the SNMP Main Loop to terminate immediately
  73.   void SNMPExitMainLoop();
  74.   /**
  75.    * Block until an event shows up - then handle the event(s).
  76.    *
  77.    * @note If no messages are outstanding, select() is called with the
  78.    *       given timeout, so any async messages that are sent out later
  79.    *       are not processed until this select call returns.
  80.    */
  81.   int SNMPProcessEvents(const int max_block_milliseconds = 0 /* = infinite */);
  82.   //---------[ Process Pending Events ]-------------------------------
  83.   // Pull all available events out of their sockets - do not block
  84.   int SNMPProcessPendingEvents();
  85.   //---------[ Block For Response ]-----------------------------------
  86.   // Wait for the completion of an outstanding SNMP event (msg).
  87.   // Handle any other events as they occur.
  88.   int SNMPBlockForResponse(const unsigned long req_id,
  89.    Pdu &    pdu);
  90.  private:
  91.   CSNMPMessageQueue *m_snmpMessageQueue;  // contains all outstanding messages
  92.   CNotifyEventQueue *m_notifyEventQueue; // contains all sessions waiting for notifications
  93.   CEventList   m_eventList;  // contains all expected events
  94.   SnmpSynchronized      pevents_mutex;
  95. };
  96. #ifdef SNMP_PP_NAMESPACE
  97. } // end of namespace Snmp_pp
  98. #endif 
  99. #endif // _EVENTLISTHOLDER_H_