//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project / 
//
//File: 
//
//Version: $Revision: 1.15 $
//
//State: $State: Exp $
//
//Date: $Date: 1999/03/08 07:45:01 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Sami Raatikainen
//
//Description:
//
//
//Copyright:
//      Copyright 1999 Helsinki University of Technology
//      ALL RIGHTS RESERVED BETWEEN JANUARY 1996 AND JUNE 1999.
//
//Licence:
//
//
//History: 

#include "niadapter.h"
#include "pf/error.h"
#include "pf/debug.h"

//#include "iface/sigif/sigdownprimitives.h"

//----------------------------------------------------------------------

niAdapter :: niAdapter(void)
    : pfProtocol()
{
    changeState(niAdapterState::instance());
    return;
}

niAdapter :: niAdapter(const niAdapter &other_)
    : pfProtocol(other_)
{
    debugUser("niAdapter created (copied)");
    return;
}

niAdapter :: ~niAdapter(void)
{
    debugUser("niAdapter deleted");
    return;
}

pfConduit niAdapter :: create(void)
{
    pfConduit newConduit(new niAdapter);
    return newConduit;
}

pfProtocol *niAdapter :: cloneImplementation(void) const
{
    debugUser("(cloneImplementation) creating new niAdapter");
    niAdapter *newAdapter = new niAdapter(*this);
    return newAdapter;
}

void niAdapter :: sendResponse(pfMessenger *msg_)
{
    toA(msg_);
    cout << "\n--  NIADAPTER, response sent " << endl;
    return;
}


//----------------------------------------------------------------------

niAdapterState *niAdapterState :: _only = 0;

niAdapterState *niAdapterState :: instance(void)
{    
    if (_only == 0)
    {
        _only = new niAdapterState;
        assert(_only != 0);
    }
    return _only;
}

niAdapterState :: niAdapterState(void)
    : pfState(),
      nniMessageInputs()
{
    return;
}

niAdapterState :: ~niAdapterState(void)
{
    _only = 0;
    return;
}

// from nniInputs
void niAdapterState :: nniIAMpduAct(nniIAMpdu *message_,
                                    pfProtocol *protocol_)
{
    cout << "\n--  NIADAPTER, received IAM: ";
    niAdapter *protocol = dynamic_cast<niAdapter *>(protocol_);
    protocol->sendResponse(message_);
    return;
}

void niAdapterState :: nniACMpduAct(nniACMpdu *message_,
                                    pfProtocol *protocol_)
{
    cout << "\n--  NIADAPTER, received ACM: ";
    niAdapter *protocol = dynamic_cast<niAdapter *>(protocol_);
    protocol->sendResponse(message_);
    return;
}

void niAdapterState :: nniANMpduAct(nniANMpdu *message_,
                                    pfProtocol *protocol_)
{
    cout << "\n--  NIADAPTER, received ANM: ";
    niAdapter *protocol = dynamic_cast<niAdapter *>(protocol_);
    protocol->sendResponse(message_);
    return;
}

void niAdapterState :: nniCPGpduAct(nniCPGpdu *message_,
                                    pfProtocol *protocol_)
{
    cout << "\n--  NIADAPTER, received CPG: ";
    niAdapter *protocol = dynamic_cast<niAdapter *>(protocol_);
    protocol->sendResponse(message_);
    return;
}

void niAdapterState :: nniIAApduAct(nniIAApdu *message_,
                                    pfProtocol *protocol_)
{
    cout << "\n--  NIADAPTER, received IAA: ";
    niAdapter *protocol = dynamic_cast<niAdapter *>(protocol_);
    protocol->sendResponse(message_);
    return;
}

void niAdapterState :: nniIARpduAct(nniIARpdu *message_,
                             pfProtocol *protocol_)
{
    cout << "\n--  NIADAPTER, received IAR: ";
    niAdapter *protocol = dynamic_cast<niAdapter *>(protocol_);
    protocol->sendResponse(message_);
    return;
}

void niAdapterState :: nniRELpduAct(nniRELpdu *message_,
                             pfProtocol *protocol_)
{
    cout << "\n--  NIADAPTER, received REL: ";
    niAdapter *protocol = dynamic_cast<niAdapter *>(protocol_);
    protocol->sendResponse(message_);
    return;
}

void niAdapterState :: nniRLCpduAct(nniRLCpdu *message_,
                             pfProtocol *protocol_)
{
    cout << "\n--  NIADAPTER, received RLC: ";
    niAdapter *protocol = dynamic_cast<niAdapter *>(protocol_);
    protocol->sendResponse(message_);
    return;
}


/*
void niAdapterState :: sigSETUPindAct(sigSETUPind *message_,
                                      pfProtocol *protocol_)
{
    cout << "\n--  NIADAPTER, received sigSETUPind: ";
    niAdapter *protocol = dynamic_cast<niAdapter *>(protocol_);
    THROW_IF_DYNAMIC_CAST_FAILED(protocol);
    sigSETUPreq *msg = new sigSETUPreq;
    msg->fetch(*message_);
    protocol->sendResponse(msg);
}



void niAdapterState :: sigPROCEEDINGindAct(sigPROCEEDINGind *message_,
                                           pfProtocol *protocol_)
{
    cout << "\n--  NIADAPTER, received sigPROCEEDINGind: ";
    niAdapter *protocol = dynamic_cast<niAdapter *>(protocol_);
    THROW_IF_DYNAMIC_CAST_FAILED(protocol);
    sigPROCEEDINGreq *msg = new sigPROCEEDINGreq;
    msg->fetch(*message_);
    protocol->sendResponse(msg);
}

void niAdapterState :: sigSETUPconfAct(sigSETUPconf *message_,
                                       pfProtocol *protocol_)
{
    cout << "\n--  NIADAPTER, received sigSETUPconf: ";
    niAdapter *protocol = dynamic_cast<niAdapter *>(protocol_);
    sigSETUPresp *msg = new sigSETUPresp;
    msg->fetch(*message_);
    protocol->sendResponse(msg);
}

void niAdapterState :: sigRELEASEindAct(sigRELEASEind *message_,
                                        pfProtocol *protocol_)
{
    cout << "\n--  NIADAPTER, received sigRELEASEind: ";
    niAdapter *protocol = dynamic_cast<niAdapter *>(protocol_);
    sigRELEASEreq *msg = new sigRELEASEreq;
    msg->fetch(*message_);
    protocol->sendResponse(msg);
}

void niAdapterState :: sigRELEASEconfAct(sigRELEASEconf *message_,
                                        pfProtocol *protocol_)
{
    cout << "\n--  NIADAPTER, received sigRELEASEconf: ";
    niAdapter *protocol = dynamic_cast<niAdapter *>(protocol_);
    sigRELEASEresp *msg = new sigRELEASEresp;
    msg->fetch(*message_);
    protocol->sendResponse(msg);
}
*/
