//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project
//
//File: gsmpconfigurationmanagement.h
//
//Version: $Revision: 1.10 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/12/10 10:26:59 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Harri Sunila
//
//Description:
//      gsmpConfigurationManagement allows user to send and receive GSMP
//      Configuration Management messages
//
//Copyright:
//      Copyright 1999 Helsinki University of Technology
//      ALL RIGHTS RESERVED BETWEEN JANUARY 1996 AND JUNE 1999.
//
//Licence:
//
//
//History: 

#ifndef __GSMP_GSMPCONFIGURATIONMANAGEMENT_H__
#define __GSMP_GSMPCONFIGURATIONMANAGEMENT_H__

class gsmpMessage;
class gsmpSwitchConfigurationResponseMessage;
class gsmpPortConfigurationResponseMessage;
class gsmpAllPortsConfigurationResponseMessage;

class swConfigControl;

#include "gsmpdefs.h"
#include "pf/adapter.h"
#include "gsmpstate.h"

class gsmpConfigurationManagement : public pfAdapter, public gsmpState
{
    public:
        gsmpConfigurationManagement(void);
        explicit gsmpConfigurationManagement(swConfigControl *configControl_);
        gsmpConfigurationManagement(const gsmpConfigurationManagement &other_);
        virtual ~gsmpConfigurationManagement(void);

        gsmpConfigurationManagement &operator=(
            const gsmpConfigurationManagement &other_);
        
        pfUlong sendSwitchConfigurationRequest(void);
        pfUlong sendPortConfigurationRequest(pfUlong port_);
        pfUlong sendAllPortsConfigurationRequest(void);

        // Act methods for the single state EFSA
        virtual void gsmpSwitchConfigurationResponseMessageAct(
            gsmpSwitchConfigurationResponseMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpPortConfigurationResponseMessageAct(
            gsmpPortConfigurationResponseMessage *message_,
            pfProtocol *protocol_);

        virtual void gsmpAllPortsConfigurationResponseMessageAct(
            gsmpAllPortsConfigurationResponseMessage *message_,
            pfProtocol *protocol_);

    private:
        void sendRequest(gsmpMessage *message_);

        swConfigControl *_configControl;
};

#endif // __GSMP_GSMPCONFIGURATIONMANAGEMENT_H__
