//Editor-Info: -*- C++ -*-
//
//Subject: TOVE-project / MTP3 protocol
//
//File: mtp3config.cpp
//
//Version: $Revision: 1.5 $
//
//Date: $Date: 1998/11/20 09:57:08 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications and Multimedia
//
//Author:
//      Timo Pärnänen
//
//Description:
//      See corresponding header file.
//
//Copyright:
//
//
//Licence:
//
//
//History:

#include "mtp3config.h"
#include "mtp3protocol.h"

const pfKey mtpConfigTransporter :: DIRECTION_A = 0;
const pfKey mtpConfigTransporter :: DIRECTION_B = 1;

mtpConfigTransporter :: mtpConfigTransporter(pfKey key_,
                                             pfConduit &conduit_,
                                             bool direction_)
    : pfTransporter(),
      _conduit(conduit_),
      _direction(direction_)
{
    setAcceptMethodToSynchronous();
    conduit_.setId(key_);
    _key = key_;
    return;
}

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

mtpConfigTransporter
mtpConfigTransporter :: createConfigSideA(pfKey key_, pfConduit &conduit_)
{
    mtpConfigTransporter newTransporter(key_, conduit_, DIRECTION_A);
    return newTransporter;
}

mtpConfigTransporter
mtpConfigTransporter :: createConfigSideB(pfKey key_, pfConduit &conduit_)
{
    mtpConfigTransporter newTransporter(key_, conduit_, DIRECTION_B);
    return newTransporter;
}

void mtpConfigTransporter :: atProtocol(pfProtocol *const protocol_, pfState *)
{
    //protocol_->receivingTrace(this);
    pfInstallTransporter installer= 
        pfInstallTransporter::createInstallTransporter(_conduit);
    
    installer.setKey(_key);
    installer.useThisKey();
    
    mtp3Protocol *protocol = dynamic_cast<mtp3Protocol *>(protocol_);
    assert(protocol != 0);
    
    if (_direction == DIRECTION_A)
    {
        protocol->toA(&installer);
        protocol->connectSideAtoConduit(_conduit);
    }
    else
    {
        protocol->toB(&installer);
        protocol->connectSideBtoConduit(_conduit);
    }
    return;
}
