//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project
//
//File: testing/testadapter/uni/unicodingprotocol.cpp
//
//Version: $Revision: 1.3 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/10/06 10:49:13 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Jussi Turunen
//
//Description:
//      This file contains a coding protocol similar in principle to
//      the one used in SSCOP testing. This one is however a bit more
//      complicated since this has to be able to send and receive UNI
//      Coord messages i.e. a state machine has to implemented. This
//      is done by adapting the unicoordprotocol state machine. 
//      
//       _____________
//      / testAdapter \    testadapter/adapter/msg_impl.h
//      ---------------
//             |
//       ______________    <-- taUpInputs
//      /codingProtocol\   testadapter/uni/unicodingprotocol.h
//      ----------------   <-- uaalUpInputs
//             |
//       ______________    <-- uaalDownInputs
//      /   UNI-SSCF   \   protocol/usscf/usscf.h
//      ----------------
//             |
//         Lower layers
//
//      codingprotcol has the implementation for a protocol similar to
//      unicoordprotocol. The protocol should implement functionality for
//      changing state (toXstate()) and sending messages (sendXpdu()).
//      Probably some miscellaneous methods will be implemented also.
//      NOTE! UNI PDU's arriving from the tester are encoded into
//      unitDATAreq's.
//
//
//
//Copyright:
//      Copyright 1999 Helsinki University of Technology
//      ALL RIGHTS RESERVED BETWEEN JANUARY 1996 AND JUNE 1999.
//
//Licence:
//
//
//History: 

#ifndef __UNI_UNICODINGPROTOCOL_H__
#define __UNI_UNICODINGPROTOCOL_H__

#include <typeinfo>
#include <list>
#include <string>

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

class uniCodingProtocol : public pfProtocol
{
    public:
        static pfConduit create(void);
        void changeToIdleState(void);
        pfUlong isValidPDUname(string identifier_);

    protected:
        uniCodingProtocol(void);
        virtual ~uniCodingProtocol(void);

    private:
        void initializePDUnameList(void);

        typedef list<string> pduNameList;
        typedef pduNameList::iterator pduNameListIterator; 
        pduNameList _pduNames;
};

#endif // __UNI_UNICODINGPROTOCOL_H__
