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

SNMP编程

开发平台:

Visual C++

  1. /*_############################################################################
  2.   _## 
  3.   _##  eventlist.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. /*===================================================================
  30.   Copyright (c) 1999
  31.   Hewlett-Packard Company
  32.   ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS.
  33.   Permission to use, copy, modify, distribute and/or sell this software
  34.   and/or its documentation is hereby granted without fee. User agrees
  35.   to display the above copyright notice and this license notice in all
  36.   copies of the software and any documentation of the software. User
  37.   agrees to assume all liability for the use of the software; Hewlett-Packard
  38.   makes no representations about the suitability of this software for any
  39.   purpose. It is provided "AS-IS without warranty of any kind,either express
  40.   or implied. User hereby grants a royalty-free license to any and all
  41.   derivatives based upon this software code base.
  42.       E V E N T L I S T . H
  43.       CEventList  CLASS DEFINITION
  44.       COPYRIGHT HEWLETT PACKARD COMPANY 1999
  45.       INFORMATION NETWORKS DIVISION
  46.       NETWORK MANAGEMENT SECTION
  47.       DESIGN + AUTHOR:         Tom Murray
  48.       DESCRIPTION:
  49.         Queue for holding all event sources (snmp messages, user
  50.         defined input sources, user defined timeouts, etc)
  51. =====================================================================*/
  52. // $Id: eventlist.h 1541 2009-05-29 11:29:22Z katz $
  53. #ifndef _EVENTLIST
  54. #define _EVENTLIST
  55. //----[ includes ]-----------------------------------------------------
  56. #include <limits.h>
  57. #include <sys/types.h> // NOTE: due to 10.10 bug, order is important
  58.                        //   in that all routines must include types.h
  59.                        //   and time.h in same order otherwise you
  60.                        //   will get conflicting definitions of
  61.                        //   "fd_set" resulting in link time errors.
  62. #ifdef WIN32
  63. #include <time.h>
  64. #else
  65. #if !(defined CPU && CPU == PPC603)
  66. #include <sys/time.h>  // time stuff and fd_set
  67. #endif
  68. #include <float.h>
  69. #endif
  70. #include "snmp_pp/config_snmp_pp.h"
  71. #include "snmp_pp/reentrant.h"
  72. #ifdef SNMP_PP_NAMESPACE
  73. namespace Snmp_pp {
  74. #endif
  75. #define MAX_UINT32 MAXLONG
  76. class msec;
  77. class Pdu;
  78. //----[ CEvents class ]------------------------------------------------
  79. class DLLOPT CEvents: public SnmpSynchronized {
  80.   public:
  81.   // allow destruction of derived classes
  82.   virtual ~CEvents() {};
  83.   // find the next timeout
  84.   virtual int GetNextTimeout(msec &sendTime) = 0;
  85.   // set up parameters for select/poll
  86. #ifdef HAVE_POLL_SYSCALL
  87.   virtual int GetFdCount() = 0;
  88.   virtual bool GetFdArray(struct pollfd *readfds, int &remaining) = 0;
  89.   virtual int HandleEvents(const struct pollfd *readfds, const int fds) = 0;
  90. #else
  91.   virtual void GetFdSets(int &maxfds, fd_set &readfds, fd_set &writefds,
  92.    fd_set &exceptfds) = 0;
  93.   // process events pending on the active file descriptors
  94.   virtual int HandleEvents(const int maxfds,
  95.    const fd_set &readfds,
  96.    const fd_set &writefds,
  97.    const fd_set &exceptfds) = 0;
  98. #endif
  99.   // return number of outstanding messages
  100.   virtual int GetCount() = 0;
  101.   // process any timeout events
  102.   virtual int DoRetries(const msec &sendtime) = 0;
  103.   // check to see if there is a termination condition
  104.   virtual int Done() = 0;
  105. };
  106. class DLLOPT CEventList: public SnmpSynchronized {
  107.   public:
  108.     CEventList() : m_head(0, 0, 0), m_msgCount(0), m_done(0) {};
  109.     ~CEventList();
  110.   // add an event source to the list
  111.   CEvents *AddEntry(CEvents *events);
  112.   // tell main_loop to exit after one pass
  113.   void SetDone() REENTRANT({ m_done += 1; });
  114.   // see if main loop should terminate
  115.   int GetDone()  { return m_done; };
  116.   // find the time of the next event that will timeout
  117.   int GetNextTimeout(msec &sendTime);
  118. #ifdef HAVE_POLL_SYSCALL
  119.   int GetFdCount();
  120.   bool GetFdArray(struct pollfd *readfds, int &remaining);
  121.   int HandleEvents(const struct pollfd *readfds, const int fds);
  122. #else
  123.  // set up paramters for select
  124.   void GetFdSets(int &maxfds, fd_set &readfds, fd_set &writefds,
  125.  fd_set &exceptfds);
  126.   // process events pending on the active file descriptors
  127.   int HandleEvents(const int maxfds,
  128.    const fd_set &readfds,
  129.    const fd_set &writefds,
  130.    const fd_set &exceptfds);
  131. #endif
  132.   // return number of outstanding messages
  133.   int GetCount() { return m_msgCount; };
  134.   // process any timeout events
  135.   int DoRetries(const msec &sendtime);
  136.   // check to see if there is a termination condition
  137.   int Done();
  138.   private:
  139.    class DLLOPT CEventListElt
  140.    {
  141.     public:
  142.      CEventListElt(CEvents *events,
  143.    CEventListElt *next,
  144.    CEventListElt *previous);
  145.      ~CEventListElt();
  146.      CEventListElt *GetNext() { return m_Next; }
  147.      CEvents *GetEvents() { return m_events; }
  148.     private:
  149.      CEvents *m_events;
  150.      class CEventListElt *m_Next;
  151.      class CEventListElt *m_previous;
  152.    };
  153.     CEventListElt m_head;
  154.     int m_msgCount;
  155.     int m_done;
  156. };
  157. #ifdef SNMP_PP_NAMESPACE
  158. } // end of namespace Snmp_pp
  159. #endif 
  160. #endif