//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project / 
//
//File: codertest.cpp
//
//Version: $Revision: 1.9 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/09/04 15:22:04 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Sami Raatikainen
//
//Description:
//      Codertest modified based on the unitest created by TK.
//
//Copyright:
//      Copyright 1999 Helsinki University of Technology
//      ALL RIGHTS RESERVED BETWEEN JANUARY 1996 AND JUNE 1999.
//
//Licence:
//
//
//History:
//

#include <typeinfo>
#include "pf/bytes.h"
#include <string>
#include "pf/frame.h"
#include "pf/debug.h"
#include "protocol/bisup/bisuppducoders.h"
#include "bisupframecoding.h"
#include "uniframecoding.h"

void printUsage(string argv0_);
void bisup_decode_encode(pfFrame &frame_, pduCoder *testCoder);
void uni_decode_encode(pfFrame &frame1_, pduCoder *testCoder_);


main(int argc, char* argv[])
{
    debugOutputCout();

    if (argc == 2)
    {
        pfFrame frame;
        bisupPduCoder *pduCoder = 0;
        int i = argv[1][0];
        switch(i)
        {
            case '0': // testCoder
                makeTestPDU(frame);
                debugFrame("TESTFRAME created", frame);
                // decode_encode
                pduCoder = new testCoder;
                bisup_decode_encode(frame, pduCoder);
                break;

            case '1': // IAM
                makeIAM(frame);
                debugFrame("IAM pdu created", frame);
                // decode_encode
                pduCoder = new bisupIAMCoder;
                bisup_decode_encode(frame, pduCoder);
                break;

            case '2': // IAA
                makeIAA(frame);
                debugFrame("IAA pdu created", frame);
                // decode_encode
                pduCoder = new bisupIAACoder;
                bisup_decode_encode(frame, pduCoder);
                break;

            case '3': // IAR
                makeIAR(frame);
                debugFrame("IAR pdu created", frame);
                // decode_encode
                pduCoder = new bisupIARCoder;
                bisup_decode_encode(frame, pduCoder);
                break;

            case '4': // ANM
                makeANM(frame);
                debugFrame("ANM pdu created", frame);
                // decode_encode
                pduCoder = new bisupANMCoder;
                bisup_decode_encode(frame, pduCoder);
                break;

            case '5': // REL
                makeREL(frame);
                debugFrame("REL pdu created", frame);
                // decode_encode
                pduCoder = new bisupRELCoder;
                bisup_decode_encode(frame, pduCoder);
                break;

            case '6': //RLC
                makeRLC(frame);
                debugFrame("RLC pdu created", frame);
                // decode_encode
                pduCoder = new bisupRLCCoder;
                bisup_decode_encode(frame, pduCoder);
                break;


            case 'a': // Setup PDU
                // construct testframe
                makeUniFrameTNS_IE(frame);
                makeUniFrameCDS_IE(frame);
                makeUniFrameCDN_IE(frame);
                makeUniFrameCGS_IE(frame);
                makeUniFrameCGN_IE(frame);
                makeUniFrameBSC_IE(frame);
                makeUniFrameBLL_IE(frame); // 3th BLL
                makeUniFrameBLL_IE(frame); // 2nd BLL
                makeUniFrameBLL_IE(frame); // 1st BLL
                makeUniFrameBRI_IE(frame);
                makeUniFrameBBC_IE(frame);
                makeUniFrameBHL_IE(frame);
                makeUniFrameQOS_IE(frame);
                makeUniFrameCI_IE(frame);
                makeUniFrameATD_IE(frame);
                makeUniFrameAAL_IE(frame);
                makeUniFramePDUheader(B0000_0101, frame);
                debugFrame("Setup-pdu created", frame);
                // pduCoder = new uniSETUPCoder;
                uni_decode_encode(frame, pduCoder);
                break;
                
            default:
                printUsage(argv[0]);
                break;
        }
    }
    else 
    {
        printUsage(argv[0]);
    }
}

void bisup_decode_encode(pfFrame &frame1_, pduCoder *pduCoder_)
{
    pfMessenger *msg = bisupPduCoder::create(frame1_);
    pfFrame frame2;
    pduCoder_->encode(frame2, msg);
    debugFrame("Encoded pdu", frame2);
    return;
}

void uni_decode_encode(pfFrame &frame1_, pduCoder *pduCoder_)
{
    (void)frame1_;
    (void)pduCoder_;
    //pfMessenger *msg = uniPduCoder::create(frame1_);
    //pfFrame frame2;
    //pduCoder_->encode(frame2, msg);
    //debugFrame("Encoded pdu", frame2);            
    return;
}


void printUsage(string argv0_)
{
    string usage = "Usage: " + argv0_ + " [flag]";

    debugUser(usage);
    debugUser("1 <-> bisup - IAM");
    debugUser("2 <-> bisup - IAA");
    debugUser("3 <-> bisup - IAR");
    debugUser("4 <-> bisup - ANM");
    debugUser("5 <-> bisup - REL");
    debugUser("6 <-> bisup - RLC");

    //debugUser("a <-> uni - Setup PDU");
   
    return;
}
