//Source file: mpcc_interfaces.idl
//Date:  14 February 2002
//Multi Party Call Control Interfaces for ETSI ES 201 915-4 v.1.2.1, Parlay 3.1
//Added enableNotifications() and disableNotifications() prestandard extensions
//that will be part of parlay 4.0


#ifndef __MPCC_INTERFACES_DEFINED
#define __MPCC_INTERFACES_DEFINED



#include "osa.idl"
#include "common_cc_data.idl"
#include "mpcc_data.idl"

module org {
	
	module csapi {
		
		module cc {
			
			module mpccs {

				interface IpAppMultiPartyCallControlManager ;
				interface IpMultiPartyCall ;
				interface IpAppMultiPartyCall ;
				interface IpCallLeg;
				interface IpAppCallLeg;
				
				
				
				enum TpAppMultiPartyCallBackRefType {

					P_APP_CALLBACK_UNDEFINED,
					P_APP_MULTIPARTY_CALL_CALLBACK,
					P_APP_CALL_LEG_CALLBACK,
					P_APP_CALL_AND_CALL_LEG_CALLBACK					
				};
				
				typedef sequence <IpAppCallLeg> TpAppCallLegRefSet;
				
				struct TpMultiPartyCallIdentifier {
					IpMultiPartyCall CallReference;
					TpSessionID CallSessionID;
				};
				
				
				typedef sequence <TpMultiPartyCallIdentifier> TpMultiPartyCallIdentifierSet;
				
				struct TpAppCallLegCallBack {
					IpAppMultiPartyCall AppMultiPartyCall;
					TpAppCallLegRefSet AppCallLegSet;
				};
				
				union TpAppMultiPartyCallBack switch(TpAppMultiPartyCallBackRefType) {
					case P_APP_MULTIPARTY_CALL_CALLBACK: IpAppMultiPartyCall AppMultiPartyCall;
					case P_APP_CALL_LEG_CALLBACK: IpAppCallLeg AppCallLeg;
					case P_APP_CALL_AND_CALL_LEG_CALLBACK: TpAppCallLegCallBack AppMultiPartyCallAndCallLeg;
					default: short Dummy;
				};
				
				
				
				
				struct TpCallLegIdentifier {
					IpCallLeg CallLegReference;
					
					TpSessionID CallLegSessionID;
				};
				
				
				typedef sequence <TpCallLegIdentifier> TpCallLegIdentifierSet;
				
				
				
				
				interface IpAppCallLeg : IpInterface {
					
					void eventReportRes (
						in TpSessionID callLegSessionID,	
						in TpCallEventInfo eventInfo	
						);
						
					
					void eventReportErr (
						in TpSessionID callLegSessionID,	
						in TpCallError errorIndication	
						);
						
					
					void attachMediaRes (
						in TpSessionID callLegSessionID	
						);
						
					
					void attachMediaErr (
						in TpSessionID callLegSessionID,	
						in TpCallError errorIndication	
						);
						
					
					void detachMediaRes (
						in TpSessionID callLegSessionID	
						);
						
					
					void detachMediaErr (
						in TpSessionID callLegSessionID,	
						in TpCallError errorIndication	
						);
						
					
					void getInfoRes (
						in TpSessionID callLegSessionID,	
						in TpCallLegInfoReport callLegInfoReport	
						);
						
					
					void getInfoErr (
						in TpSessionID callLegSessionID,	
						in TpCallError errorIndication	
						);
						
					
					void routeErr (
						in TpSessionID callLegSessionID,	
						in TpCallError errorIndication	
						);
						
					
					void superviseRes (
						in TpSessionID callLegSessionID,	
						in TpCallSuperviseReport report,	
						in TpDuration usedTime	
						);
						
					
					void superviseErr (
						in TpSessionID callLegSessionID,	
						in TpCallError errorIndication	
						);
						
					
					void callLegEnded (
						in TpSessionID callLegSessionID,	
						in TpReleaseCause cause	
						);
						
				};
				
				
				interface IpMultiPartyCallControlManager : IpService {
					
					TpMultiPartyCallIdentifier createCall (
						in IpAppMultiPartyCall appCall	
						)						
						raises (TpCommonExceptions, P_INVALID_INTERFACE_TYPE);
						
					
					TpAssignmentID createNotification (
						in IpAppMultiPartyCallControlManager appCallControlManager,	
						in TpCallNotificationRequest notificationRequest	
						)						
						raises (TpCommonExceptions, P_INVALID_CRITERIA, P_INVALID_INTERFACE_TYPE, P_INVALID_EVENT_TYPE);
						
					
					void destroyNotification (
						in TpAssignmentID assignmentID	
						)						
						raises (TpCommonExceptions, P_INVALID_ASSIGNMENT_ID);
						
					
					void changeNotification (
						in TpAssignmentID assignmentID,	
						in TpCallNotificationRequest notificationRequest	
						)						
						raises (TpCommonExceptions, P_INVALID_ASSIGNMENT_ID, P_INVALID_CRITERIA, P_INVALID_EVENT_TYPE);
						
					
					TpNotificationRequestedSet getNotification ()						
						raises (TpCommonExceptions);
						
					
					TpAssignmentID setCallLoadControl (
						in TpDuration duration,	
						in TpCallLoadControlMechanism mechanism,	
						in TpCallTreatment treatment,	
						in TpAddressRange addressRange	
						)						
						raises (TpCommonExceptions, P_INVALID_ADDRESS, P_UNSUPPORTED_ADDRESS_PLAN);
						
					
					TpAssignmentID enableNotifications (
						in IpAppMultiPartyCallControlManager appCallControlManager	
						)						
						raises (TpCommonExceptions);
						
					
					void disableNotifications ()						
						raises (TpCommonExceptions);
						
					
				};
				
				
				
				interface IpCallLeg : IpService {
					
					void routeReq (
						in TpSessionID callLegSessionID,	
						in TpAddress targetAddress,	
						in TpAddress originatingAddress,	
						in TpCallAppInfoSet appInfo,	
						in TpCallLegConnectionProperties connectionProperties	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID, P_INVALID_NETWORK_STATE, P_INVALID_ADDRESS, P_UNSUPPORTED_ADDRESS_PLAN);
						
					
					void eventReportReq (
						in TpSessionID callLegSessionID,	
						in TpCallEventRequestSet eventsRequested	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID, P_INVALID_EVENT_TYPE, P_INVALID_CRITERIA);
						
					
					void release (
						in TpSessionID callLegSessionID,	
						in TpReleaseCause cause	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID, P_INVALID_NETWORK_STATE);
						
					
					void getInfoReq (
						in TpSessionID callLegSessionID,	
						in TpCallLegInfoType callLegInfoRequested	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID);
						
					
					TpMultiPartyCallIdentifier getCall (
						in TpSessionID callLegSessionID	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID);
						
					
					void attachMediaReq (
						in TpSessionID callLegSessionID	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID, P_INVALID_NETWORK_STATE);
						
					
					void detachMediaReq (
						in TpSessionID callLegSessionID	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID, P_INVALID_NETWORK_STATE);
						
					
					TpAddress getCurrentDestinationAddress (
						in TpSessionID callLegSessionID	
						)						
						raises (TpCommonExceptions,P_INVALID_SESSION_ID);
						
					
					void continueProcessing (
						in TpSessionID callLegSessionID	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID, P_INVALID_NETWORK_STATE);
						
					
					void setChargePlan (
						in TpSessionID callLegSessionID,	
						in TpCallChargePlan callChargePlan	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID);
						
					
					void setAdviceOfCharge (
						in TpSessionID callLegSessionID,	
						in TpAoCInfo aOCInfo,	
						in TpDuration tariffSwitch	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID, P_INVALID_CURRENCY, P_INVALID_AMOUNT);
						
					
					void superviseReq (
						in TpSessionID callLegSessionID,	
						in TpDuration time,	
						in TpCallLegSuperviseTreatment treatment	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID);
						
					
					void deassign (
						in TpSessionID callLegSessionID	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID);
						
				};
				
				
				interface IpAppMultiPartyCall : IpInterface {
					
					void getInfoRes (
						in TpSessionID callSessionID,	
						in TpCallInfoReport callInfoReport	
						);
						
					
					void getInfoErr (
						in TpSessionID callSessionID,	
						in TpCallError errorIndication	
						);
						
					
					void superviseRes (
						in TpSessionID callSessionID,	
						in TpCallSuperviseReport report,	
						in TpDuration usedTime	
						);
						
					
					void superviseErr (
						in TpSessionID callSessionID,	
						in TpCallError errorIndication	
						);
						
					
					void callEnded (
						in TpSessionID callSessionID,	
						in TpCallEndedReport report	
						);
						
					
					void createAndRouteCallLegErr (
						in TpSessionID callSessionID,	
						in TpCallLegIdentifier callLegReference,	
						in TpCallError errorIndication	
						);
						
				};
				
				
				
				
				interface IpMultiPartyCall : IpService {
					
					TpCallLegIdentifierSet getCallLegs (
						in TpSessionID callSessionID	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID);
						
					
					TpCallLegIdentifier createCallLeg (
						in TpSessionID callSessionID,	
						in IpAppCallLeg appCallLeg	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID, P_INVALID_INTERFACE_TYPE);
						
					
					TpCallLegIdentifier createAndRouteCallLegReq (
						in TpSessionID callSessionID,	
						in TpCallEventRequestSet eventsRequested,	
						in TpAddress targetAddress,	
						in TpAddress originatingAddress,	
						in TpCallAppInfoSet appInfo,	
						in IpAppCallLeg appLegInterface	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID, P_INVALID_INTERFACE_TYPE, P_INVALID_ADDRESS , P_UNSUPPORTED_ADDRESS_PLAN, P_INVALID_NETWORK_STATE, P_INVALID_EVENT_TYPE, P_INVALID_CRITERIA);
						
					
					void release (
						in TpSessionID callSessionID,	
						in TpReleaseCause cause	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID, P_INVALID_NETWORK_STATE);
						
					
					void deassignCall (
						in TpSessionID callSessionID	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID);
						
					
					void getInfoReq (
						in TpSessionID callSessionID,	
						in TpCallInfoType callInfoRequested	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID);
						
					
					void setChargePlan (
						in TpSessionID callSessionID,	
						in TpCallChargePlan callChargePlan	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID);
						
					
					void setAdviceOfCharge (
						in TpSessionID callSessionID,	
						in TpAoCInfo aOCInfo,	
						in TpDuration tariffSwitch	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID, P_INVALID_CURRENCY, P_INVALID_AMOUNT);
						
					
					void superviseReq (
						in TpSessionID callSessionID,	
						in TpDuration time,	
						in TpCallSuperviseTreatment treatment	
						)						
						raises (TpCommonExceptions, P_INVALID_SESSION_ID);
						
				};
				
				
				
				interface IpAppMultiPartyCallControlManager : IpInterface {
					
					TpAppMultiPartyCallBack reportNotification (
						in TpMultiPartyCallIdentifier callReference,	
						in TpCallLegIdentifierSet callLegReferenceSet,	
						in TpCallNotificationInfo notificationInfo,	
						in TpAssignmentID assignmentID	
						);
						
					
					void callAborted (
						in TpSessionID callReference	
						);
						
					
					void managerInterrupted ();
						
					
					void managerResumed ();
						
					
					void callOverloadEncountered (
						in TpAssignmentID assignmentID	
						);
						
					
					void callOverloadCeased (
						in TpAssignmentID assignmentID	
						);
						
				};
				
			};
			
		};
		
	};
	
};

#endif
