Added Q.SIG Advice-Of-Charge encode/decode routines.
git-svn-id: https://origsvn.digium.com/svn/libpri/branches/1.4@772 2fbb986a-6c06-0410-b554-c9c1f0a7f128
This commit is contained in:
parent
ba45095c5a
commit
b19c0b0a04
2
Makefile
2
Makefile
@ -54,6 +54,7 @@ STATIC_OBJS= \
|
||||
rose_etsi_aoc.o \
|
||||
rose_other.o \
|
||||
rose_q931.o \
|
||||
rose_qsig_aoc.o \
|
||||
rose_qsig_ct.o \
|
||||
rose_qsig_diversion.o \
|
||||
rose_qsig_mwi.o \
|
||||
@ -72,6 +73,7 @@ DYNAMIC_OBJS= \
|
||||
rose_etsi_aoc.lo \
|
||||
rose_other.lo \
|
||||
rose_q931.lo \
|
||||
rose_qsig_aoc.lo \
|
||||
rose_qsig_ct.lo \
|
||||
rose_qsig_diversion.lo \
|
||||
rose_qsig_mwi.lo \
|
||||
|
@ -1559,6 +1559,12 @@ void rose_handle_result(struct pri *ctrl, q931_call *call, q931_ie *ie,
|
||||
case ROSE_ETSI_ChargingRequest:
|
||||
break;
|
||||
#endif /* Not handled yet */
|
||||
#if 0 /* Not handled yet */
|
||||
case ROSE_QSIG_ChargeRequest:
|
||||
break;
|
||||
case ROSE_QSIG_AocComplete:
|
||||
break;
|
||||
#endif /* Not handled yet */
|
||||
#if 0 /* Not handled yet */
|
||||
case ROSE_QSIG_CallTransferIdentify:
|
||||
break;
|
||||
@ -1673,6 +1679,22 @@ void rose_handle_invoke(struct pri *ctrl, q931_call *call, q931_ie *ie,
|
||||
case ROSE_QSIG_BusyName:
|
||||
break;
|
||||
#endif /* Not handled yet */
|
||||
#if 0 /* Not handled yet */
|
||||
case ROSE_QSIG_ChargeRequest:
|
||||
break;
|
||||
case ROSE_QSIG_GetFinalCharge:
|
||||
break;
|
||||
case ROSE_QSIG_AocFinal:
|
||||
break;
|
||||
case ROSE_QSIG_AocInterim:
|
||||
break;
|
||||
case ROSE_QSIG_AocRate:
|
||||
break;
|
||||
case ROSE_QSIG_AocComplete:
|
||||
break;
|
||||
case ROSE_QSIG_AocDivChargeReq:
|
||||
break;
|
||||
#endif /* Not handled yet */
|
||||
#if 0 /* Not handled yet */
|
||||
case ROSE_QSIG_CallTransferIdentify:
|
||||
break;
|
||||
|
59
rose.c
59
rose.c
@ -343,6 +343,46 @@ static const struct rose_convert_msg rose_qsig_msgs[] = {
|
||||
rose_dec_qsig_BusyName_ARG, NULL
|
||||
},
|
||||
|
||||
/*
|
||||
* localValue's from Q.SIG SS-AOC-Operations
|
||||
* { iso(1) standard(0) pss1-advice-of-charge(15050) advice-of-charge-operations(0) }
|
||||
*/
|
||||
{
|
||||
ROSE_QSIG_ChargeRequest, NULL, 59,
|
||||
rose_enc_qsig_ChargeRequest_ARG, rose_enc_qsig_ChargeRequest_RES,
|
||||
rose_dec_qsig_ChargeRequest_ARG, rose_dec_qsig_ChargeRequest_RES
|
||||
},
|
||||
{
|
||||
ROSE_QSIG_GetFinalCharge, NULL, 60,
|
||||
rose_enc_qsig_DummyArg_ARG, NULL,
|
||||
rose_dec_qsig_DummyArg_ARG, NULL
|
||||
},
|
||||
{
|
||||
ROSE_QSIG_AocFinal, NULL, 61,
|
||||
rose_enc_qsig_AocFinal_ARG, NULL,
|
||||
rose_dec_qsig_AocFinal_ARG, NULL
|
||||
},
|
||||
{
|
||||
ROSE_QSIG_AocInterim, NULL, 62,
|
||||
rose_enc_qsig_AocInterim_ARG, NULL,
|
||||
rose_dec_qsig_AocInterim_ARG, NULL
|
||||
},
|
||||
{
|
||||
ROSE_QSIG_AocRate, NULL, 63,
|
||||
rose_enc_qsig_AocRate_ARG, NULL,
|
||||
rose_dec_qsig_AocRate_ARG, NULL
|
||||
},
|
||||
{
|
||||
ROSE_QSIG_AocComplete, NULL, 64,
|
||||
rose_enc_qsig_AocComplete_ARG, rose_enc_qsig_AocComplete_RES,
|
||||
rose_dec_qsig_AocComplete_ARG, rose_dec_qsig_AocComplete_RES
|
||||
},
|
||||
{
|
||||
ROSE_QSIG_AocDivChargeReq, NULL, 65,
|
||||
rose_enc_qsig_AocDivChargeReq_ARG, NULL,
|
||||
rose_dec_qsig_AocDivChargeReq_ARG, NULL
|
||||
},
|
||||
|
||||
/*
|
||||
* localValue's from Q.SIG Call-Transfer-Operations
|
||||
* { iso(1) standard(0) pss1-call-transfer(13869) call-transfer-operations(0) }
|
||||
@ -545,6 +585,15 @@ static const struct rose_convert_error rose_qsig_errors[] = {
|
||||
NULL, NULL
|
||||
},
|
||||
|
||||
/*
|
||||
* localValue Errors from Q.SIG SS-AOC-Operations
|
||||
* { iso(1) standard(0) pss1-advice-of-charge(15050) advice-of-charge-operations(0) }
|
||||
*/
|
||||
{
|
||||
ROSE_ERROR_QSIG_AOC_FreeOfCharge, NULL, 1016,
|
||||
NULL, NULL
|
||||
},
|
||||
|
||||
/*
|
||||
* localValue's from Q.SIG Call-Transfer-Operations
|
||||
* { iso(1) standard(0) pss1-call-transfer(13869) call-transfer-operations(0) }
|
||||
@ -844,6 +893,14 @@ const char *rose_operation2str(enum rose_operation operation)
|
||||
{ ROSE_QSIG_ConnectedName, "ROSE_QSIG_ConnectedName" },
|
||||
{ ROSE_QSIG_BusyName, "ROSE_QSIG_BusyName" },
|
||||
|
||||
{ ROSE_QSIG_ChargeRequest, "ROSE_QSIG_ChargeRequest" },
|
||||
{ ROSE_QSIG_GetFinalCharge, "ROSE_QSIG_GetFinalCharge" },
|
||||
{ ROSE_QSIG_AocFinal, "ROSE_QSIG_AocFinal" },
|
||||
{ ROSE_QSIG_AocInterim, "ROSE_QSIG_AocInterim" },
|
||||
{ ROSE_QSIG_AocRate, "ROSE_QSIG_AocRate" },
|
||||
{ ROSE_QSIG_AocComplete, "ROSE_QSIG_AocComplete" },
|
||||
{ ROSE_QSIG_AocDivChargeReq, "ROSE_QSIG_AocDivChargeReq" },
|
||||
|
||||
{ ROSE_QSIG_CallTransferIdentify, "ROSE_QSIG_CallTransferIdentify" },
|
||||
{ ROSE_QSIG_CallTransferAbandon, "ROSE_QSIG_CallTransferAbandon" },
|
||||
{ ROSE_QSIG_CallTransferInitiate, "ROSE_QSIG_CallTransferInitiate" },
|
||||
@ -921,6 +978,8 @@ const char *rose_error2str(enum rose_error_code code)
|
||||
/* Q.SIG specific errors */
|
||||
{ ROSE_ERROR_QSIG_Unspecified, "Unspecified" },
|
||||
|
||||
{ ROSE_ERROR_QSIG_AOC_FreeOfCharge, "AOC: FreeOfCharge" },
|
||||
|
||||
{ ROSE_ERROR_QSIG_CT_InvalidReroutingNumber, "CT: Invalid Rerouting Number" },
|
||||
{ ROSE_ERROR_QSIG_CT_UnrecognizedCallIdentity,"CT: Unrecognized Call Identity" },
|
||||
{ ROSE_ERROR_QSIG_CT_EstablishmentFailure, "CT: Establishment Failure" },
|
||||
|
473
rose.h
473
rose.h
@ -86,6 +86,15 @@ enum rose_operation {
|
||||
ROSE_QSIG_ConnectedName, /*!< Invoke only */
|
||||
ROSE_QSIG_BusyName, /*!< Invoke only */
|
||||
|
||||
/* Q.SIG SS-AOC-Operations */
|
||||
ROSE_QSIG_ChargeRequest, /*!< Invoke/Result */
|
||||
ROSE_QSIG_GetFinalCharge, /*!< Invoke only */
|
||||
ROSE_QSIG_AocFinal, /*!< Invoke only */
|
||||
ROSE_QSIG_AocInterim, /*!< Invoke only */
|
||||
ROSE_QSIG_AocRate, /*!< Invoke only */
|
||||
ROSE_QSIG_AocComplete, /*!< Invoke/Result */
|
||||
ROSE_QSIG_AocDivChargeReq, /*!< Invoke only */
|
||||
|
||||
/* Q.SIG Call-Transfer-Operations (CT) */
|
||||
ROSE_QSIG_CallTransferIdentify, /*!< Invoke/Result */
|
||||
ROSE_QSIG_CallTransferAbandon, /*!< Invoke only */
|
||||
@ -163,6 +172,9 @@ enum rose_error_code {
|
||||
/* Q.SIG from various specifications */
|
||||
ROSE_ERROR_QSIG_Unspecified,
|
||||
|
||||
/* Q.SIG SS-AOC-Operations */
|
||||
ROSE_ERROR_QSIG_AOC_FreeOfCharge,
|
||||
|
||||
/* Q.SIG Call-Transfer-Operations (CT) */
|
||||
ROSE_ERROR_QSIG_CT_InvalidReroutingNumber,
|
||||
ROSE_ERROR_QSIG_CT_UnrecognizedCallIdentity,
|
||||
@ -1122,6 +1134,455 @@ struct roseQsigPartyName_ARG {
|
||||
/* ------------------------------------------------------------------- */
|
||||
|
||||
|
||||
/*
|
||||
* Time ::= SEQUENCE {
|
||||
* lengthOfTimeUnit [1] IMPLICIT LengthOfTimeUnit,
|
||||
* scale [2] IMPLICIT Scale
|
||||
* }
|
||||
*/
|
||||
struct roseQsigAOCTime {
|
||||
/*! LengthOfTimeUnit ::= INTEGER (0..16777215) -- 24 bit number */
|
||||
u_int32_t length;
|
||||
/*!
|
||||
* \details
|
||||
* oneHundredthSecond(0),
|
||||
* oneTenthSecond(1),
|
||||
* oneSecond(2),
|
||||
* tenSeconds(3),
|
||||
* oneMinute(4),
|
||||
* oneHour(5),
|
||||
* twentyFourHours(6)
|
||||
*/
|
||||
u_int8_t scale;
|
||||
};
|
||||
|
||||
/*
|
||||
* Amount ::= SEQUENCE {
|
||||
* currencyAmount [1] IMPLICIT CurrencyAmount,
|
||||
* multiplier [2] IMPLICIT Multiplier
|
||||
* }
|
||||
*/
|
||||
struct roseQsigAOCAmount {
|
||||
/*! CurrencyAmount ::= INTEGER (0..16777215) -- 24 bit number */
|
||||
u_int32_t currency;
|
||||
/*!
|
||||
* \details
|
||||
* oneThousandth(0),
|
||||
* oneHundredth(1),
|
||||
* oneTenth(2),
|
||||
* one(3),
|
||||
* ten(4),
|
||||
* hundred(5),
|
||||
* thousand(6)
|
||||
*/
|
||||
u_int8_t multiplier;
|
||||
};
|
||||
|
||||
/*
|
||||
* DurationCurrency ::= SEQUENCE {
|
||||
* dCurrency [1] IMPLICIT Currency,
|
||||
* dAmount [2] IMPLICIT Amount,
|
||||
* dChargingType [3] IMPLICIT ChargingType,
|
||||
* dTime [4] IMPLICIT Time,
|
||||
* dGranularity [5] IMPLICIT Time OPTIONAL
|
||||
* }
|
||||
*/
|
||||
struct roseQsigAOCDurationCurrency {
|
||||
struct roseQsigAOCAmount amount;
|
||||
struct roseQsigAOCTime time;
|
||||
/*! \brief dGranularity (optional) */
|
||||
struct roseQsigAOCTime granularity;
|
||||
/*!
|
||||
* \brief Name of currency
|
||||
* \details
|
||||
* Currency ::= IA5String (SIZE (0..10))
|
||||
* \note The empty string is the default currency for the network.
|
||||
*/
|
||||
unsigned char currency[10 + 1];
|
||||
/*!
|
||||
* \details
|
||||
* continuousCharging(0),
|
||||
* stepFunction(1)
|
||||
*/
|
||||
u_int8_t charging_type;
|
||||
/*! TRUE if granularity time is present */
|
||||
u_int8_t granularity_present;
|
||||
};
|
||||
|
||||
/*
|
||||
* FlatRateCurrency ::= SEQUENCE {
|
||||
* fRCurrency [1] IMPLICIT Currency,
|
||||
* fRAmount [2] IMPLICIT Amount
|
||||
* }
|
||||
*/
|
||||
struct roseQsigAOCFlatRateCurrency {
|
||||
struct roseQsigAOCAmount amount;
|
||||
/*!
|
||||
* \brief Name of currency
|
||||
* \details
|
||||
* Currency ::= IA5String (SIZE (0..10))
|
||||
* \note The empty string is the default currency for the network.
|
||||
*/
|
||||
unsigned char currency[10 + 1];
|
||||
};
|
||||
|
||||
/*
|
||||
* VolumeRateCurrency ::= SEQUENCE {
|
||||
* vRCurrency [1] IMPLICIT Currency,
|
||||
* vRAmount [2] IMPLICIT Amount,
|
||||
* vRVolumeUnit [3] IMPLICIT VolumeUnit
|
||||
* }
|
||||
*/
|
||||
struct roseQsigAOCVolumeRateCurrency {
|
||||
struct roseQsigAOCAmount amount;
|
||||
/*!
|
||||
* \brief Name of currency
|
||||
* \details
|
||||
* Currency ::= IA5String (SIZE (0..10))
|
||||
* \note The empty string is the default currency for the network.
|
||||
*/
|
||||
unsigned char currency[10 + 1];
|
||||
/*!
|
||||
* \brief Volume rate volume unit
|
||||
* \details
|
||||
* octet(0),
|
||||
* segment(1),
|
||||
* message(2)
|
||||
*/
|
||||
u_int8_t unit;
|
||||
};
|
||||
|
||||
/*
|
||||
* AOCSCurrencyInfo ::= SEQUENCE {
|
||||
* chargedItem ChargedItem,
|
||||
* rateType CHOICE {
|
||||
* durationCurrency [1] IMPLICIT DurationCurrency,
|
||||
* flatRateCurrency [2] IMPLICIT FlatRateCurrency,
|
||||
* volumeRateCurrency [3] IMPLICIT VolumeRateCurrency,
|
||||
* specialChargingCode SpecialChargingCode,
|
||||
* freeOfCharge [4] IMPLICIT NULL,
|
||||
* currencyInfoNotAvailable [5] IMPLICIT NULL,
|
||||
* freeOfChargefromBeginning [6] IMPLICIT NULL
|
||||
* }
|
||||
* }
|
||||
*/
|
||||
struct roseQsigAOCSCurrencyInfo {
|
||||
union {
|
||||
struct roseQsigAOCDurationCurrency duration;
|
||||
struct roseQsigAOCFlatRateCurrency flat_rate;
|
||||
struct roseQsigAOCVolumeRateCurrency volume_rate;
|
||||
/*! SpecialChargingCode ::= INTEGER (1..10) */
|
||||
u_int8_t special_charging_code;
|
||||
} u;
|
||||
/*!
|
||||
* \brief Determine what is stored in the union.
|
||||
* \details
|
||||
* specialChargingCode(0),
|
||||
* durationCurrency(1),
|
||||
* flatRateCurrency(2),
|
||||
* volumeRateCurrency(3),
|
||||
* freeOfCharge(4),
|
||||
* currencyInfoNotAvailable(5),
|
||||
* freeOfChargeFromBeginning(6)
|
||||
*/
|
||||
u_int8_t currency_type;
|
||||
/*!
|
||||
* \brief What service is being billed.
|
||||
* \details
|
||||
* basicCommunication(0),
|
||||
* callAttempt(1),
|
||||
* callSetup(2),
|
||||
* userToUserInfo(3),
|
||||
* operationOfSupplementaryServ(4)
|
||||
*/
|
||||
u_int8_t charged_item;
|
||||
};
|
||||
|
||||
/*
|
||||
* AOCSCurrencyInfoList ::= SEQUENCE SIZE (1..10) OF AOCSCurrencyInfo
|
||||
*/
|
||||
struct roseQsigAOCSCurrencyInfoList {
|
||||
/*! \brief SEQUENCE SIZE (1..10) OF AOCSCurrencyInfo */
|
||||
struct roseQsigAOCSCurrencyInfo list[10];
|
||||
|
||||
/*! \brief Number of AOCSCurrencyInfo records present */
|
||||
u_int8_t num_records;
|
||||
};
|
||||
|
||||
/*
|
||||
* RecordedCurrency ::= SEQUENCE {
|
||||
* rCurrency [1] IMPLICIT Currency,
|
||||
* rAmount [2] IMPLICIT Amount
|
||||
* }
|
||||
*/
|
||||
struct roseQsigAOCRecordedCurrency {
|
||||
/*! Amount of currency involved. */
|
||||
struct roseQsigAOCAmount amount;
|
||||
/*!
|
||||
* \brief Name of currency
|
||||
* \details
|
||||
* Currency ::= IA5String (SIZE (0..10))
|
||||
* \note The empty string is the default currency for the network.
|
||||
*/
|
||||
unsigned char currency[10 + 1];
|
||||
};
|
||||
|
||||
/*
|
||||
* ChargingAssociation ::= CHOICE {
|
||||
* chargedNumber [0] EXPLICIT PartyNumber,
|
||||
* chargeIdentifier ChargeIdentifier
|
||||
* }
|
||||
*/
|
||||
struct roseQsigAOCChargingAssociation {
|
||||
/*! chargeIdentifier: INTEGER (-32768..32767) -- 16 bit number */
|
||||
int16_t id;
|
||||
/*! chargedNumber */
|
||||
struct rosePartyNumber number;
|
||||
/*!
|
||||
* \details
|
||||
* charge_identifier(0)
|
||||
* charged_number(1),
|
||||
*/
|
||||
u_int8_t type;
|
||||
};
|
||||
|
||||
/*
|
||||
* AocRateArg ::= SEQUENCE {
|
||||
* aocRate CHOICE
|
||||
* {
|
||||
* chargeNotAvailable NULL,
|
||||
* aocSCurrencyInfoList AOCSCurrencyInfoList
|
||||
* },
|
||||
* rateArgExtension CHOICE {
|
||||
* extension [1] IMPLICIT Extension,
|
||||
* multipleExtension [2] IMPLICIT SEQUENCE OF Extension
|
||||
* } OPTIONAL
|
||||
* }
|
||||
*/
|
||||
struct roseQsigAocRateArg_ARG {
|
||||
struct roseQsigAOCSCurrencyInfoList currency_info;
|
||||
/*!
|
||||
* \details
|
||||
* charge_not_available(0),
|
||||
* currency_info_list(1)
|
||||
*/
|
||||
u_int8_t type;
|
||||
};
|
||||
|
||||
/*
|
||||
* AocInterimArg ::= SEQUENCE {
|
||||
* interimCharge CHOICE {
|
||||
* chargeNotAvailable [0] IMPLICIT NULL,
|
||||
* freeOfCharge [1] IMPLICIT NULL,
|
||||
* specificCurrency SEQUENCE {
|
||||
* recordedCurrency [1] IMPLICIT RecordedCurrency,
|
||||
* interimBillingId [2] IMPLICIT InterimBillingId OPTIONAL
|
||||
* }
|
||||
* },
|
||||
* interimArgExtension CHOICE {
|
||||
* extension [1] IMPLICIT Extension,
|
||||
* multipleExtension [2] IMPLICIT SEQUENCE OF Extension
|
||||
* } OPTIONAL
|
||||
* }
|
||||
*/
|
||||
struct roseQsigAocInterimArg_ARG {
|
||||
struct {
|
||||
/*! \brief recorded currency */
|
||||
struct roseQsigAOCRecordedCurrency recorded;
|
||||
/*!
|
||||
* \brief InterimBillingId (optional)
|
||||
* \details
|
||||
* normalCharging(0),
|
||||
* creditCardCharging(2)
|
||||
*/
|
||||
u_int8_t billing_id;
|
||||
/*! \brief TRUE if billing id is present */
|
||||
u_int8_t billing_id_present;
|
||||
} specific;
|
||||
/*!
|
||||
* \details
|
||||
* charge_not_available(0),
|
||||
* free_of_charge(1),
|
||||
* specific_currency(2)
|
||||
*/
|
||||
u_int8_t type;
|
||||
};
|
||||
|
||||
/*
|
||||
* AocFinalArg ::= SEQUENCE {
|
||||
* finalCharge CHOICE {
|
||||
* chargeNotAvailable [0] IMPLICIT NULL,
|
||||
* freeOfCharge [1] IMPLICIT NULL,
|
||||
* specificCurrency SEQUENCE {
|
||||
* recordedCurrency [1] IMPLICIT RecordedCurrency,
|
||||
* finalBillingId [2] IMPLICIT FinalBillingId OPTIONAL
|
||||
* }
|
||||
* },
|
||||
* chargingAssociation ChargingAssociation OPTIONAL,
|
||||
* finalArgExtension CHOICE {
|
||||
* extension [1] IMPLICIT Extension,
|
||||
* multipleExtension [2] IMPLICIT SEQUENCE OF Extension
|
||||
* } OPTIONAL
|
||||
* }
|
||||
*/
|
||||
struct roseQsigAocFinalArg_ARG {
|
||||
struct {
|
||||
/*! \brief recorded currency */
|
||||
struct roseQsigAOCRecordedCurrency recorded;
|
||||
/*!
|
||||
* \brief FinalBillingId (optional)
|
||||
* \details
|
||||
* normalCharging(0),
|
||||
* creditCardCharging(2),
|
||||
* callForwardingUnconditional(3),
|
||||
* callForwardingBusy(4),
|
||||
* callForwardingNoReply(5),
|
||||
* callDeflection(6),
|
||||
* callTransfer(7)
|
||||
*/
|
||||
u_int8_t billing_id;
|
||||
/*! \brief TRUE if billing id is present */
|
||||
u_int8_t billing_id_present;
|
||||
} specific;
|
||||
|
||||
/*! \brief chargingAssociation (optional) */
|
||||
struct roseQsigAOCChargingAssociation charging_association;
|
||||
|
||||
/*! \brief TRUE if charging_association is present */
|
||||
u_int8_t charging_association_present;
|
||||
|
||||
/*!
|
||||
* \details
|
||||
* charge_not_available(0),
|
||||
* free_of_charge(1),
|
||||
* specific_currency(2)
|
||||
*/
|
||||
u_int8_t type;
|
||||
};
|
||||
|
||||
/*
|
||||
* ChargeRequestArg ::= SEQUENCE {
|
||||
* adviceModeCombinations SEQUENCE SIZE(0..7) OF AdviceModeCombination,
|
||||
* chargeReqArgExtension CHOICE {
|
||||
* extension [1] IMPLICIT Extension,
|
||||
* multipleExtension [2] IMPLICIT SEQUENCE OF Extension
|
||||
* } OPTIONAL
|
||||
* }
|
||||
*/
|
||||
struct roseQsigChargeRequestArg_ARG {
|
||||
/*!
|
||||
* \brief SEQUENCE SIZE(0..7) OF AdviceModeCombination
|
||||
* \details
|
||||
* rate(0) <charge rate provision>,
|
||||
* rateInterim(1) <charge rate and interim charge provision>,
|
||||
* rateFinal(2) <charge rate and final charge provision>,
|
||||
* interim(3) <interim charge provision>,
|
||||
* final(4) <final charge provision>,
|
||||
* interimFinal(5) <interim charge and final charge provision>,
|
||||
* rateInterimFinal(6) <charge rate, interim charge and final charge provision>
|
||||
*/
|
||||
u_int8_t advice_mode_combinations[7];
|
||||
|
||||
/*! \brief Number of AdviceModeCombination values present */
|
||||
u_int8_t num_records;
|
||||
};
|
||||
|
||||
/*
|
||||
* ChargeRequestRes ::= SEQUENCE {
|
||||
* adviceModeCombination AdviceModeCombination,
|
||||
* chargeReqResExtension CHOICE {
|
||||
* extension [1] IMPLICIT Extension,
|
||||
* multipleExtension [2] IMPLICIT SEQUENCE OF Extension
|
||||
* } OPTIONAL
|
||||
* }
|
||||
*/
|
||||
struct roseQsigChargeRequestRes_RES {
|
||||
/*!
|
||||
* \details
|
||||
* rate(0) <charge rate provision>,
|
||||
* rateInterim(1) <charge rate and interim charge provision>,
|
||||
* rateFinal(2) <charge rate and final charge provision>,
|
||||
* interim(3) <interim charge provision>,
|
||||
* final(4) <final charge provision>,
|
||||
* interimFinal(5) <interim charge and final charge provision>,
|
||||
* rateInterimFinal(6) <charge rate, interim charge and final charge provision>
|
||||
*/
|
||||
u_int8_t advice_mode_combination;
|
||||
};
|
||||
|
||||
/*
|
||||
* AocCompleteArg ::= SEQUENCE {
|
||||
* chargedUser PartyNumber,
|
||||
* chargingAssociation ChargingAssociation OPTIONAL,
|
||||
* completeArgExtension CHOICE {
|
||||
* extension [1] IMPLICIT Extension,
|
||||
* multipleExtension [2] IMPLICIT SEQUENCE OF Extension
|
||||
* } OPTIONAL
|
||||
* }
|
||||
*/
|
||||
struct roseQsigAocCompleteArg_ARG {
|
||||
/*! \brief chargingAssociation (optional) */
|
||||
struct roseQsigAOCChargingAssociation charging_association;
|
||||
|
||||
struct rosePartyNumber charged_user_number;
|
||||
|
||||
/*! \brief TRUE if charging_association is present */
|
||||
u_int8_t charging_association_present;
|
||||
};
|
||||
|
||||
/*
|
||||
* AocCompleteRes ::= SEQUENCE {
|
||||
* chargingOption ChargingOption,
|
||||
* completeResExtension CHOICE {
|
||||
* extension [1] IMPLICIT Extension,
|
||||
* multipleExtension [2] IMPLICIT SEQUENCE OF Extension
|
||||
* } OPTIONAL
|
||||
* }
|
||||
*/
|
||||
struct roseQsigAocCompleteRes_RES {
|
||||
/*!
|
||||
* \details
|
||||
* aocFreeOfCharge(0),
|
||||
* aocContinueCharging(1),
|
||||
* aocStopCharging(2)
|
||||
*/
|
||||
u_int8_t charging_option;
|
||||
};
|
||||
|
||||
/*
|
||||
* AocDivChargeReqArg ::= SEQUENCE {
|
||||
* divertingUser PartyNumber,
|
||||
* chargingAssociation ChargingAssociation OPTIONAL,
|
||||
* diversionType DiversionType,
|
||||
* aocDivChargeReqArgExt CHOICE {
|
||||
* extension [1] IMPLICIT Extension,
|
||||
* multipleExtension [2] IMPLICIT SEQUENCE OF Extension
|
||||
* } OPTIONAL
|
||||
* }
|
||||
*/
|
||||
struct roseQsigAocDivChargeReqArg_ARG {
|
||||
/*! \brief chargingAssociation (optional) */
|
||||
struct roseQsigAOCChargingAssociation charging_association;
|
||||
|
||||
struct rosePartyNumber diverting_user_number;
|
||||
|
||||
/*! \brief TRUE if charging_association is present */
|
||||
u_int8_t charging_association_present;
|
||||
|
||||
/*!
|
||||
* \details
|
||||
* callForwardingUnconditional(0),
|
||||
* callForwardingBusy(1),
|
||||
* callForwardingNoReply(2),
|
||||
* callDeflection(3)
|
||||
*/
|
||||
u_int8_t diversion_type;
|
||||
};
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------- */
|
||||
|
||||
|
||||
/*
|
||||
* CTIdentifyRes ::= SEQUENCE {
|
||||
* callIdentity CallIdentity,
|
||||
@ -2193,6 +2654,14 @@ union rose_msg_invoke_qsig_args {
|
||||
struct roseQsigPartyName_ARG ConnectedName;
|
||||
struct roseQsigPartyName_ARG BusyName;
|
||||
|
||||
/* Q.SIG SS-AOC-Operations */
|
||||
struct roseQsigChargeRequestArg_ARG ChargeRequest;
|
||||
struct roseQsigAocFinalArg_ARG AocFinal;
|
||||
struct roseQsigAocInterimArg_ARG AocInterim;
|
||||
struct roseQsigAocRateArg_ARG AocRate;
|
||||
struct roseQsigAocCompleteArg_ARG AocComplete;
|
||||
struct roseQsigAocDivChargeReqArg_ARG AocDivChargeReq;
|
||||
|
||||
/* Q.SIG Call-Transfer-Operations */
|
||||
struct roseQsigCTInitiateArg_ARG CallTransferInitiate;
|
||||
struct roseQsigCTSetupArg_ARG CallTransferSetup;
|
||||
@ -2219,6 +2688,10 @@ union rose_msg_invoke_qsig_args {
|
||||
|
||||
/*! \brief Facility ie result qsig messages with arguments. */
|
||||
union rose_msg_result_qsig_args {
|
||||
/* Q.SIG SS-AOC-Operations */
|
||||
struct roseQsigChargeRequestRes_RES ChargeRequest;
|
||||
struct roseQsigAocCompleteRes_RES AocComplete;
|
||||
|
||||
/* Q.SIG Call-Transfer-Operations */
|
||||
struct roseQsigCTIdentifyRes_RES CallTransferIdentify;
|
||||
|
||||
|
@ -169,9 +169,10 @@ const unsigned char *rose_dec_qsig_BusyName_ARG(struct pri *ctrl, unsigned tag,
|
||||
|
||||
/*
|
||||
* Q.SIG Dummy invoke/result argument used by:
|
||||
* SS-AOC-Operations,
|
||||
* Call-Transfer-Operations,
|
||||
* Call-Diversion-Operations,
|
||||
* and SS-MWI-Operations
|
||||
* and SS-MWI-Operations.
|
||||
*/
|
||||
unsigned char *rose_enc_qsig_DummyArg_ARG(struct pri *ctrl, unsigned char *pos,
|
||||
unsigned char *end, const union rose_msg_invoke_args *args);
|
||||
@ -185,6 +186,49 @@ const unsigned char *rose_dec_qsig_DummyRes_RES(struct pri *ctrl, unsigned tag,
|
||||
const unsigned char *pos, const unsigned char *end,
|
||||
union rose_msg_result_args *args);
|
||||
|
||||
/* Q.SIG SS-AOC-Operations */
|
||||
unsigned char *rose_enc_qsig_ChargeRequest_ARG(struct pri *ctrl, unsigned char *pos,
|
||||
unsigned char *end, const union rose_msg_invoke_args *args);
|
||||
unsigned char *rose_enc_qsig_ChargeRequest_RES(struct pri *ctrl, unsigned char *pos,
|
||||
unsigned char *end, const union rose_msg_result_args *args);
|
||||
unsigned char *rose_enc_qsig_AocFinal_ARG(struct pri *ctrl, unsigned char *pos,
|
||||
unsigned char *end, const union rose_msg_invoke_args *args);
|
||||
unsigned char *rose_enc_qsig_AocInterim_ARG(struct pri *ctrl, unsigned char *pos,
|
||||
unsigned char *end, const union rose_msg_invoke_args *args);
|
||||
unsigned char *rose_enc_qsig_AocRate_ARG(struct pri *ctrl, unsigned char *pos,
|
||||
unsigned char *end, const union rose_msg_invoke_args *args);
|
||||
unsigned char *rose_enc_qsig_AocComplete_ARG(struct pri *ctrl, unsigned char *pos,
|
||||
unsigned char *end, const union rose_msg_invoke_args *args);
|
||||
unsigned char *rose_enc_qsig_AocComplete_RES(struct pri *ctrl, unsigned char *pos,
|
||||
unsigned char *end, const union rose_msg_result_args *args);
|
||||
unsigned char *rose_enc_qsig_AocDivChargeReq_ARG(struct pri *ctrl, unsigned char *pos,
|
||||
unsigned char *end, const union rose_msg_invoke_args *args);
|
||||
|
||||
const unsigned char *rose_dec_qsig_ChargeRequest_ARG(struct pri *ctrl, unsigned tag,
|
||||
const unsigned char *pos, const unsigned char *end,
|
||||
union rose_msg_invoke_args *args);
|
||||
const unsigned char *rose_dec_qsig_ChargeRequest_RES(struct pri *ctrl, unsigned tag,
|
||||
const unsigned char *pos, const unsigned char *end,
|
||||
union rose_msg_result_args *args);
|
||||
const unsigned char *rose_dec_qsig_AocFinal_ARG(struct pri *ctrl, unsigned tag,
|
||||
const unsigned char *pos, const unsigned char *end,
|
||||
union rose_msg_invoke_args *args);
|
||||
const unsigned char *rose_dec_qsig_AocInterim_ARG(struct pri *ctrl, unsigned tag,
|
||||
const unsigned char *pos, const unsigned char *end,
|
||||
union rose_msg_invoke_args *args);
|
||||
const unsigned char *rose_dec_qsig_AocRate_ARG(struct pri *ctrl, unsigned tag,
|
||||
const unsigned char *pos, const unsigned char *end,
|
||||
union rose_msg_invoke_args *args);
|
||||
const unsigned char *rose_dec_qsig_AocComplete_ARG(struct pri *ctrl, unsigned tag,
|
||||
const unsigned char *pos, const unsigned char *end,
|
||||
union rose_msg_invoke_args *args);
|
||||
const unsigned char *rose_dec_qsig_AocComplete_RES(struct pri *ctrl, unsigned tag,
|
||||
const unsigned char *pos, const unsigned char *end,
|
||||
union rose_msg_result_args *args);
|
||||
const unsigned char *rose_dec_qsig_AocDivChargeReq_ARG(struct pri *ctrl, unsigned tag,
|
||||
const unsigned char *pos, const unsigned char *end,
|
||||
union rose_msg_invoke_args *args);
|
||||
|
||||
/* Q.SIG Call-Diversion-Operations */
|
||||
unsigned char *rose_enc_qsig_ActivateDiversionQ_ARG(struct pri *ctrl, unsigned char *pos,
|
||||
unsigned char *end, const union rose_msg_invoke_args *args);
|
||||
|
1714
rose_qsig_aoc.c
Normal file
1714
rose_qsig_aoc.c
Normal file
File diff suppressed because it is too large
Load Diff
312
rosetest.c
312
rosetest.c
@ -757,6 +757,316 @@ static const struct rose_message rose_qsig_msgs[] = {
|
||||
.component.invoke.args.qsig.CallingName.name.char_set = 1,
|
||||
},
|
||||
|
||||
/* Q.SIG SS-AOC-Operations */
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_ChargeRequest,
|
||||
.component.invoke.invoke_id = 11,
|
||||
.component.invoke.args.qsig.ChargeRequest.num_records = 0,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_ChargeRequest,
|
||||
.component.invoke.invoke_id = 12,
|
||||
.component.invoke.args.qsig.ChargeRequest.num_records = 1,
|
||||
.component.invoke.args.qsig.ChargeRequest.advice_mode_combinations[0] = 3,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_ChargeRequest,
|
||||
.component.invoke.invoke_id = 13,
|
||||
.component.invoke.args.qsig.ChargeRequest.num_records = 2,
|
||||
.component.invoke.args.qsig.ChargeRequest.advice_mode_combinations[0] = 4,
|
||||
.component.invoke.args.qsig.ChargeRequest.advice_mode_combinations[1] = 3,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_RESULT,
|
||||
.component.result.operation = ROSE_QSIG_ChargeRequest,
|
||||
.component.result.invoke_id = 14,
|
||||
.component.result.args.qsig.ChargeRequest.advice_mode_combination = 3,
|
||||
},
|
||||
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_GetFinalCharge,
|
||||
.component.invoke.invoke_id = 15,
|
||||
},
|
||||
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocFinal,
|
||||
.component.invoke.invoke_id = 16,
|
||||
.component.invoke.args.qsig.AocFinal.type = 0,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocFinal,
|
||||
.component.invoke.invoke_id = 17,
|
||||
.component.invoke.args.qsig.AocFinal.type = 1,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocFinal,
|
||||
.component.invoke.invoke_id = 18,
|
||||
.component.invoke.args.qsig.AocFinal.type = 2,
|
||||
.component.invoke.args.qsig.AocFinal.specific.recorded.amount.currency = 800,
|
||||
.component.invoke.args.qsig.AocFinal.specific.recorded.amount.multiplier = 2,
|
||||
.component.invoke.args.qsig.AocFinal.specific.recorded.currency = "Rupies",
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocFinal,
|
||||
.component.invoke.invoke_id = 19,
|
||||
.component.invoke.args.qsig.AocFinal.type = 2,
|
||||
.component.invoke.args.qsig.AocFinal.specific.recorded.amount.currency = 800,
|
||||
.component.invoke.args.qsig.AocFinal.specific.recorded.amount.multiplier = 2,
|
||||
.component.invoke.args.qsig.AocFinal.specific.recorded.currency = "Rupies",
|
||||
.component.invoke.args.qsig.AocFinal.specific.billing_id_present = 1,
|
||||
.component.invoke.args.qsig.AocFinal.specific.billing_id = 2,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocFinal,
|
||||
.component.invoke.invoke_id = 20,
|
||||
.component.invoke.args.qsig.AocFinal.type = 2,
|
||||
.component.invoke.args.qsig.AocFinal.specific.recorded.amount.currency = 800,
|
||||
.component.invoke.args.qsig.AocFinal.specific.recorded.amount.multiplier = 2,
|
||||
.component.invoke.args.qsig.AocFinal.specific.recorded.currency = "Rupies",
|
||||
.component.invoke.args.qsig.AocFinal.charging_association_present = 1,
|
||||
.component.invoke.args.qsig.AocFinal.charging_association.type = 0,
|
||||
.component.invoke.args.qsig.AocFinal.charging_association.id = 200,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocFinal,
|
||||
.component.invoke.invoke_id = 21,
|
||||
.component.invoke.args.qsig.AocFinal.type = 2,
|
||||
.component.invoke.args.qsig.AocFinal.specific.recorded.amount.currency = 800,
|
||||
.component.invoke.args.qsig.AocFinal.specific.recorded.amount.multiplier = 2,
|
||||
.component.invoke.args.qsig.AocFinal.specific.recorded.currency = "Rupies",
|
||||
.component.invoke.args.qsig.AocFinal.specific.billing_id_present = 1,
|
||||
.component.invoke.args.qsig.AocFinal.specific.billing_id = 2,
|
||||
.component.invoke.args.qsig.AocFinal.charging_association_present = 1,
|
||||
.component.invoke.args.qsig.AocFinal.charging_association.type = 0,
|
||||
.component.invoke.args.qsig.AocFinal.charging_association.id = 200,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocFinal,
|
||||
.component.invoke.invoke_id = 22,
|
||||
.component.invoke.args.qsig.AocFinal.type = 2,
|
||||
.component.invoke.args.qsig.AocFinal.specific.recorded.amount.currency = 800,
|
||||
.component.invoke.args.qsig.AocFinal.specific.recorded.amount.multiplier = 2,
|
||||
.component.invoke.args.qsig.AocFinal.specific.recorded.currency = "Rupies",
|
||||
.component.invoke.args.qsig.AocFinal.charging_association_present = 1,
|
||||
.component.invoke.args.qsig.AocFinal.charging_association.type = 1,
|
||||
.component.invoke.args.qsig.AocFinal.charging_association.number.plan = 4,
|
||||
.component.invoke.args.qsig.AocFinal.charging_association.number.length = 4,
|
||||
.component.invoke.args.qsig.AocFinal.charging_association.number.str = "1802",
|
||||
},
|
||||
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocInterim,
|
||||
.component.invoke.invoke_id = 23,
|
||||
.component.invoke.args.qsig.AocInterim.type = 0,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocInterim,
|
||||
.component.invoke.invoke_id = 24,
|
||||
.component.invoke.args.qsig.AocInterim.type = 1,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocInterim,
|
||||
.component.invoke.invoke_id = 25,
|
||||
.component.invoke.args.qsig.AocInterim.type = 2,
|
||||
.component.invoke.args.qsig.AocInterim.specific.recorded.amount.currency = 800,
|
||||
.component.invoke.args.qsig.AocInterim.specific.recorded.amount.multiplier = 2,
|
||||
.component.invoke.args.qsig.AocInterim.specific.recorded.currency = "Rupies",
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocInterim,
|
||||
.component.invoke.invoke_id = 26,
|
||||
.component.invoke.args.qsig.AocInterim.type = 2,
|
||||
.component.invoke.args.qsig.AocInterim.specific.recorded.amount.currency = 800,
|
||||
.component.invoke.args.qsig.AocInterim.specific.recorded.amount.multiplier = 2,
|
||||
.component.invoke.args.qsig.AocInterim.specific.recorded.currency = "Rupies",
|
||||
.component.invoke.args.qsig.AocInterim.specific.billing_id_present = 1,
|
||||
.component.invoke.args.qsig.AocInterim.specific.billing_id = 2,
|
||||
},
|
||||
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocRate,
|
||||
.component.invoke.invoke_id = 27,
|
||||
.component.invoke.args.qsig.AocRate.type = 0,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocRate,
|
||||
.component.invoke.invoke_id = 28,
|
||||
.component.invoke.args.qsig.AocRate.type = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.num_records = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].charged_item = 4,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].currency_type = 0,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.special_charging_code = 3,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocRate,
|
||||
.component.invoke.invoke_id = 29,
|
||||
.component.invoke.args.qsig.AocRate.type = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.num_records = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].charged_item = 4,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].currency_type = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.duration.currency = "Dollars",
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.duration.amount.currency = 7,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.duration.amount.multiplier = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.duration.charging_type = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.duration.time.length = 8,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.duration.time.scale = 4,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocRate,
|
||||
.component.invoke.invoke_id = 30,
|
||||
.component.invoke.args.qsig.AocRate.type = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.num_records = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].charged_item = 4,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].currency_type = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.duration.currency = "Dollars",
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.duration.amount.currency = 7,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.duration.amount.multiplier = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.duration.charging_type = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.duration.time.length = 8,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.duration.time.scale = 4,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.duration.granularity_present = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.duration.granularity.length = 20,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.duration.granularity.scale = 3,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocRate,
|
||||
.component.invoke.invoke_id = 31,
|
||||
.component.invoke.args.qsig.AocRate.type = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.num_records = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].charged_item = 4,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].currency_type = 2,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.flat_rate.currency = "Euros",
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.flat_rate.amount.currency = 4,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.flat_rate.amount.multiplier = 1,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocRate,
|
||||
.component.invoke.invoke_id = 32,
|
||||
.component.invoke.args.qsig.AocRate.type = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.num_records = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].charged_item = 4,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].currency_type = 3,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.volume_rate.currency = "Yen",
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.volume_rate.amount.currency = 300,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.volume_rate.amount.multiplier = 5,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.volume_rate.unit = 2,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocRate,
|
||||
.component.invoke.invoke_id = 33,
|
||||
.component.invoke.args.qsig.AocRate.type = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.num_records = 2,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].charged_item = 4,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].currency_type = 2,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.flat_rate.currency = "Euros",
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.flat_rate.amount.currency = 4,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].u.flat_rate.amount.multiplier = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[1].charged_item = 4,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[1].currency_type = 3,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[1].u.volume_rate.currency = "Yen",
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[1].u.volume_rate.amount.currency = 300,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[1].u.volume_rate.amount.multiplier = 5,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[1].u.volume_rate.unit = 2,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocRate,
|
||||
.component.invoke.invoke_id = 34,
|
||||
.component.invoke.args.qsig.AocRate.type = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.num_records = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].charged_item = 4,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].currency_type = 4,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocRate,
|
||||
.component.invoke.invoke_id = 35,
|
||||
.component.invoke.args.qsig.AocRate.type = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.num_records = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].charged_item = 4,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].currency_type = 5,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocRate,
|
||||
.component.invoke.invoke_id = 36,
|
||||
.component.invoke.args.qsig.AocRate.type = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.num_records = 1,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].charged_item = 4,
|
||||
.component.invoke.args.qsig.AocRate.currency_info.list[0].currency_type = 6,
|
||||
},
|
||||
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocComplete,
|
||||
.component.invoke.invoke_id = 37,
|
||||
.component.invoke.args.qsig.AocComplete.charged_user_number.plan = 4,
|
||||
.component.invoke.args.qsig.AocComplete.charged_user_number.length = 4,
|
||||
.component.invoke.args.qsig.AocComplete.charged_user_number.str = "8340",
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocComplete,
|
||||
.component.invoke.invoke_id = 38,
|
||||
.component.invoke.args.qsig.AocComplete.charged_user_number.plan = 4,
|
||||
.component.invoke.args.qsig.AocComplete.charged_user_number.length = 4,
|
||||
.component.invoke.args.qsig.AocComplete.charged_user_number.str = "8340",
|
||||
.component.invoke.args.qsig.AocComplete.charging_association_present = 1,
|
||||
.component.invoke.args.qsig.AocComplete.charging_association.type = 0,
|
||||
.component.invoke.args.qsig.AocComplete.charging_association.id = 8298,
|
||||
},
|
||||
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_RESULT,
|
||||
.component.result.operation = ROSE_QSIG_AocComplete,
|
||||
.component.result.invoke_id = 39,
|
||||
.component.result.args.qsig.AocComplete.charging_option = 2,
|
||||
},
|
||||
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocDivChargeReq,
|
||||
.component.invoke.invoke_id = 40,
|
||||
.component.invoke.args.qsig.AocDivChargeReq.diverting_user_number.plan = 4,
|
||||
.component.invoke.args.qsig.AocDivChargeReq.diverting_user_number.length = 4,
|
||||
.component.invoke.args.qsig.AocDivChargeReq.diverting_user_number.str = "8340",
|
||||
.component.invoke.args.qsig.AocDivChargeReq.diversion_type = 3,
|
||||
},
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
.component.invoke.operation = ROSE_QSIG_AocDivChargeReq,
|
||||
.component.invoke.invoke_id = 41,
|
||||
.component.invoke.args.qsig.AocDivChargeReq.diverting_user_number.plan = 4,
|
||||
.component.invoke.args.qsig.AocDivChargeReq.diverting_user_number.length = 4,
|
||||
.component.invoke.args.qsig.AocDivChargeReq.diverting_user_number.str = "8340",
|
||||
.component.invoke.args.qsig.AocDivChargeReq.charging_association_present = 1,
|
||||
.component.invoke.args.qsig.AocDivChargeReq.charging_association.type = 0,
|
||||
.component.invoke.args.qsig.AocDivChargeReq.charging_association.id = 8298,
|
||||
.component.invoke.args.qsig.AocDivChargeReq.diversion_type = 3,
|
||||
},
|
||||
|
||||
/* Q.SIG Call-Transfer-Operations (CT) */
|
||||
{
|
||||
.type = ROSE_COMP_TYPE_INVOKE,
|
||||
@ -1697,6 +2007,8 @@ int main(int argc, char *argv[])
|
||||
pri_message(&dummy_ctrl, "\n");
|
||||
pri_message(&dummy_ctrl, "sizeof(struct roseQsigCallRerouting_ARG) = %u\n",
|
||||
(unsigned) sizeof(struct roseQsigCallRerouting_ARG));
|
||||
pri_message(&dummy_ctrl, "sizeof(struct roseQsigAocRateArg_ARG) = %u\n",
|
||||
(unsigned) sizeof(struct roseQsigAocRateArg_ARG));
|
||||
pri_message(&dummy_ctrl, "sizeof(struct roseQsigMWIInterrogateRes) = %u\n",
|
||||
(unsigned) sizeof(struct roseQsigMWIInterrogateRes));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user