/* * suppserv.h * * Copyright (C) 2006, Nadi Sarrar * Nadi Sarrar * * Portions of this file are based on the mISDN sources * by Karsten Keil. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ #ifndef __SUPPSERV_H__ #define __SUPPSERV_H__ #define AST_MISDN_ENHANCEMENTS 1 /* Compile the mISDN user with Asterisk enhancements */ #include #ifdef __cplusplus extern "C" { #endif /* ------------------------------------------------------------------- */ /* * Structs for Facility Messages */ #define FAC_OID_BASE(Base) ((Base) * 0x100) enum FacOIDBase { FacOIDBase_Local, /* localValue base (Non-OID) (Must be first) */ FacOIDBase_CCBS, FacOIDBase_CCNR, FacOIDBase_StatusRequest, FacOIDBase_ECT, FacOIDBase_CCBS_T, FacOIDBase_CCNR_T, /* Must be last in the list */ FacOIDBase_Last }; /* Facility operation-value function code */ enum Operation { /* No operation */ Fac_None = 0xffff, Fac_ERROR = 0xfffe, Fac_RESULT = 0xfffd, Fac_REJECT = 0xfffc, /* * Malicious Call Identification Operation Request */ Fac_MaliciousCallId = FAC_OID_BASE(FacOIDBase_Local) + 3, /* 3PTY */ Fac_Begin3PTY = FAC_OID_BASE(FacOIDBase_Local) + 4, Fac_End3PTY = FAC_OID_BASE(FacOIDBase_Local) + 5, /* * localValue's from Diversion-Operations * {ccitt identified-organization etsi(0) 207 operations-and-errors(1)} */ Fac_ActivationDiversion = FAC_OID_BASE(FacOIDBase_Local) + 7, Fac_DeactivationDiversion = FAC_OID_BASE(FacOIDBase_Local) + 8, Fac_ActivationStatusNotificationDiv = FAC_OID_BASE(FacOIDBase_Local) + 9, Fac_DeactivationStatusNotificationDiv = FAC_OID_BASE(FacOIDBase_Local) + 10, Fac_InterrogationDiversion = FAC_OID_BASE(FacOIDBase_Local) + 11, Fac_DiversionInformation = FAC_OID_BASE(FacOIDBase_Local) + 12, Fac_CallDeflection = FAC_OID_BASE(FacOIDBase_Local) + 13, Fac_CallRerouteing = FAC_OID_BASE(FacOIDBase_Local) + 14, Fac_DivertingLegInformation2 = FAC_OID_BASE(FacOIDBase_Local) + 15, Fac_InterrogateServedUserNumbers = FAC_OID_BASE(FacOIDBase_Local) + 17, Fac_DivertingLegInformation1 = FAC_OID_BASE(FacOIDBase_Local) + 18, Fac_DivertingLegInformation3 = FAC_OID_BASE(FacOIDBase_Local) + 19, /* * localValue's from Advice-of-Charge-Operations * {ccitt identified-organization etsi (0) 182 operations-and-errors (1)} * * Advice-Of-Charge-at-call-Setup(AOCS) * Advice-Of-Charge-During-the-call(AOCD) * Advice-Of-Charge-at-the-End-of-the-call(AOCE) */ Fac_ChargingRequest = FAC_OID_BASE(FacOIDBase_Local) + 30, Fac_AOCSCurrency = FAC_OID_BASE(FacOIDBase_Local) + 31, Fac_AOCSSpecialArr = FAC_OID_BASE(FacOIDBase_Local) + 32, Fac_AOCDCurrency = FAC_OID_BASE(FacOIDBase_Local) + 33, Fac_AOCDChargingUnit = FAC_OID_BASE(FacOIDBase_Local) + 34, Fac_AOCECurrency = FAC_OID_BASE(FacOIDBase_Local) + 35, Fac_AOCEChargingUnit = FAC_OID_BASE(FacOIDBase_Local) + 36, /* * localValue's from Explicit-Call-Transfer-Operations-and-Errors * {ccitt identified-organization etsi(0) 369 operations-and-errors(1)} */ Fac_EctExecute = FAC_OID_BASE(FacOIDBase_Local) + 6, /* * globalValue's (OIDs) from Explicit-Call-Transfer-Operations-and-Errors * {ccitt identified-organization etsi(0) 369 operations-and-errors(1)} */ Fac_ExplicitEctExecute = FAC_OID_BASE(FacOIDBase_ECT) + 1, Fac_RequestSubaddress = FAC_OID_BASE(FacOIDBase_ECT) + 2, Fac_SubaddressTransfer = FAC_OID_BASE(FacOIDBase_ECT) + 3, Fac_EctLinkIdRequest = FAC_OID_BASE(FacOIDBase_ECT) + 4, Fac_EctInform = FAC_OID_BASE(FacOIDBase_ECT) + 5, Fac_EctLoopTest = FAC_OID_BASE(FacOIDBase_ECT) + 6, /* * globalValue's (OIDs) from Status-Request-Procedure * {itu-t identified-organization etsi(0) 196 status-request-procedure(9)} */ Fac_StatusRequest = FAC_OID_BASE(FacOIDBase_StatusRequest) + 1, /* * globalValue's (OIDs) from CCBS-Operations-and-Errors * {ccitt identified-organization etsi(0) 359 operations-and-errors(1)} */ Fac_CallInfoRetain = FAC_OID_BASE(FacOIDBase_CCBS) + 1, Fac_CCBSRequest = FAC_OID_BASE(FacOIDBase_CCBS) + 2, Fac_CCBSDeactivate = FAC_OID_BASE(FacOIDBase_CCBS) + 3, Fac_CCBSInterrogate = FAC_OID_BASE(FacOIDBase_CCBS) + 4, Fac_CCBSErase = FAC_OID_BASE(FacOIDBase_CCBS) + 5, Fac_CCBSRemoteUserFree = FAC_OID_BASE(FacOIDBase_CCBS) + 6, Fac_CCBSCall = FAC_OID_BASE(FacOIDBase_CCBS) + 7, Fac_CCBSStatusRequest = FAC_OID_BASE(FacOIDBase_CCBS) + 8, Fac_CCBSBFree = FAC_OID_BASE(FacOIDBase_CCBS) + 9, Fac_EraseCallLinkageID = FAC_OID_BASE(FacOIDBase_CCBS) + 10, Fac_CCBSStopAlerting = FAC_OID_BASE(FacOIDBase_CCBS) + 11, /* * globalValue's (OIDs) from CCBS-private-networks-Operations-and-Errors * {ccitt identified-organization etsi(0) 359 private-networks-operations-and-errors(2)} */ Fac_CCBS_T_Request = FAC_OID_BASE(FacOIDBase_CCBS_T) + 1, Fac_CCBS_T_Call = FAC_OID_BASE(FacOIDBase_CCBS_T) + 2, Fac_CCBS_T_Suspend = FAC_OID_BASE(FacOIDBase_CCBS_T) + 3, Fac_CCBS_T_Resume = FAC_OID_BASE(FacOIDBase_CCBS_T) + 4, Fac_CCBS_T_RemoteUserFree = FAC_OID_BASE(FacOIDBase_CCBS_T) + 5, Fac_CCBS_T_Available = FAC_OID_BASE(FacOIDBase_CCBS_T) + 6, /* * globalValue's (OIDs) from CCNR-Operations-and-Errors * {ccitt identified-organization etsi(0) 1065 operations-and-errors(1)} */ Fac_CCNRRequest = FAC_OID_BASE(FacOIDBase_CCNR) + 1, Fac_CCNRInterrogate = FAC_OID_BASE(FacOIDBase_CCNR) + 2, /* * globalValue's (OIDs) from CCNR-private-networks-Operations-and-Errors * {ccitt identified-organization etsi(0) 1065 private-networks-operations-and-errors(2)} */ Fac_CCNR_T_Request = FAC_OID_BASE(FacOIDBase_CCNR_T) + 1, }; enum FacErrorCode { FacError_None = 0xFFFF, /* No error occurred */ FacError_Unknown = 0xFFFE, /* Unknown OID error code */ /* * localValue Errors from General-Errors * {ccitt identified-organization etsi(0) 196 general-errors(2)} */ FacError_Gen_NotSubscribed = FAC_OID_BASE(FacOIDBase_Local) + 0, FacError_Gen_NotAvailable = FAC_OID_BASE(FacOIDBase_Local) + 3, FacError_Gen_NotImplemented = FAC_OID_BASE(FacOIDBase_Local) + 4, FacError_Gen_InvalidServedUserNr = FAC_OID_BASE(FacOIDBase_Local) + 6, FacError_Gen_InvalidCallState = FAC_OID_BASE(FacOIDBase_Local) + 7, FacError_Gen_BasicServiceNotProvided = FAC_OID_BASE(FacOIDBase_Local) + 8, FacError_Gen_NotIncomingCall = FAC_OID_BASE(FacOIDBase_Local) + 9, FacError_Gen_SupplementaryServiceInteractionNotAllowed = FAC_OID_BASE(FacOIDBase_Local) + 10, FacError_Gen_ResourceUnavailable = FAC_OID_BASE(FacOIDBase_Local) + 11, /* * localValue Errors from Diversion-Operations * {ccitt identified-organization etsi(0) 207 operations-and-errors(1)} */ FacError_Div_InvalidDivertedToNr = FAC_OID_BASE(FacOIDBase_Local) + 12, FacError_Div_SpecialServiceNr = FAC_OID_BASE(FacOIDBase_Local) + 14, FacError_Div_DiversionToServedUserNr = FAC_OID_BASE(FacOIDBase_Local) + 15, FacError_Div_IncomingCallAccepted = FAC_OID_BASE(FacOIDBase_Local) + 23, FacError_Div_NumberOfDiversionsExceeded = FAC_OID_BASE(FacOIDBase_Local) + 24, FacError_Div_NotActivated = FAC_OID_BASE(FacOIDBase_Local) + 46, FacError_Div_RequestAlreadyAccepted = FAC_OID_BASE(FacOIDBase_Local) + 48, /* * localValue Errors from Advice-of-Charge-Operations * {ccitt identified-organization etsi (0) 182 operations-and-errors (1)} */ FacError_AOC_NoChargingInfoAvailable = FAC_OID_BASE(FacOIDBase_Local) + 26, /* * globalValue Errors (OIDs) from CCBS-Operations-and-Errors * {ccitt identified-organization etsi(0) 359 operations-and-errors(1)} */ FacError_CCBS_InvalidCallLinkageID = FAC_OID_BASE(FacOIDBase_CCBS) + 20, FacError_CCBS_InvalidCCBSReference = FAC_OID_BASE(FacOIDBase_CCBS) + 21, FacError_CCBS_LongTermDenial = FAC_OID_BASE(FacOIDBase_CCBS) + 22, FacError_CCBS_ShortTermDenial = FAC_OID_BASE(FacOIDBase_CCBS) + 23, FacError_CCBS_IsAlreadyActivated = FAC_OID_BASE(FacOIDBase_CCBS) + 24, FacError_CCBS_AlreadyAccepted = FAC_OID_BASE(FacOIDBase_CCBS) + 25, FacError_CCBS_OutgoingCCBSQueueFull = FAC_OID_BASE(FacOIDBase_CCBS) + 26, FacError_CCBS_CallFailureReasonNotBusy = FAC_OID_BASE(FacOIDBase_CCBS) + 27, FacError_CCBS_NotReadyForCall = FAC_OID_BASE(FacOIDBase_CCBS) + 28, /* * globalValue Errors (OIDs) from CCBS-private-networks-Operations-and-Errors * {ccitt identified-organization etsi(0) 359 private-networks-operations-and-errors(2)} */ FacError_CCBS_T_LongTermDenial = FAC_OID_BASE(FacOIDBase_CCBS_T) + 20, FacError_CCBS_T_ShortTermDenial = FAC_OID_BASE(FacOIDBase_CCBS_T) + 21, /* * globalValue Errors (OIDs) from Explicit-Call-Transfer-Operations-and-Errors * {ccitt identified-organization etsi(0) 369 operations-and-errors(1)} */ FacError_ECT_LinkIdNotAssignedByNetwork = FAC_OID_BASE(FacOIDBase_ECT) + 21, }; #define FAC_REJECT_BASE(Base) ((Base) * 0x10) enum FacRejectBase { FacRejectBase_General, FacRejectBase_Invoke, FacRejectBase_Result, FacRejectBase_Error, /* Must be last in the list */ FacRejectBase_Last }; /* * From Facility-Information-Element-Components * {itu-t identified-organization etsi(0) 196 facility-information-element-component(3)} */ enum FacRejectCode { FacReject_None = 0xFFFF, /* Not rejected */ FacReject_Unknown = 0xFFFE, /* Unknown reject code */ FacReject_Gen_UnrecognizedComponent = FAC_REJECT_BASE(FacRejectBase_General) + 0, FacReject_Gen_MistypedComponent = FAC_REJECT_BASE(FacRejectBase_General) + 1, FacReject_Gen_BadlyStructuredComponent = FAC_REJECT_BASE(FacRejectBase_General) + 2, FacReject_Inv_DuplicateInvocation = FAC_REJECT_BASE(FacRejectBase_Invoke) + 0, FacReject_Inv_UnrecognizedOperation = FAC_REJECT_BASE(FacRejectBase_Invoke) + 1, FacReject_Inv_MistypedArgument = FAC_REJECT_BASE(FacRejectBase_Invoke) + 2, FacReject_Inv_ResourceLimitation = FAC_REJECT_BASE(FacRejectBase_Invoke) + 3, FacReject_Inv_InitiatorReleasing = FAC_REJECT_BASE(FacRejectBase_Invoke) + 4, FacReject_Inv_UnrecognizedLinkedID = FAC_REJECT_BASE(FacRejectBase_Invoke) + 5, FacReject_Inv_LinkedResponseUnexpected = FAC_REJECT_BASE(FacRejectBase_Invoke) + 6, FacReject_Inv_UnexpectedChildOperation = FAC_REJECT_BASE(FacRejectBase_Invoke) + 7, FacReject_Res_UnrecognizedInvocation = FAC_REJECT_BASE(FacRejectBase_Result) + 0, FacReject_Res_ResultResponseUnexpected = FAC_REJECT_BASE(FacRejectBase_Result) + 1, FacReject_Res_MistypedResult = FAC_REJECT_BASE(FacRejectBase_Result) + 2, FacReject_Err_UnrecognizedInvocation = FAC_REJECT_BASE(FacRejectBase_Error) + 0, FacReject_Err_ErrorResponseUnexpected = FAC_REJECT_BASE(FacRejectBase_Error) + 1, FacReject_Err_UnrecognizedError = FAC_REJECT_BASE(FacRejectBase_Error) + 2, FacReject_Err_UnexpectedError = FAC_REJECT_BASE(FacRejectBase_Error) + 3, FacReject_Err_MistypedParameter = FAC_REJECT_BASE(FacRejectBase_Error) + 4, }; struct FacREJECT { /* TRUE if InvokeID is valid and was/will-be in the facility ie */ __u16 InvokeIDPresent; __s16 InvokeID; /*! \see enum FacRejectCode */ __u16 Code; }; struct ChargingAssociation { __u8 chargeNumber[30]; __s32 chargeIdentifier; }; /* This structure does not capture all information correctly */ struct FacAOCChargingUnit { __u16 chargeNotAvailable; __u16 freeOfCharge; __u32 recordedUnits; __u32 typeOfChargingInfo; __u32 billingId; __u8 chargeNumber[50]; struct ChargingAssociation chargeAssoc; }; struct FacAOCCurrency { __u16 chargeNotAvailable; __u16 freeOfCharge; __u8 currency[10 + 1]; __u32 currencyAmount; __u32 multiplier; __u32 typeOfChargingInfo; __u32 billingId; struct ChargingAssociation chargeAssoc; }; struct FacAOCSDurationCurrency { __u8 currency[10+1]; __u16 currencyAmount; __u8 multiplier; __u8 typeOfCharging; __u16 durLengthTimeUnit; __u8 durLengthTimeScale; __u8 granLengthTimeUnit; __u8 granLengthTimeScale; }; struct FacAOCSFlatRateCurrency { __u8 currency[10+1]; __u16 currencyAmount; __u8 multiplier; }; struct FacAOCSCurrencyInfo { __u8 chargedItem; __u8 currencyType; struct FacAOCSDurationCurrency durationCurrency; struct FacAOCSFlatRateCurrency FlatRateCurrency; }; struct FacAOCSCurrencyInfoList { __u8 currencyInfoCount; struct FacAOCSCurrencyInfo currencyInfo[4]; }; struct Q931_BearerCapability { __u8 Length; /* * We mostly just need to store the contents so we will defer * decoding/encoding. */ __u8 Contents[12]; }; struct Q931_HighLayerCompatibility { /* Compatibility present if length is nonzero */ __u8 Length; /* * We mostly just need to store the contents so we will defer * decoding/encoding. */ __u8 Contents[5]; }; struct Q931_LowLayerCompatibility { /* Compatibility present if length is nonzero */ __u8 Length; /* * We mostly just need to store the contents so we will defer * decoding/encoding. */ __u8 Contents[18]; }; struct Q931_UserUserInformation { /* User-User information present if length is nonzero */ __u8 Length; /* * The network dependent maximum is either 35 or 131 octets * in non-USER-INFORMATION messages. */ __u8 Contents[131]; }; /* The BC, HLC (optional) and LLC (optional) information */ struct Q931_Bc_Hlc_Llc { /* Bearer Capability */ struct Q931_BearerCapability Bc; /* Low Layer Compatibility (Optional) */ struct Q931_LowLayerCompatibility Llc; /* High Layer Compatibility (Optional) */ struct Q931_HighLayerCompatibility Hlc; }; /* The BC, HLC (optional), LLC (optional), and User-user (optional) information */ struct Q931_Bc_Hlc_Llc_Uu { /* Bearer Capability */ struct Q931_BearerCapability Bc; /* Low Layer Compatibility (Optional) */ struct Q931_LowLayerCompatibility Llc; /* High Layer Compatibility (Optional) */ struct Q931_HighLayerCompatibility Hlc; /* User-User Information (Optional) */ struct Q931_UserUserInformation UserInfo; }; struct FacPartyNumber { /* * Party numbering plan * unknown(0), * public(1) - The numbering plan is according to ITU-T E.164, * nsapEncoded(2), * data(3) - Reserved, * telex(4) - Reserved, * private(5), * nationalStandard(8) - Reserved */ __u8 Type; /* * Valid for public and private party number types * public: * unknown(0), * internationalNumber(1), * nationalNumber(2), * networkSpecificNumber(3) - Reserved * subscriberNumber(4) - Reserved * abbreviatedNumber(6) * private: * unknown(0), * level2RegionalNumber(1), * level1RegionalNumber(2) * pTNSpecificNumber(3) * localNumber(4), * abbreviatedNumber(6) */ __u8 TypeOfNumber; /* Number present if length is nonzero */ __u8 LengthOfNumber; __u8 Number[20 + 1]; }; struct FacPartySubaddress { /* Subaddress type UserSpecified(0), NSAP(1) */ __u8 Type; /* Subaddress present if length is nonzero */ __u8 Length; union { /* Specified according to ITU-T Recommendation X.213 */ __u8 Nsap[20 + 1]; /* Use of this formatting is not recommended */ struct { /* TRUE if OddCount present */ __u8 OddCountPresent; /* * TRUE if odd number of BCD digits * Used when the coding of subaddress is BCD. */ __u8 OddCount; __u8 Information[20 + 1]; } UserSpecified; } u; }; struct FacAddress { struct FacPartyNumber Party; /* Subaddress (Optional) */ struct FacPartySubaddress Subaddress; }; struct FacAddressScreened { struct FacPartyNumber Party; /* Subaddress (Optional) */ struct FacPartySubaddress Subaddress; /* * userProvidedNotScreened(0), * userProvidedVerifiedAndPassed(1), * userProvidedVerifiedAndFailed(2), -- Not used, value reserved * networkProvided(3) */ __u8 ScreeningIndicator; }; struct FacPresentedNumberUnscreened { /* * Number presentation type: * presentationAllowedNumber(0), * presentationRestricted(1), * numberNotAvailableDueToInterworking(2), * presentationRestrictedNumber(3) */ __u8 Type; struct FacPartyNumber Unscreened; }; struct FacPresentedAddressScreened { /* * Address presentation type: * presentationAllowedAddress(0), * presentationRestricted(1), * numberNotAvailableDueToInterworking(2), * presentationRestrictedAddress(3) */ __u8 Type; struct FacAddressScreened Address; }; struct FacCallInformation { /* The BC, HLC (optional) and LLC (optional) information */ struct Q931_Bc_Hlc_Llc Q931ie; /* Address of B */ struct FacAddress AddressOfB; /* Subaddress of A (Optional) */ struct FacPartySubaddress SubaddressOfA; /* CCBS Record ID */ __u8 CCBSReference; }; struct FacStatusRequest { /* The BC, HLC (optional) and LLC (optional) information */ struct Q931_Bc_Hlc_Llc Q931ie; /* allBasicServices(0), oneOrMoreBasicServices(1) */ __u8 CompatibilityMode; }; struct FacStatusRequest_RES { /* compatibleAndFree(0), compatibleAndBusy(1), incompatible(2) */ __u8 Status; }; struct FacCallInfoRetain { /* Call Linkage Record ID */ __u8 CallLinkageID; }; struct FacEraseCallLinkageID { /* Call Linkage Record ID */ __u8 CallLinkageID; }; struct FacCCBSRequest { /* Call Linkage Record ID */ __u8 CallLinkageID; }; struct FacCCBSRequest_RES { /* globalRecall(0), specificRecall(1) */ __u8 RecallMode; /* CCBS Record ID */ __u8 CCBSReference; }; struct FacCCBSDeactivate { /* CCBS Record ID */ __u8 CCBSReference; }; struct FacCCBSInterrogate { /* Party A number (Optional) */ struct FacPartyNumber AParty; /* TRUE if CCBSReference present */ __u8 CCBSReferencePresent; /* CCBS Record ID */ __u8 CCBSReference; }; struct FacCCBSInterrogate_RES { struct FacCallInformation CallDetails[5]; /* Number of CallDetails records present */ __u8 NumRecords; /* globalRecall(0), specificRecall(1) */ __u8 RecallMode; }; struct FacCCBSErase { /* The BC, HLC (optional) and LLC (optional) information */ struct Q931_Bc_Hlc_Llc Q931ie; /* Address of B */ struct FacAddress AddressOfB; /* globalRecall(0), specificRecall(1) */ __u8 RecallMode; /* CCBS Record ID */ __u8 CCBSReference; /* * CCBS Erase reason * normal-unspecified(0), * t-CCBS2-timeout(1), * t-CCBS3-timeout(2), * basic-call-failed(3) */ __u8 Reason; }; struct FacCCBSRemoteUserFree { /* The BC, HLC (optional) and LLC (optional) information */ struct Q931_Bc_Hlc_Llc Q931ie; /* Address of B */ struct FacAddress AddressOfB; /* globalRecall(0), specificRecall(1) */ __u8 RecallMode; /* CCBS Record ID */ __u8 CCBSReference; }; struct FacCCBSCall { /* CCBS Record ID */ __u8 CCBSReference; }; struct FacCCBSStatusRequest { /* The BC, HLC (optional) and LLC (optional) information */ struct Q931_Bc_Hlc_Llc Q931ie; /* globalRecall(0), specificRecall(1) */ __u8 RecallMode; /* CCBS Record ID */ __u8 CCBSReference; }; struct FacCCBSStatusRequest_RES { /* TRUE if User A is free */ __u8 Free; }; struct FacCCBSBFree { /* The BC, HLC (optional) and LLC (optional) information */ struct Q931_Bc_Hlc_Llc Q931ie; /* Address of B */ struct FacAddress AddressOfB; /* globalRecall(0), specificRecall(1) */ __u8 RecallMode; /* CCBS Record ID */ __u8 CCBSReference; }; struct FacCCBSStopAlerting { /* CCBS Record ID */ __u8 CCBSReference; }; struct FacCCBS_T_Request { /* The BC, HLC (optional) and LLC (optional) information */ struct Q931_Bc_Hlc_Llc Q931ie; /* Address of B */ struct FacAddress Destination; /* Caller-ID Address (Present if Originating.Party.LengthOfNumber is nonzero) */ struct FacAddress Originating; /* TRUE if the PresentationAllowedIndicator is present */ __u8 PresentationAllowedIndicatorPresent; /* TRUE if presentation is allowed for the originating address */ __u8 PresentationAllowedIndicator; /* TRUE if User A's CCBS request is continued if user B is busy again. */ __u8 RetentionSupported; }; struct FacCCBS_T_Request_RES { /* TRUE if User A's CCBS request is continued if user B is busy again. */ __u8 RetentionSupported; }; struct FacExplicitEctExecute { __s16 LinkID; }; struct FacSubaddressTransfer { /* Transferred to subaddress */ struct FacPartySubaddress Subaddress; }; struct FacEctLinkIdRequest_RES { __s16 LinkID; }; struct FacEctInform { /* Redirection Number (Optional) */ struct FacPresentedNumberUnscreened Redirection; /* TRUE if the Redirection Number is present */ __u8 RedirectionPresent; /* alerting(0), active(1) */ __u8 Status; }; struct FacEctLoopTest { __s8 CallTransferID; }; struct FacEctLoopTest_RES { /* * insufficientInformation(0), * noLoopExists(1), * simultaneousTransfer(2) */ __u8 LoopResult; }; struct FacActivationDiversion { /* Forwarded to address */ struct FacAddress ForwardedTo; /* Forward all numbers if not present. */ struct FacPartyNumber ServedUser; /* cfu(0), cfb(1), cfnr(2) */ __u8 Procedure; /* * allServices(0), * speech(1), * unrestrictedDigitalInformation(2), * audio3k1Hz(3), * unrestrictedDigitalInformationWithTonesAndAnnouncements(4), * multirate(5), * telephony3k1Hz(32), * teletex(33), * telefaxGroup4Class1(34), * videotexSyntaxBased(35), * videotelephony(36), * telefaxGroup2-3(37), * telephony7kHz(38), * euroFileTransfer(39), * fileTransferAndAccessManagement(40), * videoconference(41), * audioGraphicConference(42) */ __u8 BasicService; }; struct FacDeactivationDiversion { /* Forward all numbers if not present. */ struct FacPartyNumber ServedUser; /* cfu(0), cfb(1), cfnr(2) */ __u8 Procedure; /* * allServices(0), * speech(1), * unrestrictedDigitalInformation(2), * audio3k1Hz(3), * unrestrictedDigitalInformationWithTonesAndAnnouncements(4), * multirate(5), * telephony3k1Hz(32), * teletex(33), * telefaxGroup4Class1(34), * videotexSyntaxBased(35), * videotelephony(36), * telefaxGroup2-3(37), * telephony7kHz(38), * euroFileTransfer(39), * fileTransferAndAccessManagement(40), * videoconference(41), * audioGraphicConference(42) */ __u8 BasicService; }; struct FacActivationStatusNotificationDiv { /* Forwarded to address */ struct FacAddress ForwardedTo; /* Forward all numbers if not present. */ struct FacPartyNumber ServedUser; /* cfu(0), cfb(1), cfnr(2) */ __u8 Procedure; /* * allServices(0), * speech(1), * unrestrictedDigitalInformation(2), * audio3k1Hz(3), * unrestrictedDigitalInformationWithTonesAndAnnouncements(4), * multirate(5), * telephony3k1Hz(32), * teletex(33), * telefaxGroup4Class1(34), * videotexSyntaxBased(35), * videotelephony(36), * telefaxGroup2-3(37), * telephony7kHz(38), * euroFileTransfer(39), * fileTransferAndAccessManagement(40), * videoconference(41), * audioGraphicConference(42) */ __u8 BasicService; }; struct FacDeactivationStatusNotificationDiv { /* Forward all numbers if not present. */ struct FacPartyNumber ServedUser; /* cfu(0), cfb(1), cfnr(2) */ __u8 Procedure; /* * allServices(0), * speech(1), * unrestrictedDigitalInformation(2), * audio3k1Hz(3), * unrestrictedDigitalInformationWithTonesAndAnnouncements(4), * multirate(5), * telephony3k1Hz(32), * teletex(33), * telefaxGroup4Class1(34), * videotexSyntaxBased(35), * videotelephony(36), * telefaxGroup2-3(37), * telephony7kHz(38), * euroFileTransfer(39), * fileTransferAndAccessManagement(40), * videoconference(41), * audioGraphicConference(42) */ __u8 BasicService; }; struct FacInterrogationDiversion { /* Forward all numbers if not present. */ struct FacPartyNumber ServedUser; /* cfu(0), cfb(1), cfnr(2) */ __u8 Procedure; /* * DEFAULT allServices * * allServices(0), * speech(1), * unrestrictedDigitalInformation(2), * audio3k1Hz(3), * unrestrictedDigitalInformationWithTonesAndAnnouncements(4), * multirate(5), * telephony3k1Hz(32), * teletex(33), * telefaxGroup4Class1(34), * videotexSyntaxBased(35), * videotelephony(36), * telefaxGroup2-3(37), * telephony7kHz(38), * euroFileTransfer(39), * fileTransferAndAccessManagement(40), * videoconference(41), * audioGraphicConference(42) */ __u8 BasicService; }; struct FacForwardingRecord { /* Forwarded to address */ struct FacAddress ForwardedTo; /* Forward all numbers if not present. */ struct FacPartyNumber ServedUser; /* cfu(0), cfb(1), cfnr(2) */ __u8 Procedure; /* * allServices(0), * speech(1), * unrestrictedDigitalInformation(2), * audio3k1Hz(3), * unrestrictedDigitalInformationWithTonesAndAnnouncements(4), * multirate(5), * telephony3k1Hz(32), * teletex(33), * telefaxGroup4Class1(34), * videotexSyntaxBased(35), * videotelephony(36), * telefaxGroup2-3(37), * telephony7kHz(38), * euroFileTransfer(39), * fileTransferAndAccessManagement(40), * videoconference(41), * audioGraphicConference(42) */ __u8 BasicService; }; struct FacForwardingList { /* SET SIZE (0..29) OF Forwarding Records */ struct FacForwardingRecord List[29]; /* Number of Forwarding records present */ __u8 NumRecords; }; struct FacDiversionInformation { /* Served user subaddress (Optional) */ struct FacPartySubaddress ServedUserSubaddress; /* Calling address (Optional) */ struct FacPresentedAddressScreened CallingAddress; /* Original called number (Optional) */ struct FacPresentedNumberUnscreened OriginalCalled; /* Last diverting number (Optional) */ struct FacPresentedNumberUnscreened LastDiverting; /* User-User information embedded in Q.931 IE (Optional) */ struct Q931_UserUserInformation UserInfo; /* * Last diverting reason (Optional) * * unknown(0), * cfu(1), * cfb(2), * cfnr(3), * cdAlerting(4), * cdImmediate(5) */ __u8 LastDivertingReason; /* TRUE if CallingAddress is present */ __u8 CallingAddressPresent; /* TRUE if OriginalCalled is present */ __u8 OriginalCalledPresent; /* TRUE if LastDiverting is present */ __u8 LastDivertingPresent; /* TRUE if LastDivertingReason is present */ __u8 LastDivertingReasonPresent; /* * unknown(0), * cfu(1), * cfb(2), * cfnr(3), * cdAlerting(4), * cdImmediate(5) */ __u8 DiversionReason; /* * allServices(0), * speech(1), * unrestrictedDigitalInformation(2), * audio3k1Hz(3), * unrestrictedDigitalInformationWithTonesAndAnnouncements(4), * multirate(5), * telephony3k1Hz(32), * teletex(33), * telefaxGroup4Class1(34), * videotexSyntaxBased(35), * videotelephony(36), * telefaxGroup2-3(37), * telephony7kHz(38), * euroFileTransfer(39), * fileTransferAndAccessManagement(40), * videoconference(41), * audioGraphicConference(42) */ __u8 BasicService; }; struct FacCallDeflection { /* Deflection address (Deflected-To address) */ struct FacAddress Deflection; /* TRUE if PresentationAllowedToDivertedToUser is present */ __u8 PresentationAllowedToDivertedToUserPresent; /* TRUE if presentation is allowed (Optional) */ __u8 PresentationAllowedToDivertedToUser; }; struct FacCallRerouteing { struct FacAddress CalledAddress; /* The BC, HLC (optional), LLC (optional), and User-user (optional) information */ struct Q931_Bc_Hlc_Llc_Uu Q931ie; /* Last rerouting number */ struct FacPresentedNumberUnscreened LastRerouting; /* Calling party subaddress (Optional) */ struct FacPartySubaddress CallingPartySubaddress; /* * unknown(0), * cfu(1), * cfb(2), * cfnr(3), * cdAlerting(4), * cdImmediate(5) */ __u8 ReroutingReason; /* Range 1-5 */ __u8 ReroutingCounter; /* * DEFAULT noNotification * * noNotification(0), * notificationWithoutDivertedToNr(1), * notificationWithDivertedToNr(2) */ __u8 SubscriptionOption; }; struct FacServedUserNumberList { /* SET SIZE (0..99) OF Served user numbers */ struct FacPartyNumber List[99]; /* Number of Served user numbers present */ __u8 NumRecords; }; struct FacDivertingLegInformation1 { /* Diverted to number (Optional) */ struct FacPresentedNumberUnscreened DivertedTo; /* TRUE if DivertedTo is present */ __u8 DivertedToPresent; /* * unknown(0), * cfu(1), * cfb(2), * cfnr(3), * cdAlerting(4), * cdImmediate(5) */ __u8 DiversionReason; /* * noNotification(0), * notificationWithoutDivertedToNr(1), * notificationWithDivertedToNr(2) */ __u8 SubscriptionOption; }; struct FacDivertingLegInformation2 { /* Diverting number (Optional) */ struct FacPresentedNumberUnscreened Diverting; /* Original called number (Optional) */ struct FacPresentedNumberUnscreened OriginalCalled; /* TRUE if Diverting is present */ __u8 DivertingPresent; /* TRUE if OriginalCalled is present */ __u8 OriginalCalledPresent; /* * unknown(0), * cfu(1), * cfb(2), * cfnr(3), * cdAlerting(4), * cdImmediate(5) */ __u8 DiversionReason; /* Range 1-5 */ __u8 DiversionCounter; }; struct FacDivertingLegInformation3 { /* TRUE if presentation is allowed */ __u8 PresentationAllowedIndicator; }; typedef enum { CompInvoke = 1, CompReturnResult = 2, CompReturnError = 3, CompReject = 4, } asn1Component; typedef enum { GeneralP = 0, InvokeP = 1, ReturnResultP = 2, ReturnErrorP = 3, } asn1Problem; struct ChargeNumber { char *number; int *identifier; }; struct asn1Invoke { __s16 invokeId; __u16 operationValue; union { struct FacAOCChargingUnit AOCchu; struct FacAOCCurrency AOCcur; struct FacAOCSCurrencyInfoList AOCcuril; struct FacStatusRequest StatusRequest; /* CCBS/CCNR support */ struct FacCallInfoRetain CallInfoRetain; struct FacEraseCallLinkageID EraseCallLinkageID; struct FacCCBSDeactivate CCBSDeactivate; struct FacCCBSErase CCBSErase; struct FacCCBSRemoteUserFree CCBSRemoteUserFree; struct FacCCBSCall CCBSCall; struct FacCCBSStatusRequest CCBSStatusRequest; struct FacCCBSBFree CCBSBFree; struct FacCCBSStopAlerting CCBSStopAlerting; /* CCBS support */ struct FacCCBSRequest CCBSRequest; struct FacCCBSInterrogate CCBSInterrogate; /* CCNR support */ struct FacCCBSRequest CCNRRequest; struct FacCCBSInterrogate CCNRInterrogate; /* CCBS-T support */ struct FacCCBS_T_Request CCBS_T_Request; /* CCNR-T support */ struct FacCCBS_T_Request CCNR_T_Request; /* ECT support */ struct FacExplicitEctExecute ExplicitEctExecute; struct FacSubaddressTransfer SubaddressTransfer; struct FacEctInform EctInform; struct FacEctLoopTest EctLoopTest; /* Diversion support */ struct FacActivationDiversion ActivationDiversion; struct FacDeactivationDiversion DeactivationDiversion; struct FacActivationStatusNotificationDiv ActivationStatusNotificationDiv; struct FacDeactivationStatusNotificationDiv DeactivationStatusNotificationDiv; struct FacInterrogationDiversion InterrogationDiversion; struct FacDiversionInformation DiversionInformation; struct FacCallDeflection CallDeflection; struct FacCallRerouteing CallRerouteing; struct FacDivertingLegInformation1 DivertingLegInformation1; struct FacDivertingLegInformation2 DivertingLegInformation2; struct FacDivertingLegInformation3 DivertingLegInformation3; } o; }; struct asn1ReturnResult { __s16 invokeId; int operationValuePresent; unsigned int operationValue; union { struct FacStatusRequest_RES StatusRequest; /* CCBS/CCNR support */ struct FacCCBSStatusRequest_RES CCBSStatusRequest; /* CCBS support */ struct FacCCBSRequest_RES CCBSRequest; struct FacCCBSInterrogate_RES CCBSInterrogate; /* CCNR support */ struct FacCCBSRequest_RES CCNRRequest; struct FacCCBSInterrogate_RES CCNRInterrogate; /* CCBS-T support */ struct FacCCBS_T_Request_RES CCBS_T_Request; /* CCNR-T support */ struct FacCCBS_T_Request_RES CCNR_T_Request; /* ECT support */ struct FacEctLinkIdRequest_RES EctLinkIdRequest; struct FacEctLoopTest_RES EctLoopTest; /* Diversion support */ struct FacForwardingList InterrogationDiversion; struct FacServedUserNumberList InterrogateServedUserNumbers; } o; }; struct asn1Oid { /* Number of subidentifier values in OID list */ __u16 numValues; /* * OID subidentifier value list * Note the first value is really the first two OID subidentifiers. * They are compressed using this formula: * First_Value = (First_Subidentifier * 40) + Second_Subidentifier */ __u16 value[10]; }; struct asn1OidConvert { enum FacOIDBase baseCode; struct asn1Oid oid; }; struct asn1ReturnError { __s16 invokeId; /*! \see enum FacErrorCode */ __u16 errorValue; }; struct asn1Reject { int invokeIdPresent; int invokeId; asn1Problem problem; unsigned int problemValue; }; struct asn1_parm { int Valid; asn1Component comp; union { struct asn1Invoke inv; struct asn1ReturnResult retResult; struct asn1ReturnError retError; struct asn1Reject reject; } u; }; /* * encodeFac(__u8 *dest, struct FacParm *fac) * * encode the facility (fac) into the buffer (dest) * * parameter: * dest - destination buffer * fac - facility to encode * * returns: * length of the encoded facility, or -1 on error */ extern int encodeFac(__u8 * dest, struct asn1_parm *apm); /* * decodeFac(__u8 *src, struct FacParm *fac) * * decode the facility (src) and write the result to (fac) * * parameter: * src - encoded facility * fac - where to store the result * * returns: * 0 on success, -1 on error */ extern int decodeFac(__u8 * src, struct asn1_parm *apm); /* ------------------------------------------------------------------- */ #ifdef __cplusplus } #endif #endif /* __SUPPSERV_H__ */ /* ------------------------------------------------------------------- *//* end suppserv.h */