//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project
//
//File: unitestadapter.h
//
//Version: $Revision: 1.11 $
//
//State: $State: Exp $
//
//Date: $Date: 1999/01/25 13:09:01 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Jari Pusa
//
//Description:
//
//
//Copyright:
//
//
//Licence:
//
//
//History: 

#ifndef __UNI_UNITESTADAPTER_H__
#define __UNI_UNITESTADAPTER_H__

#include "pf/udpsocket.h"

#include "iface/sigif/sigdownprimitives.h"

#include "uniteststate.h"
#include "unitesttimeouts.h"

#define MAX_SDU_SIZE 100

class uniTestAdapter : public pfUDPsocket, public pfStorage
{
    public:
        static pfConduit createCommandConnection(
            string hostname_,
            int localPort_,
            int remotePort_,
            pfUlong sduSize_ = MAX_SDU_SIZE);
        
//        static pfConduit createSelfoperateAdapter(string sourceAddr_,
//                                                  string destAddr_);
//        static pfConduit createSelfoperateAdapter(string sourceAddr_);


	// mode_ parameter added for defining the type of connection
        static pfConduit createSelfoperateAdapter(string sourceAddr_,
                                                  string destAddr_,
                                                  pfUlong mode_ = FSR);
        static pfConduit createSelfoperateAdapter(string sourceAddr_, 
                                                  pfUlong mode_ = FSR);

        virtual ~uniTestAdapter(void);

        virtual void readAction(pfFrame &frame_, pfUlong code_);
        virtual void writeAction(pfUlong code_);
        
        void sendSETUPreq(void);
        void parseAndSendSETUPreq(pfFrame &frame_);
        void sendPROCEEDINGreq(pfStorage &storage_);
        void sendSETUPresp(pfStorage &storage_);        

        void sendADD_PARTYreq(void);
        void sendDROP_PARTYreq(void);
        
        void sendRELEASEreq(void);
        void sendRELEASEresp(pfStorage &storage_);

    protected:
        uniTestAdapter(pfUlong sduSize_);

        // different modes for operation with FORE, FSR
        void setOperatingMode(pfUlong mode_ = FSR);

    private:
        enum _modeList  
        {
            FSR = 0,
            FORE = 1
        };
        pfUlong _mode;
};

#endif // __UNI_UNITESTADAPTER_H__
