[libpri-commits] rmudgett: branch group/issue14068 r743 - /team/group/issue14068/
SVN commits to the libpri project
libpri-commits at lists.digium.com
Wed Apr 15 19:37:57 CDT 2009
Author: rmudgett
Date: Wed Apr 15 19:37:53 2009
New Revision: 743
URL: http://svn.digium.com/svn-view/libpri?view=rev&rev=743
Log:
Added ETSI Call-Diversion and Explicit-Call-Transfer encode/decode routines.
Added:
team/group/issue14068/rose_etsi_diversion.c (with props)
team/group/issue14068/rose_etsi_ect.c (with props)
Modified:
team/group/issue14068/Makefile
team/group/issue14068/pri_facility.c
team/group/issue14068/rose.c
team/group/issue14068/rose.h
team/group/issue14068/rose_internal.h
team/group/issue14068/rosetest.c
Modified: team/group/issue14068/Makefile
URL: http://svn.digium.com/svn-view/libpri/team/group/issue14068/Makefile?view=diff&rev=743&r1=742&r2=743
==============================================================================
--- team/group/issue14068/Makefile (original)
+++ team/group/issue14068/Makefile Wed Apr 15 19:37:53 2009
@@ -52,6 +52,8 @@
rose.o \
rose_address.o \
rose_etsi_aoc.o \
+ rose_etsi_diversion.o \
+ rose_etsi_ect.o \
rose_other.o \
rose_q931.o \
rose_qsig_ct.o \
@@ -70,6 +72,8 @@
rose.lo \
rose_address.lo \
rose_etsi_aoc.lo \
+ rose_etsi_diversion.lo \
+ rose_etsi_ect.lo \
rose_other.lo \
rose_q931.lo \
rose_qsig_ct.lo \
Modified: team/group/issue14068/pri_facility.c
URL: http://svn.digium.com/svn-view/libpri/team/group/issue14068/pri_facility.c?view=diff&rev=743&r1=742&r2=743
==============================================================================
--- team/group/issue14068/pri_facility.c (original)
+++ team/group/issue14068/pri_facility.c Wed Apr 15 19:37:53 2009
@@ -1970,7 +1970,31 @@
break;
#endif /* Not handled yet */
#if 0 /* Not handled yet */
+ case ROSE_ETSI_ActivationDiversion:
+ break;
+ case ROSE_ETSI_DeactivationDiversion:
+ break;
+ case ROSE_ETSI_InterrogationDiversion:
+ break;
+ case ROSE_ETSI_CallDeflection:
+ break;
+ case ROSE_ETSI_CallRerouting:
+ break;
+ case ROSE_ETSI_InterrogateServedUserNumbers:
+ break;
+#endif /* Not handled yet */
+#if 0 /* Not handled yet */
case ROSE_ETSI_ChargingRequest:
+ break;
+#endif /* Not handled yet */
+#if 0 /* Not handled yet */
+ case ROSE_ETSI_EctExecute:
+ break;
+ case ROSE_ETSI_ExplicitEctExecute:
+ break;
+ case ROSE_ETSI_EctLinkIdRequest:
+ break;
+ case ROSE_ETSI_EctLoopTest:
break;
#endif /* Not handled yet */
#if 0 /* Not handled yet */
@@ -2028,6 +2052,32 @@
const struct fac_extension_header *header, const struct rose_msg_invoke *invoke)
{
switch (invoke->operation) {
+#if 0 /* Not handled yet */
+ case ROSE_ETSI_ActivationDiversion:
+ break;
+ case ROSE_ETSI_DeactivationDiversion:
+ break;
+ case ROSE_ETSI_ActivationStatusNotificationDiv:
+ break;
+ case ROSE_ETSI_DeactivationStatusNotificationDiv:
+ break;
+ case ROSE_ETSI_InterrogationDiversion:
+ break;
+ case ROSE_ETSI_DiversionInformation:
+ break;
+ case ROSE_ETSI_CallDeflection:
+ break;
+ case ROSE_ETSI_CallRerouting:
+ break;
+ case ROSE_ETSI_InterrogateServedUserNumbers:
+ break;
+ case ROSE_ETSI_DivertingLegInformation1:
+ break;
+ case ROSE_ETSI_DivertingLegInformation2:
+ break;
+ case ROSE_ETSI_DivertingLegInformation3:
+ break;
+#endif /* Not handled yet */
case ROSE_ETSI_ChargingRequest:
/* Ignore messsage */
break;
@@ -2068,6 +2118,22 @@
break;
#if 0 /* Not handled yet */
case ROSE_ITU_IdentificationOfCharge:
+ break;
+#endif /* Not handled yet */
+#if 0 /* Not handled yet */
+ case ROSE_ETSI_EctExecute:
+ break;
+ case ROSE_ETSI_ExplicitEctExecute:
+ break;
+ case ROSE_ETSI_RequestSubaddress:
+ break;
+ case ROSE_ETSI_SubaddressTransfer:
+ break;
+ case ROSE_ETSI_EctLinkIdRequest:
+ break;
+ case ROSE_ETSI_EctInform:
+ break;
+ case ROSE_ETSI_EctLoopTest:
break;
#endif /* Not handled yet */
case ROSE_QSIG_CallingName:
Modified: team/group/issue14068/rose.c
URL: http://svn.digium.com/svn-view/libpri/team/group/issue14068/rose.c?view=diff&rev=743&r1=742&r2=743
==============================================================================
--- team/group/issue14068/rose.c (original)
+++ team/group/issue14068/rose.c Wed Apr 15 19:37:53 2009
@@ -192,6 +192,14 @@
* First_Value = (First_Subidentifier * 40) + Second_Subidentifier
*/
+/*! \brief ETSI Explicit Call Transfer OID prefix. */
+static const struct asn1_oid rose_etsi_ect = {
+/* *INDENT-OFF* */
+ /* {ccitt(0) identified-organization(4) etsi(0) 369 operations-and-errors(1)} */
+ 4, { 4, 0, 369, 1 }
+/* *INDENT-ON* */
+};
+
/*! \brief ETSI specific invoke/result encode/decode message table */
static const struct rose_convert_msg rose_etsi_msgs[] = {
/* *INDENT-OFF* */
@@ -201,6 +209,71 @@
* decode_invoke_args, decode_result_args
*/
/*
+ * localValue's from Diversion-Operations
+ * {ccitt identified-organization etsi(0) 207 operations-and-errors(1)}
+ */
+ {
+ ROSE_ETSI_ActivationDiversion, NULL, 7,
+ rose_enc_etsi_ActivationDiversion_ARG, NULL,
+ rose_dec_etsi_ActivationDiversion_ARG, NULL
+ },
+ {
+ ROSE_ETSI_DeactivationDiversion, NULL, 8,
+ rose_enc_etsi_DeactivationDiversion_ARG,NULL,
+ rose_dec_etsi_DeactivationDiversion_ARG,NULL
+ },
+ {
+ ROSE_ETSI_ActivationStatusNotificationDiv, NULL, 9,
+ rose_enc_etsi_ActivationStatusNotificationDiv_ARG,NULL,
+ rose_dec_etsi_ActivationStatusNotificationDiv_ARG,NULL
+ },
+ {
+ ROSE_ETSI_DeactivationStatusNotificationDiv,NULL, 10,
+ rose_enc_etsi_DeactivationStatusNotificationDiv_ARG,NULL,
+ rose_dec_etsi_DeactivationStatusNotificationDiv_ARG,NULL
+ },
+ {
+ ROSE_ETSI_InterrogationDiversion, NULL, 11,
+ rose_enc_etsi_InterrogationDiversion_ARG,rose_enc_etsi_InterrogationDiversion_RES,
+ rose_dec_etsi_InterrogationDiversion_ARG,rose_dec_etsi_InterrogationDiversion_RES
+ },
+ {
+ ROSE_ETSI_DiversionInformation, NULL, 12,
+ rose_enc_etsi_DiversionInformation_ARG, NULL,
+ rose_dec_etsi_DiversionInformation_ARG, NULL
+ },
+ {
+ ROSE_ETSI_CallDeflection, NULL, 13,
+ rose_enc_etsi_CallDeflection_ARG, NULL,
+ rose_dec_etsi_CallDeflection_ARG, NULL
+ },
+ {
+ ROSE_ETSI_CallRerouting, NULL, 14,
+ rose_enc_etsi_CallRerouting_ARG, NULL,
+ rose_dec_etsi_CallRerouting_ARG, NULL
+ },
+ {
+ ROSE_ETSI_DivertingLegInformation2, NULL, 15,
+ rose_enc_etsi_DivertingLegInformation2_ARG,NULL,
+ rose_dec_etsi_DivertingLegInformation2_ARG,NULL
+ },
+ {
+ ROSE_ETSI_InterrogateServedUserNumbers, NULL, 17,
+ NULL, rose_enc_etsi_InterrogateServedUserNumbers_RES,
+ NULL, rose_dec_etsi_InterrogateServedUserNumbers_RES
+ },
+ {
+ ROSE_ETSI_DivertingLegInformation1, NULL, 18,
+ rose_enc_etsi_DivertingLegInformation1_ARG,NULL,
+ rose_dec_etsi_DivertingLegInformation1_ARG,NULL
+ },
+ {
+ ROSE_ETSI_DivertingLegInformation3, NULL, 19,
+ rose_enc_etsi_DivertingLegInformation3_ARG,NULL,
+ rose_dec_etsi_DivertingLegInformation3_ARG,NULL
+ },
+
+ /*
* localValue's from Advice-of-Charge-Operations
* {ccitt identified-organization etsi (0) 182 operations-and-errors (1)}
*
@@ -243,6 +316,51 @@
rose_enc_etsi_AOCEChargingUnit_ARG, NULL,
rose_dec_etsi_AOCEChargingUnit_ARG, NULL
},
+
+ /*
+ * localValue's from Explicit-Call-Transfer-Operations-and-Errors
+ * {ccitt identified-organization etsi(0) 369 operations-and-errors(1)}
+ */
+ {
+ ROSE_ETSI_EctExecute, NULL, 6,
+ NULL, NULL,
+ NULL, NULL
+ },
+
+ /*
+ * globalValue's (OIDs) from Explicit-Call-Transfer-Operations-and-Errors
+ * {ccitt identified-organization etsi(0) 369 operations-and-errors(1)}
+ */
+ {
+ ROSE_ETSI_ExplicitEctExecute, &rose_etsi_ect, 1,
+ rose_enc_etsi_ExplicitEctExecute_ARG, NULL,
+ rose_dec_etsi_ExplicitEctExecute_ARG, NULL
+ },
+ {
+ ROSE_ETSI_RequestSubaddress, &rose_etsi_ect, 2,
+ NULL, NULL,
+ NULL, NULL
+ },
+ {
+ ROSE_ETSI_SubaddressTransfer, &rose_etsi_ect, 3,
+ rose_enc_etsi_SubaddressTransfer_ARG, NULL,
+ rose_dec_etsi_SubaddressTransfer_ARG, NULL
+ },
+ {
+ ROSE_ETSI_EctLinkIdRequest, &rose_etsi_ect, 4,
+ NULL, rose_enc_etsi_EctLinkIdRequest_RES,
+ NULL, rose_dec_etsi_EctLinkIdRequest_RES
+ },
+ {
+ ROSE_ETSI_EctInform, &rose_etsi_ect, 5,
+ rose_enc_etsi_EctInform_ARG, NULL,
+ rose_dec_etsi_EctInform_ARG, NULL
+ },
+ {
+ ROSE_ETSI_EctLoopTest, &rose_etsi_ect, 6,
+ rose_enc_etsi_EctLoopTest_ARG, rose_enc_etsi_EctLoopTest_RES,
+ rose_dec_etsi_EctLoopTest_ARG, rose_dec_etsi_EctLoopTest_RES
+ },
/* *INDENT-ON* */
};
@@ -296,11 +414,53 @@
},
/*
+ * localValue Errors from Diversion-Operations
+ * {ccitt identified-organization etsi(0) 207 operations-and-errors(1)}
+ */
+ {
+ ROSE_ERROR_Div_InvalidDivertedToNr, NULL, 12,
+ NULL, NULL
+ },
+ {
+ ROSE_ERROR_Div_SpecialServiceNr, NULL, 14,
+ NULL, NULL
+ },
+ {
+ ROSE_ERROR_Div_DiversionToServedUserNr, NULL, 15,
+ NULL, NULL
+ },
+ {
+ ROSE_ERROR_Div_IncomingCallAccepted, NULL, 23,
+ NULL, NULL
+ },
+ {
+ ROSE_ERROR_Div_NumberOfDiversionsExceeded, NULL, 24,
+ NULL, NULL
+ },
+ {
+ ROSE_ERROR_Div_NotActivated, NULL, 46,
+ NULL, NULL
+ },
+ {
+ ROSE_ERROR_Div_RequestAlreadyAccepted, NULL, 48,
+ NULL, NULL
+ },
+
+ /*
* localValue Errors from Advice-of-Charge-Operations
* {ccitt identified-organization etsi (0) 182 operations-and-errors (1)}
*/
{
ROSE_ERROR_AOC_NoChargingInfoAvailable, NULL, 26,
+ NULL, NULL
+ },
+
+ /*
+ * globalValue Errors (OIDs) from Explicit-Call-Transfer-Operations-and-Errors
+ * {ccitt identified-organization etsi(0) 369 operations-and-errors(1)}
+ */
+ {
+ ROSE_ERROR_ECT_LinkIdNotAssignedByNetwork, &rose_etsi_ect, 21,
NULL, NULL
},
/* *INDENT-ON* */
@@ -830,6 +990,27 @@
/* *INDENT-OFF* */
{ ROSE_None, "ROSE_None" },
{ ROSE_Unknown, "ROSE_Unknown" },
+
+ { ROSE_ETSI_ActivationDiversion, "ROSE_ETSI_ActivationDiversion" },
+ { ROSE_ETSI_DeactivationDiversion, "ROSE_ETSI_DeactivationDiversion" },
+ { ROSE_ETSI_ActivationStatusNotificationDiv,"ROSE_ETSI_ActivationStatusNotificationDiv" },
+ { ROSE_ETSI_DeactivationStatusNotificationDiv,"ROSE_ETSI_DeactivationStatusNotificationDiv" },
+ { ROSE_ETSI_InterrogationDiversion, "ROSE_ETSI_InterrogationDiversion" },
+ { ROSE_ETSI_DiversionInformation, "ROSE_ETSI_DiversionInformation" },
+ { ROSE_ETSI_CallDeflection, "ROSE_ETSI_CallDeflection" },
+ { ROSE_ETSI_CallRerouting, "ROSE_ETSI_CallRerouting" },
+ { ROSE_ETSI_DivertingLegInformation2, "ROSE_ETSI_DivertingLegInformation2" },
+ { ROSE_ETSI_InterrogateServedUserNumbers, "ROSE_ETSI_InterrogateServedUserNumbers" },
+ { ROSE_ETSI_DivertingLegInformation1, "ROSE_ETSI_DivertingLegInformation1" },
+ { ROSE_ETSI_DivertingLegInformation3, "ROSE_ETSI_DivertingLegInformation3" },
+
+ { ROSE_ETSI_EctExecute, "ROSE_ETSI_EctExecute" },
+ { ROSE_ETSI_ExplicitEctExecute, "ROSE_ETSI_ExplicitEctExecute" },
+ { ROSE_ETSI_RequestSubaddress, "ROSE_ETSI_RequestSubaddress" },
+ { ROSE_ETSI_SubaddressTransfer, "ROSE_ETSI_SubaddressTransfer" },
+ { ROSE_ETSI_EctLinkIdRequest, "ROSE_ETSI_EctLinkIdRequest" },
+ { ROSE_ETSI_EctInform, "ROSE_ETSI_EctInform" },
+ { ROSE_ETSI_EctLoopTest, "ROSE_ETSI_EctLoopTest" },
{ ROSE_ETSI_ChargingRequest, "ROSE_ETSI_ChargingRequest" },
{ ROSE_ETSI_AOCSCurrency, "ROSE_ETSI_AOCSCurrency" },
@@ -914,9 +1095,14 @@
{ ROSE_ERROR_Div_InvalidDivertedToNr, "Diversion: Invalid Diverted To Number" },
{ ROSE_ERROR_Div_SpecialServiceNr, "Diversion: Special Service Number" },
{ ROSE_ERROR_Div_DiversionToServedUserNr, "Diversion: Diversion To Served User Number" },
+ { ROSE_ERROR_Div_IncomingCallAccepted, "Diversion: Incoming Call Accepted" },
{ ROSE_ERROR_Div_NumberOfDiversionsExceeded, "Diversion: Number Of Diversions Exceeded" },
+ { ROSE_ERROR_Div_NotActivated, "Diversion: Not Activated" },
+ { ROSE_ERROR_Div_RequestAlreadyAccepted, "Diversion: Request Already Accepted" },
{ ROSE_ERROR_AOC_NoChargingInfoAvailable, "AOC: No Charging Info Available" },
+
+ { ROSE_ERROR_ECT_LinkIdNotAssignedByNetwork, "ECT: Link ID Not Assigned By Network" },
/* Q.SIG specific errors */
{ ROSE_ERROR_QSIG_Unspecified, "Unspecified" },
Modified: team/group/issue14068/rose.h
URL: http://svn.digium.com/svn-view/libpri/team/group/issue14068/rose.h?view=diff&rev=743&r1=742&r2=743
==============================================================================
--- team/group/issue14068/rose.h (original)
+++ team/group/issue14068/rose.h Wed Apr 15 19:37:53 2009
@@ -65,6 +65,20 @@
ROSE_Unknown,
/* *INDENT-OFF* */
+ /* ETSI Diversion-Operations */
+ ROSE_ETSI_ActivationDiversion, /*!< Invoke/Result */
+ ROSE_ETSI_DeactivationDiversion, /*!< Invoke/Result */
+ ROSE_ETSI_ActivationStatusNotificationDiv,/*!< Invoke only */
+ ROSE_ETSI_DeactivationStatusNotificationDiv,/*!< Invoke only */
+ ROSE_ETSI_InterrogationDiversion, /*!< Invoke/Result */
+ ROSE_ETSI_DiversionInformation, /*!< Invoke only */
+ ROSE_ETSI_CallDeflection, /*!< Invoke/Result */
+ ROSE_ETSI_CallRerouting, /*!< Invoke/Result */
+ ROSE_ETSI_InterrogateServedUserNumbers, /*!< Invoke/Result */
+ ROSE_ETSI_DivertingLegInformation1, /*!< Invoke only */
+ ROSE_ETSI_DivertingLegInformation2, /*!< Invoke only */
+ ROSE_ETSI_DivertingLegInformation3, /*!< Invoke only */
+
/*
* ETSI Advice-of-Charge-Operations
*
@@ -79,6 +93,15 @@
ROSE_ETSI_AOCDChargingUnit, /*!< Invoke only */
ROSE_ETSI_AOCECurrency, /*!< Invoke only */
ROSE_ETSI_AOCEChargingUnit, /*!< Invoke only */
+
+ /* ETSI Explicit-Call-Transfer-Operations-and-Errors */
+ ROSE_ETSI_EctExecute, /*!< Invoke/Result */
+ ROSE_ETSI_ExplicitEctExecute, /*!< Invoke/Result */
+ ROSE_ETSI_RequestSubaddress, /*!< Invoke only */
+ ROSE_ETSI_SubaddressTransfer, /*!< Invoke only */
+ ROSE_ETSI_EctLinkIdRequest, /*!< Invoke/Result */
+ ROSE_ETSI_EctInform, /*!< Invoke only */
+ ROSE_ETSI_EctLoopTest, /*!< Invoke/Result */
/* Q.SIG Name-Operations */
ROSE_QSIG_CallingName, /*!< Invoke only */
@@ -155,10 +178,16 @@
ROSE_ERROR_Div_InvalidDivertedToNr,
ROSE_ERROR_Div_SpecialServiceNr,
ROSE_ERROR_Div_DiversionToServedUserNr,
+ ROSE_ERROR_Div_IncomingCallAccepted,
ROSE_ERROR_Div_NumberOfDiversionsExceeded,
+ ROSE_ERROR_Div_NotActivated,
+ ROSE_ERROR_Div_RequestAlreadyAccepted,
/* ETSI Advice-of-Charge-Operations */
ROSE_ERROR_AOC_NoChargingInfoAvailable,
+
+ /* ETSI Explicit-Call-Transfer-Operations-and-Errors */
+ ROSE_ERROR_ECT_LinkIdNotAssignedByNetwork,
/* Q.SIG from various specifications */
ROSE_ERROR_QSIG_Unspecified,
@@ -1028,6 +1057,602 @@
* charging_unit(1)
*/
u_int8_t type;
+};
+
+
+/* ------------------------------------------------------------------- */
+
+
+/*
+ * ARGUMENT SEQUENCE {
+ * procedure Procedure,
+ * basicService BasicService,
+ * forwardedToAddress Address,
+ * servedUserNr ServedUserNr
+ * }
+ */
+struct roseEtsiActivationDiversion_ARG {
+ /*! \brief Forwarded to address */
+ struct roseAddress forwarded_to;
+
+ /*! \brief Forward all numbers if not present (Number length is zero). */
+ struct rosePartyNumber served_user_number;
+
+ /*! \details cfu(0), cfb(1), cfnr(2) */
+ u_int8_t procedure;
+
+ /*!
+ * \details
+ * allServices(0),
+ * speech(1),
+ * unrestrictedDigitalInformation(2),
+ * audio3k1Hz(3),
+ * unrestrictedDigitalInformationWithTonesAndAnnouncements(4),
+ * multirate(5),
+ * telephony3k1Hz(32),
+ * teletex(33),
+ * telefaxGroup4Class1(34),
+ * videotexSyntaxBased(35),
+ * videotelephony(36),
+ * telefaxGroup2-3(37),
+ * telephony7kHz(38),
+ * euroFileTransfer(39),
+ * fileTransferAndAccessManagement(40),
+ * videoconference(41),
+ * audioGraphicConference(42)
+ */
+ u_int8_t basic_service;
+};
+
+
+/*
+ * ARGUMENT SEQUENCE {
+ * procedure Procedure,
+ * basicService BasicService,
+ * servedUserNr ServedUserNr
+ * }
+ */
+struct roseEtsiDeactivationDiversion_ARG {
+ /*! \brief Forward all numbers if not present (Number length is zero). */
+ struct rosePartyNumber served_user_number;
+
+ /*! \details cfu(0), cfb(1), cfnr(2) */
+ u_int8_t procedure;
+
+ /*!
+ * \details
+ * allServices(0),
+ * speech(1),
+ * unrestrictedDigitalInformation(2),
+ * audio3k1Hz(3),
+ * unrestrictedDigitalInformationWithTonesAndAnnouncements(4),
+ * multirate(5),
+ * telephony3k1Hz(32),
+ * teletex(33),
+ * telefaxGroup4Class1(34),
+ * videotexSyntaxBased(35),
+ * videotelephony(36),
+ * telefaxGroup2-3(37),
+ * telephony7kHz(38),
+ * euroFileTransfer(39),
+ * fileTransferAndAccessManagement(40),
+ * videoconference(41),
+ * audioGraphicConference(42)
+ */
+ u_int8_t basic_service;
+};
+
+
+/*
+ * ARGUMENT SEQUENCE {
+ * procedure Procedure,
+ * basicService BasicService,
+ * forwardedToAddresss Address,
+ * servedUserNr ServedUserNr
+ * }
+ */
+struct roseEtsiActivationStatusNotificationDiv_ARG {
+ /*! \brief Forwarded to address */
+ struct roseAddress forwarded_to;
+
+ /*! \brief Forward all numbers if not present (Number length is zero). */
+ struct rosePartyNumber served_user_number;
+
+ /*! \details cfu(0), cfb(1), cfnr(2) */
+ u_int8_t procedure;
+
+ /*!
+ * \details
+ * allServices(0),
+ * speech(1),
+ * unrestrictedDigitalInformation(2),
+ * audio3k1Hz(3),
+ * unrestrictedDigitalInformationWithTonesAndAnnouncements(4),
+ * multirate(5),
+ * telephony3k1Hz(32),
+ * teletex(33),
+ * telefaxGroup4Class1(34),
+ * videotexSyntaxBased(35),
+ * videotelephony(36),
+ * telefaxGroup2-3(37),
+ * telephony7kHz(38),
+ * euroFileTransfer(39),
+ * fileTransferAndAccessManagement(40),
+ * videoconference(41),
+ * audioGraphicConference(42)
+ */
+ u_int8_t basic_service;
+};
+
+/*
+ * ARGUMENT SEQUENCE {
+ * procedure Procedure,
+ * basicService BasicService,
+ * servedUserNr ServedUserNr
+ * }
+ */
+struct roseEtsiDeactivationStatusNotificationDiv_ARG {
+ /*! \brief Forward all numbers if not present (Number length is zero). */
+ struct rosePartyNumber served_user_number;
+
+ /*! \details cfu(0), cfb(1), cfnr(2) */
+ u_int8_t procedure;
+
+ /*!
+ * \details
+ * allServices(0),
+ * speech(1),
+ * unrestrictedDigitalInformation(2),
+ * audio3k1Hz(3),
+ * unrestrictedDigitalInformationWithTonesAndAnnouncements(4),
+ * multirate(5),
+ * telephony3k1Hz(32),
+ * teletex(33),
+ * telefaxGroup4Class1(34),
+ * videotexSyntaxBased(35),
+ * videotelephony(36),
+ * telefaxGroup2-3(37),
+ * telephony7kHz(38),
+ * euroFileTransfer(39),
+ * fileTransferAndAccessManagement(40),
+ * videoconference(41),
+ * audioGraphicConference(42)
+ */
+ u_int8_t basic_service;
+};
+
+
+/*
+ * ARGUMENT SEQUENCE {
+ * procedure Procedure,
+ * basicService BasicService DEFAULT allServices,
+ * servedUserNr ServedUserNr
+ * }
+ */
+struct roseEtsiInterrogationDiversion_ARG {
+ /*! \brief Forward all numbers if not present (Number length is zero). */
+ struct rosePartyNumber served_user_number;
+
+ /*! \details cfu(0), cfb(1), cfnr(2) */
+ u_int8_t procedure;
+
+ /*!
+ * \details
+ * DEFAULT allServices
+ *
+ * \details
+ * allServices(0),
+ * speech(1),
+ * unrestrictedDigitalInformation(2),
+ * audio3k1Hz(3),
+ * unrestrictedDigitalInformationWithTonesAndAnnouncements(4),
+ * multirate(5),
+ * telephony3k1Hz(32),
+ * teletex(33),
+ * telefaxGroup4Class1(34),
+ * videotexSyntaxBased(35),
+ * videotelephony(36),
+ * telefaxGroup2-3(37),
+ * telephony7kHz(38),
+ * euroFileTransfer(39),
+ * fileTransferAndAccessManagement(40),
+ * videoconference(41),
+ * audioGraphicConference(42)
+ */
+ u_int8_t basic_service;
+};
+
+/*
+ * IntResult ::= SEQUENCE {
+ * servedUserNr ServedUserNr,
+ * basicService BasicService,
+ * procedure Procedure,
+ * forwardedToAddress Address
+ * }
+ */
+struct roseEtsiForwardingRecord {
+ /*! \brief Forwarded to address */
+ struct roseAddress forwarded_to;
+
+ /*! \brief Forward all numbers if not present (Number length is zero). */
+ struct rosePartyNumber served_user_number;
+
+ /*! \details cfu(0), cfb(1), cfnr(2) */
+ u_int8_t procedure;
+
+ /*!
+ * \details
+ * allServices(0),
+ * speech(1),
+ * unrestrictedDigitalInformation(2),
+ * audio3k1Hz(3),
+ * unrestrictedDigitalInformationWithTonesAndAnnouncements(4),
+ * multirate(5),
+ * telephony3k1Hz(32),
+ * teletex(33),
+ * telefaxGroup4Class1(34),
+ * videotexSyntaxBased(35),
+ * videotelephony(36),
+ * telefaxGroup2-3(37),
+ * telephony7kHz(38),
+ * euroFileTransfer(39),
+ * fileTransferAndAccessManagement(40),
+ * videoconference(41),
+ * audioGraphicConference(42)
+ */
+ u_int8_t basic_service;
+};
+
+/*
+ * roseInterrogationDiversion_RES
+ * IntResultList ::= SET SIZE (0..29) OF IntResult
+ */
+struct roseEtsiForwardingList {
+ /*!
+ * \brief SET SIZE (0..29) OF Forwarding Records
+ * \note Reduced the size of the array to conserve
+ * potential stack usage.
+ */
+ struct roseEtsiForwardingRecord list[10];
+
+ /*! \brief Number of Forwarding records present */
+ u_int8_t num_records;
+};
+
+/*
+ * ARGUMENT SEQUENCE {
+ * diversionReason DiversionReason,
+ * basicService BasicService,
+ * servedUserSubaddress PartySubaddress OPTIONAL,
+ * callingAddress [0] EXPLICIT PresentedAddressScreened OPTIONAL,
+ * originalCalledNr [1] EXPLICIT PresentedNumberUnscreened OPTIONAL,
+ * lastDivertingNr [2] EXPLICIT PresentedNumberUnscreened OPTIONAL,
+ * lastDivertingReason [3] EXPLICIT DiversionReason OPTIONAL,
+ *
+ * -- The User-user information element, as specified
+ * -- in ETS 300 102-1 [11], subclause 4.5.29, shall
+ * -- be embedded in the userInfo parameter.
+ * userInfo Q931InformationElement OPTIONAL
+ * }
+ */
+struct roseEtsiDiversionInformation_ARG {
+ /*! \brief Served user subaddress (Optional) */
+ struct rosePartySubaddress served_user_subaddress;
+
+ /*! \brief Calling address (Optional) */
+ struct rosePresentedAddressScreened calling;
+
+ /*! \brief Original called number (Optional) */
+ struct rosePresentedNumberUnscreened original_called;
+
+ /*! \brief Last diverting number (Optional) */
+ struct rosePresentedNumberUnscreened last_diverting;
+
+ /*! \brief User-User information embedded in Q.931 IE (Optional) */
+ struct roseQ931ie q931ie;
+ /*! \brief q931ie.contents "allocated" after the stucture. */
+ unsigned char q931ie_contents[ROSE_Q931_MAX_USER + 1];
+
+ /*!
+ * \brief Last diverting reason (Optional)
+ *
+ * \details
+ * unknown(0),
+ * cfu(1),
+ * cfb(2),
+ * cfnr(3),
+ * cdAlerting(4),
+ * cdImmediate(5)
+ */
+ u_int8_t last_diverting_reason;
+
+ /*! \brief TRUE if CallingAddress is present */
+ u_int8_t calling_present;
+
+ /*! \brief TRUE if OriginalCalled is present */
+ u_int8_t original_called_present;
+
+ /*! \brief TRUE if LastDiverting is present */
+ u_int8_t last_diverting_present;
+
+ /*! \brief TRUE if LastDivertingReason is present */
+ u_int8_t last_diverting_reason_present;
+
+ /*!
+ * \details
+ * unknown(0),
+ * cfu(1),
+ * cfb(2),
+ * cfnr(3),
+ * cdAlerting(4),
+ * cdImmediate(5)
+ */
+ u_int8_t diversion_reason;
+
+ /*!
+ * \details
+ * allServices(0),
+ * speech(1),
+ * unrestrictedDigitalInformation(2),
+ * audio3k1Hz(3),
+ * unrestrictedDigitalInformationWithTonesAndAnnouncements(4),
+ * multirate(5),
+ * telephony3k1Hz(32),
+ * teletex(33),
+ * telefaxGroup4Class1(34),
+ * videotexSyntaxBased(35),
+ * videotelephony(36),
+ * telefaxGroup2-3(37),
+ * telephony7kHz(38),
+ * euroFileTransfer(39),
+ * fileTransferAndAccessManagement(40),
+ * videoconference(41),
+ * audioGraphicConference(42)
+ */
+ u_int8_t basic_service;
+};
+
+
+/*
+ * ARGUMENT SEQUENCE {
+ * deflectionAddress Address,
+ * presentationAllowedDivertedToUser PresentationAllowedIndicator OPTIONAL
+ * }
+ */
+struct roseEtsiCallDeflection_ARG {
+ /*! \brief Deflection address (Deflected-To address) */
+ struct roseAddress deflection;
+
+ /*! \brief TRUE if PresentationAllowedToDivertedToUser is present */
+ u_int8_t presentation_allowed_to_diverted_to_user_present;
+
+ /*! \brief TRUE if presentation is allowed (Optional) */
+ u_int8_t presentation_allowed_to_diverted_to_user;
+};
+
+
+/*
+ * ARGUMENT SEQUENCE {
+ * reroutingReason DiversionReason,
+ * calledAddress Address,
+ * reroutingCounter DiversionCounter,
+ *
+ * -- The User-user information element (optional),
+ * -- High layer compatibility information element (optional),
+ * -- Bearer capability information element
+ * -- and Low layer compatibility information element (optional)
+ * -- as specified in ETS 300 102-1 [11] subclause 4.5 shall be
+ * -- embedded in the q931InfoElement.
+ * q931InfoElement Q931InformationElement,
+ * lastReroutingNr [1] EXPLICIT PresentedNumberUnscreened,
+ * subscriptionOption [2] EXPLICIT SubscriptionOption DEFAULT noNotification,
+ * callingPartySubaddress [3] EXPLICIT PartySubaddress OPTIONAL
+ * }
+ */
+struct roseEtsiCallRerouting_ARG {
+ struct roseAddress called_address;
+
+ /*! \brief The BC, HLC (optional), LLC (optional), and User-user (optional) information */
+ struct roseQ931ie q931ie;
+ /*! \brief q931ie.contents "allocated" after the stucture. */
+ unsigned char q931ie_contents[ROSE_Q931_MAX_BC + ROSE_Q931_MAX_HLC +
+ ROSE_Q931_MAX_LLC + ROSE_Q931_MAX_USER + 1];
+
+ /*! \brief Last rerouting number */
+ struct rosePresentedNumberUnscreened last_rerouting;
+
+ /*! \brief Calling party subaddress (Optional) */
+ struct rosePartySubaddress calling_subaddress;
+
+ /*!
+ * \details
+ * unknown(0),
+ * cfu(1),
+ * cfb(2),
+ * cfnr(3),
+ * cdAlerting(4),
+ * cdImmediate(5)
+ */
+ u_int8_t rerouting_reason;
+
+ /*! \brief Range 1-5 */
+ u_int8_t rerouting_counter;
+
+ /*!
+ * \details
+ * DEFAULT noNotification
+ *
+ * \details
+ * noNotification(0),
+ * notificationWithoutDivertedToNr(1),
+ * notificationWithDivertedToNr(2)
+ */
+ u_int8_t subscription_option;
+};
+
+
+/*
+ * roseInterrogateServedUserNumbers_RES
+ * ServedUserNumberList ::= SET SIZE (0..99) OF PartyNumber
+ */
+struct roseEtsiServedUserNumberList {
+ /*!
+ * \brief SET SIZE (0..99) OF Served user numbers
+ * \note Reduced the size of the array to conserve
+ * potential stack usage.
+ */
+ struct rosePartyNumber number[20];
+
+ /*! \brief Number of Served user numbers present */
+ u_int8_t num_records;
+};
+
+
+/*
+ * ARGUMENT SEQUENCE {
+ * diversionReason DiversionReason,
+ * subscriptionOption SubscriptionOption,
+ * divertedToNumber PresentedNumberUnscreened OPTIONAL
+ * }
+ */
+struct roseEtsiDivertingLegInformation1_ARG {
+ /*! \brief Diverted to number (Optional) */
+ struct rosePresentedNumberUnscreened diverted_to;
+
+ /*! \brief TRUE if DivertedTo is present */
+ u_int8_t diverted_to_present;
+
+ /*!
+ * \details
+ * unknown(0),
+ * cfu(1),
+ * cfb(2),
+ * cfnr(3),
+ * cdAlerting(4),
+ * cdImmediate(5)
+ */
+ u_int8_t diversion_reason;
+
+ /*!
+ * \details
+ * noNotification(0),
+ * notificationWithoutDivertedToNr(1),
+ * notificationWithDivertedToNr(2)
+ */
+ u_int8_t subscription_option;
+};
+
+/*
+ * ARGUMENT SEQUENCE {
+ * diversionCounter DiversionCounter,
+ * diversionReason DiversionReason,
+ * divertingNr [1] EXPLICIT PresentedNumberUnscreened OPTIONAL,
+ * originalCalledNr [2] EXPLICIT PresentedNumberUnscreened OPTIONAL
+ * }
+ */
+struct roseEtsiDivertingLegInformation2_ARG {
+ /*! \brief Diverting number (Optional) */
+ struct rosePresentedNumberUnscreened diverting;
+
+ /*! \brief Original called number (Optional) */
+ struct rosePresentedNumberUnscreened original_called;
+
+ /*! \brief TRUE if Diverting number is present */
+ u_int8_t diverting_present;
+
+ /*! \brief TRUE if OriginalCalled is present */
+ u_int8_t original_called_present;
+
+ /*!
+ * \details
+ * unknown(0),
+ * cfu(1),
+ * cfb(2),
+ * cfnr(3),
+ * cdAlerting(4),
+ * cdImmediate(5)
+ */
+ u_int8_t diversion_reason;
+
+ /*! \brief Range 1-5 */
+ u_int8_t diversion_counter;
+};
+
+/*
+ * ARGUMENT presentationAllowedIndicator PresentationAllowedIndicator
+ */
+struct roseEtsiDivertingLegInformation3_ARG {
+ /*! \brief TRUE if presentation is allowed */
+ u_int8_t presentation_allowed_indicator;
+};
+
+
+/* ------------------------------------------------------------------- */
+
+
+/*
+ * ARGUMENT LinkId
+ */
+struct roseEtsiExplicitEctExecute_ARG {
+ int16_t link_id;
+};
+
+/*
+ * ARGUMENT transferredToSubaddress PartySubaddress
+ */
+struct roseEtsiSubaddressTransfer_ARG {
+ /*! \brief Transferred to subaddress */
+ struct rosePartySubaddress subaddress;
+};
+
+
+/*
+ * RESULT LinkId
+ */
+struct roseEtsiEctLinkIdRequest_RES {
+ int16_t link_id;
+};
+
+
+/*
+ * ARGUMENT SEQUENCE {
+ * ENUMERATED {
+ * alerting (0),
+ * active (1)
+ * },
+ * redirectionNumber PresentedNumberUnscreened OPTIONAL
+ * }
+ */
+struct roseEtsiEctInform_ARG {
+ /*! \brief Redirection Number (Optional) */
+ struct rosePresentedNumberUnscreened redirection;
+
+ /*! \brief TRUE if the Redirection Number is present */
+ u_int8_t redirection_present;
+
+ /*! \details alerting(0), active(1) */
+ u_int8_t status;
+};
+
+
+/*
+ * ARGUMENT CallTransferIdentity
+ */
+struct roseEtsiEctLoopTest_ARG {
+ int8_t call_transfer_id;
+};
+
+/*
+ * RESULT LoopResult
+ */
+struct roseEtsiEctLoopTest_RES {
+ /*!
+ * \details
+ * insufficientInformation(0),
+ * noLoopExists(1),
+ * simultaneousTransfer(2)
+ */
+ u_int8_t loop_result;
};
@@ -2177,12 +2802,40 @@
struct roseEtsiAOCDChargingUnit_ARG AOCDChargingUnit;
struct roseEtsiAOCECurrency_ARG AOCECurrency;
struct roseEtsiAOCEChargingUnit_ARG AOCEChargingUnit;
+
+ /* ETSI Call Diversion */
+ struct roseEtsiActivationDiversion_ARG ActivationDiversion;
+ struct roseEtsiDeactivationDiversion_ARG DeactivationDiversion;
+ struct roseEtsiActivationStatusNotificationDiv_ARG ActivationStatusNotificationDiv;
+ struct roseEtsiDeactivationStatusNotificationDiv_ARG
+ DeactivationStatusNotificationDiv;
+ struct roseEtsiInterrogationDiversion_ARG InterrogationDiversion;
+ struct roseEtsiDiversionInformation_ARG DiversionInformation;
+ struct roseEtsiCallDeflection_ARG CallDeflection;
+ struct roseEtsiCallRerouting_ARG CallRerouting;
+ struct roseEtsiDivertingLegInformation1_ARG DivertingLegInformation1;
+ struct roseEtsiDivertingLegInformation2_ARG DivertingLegInformation2;
+ struct roseEtsiDivertingLegInformation3_ARG DivertingLegInformation3;
+
+ /* ETSI Explicit Call Transfer (ECT) */
+ struct roseEtsiExplicitEctExecute_ARG ExplicitEctExecute;
+ struct roseEtsiSubaddressTransfer_ARG SubaddressTransfer;
+ struct roseEtsiEctInform_ARG EctInform;
+ struct roseEtsiEctLoopTest_ARG EctLoopTest;
};
/*! \brief Facility ie result etsi messages with arguments. */
union rose_msg_result_etsi_args {
/* ETSI Advice Of Charge (AOC) */
struct roseEtsiChargingRequest_RES ChargingRequest;
+
+ /* ETSI Call Diversion */
+ struct roseEtsiForwardingList InterrogationDiversion;
+ struct roseEtsiServedUserNumberList InterrogateServedUserNumbers;
+
+ /* ETSI Explicit Call Transfer (ECT) */
+ struct roseEtsiEctLinkIdRequest_RES EctLinkIdRequest;
+ struct roseEtsiEctLoopTest_RES EctLoopTest;
};
/*! \brief Facility ie invoke qsig messages with arguments. */
Added: team/group/issue14068/rose_etsi_diversion.c
URL: http://svn.digium.com/svn-view/libpri/team/group/issue14068/rose_etsi_diversion.c?view=auto&rev=743
==============================================================================
--- team/group/issue14068/rose_etsi_diversion.c (added)
+++ team/group/issue14068/rose_etsi_diversion.c Wed Apr 15 19:37:53 2009
@@ -1,0 +1,1623 @@
+/*
+ * libpri: An implementation of Primary Rate ISDN
+ *
+ * Copyright (C) 2009 Digium, Inc.
+ *
+ * Richard Mudgett <rmudgett at digium.com>
+ *
+ * See http://www.asterisk.org for more information about
+ * the Asterisk project. Please do not directly contact
+ * any of the maintainers of this project for assistance;
+ * the project provides a web site, mailing lists and IRC
+ * channels for your use.
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License Version 2 as published by the
+ * Free Software Foundation. See the LICENSE file included with
+ * this program for more details.
+ *
+ * In addition, when this program is distributed with Asterisk in
+ * any form that would qualify as a 'combined work' or as a
+ * 'derivative work' (but not mere aggregation), you can redistribute
+ * and/or modify the combination under the terms of the license
+ * provided with that copy of Asterisk, instead of the license
+ * terms granted here.
+ */
+
+/*!
+ * \file
+ * \brief ROSE Call diversion operations
+ *
+ * Diversion Supplementary Services ETS 300 207-1 Table 3
+ *
+ * \author Richard Mudgett <rmudgett at digium.com>
+ */
+
+
+#include "compat.h"
+#include "libpri.h"
+#include "pri_internal.h"
+#include "rose.h"
+#include "rose_internal.h"
+#include "asn1.h"
+
+
+/* ------------------------------------------------------------------- */
+
+/*!
+ * \internal
+ * \brief Encode the ServedUserNr type.
+ *
+ * \param ctrl D channel controller for diagnostic messages or global options.
+ * \param pos Starting position to encode ASN.1 component.
+ * \param end End of ASN.1 encoding data buffer.
+ * \param served_user_number Served user number information to encode.
+ *
+ * \retval Start of the next ASN.1 component to encode on success.
+ * \retval NULL on error.
+ */
+static unsigned char *rose_enc_etsi_ServedUserNumber(struct pri *ctrl,
+ unsigned char *pos, unsigned char *end,
+ const struct rosePartyNumber *served_user_number)
+{
+ if (served_user_number->length) {
+ /* Forward this number */
+ pos = rose_enc_PartyNumber(ctrl, pos, end, served_user_number);
+ } else {
+ /* Forward all numbers */
+ pos = asn1_enc_null(pos, end, ASN1_TYPE_NULL);
+ }
+
+ return pos;
+}
+
+/*!
+ * \internal
+ * \brief Encode the IntResult type.
+ *
+ * \param ctrl D channel controller for diagnostic messages or global options.
+ * \param pos Starting position to encode ASN.1 component.
+ * \param end End of ASN.1 encoding data buffer.
+ * \param tag Component tag to identify the encoded component.
+ * The tag should be ASN1_TAG_SEQUENCE unless the caller implicitly
+ * tags it otherwise.
+ * \param int_result Forwarding record information to encode.
+ *
+ * \retval Start of the next ASN.1 component to encode on success.
+ * \retval NULL on error.
+ */
+static unsigned char *rose_enc_etsi_IntResult(struct pri *ctrl, unsigned char *pos,
+ unsigned char *end, unsigned tag, const struct roseEtsiForwardingRecord *int_result)
+{
+ unsigned char *seq_len;
+
+ ASN1_CONSTRUCTED_BEGIN(seq_len, pos, end, tag);
+
+ ASN1_CALL(pos, rose_enc_etsi_ServedUserNumber(ctrl, pos, end,
+ &int_result->served_user_number));
+ ASN1_CALL(pos, asn1_enc_int(pos, end, ASN1_TYPE_ENUMERATED,
+ int_result->basic_service));
+ ASN1_CALL(pos, asn1_enc_int(pos, end, ASN1_TYPE_ENUMERATED, int_result->procedure));
+ ASN1_CALL(pos, rose_enc_Address(ctrl, pos, end, ASN1_TAG_SEQUENCE,
+ &int_result->forwarded_to));
+
+ ASN1_CONSTRUCTED_END(seq_len, pos, end);
+
+ return pos;
+}
+
+/*!
+ * \internal
+ * \brief Encode the IntResultList type.
+ *
+ * \param ctrl D channel controller for diagnostic messages or global options.
+ * \param pos Starting position to encode ASN.1 component.
+ * \param end End of ASN.1 encoding data buffer.
+ * \param tag Component tag to identify the encoded component.
+ * The tag should be ASN1_TAG_SET unless the caller implicitly
+ * tags it otherwise.
+ * \param int_result_list Forwarding record list information to encode.
+ *
+ * \retval Start of the next ASN.1 component to encode on success.
+ * \retval NULL on error.
+ */
+static unsigned char *rose_enc_etsi_IntResultList(struct pri *ctrl, unsigned char *pos,
+ unsigned char *end, unsigned tag,
+ const struct roseEtsiForwardingList *int_result_list)
+{
+ unsigned index;
+ unsigned char *set_len;
+
+ ASN1_CONSTRUCTED_BEGIN(set_len, pos, end, tag);
+
+ for (index = 0; index < int_result_list->num_records; ++index) {
+ ASN1_CALL(pos, rose_enc_etsi_IntResult(ctrl, pos, end, ASN1_TAG_SEQUENCE,
+ &int_result_list->list[index]));
+ }
+
+ ASN1_CONSTRUCTED_END(set_len, pos, end);
+
+ return pos;
+}
+
+/*!
+ * \internal
+ * \brief Encode the ServedUserNumberList type.
+ *
+ * \param ctrl D channel controller for diagnostic messages or global options.
+ * \param pos Starting position to encode ASN.1 component.
+ * \param end End of ASN.1 encoding data buffer.
+ * \param tag Component tag to identify the encoded component.
+ * The tag should be ASN1_TAG_SET unless the caller implicitly
+ * tags it otherwise.
+ * \param served_user_number_list Served user record list information to encode.
+ *
+ * \retval Start of the next ASN.1 component to encode on success.
+ * \retval NULL on error.
+ */
+static unsigned char *rose_enc_etsi_ServedUserNumberList(struct pri *ctrl,
+ unsigned char *pos, unsigned char *end, unsigned tag,
+ const struct roseEtsiServedUserNumberList *served_user_number_list)
+{
+ unsigned index;
+ unsigned char *set_len;
+
+ ASN1_CONSTRUCTED_BEGIN(set_len, pos, end, tag);
+
+ for (index = 0; index < served_user_number_list->num_records; ++index) {
+ ASN1_CALL(pos, rose_enc_PartyNumber(ctrl, pos, end,
+ &served_user_number_list->number[index]));
+ }
+
+ ASN1_CONSTRUCTED_END(set_len, pos, end);
+
+ return pos;
+}
+
+/*!
+ * \brief Encode the ActivationDiversion invoke facility ie arguments.
+ *
+ * \param ctrl D channel controller for diagnostic messages or global options.
+ * \param pos Starting position to encode ASN.1 component.
+ * \param end End of ASN.1 encoding data buffer.
+ * \param args Arguments to encode in the buffer.
+ *
+ * \retval Start of the next ASN.1 component to encode on success.
+ * \retval NULL on error.
+ */
+unsigned char *rose_enc_etsi_ActivationDiversion_ARG(struct pri *ctrl,
+ unsigned char *pos, unsigned char *end, const union rose_msg_invoke_args *args)
+{
+ const struct roseEtsiActivationDiversion_ARG *activation_diversion;
+ unsigned char *seq_len;
+
+ ASN1_CONSTRUCTED_BEGIN(seq_len, pos, end, ASN1_TAG_SEQUENCE);
+
+ activation_diversion = &args->etsi.ActivationDiversion;
+ ASN1_CALL(pos, asn1_enc_int(pos, end, ASN1_TYPE_ENUMERATED,
+ activation_diversion->procedure));
+ ASN1_CALL(pos, asn1_enc_int(pos, end, ASN1_TYPE_ENUMERATED,
+ activation_diversion->basic_service));
+ ASN1_CALL(pos, rose_enc_Address(ctrl, pos, end, ASN1_TAG_SEQUENCE,
+ &activation_diversion->forwarded_to));
+ ASN1_CALL(pos, rose_enc_etsi_ServedUserNumber(ctrl, pos, end,
+ &activation_diversion->served_user_number));
+
+ ASN1_CONSTRUCTED_END(seq_len, pos, end);
+
+ return pos;
+}
+
+/*!
+ * \brief Encode the DeactivationDiversion invoke facility ie arguments.
+ *
+ * \param ctrl D channel controller for diagnostic messages or global options.
+ * \param pos Starting position to encode ASN.1 component.
+ * \param end End of ASN.1 encoding data buffer.
[... 2360 lines stripped ...]
More information about the libpri-commits
mailing list