//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project / MTP3 protocol 
//
//File: mtp3protocol.h
//
//Version: $Revision: 1.14 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/08/10 07:50:27 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Timo Pärnänen
//      Petteri Koponen
//
//Description:
//      Define MTP3 (Message Transfer Part 3) protocol class 
//      using mediator pattern. Protocol includes all functional
//      blocks as attributes.
//
//Copyright:
//
//
//Licence:
//
//
//History:

#ifndef __MTP3_PROTOCOL_H__
#define __MTP3_PROTOCOL_H__

#include "mtp3methodinterface.h"
#include "mtp3block_hmdc.h"
#include "mtp3block_hmdt.h"
#include "mtp3block_hmrt.h"

class ss7Configure;
class pfMessenger;

//
//Class: mtp3Protocol
//
//Pattern: Mediator
//          
//Description:
//    See file description.
//

class mtp3Protocol : public pfProtocol,
                     public mtp3MethodInterface
{
    public:
        static mtp3Protocol *createProtocol(ss7Configure &configure_);
        virtual ~mtp3Protocol(void);
        
        // neighboring levels. Note that these are asynchronous!
        virtual void toLevel2(pfMessenger *messenger_);
        virtual void toLevel4(pfMessenger *messenger_);
        
        // signalling message handling blocks        
        virtual void toHMDC(pfMessenger *messenger_);
        virtual void toHMDT(pfMessenger *messenger_);
        virtual void toHMRT(pfMessenger *messenger_);

        // These are used by configure transporter
        void connectSideAtoConduit(pfConduit &conduit_);
        void connectSideBtoConduit(pfConduit &conduit_);

    private:
        mtp3Protocol(ss7Configure &configure_);

        // signalling message handling blocks
        mtp3BlockHMDC _HMDC; 
        mtp3BlockHMDT _HMDT;
        mtp3BlockHMRT _HMRT;
};

#endif // __MTP3_PROTOCOL_H__
