//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project
//
//File: 
//
//Version: $Revision: 1.1 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/12/03 15:05:03 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//
//
//Description:
//
//
//Copyright:
//      Copyright 1999 Helsinki University of Technology
//      ALL RIGHTS RESERVED BETWEEN JANUARY 1996 AND JUNE 1999.
//
//Licence:
//
//
//History: 

#include "pf/conduit.h"
#include "pf/debug.h"

#include "protocol/cpcs/cpcsaadapter.h"

#include "protocol/gsmp/gsmpadjacencyprotocol.h"
#include "protocol/gsmp/gsmpprotocol.h"
#include "protocol/gsmp/gsmpfactory.h"
#include "protocol/gsmp/gsmpdefs.h"
#include "protocol/gsmp/gsmpprimitives.h"

#include "testconfigcontrol.h"

testConfigControl :: testConfigControl(void)
{
    return;
}

testConfigControl :: ~testConfigControl(void)
{
    return;
}

void testConfigControl :: sendSwitchConfigurationRequest(void)
{
    _gsmpConfig.sendSwitchConfigurationRequest();
    return;
}

void testConfigControl :: sendAllPortsConfigurationRequest(void)
{
    _gsmpConfig.sendAllPortsConfigurationRequest();
    return;
}

void testConfigControl :: setupGSMP(pfUlong port_, pfUlong vci_)
{
    pfId id = 1;

    pfConduit cpcsProxy =
        cpcsATMAdapter::createATMConnection(port_,
                                            0,
                                            vci_,
                                            GSMP_MTU);
    
    // GSMP protocol and Adjacency Protocol
    pfConduit gsmpProxy = gsmpProtocol::create();
    pfConduit adjacencyProxy = gsmpAdjacencyProtocol::create(port_);

    cpcsProxy.setId(id);
    adjacencyProxy.setId(id);
    gsmpProxy.setId(id);
    
    // Connect Conduits
    gsmpProxy.connectToA(adjacencyProxy);
    adjacencyProxy.connectToB(gsmpProxy);
    adjacencyProxy.connectToA(cpcsProxy);
    cpcsProxy.connectToA(adjacencyProxy);
    
    // Start Adjacency Protocol
    gsmpStartAdjacencyProtocol *transporter =
        gsmpStartAdjacencyProtocol::createGsmpStartAdjacencyProtocol();
    
    adjacencyProxy.accept(transporter);
    
    // Create a gsmpFactory
    gsmpFactory *factory = gsmpFactory::instance();
    factory->init(gsmpProxy);
    
    _gsmpConfig = factory->createConfigurationManagement(this);
    return;
}

swPortConfig *testConfigControl :: getPortConfig(pfUlong portNumber_)
{
    debugPfUlong("Get port config", portNumber_);
    return this;
}

void testConfigControl :: setSwitchName(const string& switchName_)
{
    debugString("Switch name", switchName_);
    return;
}

void testConfigControl :: setSwitchType(pfUlong switchType_)
{
    debugPfUlong("Switch type", switchType_);
    return;
}

void testConfigControl :: setFirmwareVersionNumber(pfUlong versionNumber_)
{
    debugPfUlong("Firmware version number", versionNumber_);
    return;
}

void testConfigControl :: setMinVPI(pfUlong VPI_)
{
    debugPfUlong("Min VPI", VPI_);
    return;
}

void testConfigControl :: setMaxVPI(pfUlong VPI_)
{
    debugPfUlong("Max VPI", VPI_);
    return;
}

void testConfigControl :: setMinVCI(pfUlong VCI_)
{
    debugPfUlong("Min VCI", VCI_);
    return;
}

void testConfigControl :: setMaxVCI(pfUlong VCI_)
{
    debugPfUlong("Max VCI", VCI_);
    return;
}
