//Editor-Info: -*- C++ -*-
//
//Subject: TOVE/CC
//
//File: dp.h
//
//Version: $Revision: 1.22 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/11/12 16:22:46 $
//
//Organisation:
//      University of Technology
// 
//Author:
//      Pasi Nummisalo
//
//Description:
//     
//
//Copyright:
//     University of Technology
//     Laboratory of Telecommunications and Multimedia 
//      
//Licence:
//     
//
//History:
//

#ifndef __CC_DP_H__
#define __CC_DP_H__

#include <typeinfo>
#include "trigger.h"
#include <list>
#include "cctypes.h"
#include "ccif.h"

class pfState;
class ccDpState;

class ccDp
{
    public:
        ccDp(ccDpState *dpState_ = 0);
        ~ccDp(void);
        ccDp(const ccDp &other_);

        const ccDp &operator = (const ccDp &other_);
        ccDp *cloneImplementation(void) const;
        
        bool isArmed(void) const;
        
        bool isEDP_N(void) const;
        bool isTDP_N(void) const;
        bool isEDP_R(void) const;
        bool isTDP_R(void) const;

        ccIf_TriggersType getAllowedTriggers(void) const;
        ccIf_TriggersType getActiveTriggers(void) const;

        void resetTriggerCount(void);
        void nextTrigger(void);
        bool anyTriggersLeft(void);
        bool triggerCriteriaMet(ccProtocol *protocol_) const;

        void fillTDPrequest(ccProtocol *protocol_,
                            toveinap_InitialDPArgType &initialDPArg_,
                            string &applicationContext_, 
                            string &address_);

        void fillEDPrequest(ccProtocol *protocol_,
                            toveinap_EventReportBCSMArgType &arg_);

        toveinap_TriggerTypeType getCurrentTriggerInapType(void) const;
        string getCurrentTriggerCriteria(void) const;

        toveinap_EventTypeBCSMType getInapType(void) const;
        string getType(void) const;    
        
        void setMonitorMode(toveinap_MonitorModeType monitorMode_);
        toveinap_MonitorModeType getMonitorMode(void) const;
        
        void setMessageType(string type_);
        string getMessageType(void) const;
        toveinap_MessageTypeType getInapMessageType(void) const;
        
        void addTrigger(const ccIf_TriggerType &trigger_);
        void deleteTrigger(const ccIf_TriggerType &trigger_);

        static string getNotificationStr(void);
        static string getRequestStr(void);
                               
    private:

        toveinap_MonitorModeType _monitorMode;
        toveinap_MessageTypeType _messageType;
        bool _TDP;
        
        typedef list< ccTrigger > listType;
        typedef listType::iterator listIterType;
        typedef listType::const_iterator listConstIterType;

        listType _triggers;
        listConstIterType _iter;
        
        ccDpState *_dpState;
        unsigned int _count;

};

#endif
