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_etsi_aoc.o \
|
||||||
rose_other.o \
|
rose_other.o \
|
||||||
rose_q931.o \
|
rose_q931.o \
|
||||||
|
rose_qsig_aoc.o \
|
||||||
rose_qsig_ct.o \
|
rose_qsig_ct.o \
|
||||||
rose_qsig_diversion.o \
|
rose_qsig_diversion.o \
|
||||||
rose_qsig_mwi.o \
|
rose_qsig_mwi.o \
|
||||||
@ -72,6 +73,7 @@ DYNAMIC_OBJS= \
|
|||||||
rose_etsi_aoc.lo \
|
rose_etsi_aoc.lo \
|
||||||
rose_other.lo \
|
rose_other.lo \
|
||||||
rose_q931.lo \
|
rose_q931.lo \
|
||||||
|
rose_qsig_aoc.lo \
|
||||||
rose_qsig_ct.lo \
|
rose_qsig_ct.lo \
|
||||||
rose_qsig_diversion.lo \
|
rose_qsig_diversion.lo \
|
||||||
rose_qsig_mwi.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:
|
case ROSE_ETSI_ChargingRequest:
|
||||||
break;
|
break;
|
||||||
#endif /* Not handled yet */
|
#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 */
|
#if 0 /* Not handled yet */
|
||||||
case ROSE_QSIG_CallTransferIdentify:
|
case ROSE_QSIG_CallTransferIdentify:
|
||||||
break;
|
break;
|
||||||
@ -1673,6 +1679,22 @@ void rose_handle_invoke(struct pri *ctrl, q931_call *call, q931_ie *ie,
|
|||||||
case ROSE_QSIG_BusyName:
|
case ROSE_QSIG_BusyName:
|
||||||
break;
|
break;
|
||||||
#endif /* Not handled yet */
|
#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 */
|
#if 0 /* Not handled yet */
|
||||||
case ROSE_QSIG_CallTransferIdentify:
|
case ROSE_QSIG_CallTransferIdentify:
|
||||||
break;
|
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
|
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
|
* localValue's from Q.SIG Call-Transfer-Operations
|
||||||
* { iso(1) standard(0) pss1-call-transfer(13869) call-transfer-operations(0) }
|
* { 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
|
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
|
* localValue's from Q.SIG Call-Transfer-Operations
|
||||||
* { iso(1) standard(0) pss1-call-transfer(13869) call-transfer-operations(0) }
|
* { 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_ConnectedName, "ROSE_QSIG_ConnectedName" },
|
||||||
{ ROSE_QSIG_BusyName, "ROSE_QSIG_BusyName" },
|
{ 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_CallTransferIdentify, "ROSE_QSIG_CallTransferIdentify" },
|
||||||
{ ROSE_QSIG_CallTransferAbandon, "ROSE_QSIG_CallTransferAbandon" },
|
{ ROSE_QSIG_CallTransferAbandon, "ROSE_QSIG_CallTransferAbandon" },
|
||||||
{ ROSE_QSIG_CallTransferInitiate, "ROSE_QSIG_CallTransferInitiate" },
|
{ ROSE_QSIG_CallTransferInitiate, "ROSE_QSIG_CallTransferInitiate" },
|
||||||
@ -921,6 +978,8 @@ const char *rose_error2str(enum rose_error_code code)
|
|||||||
/* Q.SIG specific errors */
|
/* Q.SIG specific errors */
|
||||||
{ ROSE_ERROR_QSIG_Unspecified, "Unspecified" },
|
{ 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_InvalidReroutingNumber, "CT: Invalid Rerouting Number" },
|
||||||
{ ROSE_ERROR_QSIG_CT_UnrecognizedCallIdentity,"CT: Unrecognized Call Identity" },
|
{ ROSE_ERROR_QSIG_CT_UnrecognizedCallIdentity,"CT: Unrecognized Call Identity" },
|
||||||
{ ROSE_ERROR_QSIG_CT_EstablishmentFailure, "CT: Establishment Failure" },
|
{ 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_ConnectedName, /*!< Invoke only */
|
||||||
ROSE_QSIG_BusyName, /*!< 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) */
|
/* Q.SIG Call-Transfer-Operations (CT) */
|
||||||
ROSE_QSIG_CallTransferIdentify, /*!< Invoke/Result */
|
ROSE_QSIG_CallTransferIdentify, /*!< Invoke/Result */
|
||||||
ROSE_QSIG_CallTransferAbandon, /*!< Invoke only */
|
ROSE_QSIG_CallTransferAbandon, /*!< Invoke only */
|
||||||
@ -163,6 +172,9 @@ enum rose_error_code {
|
|||||||
/* Q.SIG from various specifications */
|
/* Q.SIG from various specifications */
|
||||||
ROSE_ERROR_QSIG_Unspecified,
|
ROSE_ERROR_QSIG_Unspecified,
|
||||||
|
|
||||||
|
/* Q.SIG SS-AOC-Operations */
|
||||||
|
ROSE_ERROR_QSIG_AOC_FreeOfCharge,
|
||||||
|
|
||||||
/* Q.SIG Call-Transfer-Operations (CT) */
|
/* Q.SIG Call-Transfer-Operations (CT) */
|
||||||
ROSE_ERROR_QSIG_CT_InvalidReroutingNumber,
|
ROSE_ERROR_QSIG_CT_InvalidReroutingNumber,
|
||||||
ROSE_ERROR_QSIG_CT_UnrecognizedCallIdentity,
|
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 {
|
* CTIdentifyRes ::= SEQUENCE {
|
||||||
* callIdentity CallIdentity,
|
* callIdentity CallIdentity,
|
||||||
@ -2193,6 +2654,14 @@ union rose_msg_invoke_qsig_args {
|
|||||||
struct roseQsigPartyName_ARG ConnectedName;
|
struct roseQsigPartyName_ARG ConnectedName;
|
||||||
struct roseQsigPartyName_ARG BusyName;
|
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 */
|
/* Q.SIG Call-Transfer-Operations */
|
||||||
struct roseQsigCTInitiateArg_ARG CallTransferInitiate;
|
struct roseQsigCTInitiateArg_ARG CallTransferInitiate;
|
||||||
struct roseQsigCTSetupArg_ARG CallTransferSetup;
|
struct roseQsigCTSetupArg_ARG CallTransferSetup;
|
||||||
@ -2219,6 +2688,10 @@ union rose_msg_invoke_qsig_args {
|
|||||||
|
|
||||||
/*! \brief Facility ie result qsig messages with arguments. */
|
/*! \brief Facility ie result qsig messages with arguments. */
|
||||||
union rose_msg_result_qsig_args {
|
union rose_msg_result_qsig_args {
|
||||||
|
/* Q.SIG SS-AOC-Operations */
|
||||||
|
struct roseQsigChargeRequestRes_RES ChargeRequest;
|
||||||
|
struct roseQsigAocCompleteRes_RES AocComplete;
|
||||||
|
|
||||||
/* Q.SIG Call-Transfer-Operations */
|
/* Q.SIG Call-Transfer-Operations */
|
||||||
struct roseQsigCTIdentifyRes_RES CallTransferIdentify;
|
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:
|
* Q.SIG Dummy invoke/result argument used by:
|
||||||
|
* SS-AOC-Operations,
|
||||||
* Call-Transfer-Operations,
|
* Call-Transfer-Operations,
|
||||||
* Call-Diversion-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 *rose_enc_qsig_DummyArg_ARG(struct pri *ctrl, unsigned char *pos,
|
||||||
unsigned char *end, const union rose_msg_invoke_args *args);
|
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,
|
const unsigned char *pos, const unsigned char *end,
|
||||||
union rose_msg_result_args *args);
|
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 */
|
/* Q.SIG Call-Diversion-Operations */
|
||||||
unsigned char *rose_enc_qsig_ActivateDiversionQ_ARG(struct pri *ctrl, unsigned char *pos,
|
unsigned char *rose_enc_qsig_ActivateDiversionQ_ARG(struct pri *ctrl, unsigned char *pos,
|
||||||
unsigned char *end, const union rose_msg_invoke_args *args);
|
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,
|
.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) */
|
/* Q.SIG Call-Transfer-Operations (CT) */
|
||||||
{
|
{
|
||||||
.type = ROSE_COMP_TYPE_INVOKE,
|
.type = ROSE_COMP_TYPE_INVOKE,
|
||||||
@ -1697,6 +2007,8 @@ int main(int argc, char *argv[])
|
|||||||
pri_message(&dummy_ctrl, "\n");
|
pri_message(&dummy_ctrl, "\n");
|
||||||
pri_message(&dummy_ctrl, "sizeof(struct roseQsigCallRerouting_ARG) = %u\n",
|
pri_message(&dummy_ctrl, "sizeof(struct roseQsigCallRerouting_ARG) = %u\n",
|
||||||
(unsigned) sizeof(struct roseQsigCallRerouting_ARG));
|
(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",
|
pri_message(&dummy_ctrl, "sizeof(struct roseQsigMWIInterrogateRes) = %u\n",
|
||||||
(unsigned) sizeof(struct roseQsigMWIInterrogateRes));
|
(unsigned) sizeof(struct roseQsigMWIInterrogateRes));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user