//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project
//
//File: nnilink.h
//
//Version: $Revision: 1.9 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/11/19 12:34:46 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//	Timo Pärnänen
//      Vesa-Matti Puro
//
//Description:
//
//
//Copyright:
//      Copyright 1999 Helsinki University of Technology
//      ALL RIGHTS RESERVED BETWEEN JANUARY 1996 AND JUNE 1999.
//
//Licence:
//
//
//History:
//
 
#ifndef __SAAL_NNILINK_H__
#define __SAAL_NNILINK_H__

#include "saallink.h"
#include "saal.h"
#include "protocol/nsscf/nsscfprotocol.h"

//
//Class: saalNNIlink
//

class saalNNIlink : public saalLink
{
    public:
        static  saalNNIlink *createATMNNIlink(
            pfId linkNumber_,
            int port_,
            int vpi_,
            int vci_,
            int bufferSize_ = SAAL_MAX_SDU_SIZE);
        
        static saalNNIlink *createUDPNNIlink(
            pfId linkNumber_,
            const string &hostname_,
            int localPort_,
            int remotePort_,
            int bufferSize_ = SAAL_MAX_SDU_SIZE);

        // Prototype
        static saalNNIlink *createPrototype(void);
        saalNNIlink *clonePrototype(pfId linkNumber_,
                                    int port_,
                                    int vpi_,
                                    int vci_);

        virtual ~saalNNIlink(void);

        void maalPROVINGindAct(void);
        void maalSTOP_PROVINGindAct(void);
        void maalREPORTindAct(nsscfLBC lbc_ = LBC_EMPTY,
                              nsscfUBC ubc_ = UBC_EMPTY,
                              nsscfReason reason_ = R_EMPTY,
                              nsscfPDU sscop_uu_ = nsscfINVALIDpdu);
  
        // SSCF for NNI parameters
        void setT1timeout(pfUlong msec_);
        void setT2timeout(pfUlong msec_);
        void setT3timeout(pfUlong msec_);
        void setN1(pfUlong count_);
        
        virtual pfConduit getConduit(void);
        virtual void connectProtocols(void);
        
    protected:
        saalNNIlink(void);
        saalNNIlink(const saalNNIlink &other_);

        virtual void setLinkNumber(pfId linkNumber_);
        void setNNIprotocols(void);
        
    private:
        nsscfProtocol *_nsscf;

        // This proxy is there to ensure that the protocol
        // implementation won't get deleted automatically by the
        // proxy as long as this instance of saalNNIlink lives.
        pfConduit _nsscfProxy;
};

#endif // __SAAL_NNILINK_H__
