///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2017 Ericsson Telecom AB
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// which accompanies this distribution, and is available at
// http://www.eclipse.org/legal/epl-v10.html
///////////////////////////////////////////////////////////////////////////////
//
//  File:               SS_Types.ttcn
//  Rev:                R2A
//  Prodnr:             CNL 113 832
//  Contact:            http://ttcn.ericsson.se
//  Reference:          3GPP TS 24.080 v13.0.0

module SS_Types
{

import from SS_PDU_Defs all;

//Coding functions
external function enc_SS_FacilityInformation (in SS_FacilityInformation pdu) return octetstring;
external function dec_SS_FacilityInformation (in octetstring stream) return SS_FacilityInformation;
external function dec_SS_FacilityInformation_backtrack (in octetstring stream, out SS_FacilityInformation pdu) return integer;

//Type for extracted facilityInformation in Facility IE
type record of SS_Component SS_FacilityInformation;

//24.080 3.6.1
type union SS_Component
{
  SS_Invoke       invoke,
  SS_ReturnResult returnResult,
  SS_ReturnError  returnError,
  SS_Reject       reject
}

}
