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

SNMP编程

开发平台:

Visual C++

  1. /*_############################################################################
  2.   _## 
  3.   _##  eventlist.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. /*===================================================================
  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:
  48.         Tom Murray
  49.       LANGUAGE:
  50.         ANSI C++
  51.       OPERATING SYSTEMS:
  52.         DOS/WINDOWS 3.1
  53.         BSD UNIX
  54.       DESCRIPTION:
  55.         Queue for holding all event sources (snmp messages, user
  56.         defined input sources, user defined timeouts, etc)
  57.       COMPILER DIRECTIVES:
  58.         UNIX - For UNIX build
  59. =====================================================================*/
  60. // $Id: eventlist.h 287 2007-03-22 22:37:09Z katz $
  61. #ifndef _EVENTLIST
  62. #define _EVENTLIST
  63. //----[ includes ]-----------------------------------------------------
  64. #include <limits.h>
  65. #include <sys/types.h> // NOTE: due to 10.10 bug, order is important
  66.                        //   in that all routines must include types.h
  67.                        //   and time.h in same order otherwise you
  68.                        //   will get conflicting definitions of
  69.                        //   "fd_set" resulting in link time errors.
  70. // CK Ng    added #ifdef WIN32
  71. #ifdef WIN32
  72. #include <time.h>
  73. #include <winsock.h>
  74. #else
  75. #if !(defined CPU && CPU == PPC603)
  76. #include <sys/time.h>  // time stuff and fd_set
  77. #endif
  78. #include <float.h>
  79. #endif
  80. #include "snmp_pp/reentrant.h"
  81. #ifdef SNMP_PP_NAMESPACE
  82. namespace Snmp_pp {
  83. #endif
  84. #define MAX_UINT32 MAXLONG
  85. class msec;
  86. class Pdu;
  87. //----[ CEvents class ]------------------------------------------------
  88. class DLLOPT CEvents: public SnmpSynchronized {
  89.   public:
  90.   // allow destruction of derived classes
  91.   virtual ~CEvents() {};
  92.   // find the next timeout
  93.   virtual int GetNextTimeout(msec &sendTime) = 0;
  94.   // set up parameters for select
  95.   virtual void GetFdSets(int &maxfds, fd_set &readfds, fd_set &writefds,
  96.    fd_set &exceptfds) = 0;
  97.   // return number of outstanding messages
  98.   virtual int GetCount() = 0;
  99.   // process events pending on the active file descriptors
  100.   virtual int HandleEvents(const int maxfds,
  101.    const fd_set &readfds,
  102.    const fd_set &writefds,
  103.    const fd_set &exceptfds) = 0;
  104.   // process any timeout events
  105.   virtual int DoRetries(const msec &sendtime) = 0;
  106.   // check to see if there is a termination condition
  107.   virtual int Done() = 0;
  108. };
  109. class DLLOPT CEventList: public SnmpSynchronized {
  110.   public:
  111.     CEventList() : m_head(0, 0, 0), m_msgCount(0), m_done(0) {};
  112.     ~CEventList();
  113.   // add an event source to the list
  114.   CEvents *AddEntry(CEvents *events);
  115.   // tell main_loop to exit after one pass
  116.   void SetDone() REENTRANT({ m_done += 1; });
  117.   // see if main loop should terminate
  118.   int GetDone()  { return m_done; };
  119.   // find the time of the next event that will timeout
  120.   int GetNextTimeout(msec &sendTime);
  121.   // set up paramters for select
  122.   void GetFdSets(int &maxfds, fd_set &readfds, fd_set &writefds,
  123.  fd_set &exceptfds);
  124.   // return number of outstanding messages
  125.   int GetCount() { return m_msgCount; };
  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.   // process any timeout events
  132.   int DoRetries(const msec &sendtime);
  133.   // check to see if there is a termination condition
  134.   int Done();
  135.   private:
  136.    class DLLOPT CEventListElt
  137.    {
  138.     public:
  139.      CEventListElt(CEvents *events,
  140.    CEventListElt *next,
  141.    CEventListElt *previous);
  142.      ~CEventListElt();
  143.      CEventListElt *GetNext() { return m_Next; }
  144.      CEvents *GetEvents() { return m_events; }
  145.     private:
  146.      CEvents *m_events;
  147.      class CEventListElt *m_Next;
  148.      class CEventListElt *m_previous;
  149.    };
  150.     CEventListElt m_head;
  151.     int m_msgCount;
  152.     int m_done;
  153. };
  154. #ifdef SNMP_PP_NAMESPACE
  155. } // end of namespace Snmp_pp
  156. #endif 
  157. #endif