eventlistholder.h
上传用户:ets1996
上传日期:2014-09-30
资源大小:353k
文件大小:4k
源码类别:

SNMP编程

开发平台:

Visual C++

  1. /*_############################################################################
  2.   _## 
  3.   _##  eventlistholder.h  
  4.   _##
  5.   _##  SNMP++v3.2.22
  6.   _##  -----------------------------------------------
  7.   _##  Copyright (c) 2001-2007 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, Wed May  2 23:22:30 CEST 2007 
  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.   void SNMPGetFdSets(int &  maxfds,
  54.      fd_set & readfds,
  55.      fd_set & writefds,
  56.      fd_set & exceptfds);
  57.   //---------[ Main Loop ]------------------------------------------
  58.   /**
  59.    * Infinite loop which blocks when there is nothing to do and handles
  60.    * any events.
  61.    *
  62.    * @note If no messages are outstanding, select() is called with the
  63.    *       given timeout, so any async messages that are sent out later
  64.    *       are not processed until this select call returns.
  65.    */
  66.   void SNMPMainLoop(const int max_block_milliseconds = 0 /* = infinite */);
  67.   //---------[ Exit Main Loop ]---------------------------------------
  68.   // Force the SNMP Main Loop to terminate immediately
  69.   void SNMPExitMainLoop();
  70.   /**
  71.    * Block until an event shows up - then handle the event(s).
  72.    *
  73.    * @note If no messages are outstanding, select() is called with the
  74.    *       given timeout, so any async messages that are sent out later
  75.    *       are not processed until this select call returns.
  76.    */
  77.   int SNMPProcessEvents(const int max_block_milliseconds = 0 /* = infinite */);
  78.   //---------[ Process Pending Events ]-------------------------------
  79.   // Pull all available events out of their sockets - do not block
  80.   int SNMPProcessPendingEvents();
  81.   //---------[ Block For Response ]-----------------------------------
  82.   // Wait for the completion of an outstanding SNMP event (msg).
  83.   // Handle any other events as they occur.
  84.   int SNMPBlockForResponse(const unsigned long req_id,
  85.    Pdu &    pdu);
  86.  private:
  87.   CSNMPMessageQueue *m_snmpMessageQueue;  // contains all outstanding messages
  88.   CNotifyEventQueue *m_notifyEventQueue; // contains all sessions waiting for notifications
  89.   CEventList   m_eventList;  // contains all expected events
  90.   SnmpSynchronized      pevents_mutex;
  91. };
  92. #ifdef SNMP_PP_NAMESPACE
  93. } // end of namespace Snmp_pp
  94. #endif 
  95. #endif // _EVENTLISTHOLDER_H_