
module inap 
{

    // scp -> cc

    // types

    typedef sequence<octet,4> CallIDType;

    typedef sequence<octet,50> CalledPartyNumberType;

    typedef sequence<CalledPartyNumberType,3> DestinationRoutingAddressType;

    enum EventTypeBCSMType
    {
        origAttempt, // Not in standard
        origAttemptAuthorized,
        collectedInfo,
        analysedInformation,
        routeSelectFailure,
        oCalledPartyBusy,
        oNoAnswer,
        oAnswer,
        oMidCall,
        oDisconnect,
        oAbandon,
        termAttemptAuthorized,
        tBusy,
        tNoAnswer,
        tAnswer,
        tMidCall,
        tDisconnect,
        tAbandon,
        oTermSeized,
        oSuspended,
        tSuspended
    };

enum MonitorModeType
{
   interrupted,
   notifyAndContinue,
   transparent
};

struct BCSMEventType
{
   EventTypeBCSMType	eventTypeBCSM;
   MonitorModeType	monitorMode;
};

typedef sequence<BCSMEventType, 24> BCSMEventsType;

enum UnavailableNetworkResourceType{ unavailableResources,
    componentFailure, basicCallProcessingException, resourceStatusFailure,
    endUserFailure };

// Args

struct RequestReportBCSMEventArgType
{
   CallIDType callID;	
   BCSMEventsType bcsmEvents;
};

struct SelectRouteArgType
{
   CallIDType callID;
   DestinationRoutingAddressType destinationRoutingAddress;
};

struct ContinueArgType
{
   CallIDType callID;
};

// Exceptions

exception systemFailure
{
   UnavailableNetworkResourceType error_param;
};

exception parameterOutOfRange
{
};

exception missingParameter
{
};

//#pragma ID systemFailure "CS2:localValue:11"

// Interfaces

interface scpRequired
{
   void selectRoute(in SelectRouteArgType selectRouteArg)
	raises(systemFailure);

   void requestReportBCSMEvent(in RequestReportBCSMEventArgType
                               requestReportBCSMEventArg)
        raises(missingParameter, parameterOutOfRange, systemFailure);

   void continue(in ContinueArgType continueArg);

};

// --------------------------------------------------------
// cc -> scp

// Types

typedef long ASN1_INTEGER;
typedef ASN1_INTEGER ServiceKeyType;

enum MessageTypeType
{
   request,
   notification
};

enum DPAssignmentType
{
   individualLine,
   groupBased,
   officeBased
};

struct MiscCallInfoType
{
   MessageTypeType 	messageType;
   DPAssignmentType	dpAssignment;
};

enum TriggerTypeType
{
    trigger_featureActivation,
    trigger_verticalServiceCode,
    trigger_customizedAccess,
    trigger_customizedIntercom,
    trigger_emergencyService,
    trigger_aFR,
    trigger_sharedIOTrunk,
    trigger_offHookDelay,
    trigger_channelSetupPRI,
    trigger_tNoAnswer,
    trigger_tBusy,
    trigger_oCalledPartyBusy,
    trigger_oNoAnswer,
    trigger_originationAttemptAuthorized,
    trigger_oAnswer,
    trigger_oDisconnect,
    trigger_termAttemptAuthorized,
    trigger_tAnswer,
    trigger_tDisconnect
};

// Args

struct InitialDPArgType
{
   CallIDType 		 callID;
   ServiceKeyType 	 serviceKey;
   CalledPartyNumberType calledPartyNumber;
   MiscCallInfoType 	 miscCallInfo;
   TriggerTypeType       triggerType;
   EventTypeBCSMType	 eventTypeBCSM;
};

struct EventReportBCSMArgType
{
   CallIDType            callID;	
   EventTypeBCSMType 	 eventTypeBCSM;
   MiscCallInfoType 	 miscCallInfo;
};

// Exceptions

exception missingCustomerRecord {};

// Interface

interface scpSupported
{
   void initialDP(in InitialDPArgType initialDPArg)
        raises (missingCustomerRecord, systemFailure);

   void eventReportBCSM(in EventReportBCSMArgType eventReportBCSMArg);

};

}; // module

