[libpri-commits] rmudgett: branch group/issue14292 r745 - /team/group/issue14292/

SVN commits to the libpri project libpri-commits at lists.digium.com
Thu Apr 16 19:52:50 CDT 2009


Author: rmudgett
Date: Thu Apr 16 19:52:47 2009
New Revision: 745

URL: http://svn.digium.com/svn-view/libpri?view=rev&rev=745
Log:
Added ETSI CCBS/CCNR and Status-Request encode/decode routines.

Added:
    team/group/issue14292/rose_etsi_cc.c   (with props)
Modified:
    team/group/issue14292/Makefile
    team/group/issue14292/pri_facility.c
    team/group/issue14292/rose.c
    team/group/issue14292/rose.h
    team/group/issue14292/rose_internal.h
    team/group/issue14292/rosetest.c

Modified: team/group/issue14292/Makefile
URL: http://svn.digium.com/svn-view/libpri/team/group/issue14292/Makefile?view=diff&rev=745&r1=744&r2=745
==============================================================================
--- team/group/issue14292/Makefile (original)
+++ team/group/issue14292/Makefile Thu Apr 16 19:52:47 2009
@@ -52,6 +52,7 @@
 	rose.o \
 	rose_address.o \
 	rose_etsi_aoc.o \
+	rose_etsi_cc.o \
 	rose_etsi_diversion.o \
 	rose_etsi_ect.o \
 	rose_other.o \
@@ -73,6 +74,7 @@
 	rose.lo \
 	rose_address.lo \
 	rose_etsi_aoc.lo \
+	rose_etsi_cc.lo \
 	rose_etsi_diversion.lo \
 	rose_etsi_ect.lo \
 	rose_other.lo \

Modified: team/group/issue14292/pri_facility.c
URL: http://svn.digium.com/svn-view/libpri/team/group/issue14292/pri_facility.c?view=diff&rev=745&r1=744&r2=745
==============================================================================
--- team/group/issue14292/pri_facility.c (original)
+++ team/group/issue14292/pri_facility.c Thu Apr 16 19:52:47 2009
@@ -2221,6 +2221,30 @@
 		break;
 #endif	/* Not handled yet */
 #if 0	/* Not handled yet */
+	case ROSE_ETSI_StatusRequest:
+		break;
+#endif	/* Not handled yet */
+#if 0	/* Not handled yet */
+	case ROSE_ETSI_CCBSRequest:
+		break;
+	case ROSE_ETSI_CCBSDeactivate:
+		break;
+	case ROSE_ETSI_CCBSInterrogate:
+		break;
+	case ROSE_ETSI_CCBSStatusRequest:
+		break;
+	case ROSE_ETSI_CCBS_T_Request:
+		break;
+#endif	/* Not handled yet */
+#if 0	/* Not handled yet */
+	case ROSE_ETSI_CCNRRequest:
+		break;
+	case ROSE_ETSI_CCNRInterrogate:
+		break;
+	case ROSE_ETSI_CCNR_T_Request:
+		break;
+#endif	/* Not handled yet */
+#if 0	/* Not handled yet */
 	case ROSE_QSIG_CallTransferIdentify:
 		break;
 	case ROSE_QSIG_CallTransferInitiate:
@@ -2389,6 +2413,54 @@
 	case ROSE_ETSI_EctInform:
 		break;
 	case ROSE_ETSI_EctLoopTest:
+		break;
+#endif	/* Not handled yet */
+#if 0	/* Not handled yet */
+	case ROSE_ETSI_StatusRequest:
+		break;
+#endif	/* Not handled yet */
+#if 0	/* Not handled yet */
+	case ROSE_ETSI_CallInfoRetain:
+		break;
+	case ROSE_ETSI_CCBSRequest:
+		break;
+	case ROSE_ETSI_CCBSDeactivate:
+		break;
+	case ROSE_ETSI_CCBSInterrogate:
+		break;
+	case ROSE_ETSI_CCBSErase:
+		break;
+	case ROSE_ETSI_CCBSRemoteUserFree:
+		break;
+	case ROSE_ETSI_CCBSCall:
+		break;
+	case ROSE_ETSI_CCBSStatusRequest:
+		break;
+	case ROSE_ETSI_CCBSBFree:
+		break;
+	case ROSE_ETSI_EraseCallLinkageID:
+		break;
+	case ROSE_ETSI_CCBSStopAlerting:
+		break;
+	case ROSE_ETSI_CCBS_T_Request:
+		break;
+	case ROSE_ETSI_CCBS_T_Call:
+		break;
+	case ROSE_ETSI_CCBS_T_Suspend:
+		break;
+	case ROSE_ETSI_CCBS_T_Resume:
+		break;
+	case ROSE_ETSI_CCBS_T_RemoteUserFree:
+		break;
+	case ROSE_ETSI_CCBS_T_Available:
+		break;
+#endif	/* Not handled yet */
+#if 0	/* Not handled yet */
+	case ROSE_ETSI_CCNRRequest:
+		break;
+	case ROSE_ETSI_CCNRInterrogate:
+		break;
+	case ROSE_ETSI_CCNR_T_Request:
 		break;
 #endif	/* Not handled yet */
 	case ROSE_QSIG_CallingName:

Modified: team/group/issue14292/rose.c
URL: http://svn.digium.com/svn-view/libpri/team/group/issue14292/rose.c?view=diff&rev=745&r1=744&r2=745
==============================================================================
--- team/group/issue14292/rose.c (original)
+++ team/group/issue14292/rose.c Thu Apr 16 19:52:47 2009
@@ -200,6 +200,46 @@
 /* *INDENT-ON* */
 };
 
+/*! \brief ETSI Status Request OID prefix. */
+static const struct asn1_oid rose_etsi_status_request = {
+/* *INDENT-OFF* */
+	/* {itu-t(0) identified-organization(4) etsi(0) 196 status-request-procedure(9)} */
+	4, { 4, 0, 196, 9 }
+/* *INDENT-ON* */
+};
+
+/*! \brief ETSI Call Completion Busy Status OID prefix. */
+static const struct asn1_oid rose_etsi_ccbs = {
+/* *INDENT-OFF* */
+	/* {ccitt(0) identified-organization(4) etsi(0) 359 operations-and-errors(1)} */
+	4, { 4, 0, 359, 1 }
+/* *INDENT-ON* */
+};
+
+/*! \brief ETSI Call Completion Busy Status public-private interworking OID prefix. */
+static const struct asn1_oid rose_etsi_ccbs_t = {
+/* *INDENT-OFF* */
+	/* {ccitt(0) identified-organization(4) etsi(0) 359 private-networks-operations-and-errors(2)} */
+	4, { 4, 0, 359, 2 }
+/* *INDENT-ON* */
+};
+
+/*! \brief ETSI Call Completion No Reply OID prefix. */
+static const struct asn1_oid rose_etsi_ccnr = {
+/* *INDENT-OFF* */
+	/* {ccitt(0) identified-organization(4) etsi(0) 1065 operations-and-errors(1)} */
+	4, { 4, 0, 1065, 1 }
+/* *INDENT-ON* */
+};
+
+/*! \brief ETSI Call Completion No Reply public-private interworking OID prefix. */
+static const struct asn1_oid rose_etsi_ccnr_t = {
+/* *INDENT-OFF* */
+	/* {ccitt(0) identified-organization(4) etsi(0) 1065 private-networks-operations-and-errors(2)} */
+	4, { 4, 0, 1065, 2 }
+/* *INDENT-ON* */
+};
+
 /*! \brief ETSI specific invoke/result encode/decode message table */
 static const struct rose_convert_msg rose_etsi_msgs[] = {
 /* *INDENT-OFF* */
@@ -361,6 +401,136 @@
 			rose_enc_etsi_EctLoopTest_ARG,			rose_enc_etsi_EctLoopTest_RES,
 			rose_dec_etsi_EctLoopTest_ARG,			rose_dec_etsi_EctLoopTest_RES
 	},
+
+	/*
+	 * globalValue's (OIDs) from Status-Request-Procedure
+	 * {itu-t identified-organization etsi(0) 196 status-request-procedure(9)}
+	 */
+	{
+		ROSE_ETSI_StatusRequest,					&rose_etsi_status_request, 1,
+			rose_enc_etsi_StatusRequest_ARG,		rose_enc_etsi_StatusRequest_RES,
+			rose_dec_etsi_StatusRequest_ARG,		rose_dec_etsi_StatusRequest_RES
+	},
+
+	/*
+	 * globalValue's (OIDs) from CCBS-Operations-and-Errors
+	 * {ccitt identified-organization etsi(0) 359 operations-and-errors(1)}
+	 */
+	{
+		ROSE_ETSI_CallInfoRetain,					&rose_etsi_ccbs, 1,
+			rose_enc_etsi_CallInfoRetain_ARG,		NULL,
+			rose_dec_etsi_CallInfoRetain_ARG,		NULL
+	},
+	{
+		ROSE_ETSI_CCBSRequest,						&rose_etsi_ccbs, 2,
+			rose_enc_etsi_CCBSRequest_ARG,			rose_enc_etsi_CCBSRequest_RES,
+			rose_dec_etsi_CCBSRequest_ARG,			rose_dec_etsi_CCBSRequest_RES
+	},
+	{
+		ROSE_ETSI_CCBSDeactivate,					&rose_etsi_ccbs, 3,
+			rose_enc_etsi_CCBSDeactivate_ARG,		NULL,
+			rose_dec_etsi_CCBSDeactivate_ARG,		NULL
+	},
+	{
+		ROSE_ETSI_CCBSInterrogate,					&rose_etsi_ccbs, 4,
+			rose_enc_etsi_CCBSInterrogate_ARG,		rose_enc_etsi_CCBSInterrogate_RES,
+			rose_dec_etsi_CCBSInterrogate_ARG,		rose_dec_etsi_CCBSInterrogate_RES
+	},
+	{
+		ROSE_ETSI_CCBSErase,						&rose_etsi_ccbs, 5,
+			rose_enc_etsi_CCBSErase_ARG,			NULL,
+			rose_dec_etsi_CCBSErase_ARG,			NULL
+	},
+	{
+		ROSE_ETSI_CCBSRemoteUserFree,				&rose_etsi_ccbs, 6,
+			rose_enc_etsi_CCBSRemoteUserFree_ARG,	NULL,
+			rose_dec_etsi_CCBSRemoteUserFree_ARG,	NULL
+	},
+	{
+		ROSE_ETSI_CCBSCall,							&rose_etsi_ccbs, 7,
+			rose_enc_etsi_CCBSCall_ARG,				NULL,
+			rose_dec_etsi_CCBSCall_ARG,				NULL
+	},
+	{
+		ROSE_ETSI_CCBSStatusRequest,				&rose_etsi_ccbs, 8,
+			rose_enc_etsi_CCBSStatusRequest_ARG,	rose_enc_etsi_CCBSStatusRequest_RES,
+			rose_dec_etsi_CCBSStatusRequest_ARG,	rose_dec_etsi_CCBSStatusRequest_RES
+	},
+	{
+		ROSE_ETSI_CCBSBFree,						&rose_etsi_ccbs, 9,
+			rose_enc_etsi_CCBSBFree_ARG,			NULL,
+			rose_dec_etsi_CCBSBFree_ARG,			NULL
+	},
+	{
+		ROSE_ETSI_EraseCallLinkageID,				&rose_etsi_ccbs, 10,
+			rose_enc_etsi_EraseCallLinkageID_ARG,	NULL,
+			rose_dec_etsi_EraseCallLinkageID_ARG,	NULL
+	},
+	{
+		ROSE_ETSI_CCBSStopAlerting,					&rose_etsi_ccbs, 11,
+			rose_enc_etsi_CCBSStopAlerting_ARG,		NULL,
+			rose_dec_etsi_CCBSStopAlerting_ARG,		NULL
+	},
+
+	/*
+	 * globalValue's (OIDs) from CCBS-private-networks-Operations-and-Errors
+	 * {ccitt identified-organization etsi(0) 359 private-networks-operations-and-errors(2)}
+	 */
+	{
+		ROSE_ETSI_CCBS_T_Request,					&rose_etsi_ccbs_t, 1,
+			rose_enc_etsi_CCBS_T_Request_ARG,		rose_enc_etsi_CCBS_T_Request_RES,
+			rose_dec_etsi_CCBS_T_Request_ARG,		rose_dec_etsi_CCBS_T_Request_RES
+	},
+	{
+		ROSE_ETSI_CCBS_T_Call,						&rose_etsi_ccbs_t, 2,
+			NULL,									NULL,
+			NULL,									NULL
+	},
+	{
+		ROSE_ETSI_CCBS_T_Suspend,					&rose_etsi_ccbs_t, 3,
+			NULL,									NULL,
+			NULL,									NULL
+	},
+	{
+		ROSE_ETSI_CCBS_T_Resume,					&rose_etsi_ccbs_t, 4,
+			NULL,									NULL,
+			NULL,									NULL
+	},
+	{
+		ROSE_ETSI_CCBS_T_RemoteUserFree,			&rose_etsi_ccbs_t, 5,
+			NULL,									NULL,
+			NULL,									NULL
+	},
+	{
+		ROSE_ETSI_CCBS_T_Available,					&rose_etsi_ccbs_t, 6,
+			NULL,									NULL,
+			NULL,									NULL
+	},
+
+	/*
+	 * globalValue's (OIDs) from CCNR-Operations-and-Errors
+	 * {ccitt identified-organization etsi(0) 1065 operations-and-errors(1)}
+	 */
+	{
+		ROSE_ETSI_CCNRRequest,						&rose_etsi_ccnr, 1,
+			rose_enc_etsi_CCNRRequest_ARG,			rose_enc_etsi_CCNRRequest_RES,
+			rose_dec_etsi_CCNRRequest_ARG,			rose_dec_etsi_CCNRRequest_RES
+	},
+	{
+		ROSE_ETSI_CCNRInterrogate,					&rose_etsi_ccnr, 2,
+			rose_enc_etsi_CCNRInterrogate_ARG,		rose_enc_etsi_CCNRInterrogate_RES,
+			rose_dec_etsi_CCNRInterrogate_ARG,		rose_dec_etsi_CCNRInterrogate_RES
+	},
+
+	/*
+	 * globalValue's (OIDs) from CCNR-private-networks-Operations-and-Errors
+	 * {ccitt identified-organization etsi(0) 1065 private-networks-operations-and-errors(2)}
+	 */
+	{
+		ROSE_ETSI_CCNR_T_Request,					&rose_etsi_ccnr_t, 1,
+			rose_enc_etsi_CCNR_T_Request_ARG,		rose_enc_etsi_CCNR_T_Request_RES,
+			rose_dec_etsi_CCNR_T_Request_ARG,		rose_dec_etsi_CCNR_T_Request_RES
+	},
 /* *INDENT-ON* */
 };
 
@@ -461,6 +631,60 @@
 	 */
 	{
 		ROSE_ERROR_ECT_LinkIdNotAssignedByNetwork,	&rose_etsi_ect, 21,
+			NULL,									NULL
+	},
+
+	/*
+	 * globalValue Errors (OIDs) from CCBS-Operations-and-Errors
+	 * {ccitt identified-organization etsi(0) 359 operations-and-errors(1)}
+	 */
+	{
+		ROSE_ERROR_CCBS_InvalidCallLinkageID,		&rose_etsi_ccbs, 20,
+			NULL,									NULL
+	},
+	{
+		ROSE_ERROR_CCBS_InvalidCCBSReference,		&rose_etsi_ccbs, 21,
+			NULL,									NULL
+	},
+	{
+		ROSE_ERROR_CCBS_LongTermDenial,				&rose_etsi_ccbs, 22,
+			NULL,									NULL
+	},
+	{
+		ROSE_ERROR_CCBS_ShortTermDenial,			&rose_etsi_ccbs, 23,
+			NULL,									NULL
+	},
+	{
+		ROSE_ERROR_CCBS_IsAlreadyActivated,			&rose_etsi_ccbs, 24,
+			NULL,									NULL
+	},
+	{
+		ROSE_ERROR_CCBS_AlreadyAccepted,			&rose_etsi_ccbs, 25,
+			NULL,									NULL
+	},
+	{
+		ROSE_ERROR_CCBS_OutgoingCCBSQueueFull,		&rose_etsi_ccbs, 26,
+			NULL,									NULL
+	},
+	{
+		ROSE_ERROR_CCBS_CallFailureReasonNotBusy,	&rose_etsi_ccbs, 27,
+			NULL,									NULL
+	},
+	{
+		ROSE_ERROR_CCBS_NotReadyForCall,			&rose_etsi_ccbs, 28,
+			NULL,									NULL
+	},
+
+	/*
+	 * globalValue Errors (OIDs) from CCBS-private-networks-Operations-and-Errors
+	 * {ccitt identified-organization etsi(0) 359 private-networks-operations-and-errors(2)}
+	 */
+	{
+		ROSE_ERROR_CCBS_T_LongTermDenial,			&rose_etsi_ccbs_t, 20,
+			NULL,									NULL
+	},
+	{
+		ROSE_ERROR_CCBS_T_ShortTermDenial,			&rose_etsi_ccbs_t, 21,
 			NULL,									NULL
 	},
 /* *INDENT-ON* */
@@ -1090,6 +1314,34 @@
 		{ ROSE_ETSI_AOCECurrency,                   "ROSE_ETSI_AOCECurrency" },
 		{ ROSE_ETSI_AOCEChargingUnit,               "ROSE_ETSI_AOCEChargingUnit" },
 
+		{ ROSE_ETSI_StatusRequest,                  "ROSE_ETSI_StatusRequest" },
+
+		{ ROSE_ETSI_CallInfoRetain,                 "ROSE_ETSI_CallInfoRetain" },
+		{ ROSE_ETSI_EraseCallLinkageID,             "ROSE_ETSI_EraseCallLinkageID" },
+		{ ROSE_ETSI_CCBSDeactivate,                 "ROSE_ETSI_CCBSDeactivate" },
+		{ ROSE_ETSI_CCBSErase,                      "ROSE_ETSI_CCBSErase" },
+		{ ROSE_ETSI_CCBSRemoteUserFree,             "ROSE_ETSI_CCBSRemoteUserFree" },
+		{ ROSE_ETSI_CCBSCall,                       "ROSE_ETSI_CCBSCall" },
+		{ ROSE_ETSI_CCBSStatusRequest,              "ROSE_ETSI_CCBSStatusRequest" },
+		{ ROSE_ETSI_CCBSBFree,                      "ROSE_ETSI_CCBSBFree" },
+		{ ROSE_ETSI_CCBSStopAlerting,               "ROSE_ETSI_CCBSStopAlerting" },
+
+		{ ROSE_ETSI_CCBSRequest,                    "ROSE_ETSI_CCBSRequest" },
+		{ ROSE_ETSI_CCBSInterrogate,                "ROSE_ETSI_CCBSInterrogate" },
+
+		{ ROSE_ETSI_CCNRRequest,                    "ROSE_ETSI_CCNRRequest" },
+		{ ROSE_ETSI_CCNRInterrogate,                "ROSE_ETSI_CCNRInterrogate" },
+
+		{ ROSE_ETSI_CCBS_T_Call,                    "ROSE_ETSI_CCBS_T_Call" },
+		{ ROSE_ETSI_CCBS_T_Suspend,                 "ROSE_ETSI_CCBS_T_Suspend" },
+		{ ROSE_ETSI_CCBS_T_Resume,                  "ROSE_ETSI_CCBS_T_Resume" },
+		{ ROSE_ETSI_CCBS_T_RemoteUserFree,          "ROSE_ETSI_CCBS_T_RemoteUserFree" },
+		{ ROSE_ETSI_CCBS_T_Available,               "ROSE_ETSI_CCBS_T_Available" },
+
+		{ ROSE_ETSI_CCBS_T_Request,                 "ROSE_ETSI_CCBS_T_Request" },
+
+		{ ROSE_ETSI_CCNR_T_Request,                 "ROSE_ETSI_CCNR_T_Request" },
+
 		{ ROSE_QSIG_CallingName,                    "ROSE_QSIG_CallingName" },
 		{ ROSE_QSIG_CalledName,                     "ROSE_QSIG_CalledName" },
 		{ ROSE_QSIG_ConnectedName,                  "ROSE_QSIG_ConnectedName" },
@@ -1182,6 +1434,19 @@
 		{ ROSE_ERROR_AOC_NoChargingInfoAvailable,     "AOC: No Charging Info Available" },
 
 		{ ROSE_ERROR_ECT_LinkIdNotAssignedByNetwork,  "ECT: Link ID Not Assigned By Network" },
+
+		{ ROSE_ERROR_CCBS_InvalidCallLinkageID,       "CCBS: Invalid Call Linkage ID" },
+		{ ROSE_ERROR_CCBS_InvalidCCBSReference,       "CCBS: Invalid CCBS Reference" },
+		{ ROSE_ERROR_CCBS_LongTermDenial,             "CCBS: Long Term Denial" },
+		{ ROSE_ERROR_CCBS_ShortTermDenial,            "CCBS: Short Term Denial" },
+		{ ROSE_ERROR_CCBS_IsAlreadyActivated,         "CCBS: Is Already Activated" },
+		{ ROSE_ERROR_CCBS_AlreadyAccepted,            "CCBS: Already Accepted" },
+		{ ROSE_ERROR_CCBS_OutgoingCCBSQueueFull,      "CCBS: Outgoing CCBS Queue Full" },
+		{ ROSE_ERROR_CCBS_CallFailureReasonNotBusy,   "CCBS: Call Failure Reason Not Busy" },
+		{ ROSE_ERROR_CCBS_NotReadyForCall,            "CCBS: Not Ready For Call" },
+
+		{ ROSE_ERROR_CCBS_T_LongTermDenial,           "CCBS-T: Long Term Denial" },
+		{ ROSE_ERROR_CCBS_T_ShortTermDenial,          "CCBS-T: Short Term Denial" },
 
 		/* Q.SIG specific errors */
 		{ ROSE_ERROR_QSIG_Unspecified,                "Unspecified" },

Modified: team/group/issue14292/rose.h
URL: http://svn.digium.com/svn-view/libpri/team/group/issue14292/rose.h?view=diff&rev=745&r1=744&r2=745
==============================================================================
--- team/group/issue14292/rose.h (original)
+++ team/group/issue14292/rose.h Thu Apr 16 19:52:47 2009
@@ -103,6 +103,37 @@
 	ROSE_ETSI_EctInform,                    /*!< Invoke only */
 	ROSE_ETSI_EctLoopTest,                  /*!< Invoke/Result */
 
+	/* ETSI Status-Request-Procedure */
+	ROSE_ETSI_StatusRequest,                /*!< Invoke/Result */
+
+	/* ETSI CCBS-Operations-and-Errors */
+	ROSE_ETSI_CallInfoRetain,               /*!< Invoke only */
+	ROSE_ETSI_CCBSRequest,                  /*!< Invoke/Result */
+	ROSE_ETSI_CCBSDeactivate,               /*!< Invoke/Result */
+	ROSE_ETSI_CCBSInterrogate,              /*!< Invoke/Result */
+	ROSE_ETSI_CCBSErase,                    /*!< Invoke only */
+	ROSE_ETSI_CCBSRemoteUserFree,           /*!< Invoke only */
+	ROSE_ETSI_CCBSCall,                     /*!< Invoke only */
+	ROSE_ETSI_CCBSStatusRequest,            /*!< Invoke/Result */
+	ROSE_ETSI_CCBSBFree,                    /*!< Invoke only */
+	ROSE_ETSI_EraseCallLinkageID,           /*!< Invoke only */
+	ROSE_ETSI_CCBSStopAlerting,             /*!< Invoke only */
+
+	/* ETSI CCBS-private-networks-Operations-and-Errors */
+	ROSE_ETSI_CCBS_T_Request,               /*!< Invoke/Result */
+	ROSE_ETSI_CCBS_T_Call,                  /*!< Invoke only */
+	ROSE_ETSI_CCBS_T_Suspend,               /*!< Invoke only */
+	ROSE_ETSI_CCBS_T_Resume,                /*!< Invoke only */
+	ROSE_ETSI_CCBS_T_RemoteUserFree,        /*!< Invoke only */
+	ROSE_ETSI_CCBS_T_Available,             /*!< Invoke only */
+
+	/* ETSI CCNR-Operations-and-Errors */
+	ROSE_ETSI_CCNRRequest,                  /*!< Invoke/Result */
+	ROSE_ETSI_CCNRInterrogate,              /*!< Invoke/Result */
+
+	/* ETSI CCNR-private-networks-Operations-and-Errors */
+	ROSE_ETSI_CCNR_T_Request,               /*!< Invoke/Result */
+
 	/* Q.SIG Name-Operations */
 	ROSE_QSIG_CallingName,                  /*!< Invoke only */
 	ROSE_QSIG_CalledName,                   /*!< Invoke only */
@@ -198,6 +229,21 @@
 
 	/* ETSI Explicit-Call-Transfer-Operations-and-Errors */
 	ROSE_ERROR_ECT_LinkIdNotAssignedByNetwork,
+
+	/* ETSI CCBS-Operations-and-Errors */
+	ROSE_ERROR_CCBS_InvalidCallLinkageID,
+	ROSE_ERROR_CCBS_InvalidCCBSReference,
+	ROSE_ERROR_CCBS_LongTermDenial,
+	ROSE_ERROR_CCBS_ShortTermDenial,
+	ROSE_ERROR_CCBS_IsAlreadyActivated,
+	ROSE_ERROR_CCBS_AlreadyAccepted,
+	ROSE_ERROR_CCBS_OutgoingCCBSQueueFull,
+	ROSE_ERROR_CCBS_CallFailureReasonNotBusy,
+	ROSE_ERROR_CCBS_NotReadyForCall,
+
+	/* ETSI CCBS-private-networks-Operations-and-Errors */
+	ROSE_ERROR_CCBS_T_LongTermDenial,
+	ROSE_ERROR_CCBS_T_ShortTermDenial,
 
 	/* Q.SIG from various specifications */
 	ROSE_ERROR_QSIG_Unspecified,
@@ -1670,6 +1716,351 @@
 	 * simultaneousTransfer(2)
 	 */
 	u_int8_t loop_result;
+};
+
+
+/* ------------------------------------------------------------------- */
+
+
+/*
+ * ARGUMENT SEQUENCE {
+ *     compatibilityMode CompatibilityMode,
+ *
+ *     -- The BC, HLC (optional) and LLC (optional) information
+ *     -- elements shall be embedded in q931InfoElement
+ *     q931InformationElement Q931InformationElement
+ * }
+ */
+struct roseEtsiStatusRequest_ARG {
+	/*! \brief The BC, HLC (optional) and LLC (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 + 1];
+
+	/*! \details allBasicServices(0), oneOrMoreBasicServices(1) */
+	u_int8_t compatibility_mode;
+};
+
+/*
+ * RESULT StatusResult
+ */
+struct roseEtsiStatusRequest_RES {
+	/*! \details compatibleAndFree(0), compatibleAndBusy(1), incompatible(2) */
+	u_int8_t status;
+};
+
+
+/* ------------------------------------------------------------------- */
+
+
+/*
+ * CallLinkageID ::= INTEGER (0..127)
+ * CCBSReference ::= INTEGER (0..127)
+ */
+
+/*
+ * ARGUMENT callLinkageID CallLinkageID
+ */
+struct roseEtsiCallInfoRetain_ARG {
+	/*! \brief Call Linkage Record ID */
+	u_int8_t call_linkage_id;
+};
+
+/*
+ * ARGUMENT callLinkageID CallLinkageID
+ */
+struct roseEtsiEraseCallLinkageID_ARG {
+	/*! \brief Call Linkage Record ID */
+	u_int8_t call_linkage_id;
+};
+
+
+/*
+ * ARGUMENT callLinkageID CallLinkageID
+ */
+struct roseEtsiCCBSRequest_ARG {
+	/*! \brief Call Linkage Record ID */
+	u_int8_t call_linkage_id;
+};
+
+/*
+ * RESULT SEQUENCE {
+ *     recallMode          RecallMode,
+ *     cCBSReference       CCBSReference
+ * }
+ */
+struct roseEtsiCCBSRequest_RES {
+	/*! \details globalRecall(0), specificRecall(1) */
+	u_int8_t recall_mode;
+
+	/*! \brief CCBS Record ID */
+	u_int8_t ccbs_reference;
+};
+
+
+/*
+ * ARGUMENT cCBSReference CCBSReference
+ */
+struct roseEtsiCCBSDeactivate_ARG {
+	/*! \brief CCBS Record ID */
+	u_int8_t ccbs_reference;
+};
+
+
+/*
+ * ARGUMENT SEQUENCE {
+ *     cCBSReference       CCBSReference OPTIONAL,
+ *     partyNumberOfA      PartyNumber OPTIONAL
+ * }
+ */
+struct roseEtsiCCBSInterrogate_ARG {
+	/*! \brief Party A number (Optional) */
+	struct rosePartyNumber a_party_number;
+
+	/*! \brief TRUE if CCBSReference present */
+	u_int8_t ccbs_reference_present;
+
+	/*! \brief CCBS Record ID (optional) */
+	u_int8_t ccbs_reference;
+};
+
+/*
+ * -- The Bearer capability, High layer compatibility (optional)
+ * -- and Low layer compatibility (optional) information elements
+ * -- shall be embedded in q931InfoElement.
+ * CallInformation ::= SEQUENCE {
+ *     addressOfB          Address,
+ *     q931InfoElement     Q931InformationElement,
+ *     cCBSReference       CCBSReference,
+ *     subAddressOfA       PartySubaddress OPTIONAL
+ * }
+ */
+struct roseEtsiCallInformation {
+	/*! \brief The BC, HLC (optional) and LLC (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 + 1];
+
+	/*! \brief Address of B */
+	struct roseAddress address_of_b;
+
+	/*! \brief Subaddress of A (Optional) */
+	struct rosePartySubaddress subaddress_of_a;
+
+	/*! \brief CCBS Record ID */
+	u_int8_t ccbs_reference;
+};
+
+/*
+ * CallDetails ::= SEQUENCE SIZE(1..5) OF CallInformation
+ */
+struct roseEtsiCallDetailsList {
+	struct roseEtsiCallInformation list[5];
+
+	/*! \brief Number of CallDetails records present */
+	u_int8_t num_records;
+};
+
+/*
+ * RESULT SEQUENCE {
+ *     recallMode          RecallMode,
+ *     callDetails         CallDetails OPTIONAL
+ * }
+ */
+struct roseEtsiCCBSInterrogate_RES {
+	struct roseEtsiCallDetailsList call_details;
+
+	/*! \details globalRecall(0), specificRecall(1) */
+	u_int8_t recall_mode;
+};
+
+
+/*
+ * ARGUMENT SEQUENCE {
+ *     recallMode          RecallMode,
+ *     cCBSReference       CCBSReference,
+ *     addressOfB          Address,
+ *     q931InfoElement     Q931InformationElement,
+ *     eraseReason         CCBSEraseReason
+ * }
+ */
+struct roseEtsiCCBSErase_ARG {
+	/*! \brief The BC, HLC (optional) and LLC (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 + 1];
+
+	/*! \brief Address of B */
+	struct roseAddress address_of_b;
+
+	/*! \details globalRecall(0), specificRecall(1) */
+	u_int8_t recall_mode;
+
+	/*! \brief CCBS Record ID */
+	u_int8_t ccbs_reference;
+
+	/*!
+	 * \brief CCBS Erase reason
+	 * \details
+	 * normal-unspecified(0),
+	 * t-CCBS2-timeout(1),
+	 * t-CCBS3-timeout(2),
+	 * basic-call-failed(3)
+	 */
+	u_int8_t reason;
+};
+
+/*
+ * ARGUMENT SEQUENCE {
+ *     recallMode          RecallMode,
+ *     cCBSReference       CCBSReference,
+ *     addressOfB          Address,
+ *     q931InfoElement     Q931InformationElement
+ * }
+ */
+struct roseEtsiCCBSRemoteUserFree_ARG {
+	/*! \brief The BC, HLC (optional) and LLC (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 + 1];
+
+	/*! \brief Address of B */
+	struct roseAddress address_of_b;
+
+	/*! \details globalRecall(0), specificRecall(1) */
+	u_int8_t recall_mode;
+
+	/*! \brief CCBS Record ID */
+	u_int8_t ccbs_reference;
+};
+
+/*
+ * ARGUMENT cCBSReference CCBSReference
+ */
+struct roseEtsiCCBSCall_ARG {
+	/*! \brief CCBS Record ID */
+	u_int8_t ccbs_reference;
+};
+
+
+/*
+ * ARGUMENT SEQUENCE {
+ *     recallMode          RecallMode,
+ *     cCBSReference       CCBSReference,
+ *     q931InfoElement     Q931InformationElement
+ * }
+ */
+struct roseEtsiCCBSStatusRequest_ARG {
+	/*! \brief The BC, HLC (optional) and LLC (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 + 1];
+
+	/*! \details globalRecall(0), specificRecall(1) */
+	u_int8_t recall_mode;
+
+	/*! \brief CCBS Record ID */
+	u_int8_t ccbs_reference;
+};
+
+/*
+ * RESULT BOOLEAN -- free=TRUE, busy=FALSE
+ */
+struct roseEtsiCCBSStatusRequest_RES {
+	/*! \brief TRUE if User A is free */
+	u_int8_t free;
+};
+
+
+/*
+ * ARGUMENT SEQUENCE {
+ *     recallMode          RecallMode,
+ *     cCBSReference       CCBSReference,
+ *     addressOfB          Address,
+ *     q931InfoElement     Q931InformationElement
+ * }
+ */
+struct roseEtsiCCBSBFree_ARG {
+	/*! \brief The BC, HLC (optional) and LLC (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 + 1];
+
+	/*! \brief Address of B */
+	struct roseAddress address_of_b;
+
+	/*! \details globalRecall(0), specificRecall(1) */
+	u_int8_t recall_mode;
+
+	/*! \brief CCBS Record ID */
+	u_int8_t ccbs_reference;
+};
+
+/*
+ * ARGUMENT cCBSReference CCBSReference
+ */
+struct roseEtsiCCBSStopAlerting_ARG {
+	/*! \brief CCBS Record ID */
+	u_int8_t ccbs_reference;
+};
+
+
+/* ------------------------------------------------------------------- */
+
+
+/*
+ * ARGUMENT SEQUENCE {
+ *     destinationAddress           Address,
+ *
+ *     -- contains HLC, LLC and BC information
+ *     q931InfoElement              Q931InformationElement,
+ *
+ *     retentionSupported           [1] IMPLICIT BOOLEAN DEFAULT FALSE,
+ *
+ *     -- The use of this parameter is specified in
+ *     -- EN 300 195-1 for interaction of CCBS with CLIP
+ *     presentationAllowedIndicator [2] IMPLICIT BOOLEAN OPTIONAL,
+ *
+ *     -- The use of this parameter is specified in
+ *     -- EN 300 195-1 for interaction of CCBS with CLIP
+ *     originatingAddress           Address OPTIONAL
+ * }
+ */
+struct roseEtsiCCBS_T_Request_ARG {
+	/*! \brief The BC, HLC (optional) and LLC (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 + 1];
+
+	/*! \brief Address of B */
+	struct roseAddress destination;
+
+	/*! \brief Caller-ID Address (Present if Originating.Party.LengthOfNumber is nonzero) */
+	struct roseAddress originating;
+
+	/*! \brief TRUE if the PresentationAllowedIndicator is present */
+	u_int8_t presentation_allowed_indicator_present;
+
+	/*! \brief TRUE if presentation is allowed for the originating address (optional) */
+	u_int8_t presentation_allowed_indicator;
+
+	/*! \brief TRUE if User A's CCBS request is continued if user B is busy again. */
+	u_int8_t retention_supported;
+};
+
+/*
+ * RESULT retentionSupported BOOLEAN   -- Default False
+ */
+struct roseEtsiCCBS_T_Request_RES {
+	/*! \brief TRUE if User A's CCBS request is continued if user B is busy again. */
+	u_int8_t retention_supported;
 };
 
 
@@ -2979,6 +3370,34 @@
 	struct roseEtsiSubaddressTransfer_ARG SubaddressTransfer;
 	struct roseEtsiEctInform_ARG EctInform;
 	struct roseEtsiEctLoopTest_ARG EctLoopTest;
+
+	/* ETSI Status Request (CCBS/CCNR support) */
+	struct roseEtsiStatusRequest_ARG StatusRequest;
+
+	/* ETSI CCBS/CCNR support */
+	struct roseEtsiCallInfoRetain_ARG CallInfoRetain;
+	struct roseEtsiEraseCallLinkageID_ARG EraseCallLinkageID;
+	struct roseEtsiCCBSDeactivate_ARG CCBSDeactivate;
+	struct roseEtsiCCBSErase_ARG CCBSErase;
+	struct roseEtsiCCBSRemoteUserFree_ARG CCBSRemoteUserFree;
+	struct roseEtsiCCBSCall_ARG CCBSCall;
+	struct roseEtsiCCBSStatusRequest_ARG CCBSStatusRequest;
+	struct roseEtsiCCBSBFree_ARG CCBSBFree;
+	struct roseEtsiCCBSStopAlerting_ARG CCBSStopAlerting;
+
+	/* ETSI CCBS */
+	struct roseEtsiCCBSRequest_ARG CCBSRequest;
+	struct roseEtsiCCBSInterrogate_ARG CCBSInterrogate;
+
+	/* ETSI CCNR */
+	struct roseEtsiCCBSRequest_ARG CCNRRequest;
+	struct roseEtsiCCBSInterrogate_ARG CCNRInterrogate;
+
+	/* ETSI CCBS-T */
+	struct roseEtsiCCBS_T_Request_ARG CCBS_T_Request;
+
+	/* ETSI CCNR-T */
+	struct roseEtsiCCBS_T_Request_ARG CCNR_T_Request;
 };
 
 /*! \brief Facility ie result etsi messages with arguments. */
@@ -2993,6 +3412,26 @@
 	/* ETSI Explicit Call Transfer (ECT) */
 	struct roseEtsiEctLinkIdRequest_RES EctLinkIdRequest;
 	struct roseEtsiEctLoopTest_RES EctLoopTest;
+
+	/* ETSI Status Request (CCBS/CCNR support) */
+	struct roseEtsiStatusRequest_RES StatusRequest;
+
+	/* ETSI CCBS/CCNR support */
+	struct roseEtsiCCBSStatusRequest_RES CCBSStatusRequest;
+
+	/* ETSI CCBS */
+	struct roseEtsiCCBSRequest_RES CCBSRequest;
+	struct roseEtsiCCBSInterrogate_RES CCBSInterrogate;
+
+	/* ETSI CCNR */
+	struct roseEtsiCCBSRequest_RES CCNRRequest;
+	struct roseEtsiCCBSInterrogate_RES CCNRInterrogate;
+
+	/* ETSI CCBS-T */
+	struct roseEtsiCCBS_T_Request_RES CCBS_T_Request;
+
+	/* ETSI CCNR-T */
+	struct roseEtsiCCBS_T_Request_RES CCNR_T_Request;
 };
 
 /*! \brief Facility ie invoke qsig messages with arguments. */

Added: team/group/issue14292/rose_etsi_cc.c
URL: http://svn.digium.com/svn-view/libpri/team/group/issue14292/rose_etsi_cc.c?view=auto&rev=745
==============================================================================
--- team/group/issue14292/rose_etsi_cc.c (added)
+++ team/group/issue14292/rose_etsi_cc.c Thu Apr 16 19:52:47 2009
@@ -1,0 +1,1853 @@
+/*
+ * 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 Status-Request/CCBS/CCBS-T/CCNR/CCNR-T operations
+ *
+ * Status-Request ETS 300 196-1 D.7
+ * CCBS Supplementary Services ETS 300 359-1
+ * CCNR Supplementary Services ETS 301 065-1
+ *
+ * \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 array of call information details 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 call_information Call information record to encode.
+ *
+ * \retval Start of the next ASN.1 component to encode on success.
+ * \retval NULL on error.
+ */
+static unsigned char *rose_enc_etsi_CallInformation(struct pri *ctrl, unsigned char *pos,
+	unsigned char *end, unsigned tag,
+	const struct roseEtsiCallInformation *call_information)
+{
+	unsigned char *seq_len;
+
+	ASN1_CONSTRUCTED_BEGIN(seq_len, pos, end, tag);
+
+	ASN1_CALL(pos, rose_enc_Address(ctrl, pos, end, ASN1_TAG_SEQUENCE,
+		&call_information->address_of_b));
+	ASN1_CALL(pos, rose_enc_Q931ie(ctrl, pos, end, ASN1_CLASS_APPLICATION | 0,
+		&call_information->q931ie));
+	ASN1_CALL(pos, asn1_enc_int(pos, end, ASN1_TYPE_INTEGER,
+		call_information->ccbs_reference));
+	if (call_information->subaddress_of_a.length) {
+		ASN1_CALL(pos, rose_enc_PartySubaddress(ctrl, pos, end,
+			&call_information->subaddress_of_a));
+	}
+
+	ASN1_CONSTRUCTED_END(seq_len, pos, end);
+
+	return pos;
+}
+
+/*!
+ * \internal
+ * \brief Encode the array of call information details 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 call_details Call detail 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_CallDetails(struct pri *ctrl, unsigned char *pos,
+	unsigned char *end, unsigned tag, const struct roseEtsiCallDetailsList *call_details)
+{
+	unsigned index;
+	unsigned char *seq_len;
+
+	ASN1_CONSTRUCTED_BEGIN(seq_len, pos, end, tag);
+
+	for (index = 0; index < call_details->num_records; ++index) {
+		ASN1_CALL(pos, rose_enc_etsi_CallInformation(ctrl, pos, end, ASN1_TAG_SEQUENCE,
+			&call_details->list[index]));
+	}
+
+	ASN1_CONSTRUCTED_END(seq_len, pos, end);
+
+	return pos;
+}
+
+/*!
+ * \brief Encode the StatusRequest 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_StatusRequest_ARG(struct pri *ctrl, unsigned char *pos,
+	unsigned char *end, const union rose_msg_invoke_args *args)
+{
+	const struct roseEtsiStatusRequest_ARG *status_request;
+	unsigned char *seq_len;
+
+	ASN1_CONSTRUCTED_BEGIN(seq_len, pos, end, ASN1_TAG_SEQUENCE);
+
+	status_request = &args->etsi.StatusRequest;
+	ASN1_CALL(pos, asn1_enc_int(pos, end, ASN1_TYPE_ENUMERATED,
+		status_request->compatibility_mode));
+	ASN1_CALL(pos, rose_enc_Q931ie(ctrl, pos, end, ASN1_CLASS_APPLICATION | 0,
+		&status_request->q931ie));
+
+	ASN1_CONSTRUCTED_END(seq_len, pos, end);
+
+	return pos;
+}
+
+/*!
+ * \brief Encode the StatusRequest result 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_StatusRequest_RES(struct pri *ctrl, unsigned char *pos,
+	unsigned char *end, const union rose_msg_result_args *args)
+{
+	return asn1_enc_int(pos, end, ASN1_TYPE_ENUMERATED, args->etsi.StatusRequest.status);
+}
+
+/*!
+ * \brief Encode the CallInfoRetain 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_CallInfoRetain_ARG(struct pri *ctrl, unsigned char *pos,
+	unsigned char *end, const union rose_msg_invoke_args *args)
+{
+	return asn1_enc_int(pos, end, ASN1_TYPE_INTEGER,
+		args->etsi.CallInfoRetain.call_linkage_id);
+}
+
+/*!
+ * \brief Encode the EraseCallLinkageID 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_EraseCallLinkageID_ARG(struct pri *ctrl, unsigned char *pos,
+	unsigned char *end, const union rose_msg_invoke_args *args)
+{
+	return asn1_enc_int(pos, end, ASN1_TYPE_INTEGER,
+		args->etsi.EraseCallLinkageID.call_linkage_id);
+}
+
+/*!
+ * \brief Encode the CCBSDeactivate 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_CCBSDeactivate_ARG(struct pri *ctrl, unsigned char *pos,
+	unsigned char *end, const union rose_msg_invoke_args *args)
+{
+	return asn1_enc_int(pos, end, ASN1_TYPE_INTEGER,
+		args->etsi.CCBSDeactivate.ccbs_reference);
+}
+
+/*!
+ * \brief Encode the CCBSErase 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_CCBSErase_ARG(struct pri *ctrl, unsigned char *pos,
+	unsigned char *end, const union rose_msg_invoke_args *args)
+{
+	const struct roseEtsiCCBSErase_ARG *ccbs_erase;
+	unsigned char *seq_len;
+
+	ASN1_CONSTRUCTED_BEGIN(seq_len, pos, end, ASN1_TAG_SEQUENCE);
+
+	ccbs_erase = &args->etsi.CCBSErase;
+	ASN1_CALL(pos, asn1_enc_int(pos, end, ASN1_TYPE_ENUMERATED,
+		ccbs_erase->recall_mode));
+	ASN1_CALL(pos, asn1_enc_int(pos, end, ASN1_TYPE_INTEGER,
+		ccbs_erase->ccbs_reference));
+	ASN1_CALL(pos, rose_enc_Address(ctrl, pos, end, ASN1_TAG_SEQUENCE,
+		&ccbs_erase->address_of_b));
+	ASN1_CALL(pos, rose_enc_Q931ie(ctrl, pos, end, ASN1_CLASS_APPLICATION | 0,
+		&ccbs_erase->q931ie));
+	ASN1_CALL(pos, asn1_enc_int(pos, end, ASN1_TYPE_ENUMERATED, ccbs_erase->reason));
+
+	ASN1_CONSTRUCTED_END(seq_len, pos, end);
+
+	return pos;
+}
+
+/*!
+ * \brief Encode the CCBSRemoteUserFree 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_CCBSRemoteUserFree_ARG(struct pri *ctrl, unsigned char *pos,
+	unsigned char *end, const union rose_msg_invoke_args *args)
+{
+	const struct roseEtsiCCBSRemoteUserFree_ARG *ccbs_remote_user_free;
+	unsigned char *seq_len;
+
+	ASN1_CONSTRUCTED_BEGIN(seq_len, pos, end, ASN1_TAG_SEQUENCE);
+
+	ccbs_remote_user_free = &args->etsi.CCBSRemoteUserFree;
+	ASN1_CALL(pos, asn1_enc_int(pos, end, ASN1_TYPE_ENUMERATED,
+		ccbs_remote_user_free->recall_mode));
+	ASN1_CALL(pos, asn1_enc_int(pos, end, ASN1_TYPE_INTEGER,
+		ccbs_remote_user_free->ccbs_reference));
+	ASN1_CALL(pos, rose_enc_Address(ctrl, pos, end, ASN1_TAG_SEQUENCE,
+		&ccbs_remote_user_free->address_of_b));
+	ASN1_CALL(pos, rose_enc_Q931ie(ctrl, pos, end, ASN1_CLASS_APPLICATION | 0,
+		&ccbs_remote_user_free->q931ie));
+
+	ASN1_CONSTRUCTED_END(seq_len, pos, end);
+
+	return pos;
+}
+
+/*!
+ * \brief Encode the CCBSCall 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_CCBSCall_ARG(struct pri *ctrl, unsigned char *pos,
+	unsigned char *end, const union rose_msg_invoke_args *args)
+{

[... 2164 lines stripped ...]



More information about the libpri-commits mailing list