//*************************************************************************** // // File: // // Module: MS SNMP Provider // // Purpose: // // Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved // //*************************************************************************** #if _MSC_VER >= 1100 template<> DllImportExport UINT AFXAPI HashKey (SnmpObjectIdentifierType &key) ; #else DllImportExport UINT HashKey (SnmpObjectIdentifierType &key) ; #endif #if _MSC_VER >= 1100 template<> DllImportExport BOOL AFXAPI CompareElements ( const SnmpObjectIdentifierType* pElement1, const SnmpObjectIdentifierType* pElement2 ) ; #else DllImportExport BOOL CompareElements ( SnmpObjectIdentifierType* pElement1, SnmpObjectIdentifierType* pElement2 ) ; #endif class VarBindObject { private: SnmpObjectIdentifier reply ; SnmpValue *value ; protected: public: VarBindObject ( const SnmpObjectIdentifier &replyArg , const SnmpValue &valueArg ) ; virtual ~VarBindObject () ; SnmpObjectIdentifier &GetObjectIdentifier () ; SnmpValue &GetValue () ; } ; class VarBindQueue { private: CList queue ; protected: public: VarBindQueue () ; virtual ~VarBindQueue () ; void Add ( VarBindObject *varBindObject ) ; VarBindObject *Get () ; VarBindObject *Delete () ; } ; class VarBindObjectRequest { private: BOOL repeatRequest ; VarBindQueue varBindResponseQueue ; SnmpObjectIdentifierType varBind ; SnmpObjectIdentifierType requested ; protected: public: VarBindObjectRequest ( const SnmpObjectIdentifierType &varBindArg ) ; VarBindObjectRequest ( const SnmpObjectIdentifierType &varBindArg , const SnmpObjectIdentifierType &requestedVarBindArg ) ; VarBindObjectRequest () ; virtual ~VarBindObjectRequest () ; const SnmpObjectIdentifierType &GetRequested () const ; const SnmpObjectIdentifierType &GetVarBind () const ; void AddQueuedObject ( VarBindObject *object ) ; VarBindObject *GetQueuedObject () ; VarBindObject *DeleteQueueudObject () ; void SetRequested ( const SnmpObjectIdentifierType &requestedArg ) ; void SetVarBind ( const SnmpObjectIdentifierType &varBindArg ) ; BOOL GetRepeatRequest () { return repeatRequest ; } void SetRepeatRequest ( BOOL repeatRequestArg = TRUE ) { repeatRequest = repeatRequestArg ; } } ; class GetNextOperation ; class DllImportExport SnmpAutoRetrieveOperation { friend GetNextOperation ; private: BOOL status ; GetNextOperation *operation ; protected: SnmpAutoRetrieveOperation (SnmpSession &snmp_session); virtual void ReceiveResponse() {} ; virtual void ReceiveRowResponse () {} ; virtual void ReceiveRowVarBindResponse( IN const ULONG &var_bind_index, IN const SnmpVarBind &requestVarBind , IN const SnmpVarBind &replyVarBind , IN const SnmpErrorReport &error) {} virtual void ReceiveVarBindResponse( IN const ULONG &var_bind_index, IN const SnmpVarBind &requestVarBind , IN const SnmpVarBind &replyVarBind , IN const SnmpErrorReport &error) {} virtual void ReceiveErroredVarBindResponse( IN const ULONG &var_bind_index, IN const SnmpVarBind &requestVarBind , IN const SnmpErrorReport &error) {} virtual LONG EvaluateNextRequest ( IN const ULONG &var_bind_index, IN const SnmpVarBind &requestVarBind , IN const SnmpVarBind &replyVarBind , IN SnmpVarBind &sendVarBind ) { return 0 ; } virtual void FrameTooBig() {} virtual void FrameOverRun() {} void DestroyOperation () ; public: virtual ~SnmpAutoRetrieveOperation() ; virtual void SendRequest ( IN SnmpVarBindList &scopeVarBindList , IN SnmpVarBindList &varBindList ); virtual void SendRequest ( IN SnmpVarBindList &varBindList ); void CancelRequest(); void ReceiveFrame(IN const SessionFrameId session_frame_id, IN const SnmpPdu &snmpPdu, IN const SnmpErrorReport &errorReport) {} ; virtual void SentFrame(IN const SessionFrameId session_frame_id, IN const SnmpErrorReport &error_report) {} ; void *operator()(void) const ; } ; class DllImportExport GetNextOperation : public SnmpGetNextOperation { private: ULONG m_RequestContainerLength ; VarBindObjectRequest **m_RequestContainer ; ULONG *m_RequestIndexContainer ; BOOL cancelledRequest ; SnmpObjectIdentifier minimumInstance ; SnmpAutoRetrieveOperation *operation ; void Cleanup () ; BOOL ProcessRow () ; void Send () ; protected: void ReceiveResponse () ; void ReceiveVarBindResponse ( IN const ULONG &var_bind_index, IN const SnmpVarBind &requestVarBind , IN const SnmpVarBind &replyVarBind , IN const SnmpErrorReport &error ) ; void ReceiveErroredVarBindResponse( IN const ULONG &var_bind_index, IN const SnmpVarBind &requestVarBind , IN const SnmpErrorReport &error ) ; void FrameTooBig() ; void FrameOverRun() ; void SentFrame( IN const SessionFrameId session_frame_id, IN const SnmpErrorReport &error_report ); public: GetNextOperation (IN SnmpSession &session, SnmpAutoRetrieveOperation &autoRetrieveOperation ) ; ~GetNextOperation () ; void SendRequest ( SnmpVarBindList &varBindList , SnmpVarBindList &startVarBindList ) ; void SendRequest ( SnmpVarBindList &varBindList ) ; void CancelRequest () ; void DestroyOperation () ; };