//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project / SIGIF
//
//File: sigprimitive.cpp
//
//Version: $Revision: 1.14 $
//
//State: $State: Exp $
//
//Date: $Date: 1999/03/08 07:28:25 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Jari Katajavuori
//      Sami Raatikainen
//
//Description:
//      SR added IE-copy in the copyVariable-method.
//
//Copyright:
//
//
//Licence:
//
//
//History: 
//

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

sigPrimitive :: sigPrimitive(void)
    : pfMessenger()
{
    return;
}

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


void sigPrimitive :: defineAALParameters(void)
{
    defineStorage(sigAALParametersStr);
    pfStorage &storage = (*this)[sigAALParametersStr];
    storage.defineInteger(sigAALP_TypeStr);
    storage.defineInteger(sigAALP_SubtypeStr);
    storage.defineInteger(sigAALP_CBRRateStr);
    storage.defineInteger(sigAALP_MultiplierStr);
    storage.defineInteger(sigAALP_SourceClockRecoveryStr);
    storage.defineInteger(sigAALP_ErrorCorrectionMethodStr);
    storage.defineInteger(sigAALP_DataTransferBlocksizeStr);
    storage.defineInteger(sigAALP_PartiallyFilledStr);
    storage.defineInteger(sigAALP_ForwardMaxSDUSizeStr);
    storage.defineInteger(sigAALP_BackwardMaxSDUSizeStr);
    storage.defineInteger(sigAALP_MIDRangeLowStr);
    storage.defineInteger(sigAALP_MIDRangeHighStr);
    storage.defineInteger(sigAALP_SSCSTypeStr);
    storage.defineInteger(sigAALP_UserDefinedInfoStr);

    // set defaults, AAL 5

    storage.setInteger(sigAALP_TypeStr, 5);
    storage.setInteger(sigAALP_ForwardMaxSDUSizeStr, 0x00A0);
    storage.setInteger(sigAALP_BackwardMaxSDUSizeStr, 0x00A0);
    storage.setInteger(sigAALP_SSCSTypeStr, 0);
    
    return;
}

void sigPrimitive :: defineATMTrafficDescriptor(void)
{
    defineStorage(sigATDStr);
    pfStorage &storage = (*this)[sigATDStr];
    storage.defineInteger(sigATD_ForwardPeakCellRateCLP0Str);
    storage.defineInteger(sigATD_BackwardPeakCellRateCLP0Str);
    storage.defineInteger(sigATD_ForwardPeakCellRateCLP1Str);
    storage.defineInteger(sigATD_BackwardPeakCellRateCLP1Str);
    storage.defineInteger(sigATD_ForwardSustainableCLP0Str);
    storage.defineInteger(sigATD_BackwardSustainableCLP0Str);
    storage.defineInteger(sigATD_ForwardSustainableCLP1Str);
    storage.defineInteger(sigATD_BackwardSustainableCLP1Str);
    storage.defineInteger(sigATD_ForwardMaxBurstSizeCLP0Str);
    storage.defineInteger(sigATD_BackwardMaxBurstSizeCLP0Str);
    storage.defineInteger(sigATD_ForwardMaxBurstSizeCLP1Str);
    storage.defineInteger(sigATD_BackwardMaxBurstSizeCLP1Str);
    storage.defineBoolean(sigATD_BestEffortStr);
    storage.defineBoolean(sigATD_TrafficManagementOptionsStr);
    storage.defineBoolean(sigATD_TaggingBackwardStr);
    storage.defineBoolean(sigATD_TaggingForwardStr);
    
    // set defaults, combination "best effort"
 
    storage.setInteger(sigATD_ForwardPeakCellRateCLP1Str, 0x0563B7); 
    storage.setInteger(sigATD_BackwardPeakCellRateCLP1Str, 0x0563B7);
    storage.setBooleanTrue(sigATD_BestEffortStr);
    
    return;
}

void sigPrimitive :: defineBroadbandBearerCapability(void)
{
    defineStorage(sigBroadbandBearerCapabilityStr);
    pfStorage &storage = (*this)[sigBroadbandBearerCapabilityStr];
    storage.defineInteger(sigBBC_BearerClassStr);
    storage.defineInteger(sigBBC_TrafficTypeStr);
    storage.defineInteger(sigBBC_TimingRequirementsStr);
    storage.defineInteger(sigBBC_SusceptibilityToClippingStr);
    storage.defineInteger(sigBBC_UserPlaneConnectionConfigurationStr);

    // set defaults
    storage.setInteger(sigBBC_BearerClassStr, B0001_0000); //BCOB-X
    storage.setInteger(sigBBC_TrafficTypeStr, 0); // No ind
    storage.setInteger(sigBBC_TimingRequirementsStr, 0); // No ind
    storage.setInteger(sigBBC_SusceptibilityToClippingStr, 0); // No clip
    // point-to-point
    storage.setInteger(sigBBC_UserPlaneConnectionConfigurationStr, 0);

    return;
}

void sigPrimitive :: defineBroadbandLowLayerInfo(void)
{
    defineStorage(sigBroadbandLowLayerInfoStr);
    pfStorage &storage = (*this)[sigBroadbandLowLayerInfoStr];
    storage.defineInteger(sigBLLI_Layer1UserInfoStr);
    storage.defineInteger(sigBLLI_Layer2UserInfoStr);
    storage.defineInteger(sigBLLI_Layer2ModeStr);
    storage.defineInteger(sigBLLI_WindowSizeStr);
    storage.defineInteger(sigBLLI_Layer2ProtocolInfoStr);
    storage.defineInteger(sigBLLI_Layer3UserInfoStr);
    storage.defineInteger(sigBLLI_Layer3ModeStr);
    storage.defineInteger(sigBLLI_DefaultPacketSizeStr);
    storage.defineInteger(sigBLLI_PacketWindowSizeStr);
    storage.defineInteger(sigBLLI_Layer3ProtocolInfoStr);
    storage.defineInteger(sigBLLI_IPIStr);
    storage.defineInteger(sigBLLI_OUIStr);
    storage.defineInteger(sigBLLI_PIDStr);

    // set defaults
    storage.setInteger(sigBLLI_Layer1UserInfoStr, 0);
    storage.setInteger(sigBLLI_Layer2UserInfoStr, 0);
    // ++TODO++ This is a hard coding for atmsigd !
    storage.setInteger(sigBLLI_Layer3UserInfoStr, B0001_0000); 
    storage.setInteger(sigBLLI_Layer3ProtocolInfoStr, 0x3C);

    return;
}

void sigPrimitive :: defineCalledPartyNumber(void)
{
    defineStorage(sigCalledPartyNumberStr);
    pfStorage &storage = (*this)[sigCalledPartyNumberStr];
    storage.defineInteger(sigCalledPartyNumber_TypeStr);
    storage.defineInteger(sigCalledPartyNumber_PlanStr);
    storage.defineString(sigCalledPartyNumber_DigitsStr);

    // set defaults
    storage.setInteger(sigCalledPartyNumber_TypeStr, UnknownType);
    storage.setInteger(sigCalledPartyNumber_PlanStr, NSAPAddressingPlan);
 
    return;
}

void sigPrimitive :: defineCallingPartyNumber(void)
{
    defineStorage(sigCallingPartyNumberStr);
    pfStorage &storage = (*this)[sigCallingPartyNumberStr];
    storage.defineInteger(sigCalledPartyNumber_TypeStr);
    storage.defineInteger(sigCalledPartyNumber_PlanStr);
    storage.defineString(sigCalledPartyNumber_DigitsStr);

    // set defaults

    storage.setInteger(sigCalledPartyNumber_TypeStr, UnknownType);
    storage.setInteger(sigCalledPartyNumber_PlanStr, NSAPAddressingPlan);

    return;
}

void sigPrimitive :: defineCause(void)
{
    defineStorage(sigCauseStr);
    pfStorage &storage = (*this)[sigCauseStr];
    storage.defineInteger(sigCause_LocationStr);
    storage.defineInteger(sigCause_ClassStr);
    storage.defineInteger(sigCause_ValueStr);

    // set defaults
    storage.setInteger(sigCause_LocationStr, B0000_0001); 

    return;
}

void sigPrimitive :: defineConnectionIdentifier(void)
{
    defineStorage(sigConnectionIdentifierStr);
    pfStorage &storage = (*this)[sigConnectionIdentifierStr];
    storage.defineInteger(sigCI_VPAssociatedSignallingStr);
    storage.defineInteger(sigCI_PreferredExclusiveStr);
    storage.defineInteger(sigCI_VPCIStr);
    storage.defineInteger(sigCI_VCIStr);

    // set defaults
    storage.setInteger(sigCI_VPAssociatedSignallingStr, B0000_0001);
    storage.setInteger(sigCI_PreferredExclusiveStr, B0000_0000);

    return;
}

void sigPrimitive :: defineQoSParameters(void)
{
    defineStorage(sigQoSParametersStr);
    pfStorage &storage = (*this)[sigQoSParametersStr];
    storage.defineInteger(sigQoS_ForwardStr);
    storage.defineInteger(sigQoS_BackwardStr);

    // set defaults
    storage.setInteger(sigQoS_ForwardStr, B0000_0000); // Unspecified class
    storage.setInteger(sigQoS_BackwardStr, B0000_0000); // Unspecified class

    return;
}
