[thirdparty-commits] rmudgett: mISDNuser/trunk r28 - /mISDNuser/trunk/suppserv/
SVN commits to the Digium third-party software repository
thirdparty-commits at lists.digium.com
Tue Nov 11 11:57:07 CST 2008
Author: rmudgett
Date: Tue Nov 11 11:57:06 2008
New Revision: 28
URL: http://svn.digium.com/view/thirdparty?view=rev&rev=28
Log:
Added ECT facility message support
Added:
mISDNuser/trunk/suppserv/asn1_ect.c (with props)
mISDNuser/trunk/suppserv/asn1_ect.h (with props)
Modified:
mISDNuser/trunk/suppserv/Makefile
mISDNuser/trunk/suppserv/asn1.h
mISDNuser/trunk/suppserv/asn1_ccbs.c
mISDNuser/trunk/suppserv/asn1_comp.c
mISDNuser/trunk/suppserv/fac.c
mISDNuser/trunk/suppserv/suppserv.h
Modified: mISDNuser/trunk/suppserv/Makefile
URL: http://svn.digium.com/view/thirdparty/mISDNuser/trunk/suppserv/Makefile?view=diff&rev=28&r1=27&r2=28
==============================================================================
--- mISDNuser/trunk/suppserv/Makefile (original)
+++ mISDNuser/trunk/suppserv/Makefile Tue Nov 11 11:57:06 2008
@@ -4,7 +4,19 @@
#CFLAGS += -DASN1_DEBUG
-SUPPSERV_OBJ = asn1.o asn1_enc.o asn1_generic.o asn1_aoc.o asn1_basic_service.o asn1_comp.o asn1_ccbs.o asn1_diversion.o asn1_address.o fac.o
+SUPPSERV_OBJ = \
+ asn1.o \
+ asn1_address.o \
+ asn1_aoc.o \
+ asn1_basic_service.o \
+ asn1_ccbs.o \
+ asn1_comp.o \
+ asn1_diversion.o \
+ asn1_ect.o \
+ asn1_enc.o \
+ asn1_generic.o \
+ fac.o
+
SUPPSERV_PICOBJ = $(SUPPSERV_OBJ:%.o=%.lo)
all: libsuppserv.a libsuppserv_pic.a libsuppserv.so
Modified: mISDNuser/trunk/suppserv/asn1.h
URL: http://svn.digium.com/view/thirdparty/mISDNuser/trunk/suppserv/asn1.h?view=diff&rev=28&r1=27&r2=28
==============================================================================
--- mISDNuser/trunk/suppserv/asn1.h (original)
+++ mISDNuser/trunk/suppserv/asn1.h Tue Nov 11 11:57:06 2008
@@ -106,6 +106,12 @@
/* CCNR support */
struct FacCCBSRequest_ARG CCNRRequest;
struct FacCCBSInterrogate_ARG CCNRInterrogate;
+
+ /* ECT support */
+ struct FacExplicitEctExecute ExplicitEctExecute;
+ struct FacSubaddressTransfer SubaddressTransfer;
+ struct FacEctInform EctInform;
+ struct FacEctLoopTest_ARG EctLoopTest;
} o;
};
@@ -129,6 +135,10 @@
/* CCNR support */
struct FacCCBSRequest_RES CCNRRequest;
struct FacCCBSInterrogate_RES CCNRInterrogate;
+
+ /* ECT support */
+ struct FacEctLinkIdRequest_RES EctLinkIdRequest;
+ struct FacEctLoopTest_RES EctLoopTest;
} o;
};
@@ -254,6 +264,7 @@
} \
} \
} else if ((the_tag) & ASN1_TAG_EXPLICIT) { \
+ /* EXPLICIT tags are always constructed */ \
if ((u_char) (((the_tag) & 0xff) | (((act_tag) & ASN1_TAG_TYPE_MASK) | ASN1_TAG_CONSTRUCTED)) == *p) { \
int xtag, xlen; \
CallASN1(ret, p, end, ParseTag(p, end, &xtag)); \
@@ -297,6 +308,11 @@
if ((act_tag) == tag) { \
return todo(pc, beg, end, arg1); \
} \
+ } else if ((act_tag) & ASN1_TAG_EXPLICIT) { \
+ /* EXPLICIT tags are always constructed */ \
+ if (((the_tag) | (((act_tag) & ASN1_TAG_TYPE_MASK) | ASN1_TAG_CONSTRUCTED)) == tag) { \
+ return todo(pc, p, end, arg1); \
+ } \
} else { \
if (((the_tag) | ((act_tag) & (ASN1_TAG_TYPE_MASK | ASN1_TAG_CONSTRUCTED))) == tag) { \
return todo(pc, beg, end, arg1); \
@@ -336,6 +352,8 @@
__u8 *encodeComponent_Head_Long_u8(__u8 *p, enum asn1ComponentTag componentTag);
int encodeComponent_Length(__u8 *msg, __u8 *end);
int encodeComponent_Length_Long_u8(__u8 *msg, __u8 *p);
+
+__u8 *encodeComponentInvoke_Head(__u8 *Dest, int InvokeID, enum FacFunction OperationValue);
int encodeOperationValue(__u8 *dest, int operationValue);
int encodeErrorValue(__u8 *dest, int errorValue);
@@ -359,6 +377,12 @@
int encodeIA5String(__u8 *dest, __u8 tagType, const __s8 *str, __u8 len);
int encodeOid(__u8 *dest, __u8 tagType, const struct asn1Oid *oid);
+int encodePartyNumber_Full(__u8 *Dest, const struct FacPartyNumber *PartyNumber);
+int encodePartySubaddress_Full(__u8 *Dest, const struct FacPartySubaddress *PartySubaddress);
+int encodeAddress_Full(__u8 *Dest, const struct FacAddress *Address);
+int encodePresentedNumberUnscreened_Full(__u8 *Dest, const struct FacPresentedNumberUnscreened *Presented);
+
+
int encodePublicPartyNumber(__u8 *dest, __s8 *facilityPartyNumber);
int encodePartyNumber(__u8 *dest, __s8 *facilityPartyNumber);
int encodeServedUserNumber(__u8 *dest, __s8 *servedUserNumber);
@@ -381,6 +405,12 @@
int ParseNumericString(struct asn1_parm *pc, u_char *p, u_char *end, struct asn1ParseString *str);
int ParseOctetString(struct asn1_parm *pc, u_char *p, u_char *end, struct asn1ParseString *str);
int ParseOid(struct asn1_parm *pc, u_char *p, u_char *end, struct asn1Oid *oid);
+
+int ParsePartyNumber_Full(struct asn1_parm *pc, u_char *p, u_char *end, struct FacPartyNumber *PartyNumber);
+int ParsePartySubaddress_Full(struct asn1_parm *pc, u_char *p, u_char *end, struct FacPartySubaddress *PartySubaddress);
+int ParseAddress_Full(struct asn1_parm *pc, u_char *p, u_char *end, struct FacAddress *Address);
+int ParsePresentedNumberUnscreened_Full(struct asn1_parm *pc, u_char *p, u_char *end, struct FacPresentedNumberUnscreened *Presented);
+
int ParseARGReqCallDeflection(struct asn1_parm *pc, u_char *p, u_char *end, struct ReqCallDeflection *reqCD);
int ParseARGActivationStatusNotificationDiv(struct asn1_parm *pc, u_char *p, u_char *end, struct ActDivNotification *actNot);
Modified: mISDNuser/trunk/suppserv/asn1_ccbs.c
URL: http://svn.digium.com/view/thirdparty/mISDNuser/trunk/suppserv/asn1_ccbs.c?view=diff&rev=28&r1=27&r2=28
==============================================================================
--- mISDNuser/trunk/suppserv/asn1_ccbs.c (original)
+++ mISDNuser/trunk/suppserv/asn1_ccbs.c Tue Nov 11 11:57:06 2008
@@ -246,7 +246,6 @@
/* ******************************************************************* */
/*!
- * \internal
* \brief Encode the PartyNumber type.
*
* \param Dest Where to put the encoding
@@ -254,7 +253,7 @@
*
* \retval length
*/
-static int encodePartyNumber_Full(__u8 *Dest, const struct FacPartyNumber *PartyNumber)
+int encodePartyNumber_Full(__u8 *Dest, const struct FacPartyNumber *PartyNumber)
{
int Length;
@@ -297,7 +296,6 @@
/* ******************************************************************* */
/*!
- * \internal
* \brief Parse the PartyNumber argument parameters.
*
* \param pc Complete component message storage data.
@@ -308,7 +306,7 @@
* \retval length of buffer consumed
* \retval -1 on error.
*/
-static int ParsePartyNumber_Full(struct asn1_parm *pc, u_char *p, u_char *end, struct FacPartyNumber *PartyNumber)
+int ParsePartyNumber_Full(struct asn1_parm *pc, u_char *p, u_char *end, struct FacPartyNumber *PartyNumber)
{
INIT;
@@ -430,7 +428,6 @@
/* ******************************************************************* */
/*!
- * \internal
* \brief Encode the PartySubaddress type.
*
* \param Dest Where to put the encoding
@@ -438,7 +435,7 @@
*
* \retval length
*/
-static int encodePartySubaddress_Full(__u8 *Dest, const struct FacPartySubaddress *PartySubaddress)
+int encodePartySubaddress_Full(__u8 *Dest, const struct FacPartySubaddress *PartySubaddress)
{
__u8 *p;
int Length;
@@ -473,7 +470,6 @@
/* ******************************************************************* */
/*!
- * \internal
* \brief Parse the PartySubaddress argument parameters.
*
* \param pc Complete component message storage data.
@@ -484,7 +480,7 @@
* \retval length of buffer consumed
* \retval -1 on error.
*/
-static int ParsePartySubaddress_Full(struct asn1_parm *pc, u_char *p, u_char *end, struct FacPartySubaddress *PartySubaddress)
+int ParsePartySubaddress_Full(struct asn1_parm *pc, u_char *p, u_char *end, struct FacPartySubaddress *PartySubaddress)
{
INIT;
@@ -499,7 +495,6 @@
/* ******************************************************************* */
/*!
- * \internal
* \brief Encode the Address type.
*
* \param Dest Where to put the encoding
@@ -507,7 +502,7 @@
*
* \retval length
*/
-static int encodeAddress_Full(__u8 *Dest, const struct FacAddress *Address)
+int encodeAddress_Full(__u8 *Dest, const struct FacAddress *Address)
{
__u8 *p;
@@ -529,7 +524,6 @@
/* ******************************************************************* */
/*!
- * \internal
* \brief Parse the Address argument parameters.
*
* \param pc Complete component message storage data.
@@ -540,7 +534,7 @@
* \retval length of buffer consumed
* \retval -1 on error.
*/
-static int ParseAddress_Full(struct asn1_parm *pc, u_char *p, u_char *end, struct FacAddress *Address)
+int ParseAddress_Full(struct asn1_parm *pc, u_char *p, u_char *end, struct FacAddress *Address)
{
INIT;
@@ -692,7 +686,6 @@
/* ******************************************************************* */
/*!
- * \internal
* \brief Encode the common invoke component beginning
*
* \param Dest Where to put the encoding
@@ -701,7 +694,7 @@
*
* \return Position for the next octet in the message
*/
-static __u8 *encodeComponentInvoke_Head(__u8 *Dest, int InvokeID, enum FacFunction OperationValue)
+__u8 *encodeComponentInvoke_Head(__u8 *Dest, int InvokeID, enum FacFunction OperationValue)
{
__u8 *p;
Modified: mISDNuser/trunk/suppserv/asn1_comp.c
URL: http://svn.digium.com/view/thirdparty/mISDNuser/trunk/suppserv/asn1_comp.c?view=diff&rev=28&r1=27&r2=28
==============================================================================
--- mISDNuser/trunk/suppserv/asn1_comp.c (original)
+++ mISDNuser/trunk/suppserv/asn1_comp.c Tue Nov 11 11:57:06 2008
@@ -4,6 +4,7 @@
#include "asn1.h"
#include "asn1_ccbs.h"
+#include "asn1_ect.h"
#include <stdio.h>
#include <string.h>
@@ -27,6 +28,9 @@
/* {itu-t(0) identified-organization(4) etsi(0) 196 status-request-procedure(9)} */
{ FacOIDBase_StatusRequest, { 4, { 4, 0, 196, 9 } } },
+
+ /* {ccitt(0) identified-organization(4) etsi(0) 369 operations-and-errors(1)} */
+ { FacOIDBase_ECT, { 4, { 4, 0, 369, 1 } } },
/* *INDENT-ON* */
};
@@ -131,6 +135,7 @@
pc->u.inv.operationValue = operationValue;
switch (operationValue) {
+ /* Diversion support */
#if 0
case Fac_ActivationDiversion:
XSEQUENCE(ParseARGActivationDiversion, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED);
@@ -160,6 +165,30 @@
case Fac_InterrogateServedUserNumbers:
XSEQUENCE(ParseARGInterrogateServedUserNumbers, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED);
break;
+#endif
+
+ /* ECT support */
+ case Fac_EctExecute:
+ break;
+ case Fac_ExplicitEctExecute:
+ XSEQUENCE_1(ParseExplicitEctExecute_ARG, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.inv.o.ExplicitEctExecute);
+ break;
+ case Fac_RequestSubaddress:
+ break;
+ case Fac_SubaddressTransfer:
+ XSEQUENCE_1(ParseSubaddressTransfer_ARG, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.inv.o.SubaddressTransfer);
+ break;
+ case Fac_EctLinkIdRequest:
+ break;
+ case Fac_EctInform:
+ XSEQUENCE_1(ParseEctInform_ARG, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED, &pc->u.inv.o.EctInform);
+ break;
+ case Fac_EctLoopTest:
+ XSEQUENCE_1(ParseEctLoopTest_ARG, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.inv.o.EctLoopTest);
+ break;
+
+ /* AOC support */
+#if 0
//case Fac_ChargingRequest:
// XSEQUENCE(ParseChargingRequest, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED);
// break;
@@ -184,9 +213,12 @@
XSEQUENCE(ParseAOCEChargingUnit, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED);
break;
#endif
+
case Fac_StatusRequest:
- XSEQUENCE_1(ParseStatusRequest_ARG, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.inv.o.StatusRequest);
- break;
+ XSEQUENCE_1(ParseStatusRequest_ARG, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED, &pc->u.inv.o.StatusRequest);
+ break;
+
+ /* CCBS/CCNR support */
case Fac_CallInfoRetain:
XSEQUENCE_1(ParseCallInfoRetain_ARG, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.inv.o.CallInfoRetain);
break;
@@ -197,22 +229,22 @@
XSEQUENCE_1(ParseCCBSDeactivate_ARG, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.inv.o.CCBSDeactivate);
break;
case Fac_CCBSInterrogate:
- XSEQUENCE_1(ParseCCBSInterrogate_ARG, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.inv.o.CCBSInterrogate);
+ XSEQUENCE_1(ParseCCBSInterrogate_ARG, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED, &pc->u.inv.o.CCBSInterrogate);
break;
case Fac_CCBSErase:
- XSEQUENCE_1(ParseCCBSErase_ARG, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.inv.o.CCBSErase);
+ XSEQUENCE_1(ParseCCBSErase_ARG, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED, &pc->u.inv.o.CCBSErase);
break;
case Fac_CCBSRemoteUserFree:
- XSEQUENCE_1(ParseCCBSRemoteUserFree_ARG, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.inv.o.CCBSRemoteUserFree);
+ XSEQUENCE_1(ParseCCBSRemoteUserFree_ARG, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED, &pc->u.inv.o.CCBSRemoteUserFree);
break;
case Fac_CCBSCall:
XSEQUENCE_1(ParseCCBSCall_ARG, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.inv.o.CCBSCall);
break;
case Fac_CCBSStatusRequest:
- XSEQUENCE_1(ParseCCBSStatusRequest_ARG, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.inv.o.CCBSStatusRequest);
+ XSEQUENCE_1(ParseCCBSStatusRequest_ARG, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED, &pc->u.inv.o.CCBSStatusRequest);
break;
case Fac_CCBSBFree:
- XSEQUENCE_1(ParseCCBSBFree_ARG, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.inv.o.CCBSBFree);
+ XSEQUENCE_1(ParseCCBSBFree_ARG, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED, &pc->u.inv.o.CCBSBFree);
break;
case Fac_EraseCallLinkageID:
XSEQUENCE_1(ParseEraseCallLinkageID_ARG, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.inv.o.EraseCallLinkageID);
@@ -224,8 +256,9 @@
XSEQUENCE_1(ParseCCNRRequest_ARG, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.inv.o.CCNRRequest);
break;
case Fac_CCNRInterrogate:
- XSEQUENCE_1(ParseCCNRInterrogate_ARG, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.inv.o.CCNRInterrogate);
- break;
+ XSEQUENCE_1(ParseCCNRInterrogate_ARG, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED, &pc->u.inv.o.CCNRInterrogate);
+ break;
+
default:
return -1;
}
@@ -242,6 +275,7 @@
pc->u.retResult.operationValuePresent = 1;
switch (pc->u.retResult.operationValue) {
+ /* Diversion support */
#if 0
case Fac_InterrogationDiversion:
XSEQUENCE(ParseRESInterrogationDiversion, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED);
@@ -250,9 +284,20 @@
XSEQUENCE(ParseRESInterrogateServedUserNumbers, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED);
break;
#endif
+
+ /* ECT support */
+ case Fac_EctLinkIdRequest:
+ XSEQUENCE_1(ParseEctLinkIdRequest_RES, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.retResult.o.EctLinkIdRequest);
+ break;
+ case Fac_EctLoopTest:
+ XSEQUENCE_1(ParseEctLoopTest_RES, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.retResult.o.EctLoopTest);
+ break;
+
case Fac_StatusRequest:
XSEQUENCE_1(ParseStatusRequest_RES, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.retResult.o.StatusRequest);
break;
+
+ /* CCBS/CCNR support */
case Fac_CCBSDeactivate:
/* No additional result parameters */
break;
@@ -260,17 +305,18 @@
XSEQUENCE_1(ParseCCBSStatusRequest_RES, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.retResult.o.CCBSStatusRequest);
break;
case Fac_CCBSRequest:
- XSEQUENCE_1(ParseCCBSRequest_RES, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.retResult.o.CCBSRequest);
+ XSEQUENCE_1(ParseCCBSRequest_RES, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED, &pc->u.retResult.o.CCBSRequest);
break;
case Fac_CCBSInterrogate:
- XSEQUENCE_1(ParseCCBSInterrogate_RES, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.retResult.o.CCBSInterrogate);
+ XSEQUENCE_1(ParseCCBSInterrogate_RES, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED, &pc->u.retResult.o.CCBSInterrogate);
break;
case Fac_CCNRRequest:
- XSEQUENCE_1(ParseCCNRRequest_RES, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.retResult.o.CCNRRequest);
+ XSEQUENCE_1(ParseCCNRRequest_RES, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED, &pc->u.retResult.o.CCNRRequest);
break;
case Fac_CCNRInterrogate:
- XSEQUENCE_1(ParseCCNRInterrogate_RES, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &pc->u.retResult.o.CCNRInterrogate);
- break;
+ XSEQUENCE_1(ParseCCNRInterrogate_RES, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED, &pc->u.retResult.o.CCNRInterrogate);
+ break;
+
default:
return -1;
}
Added: mISDNuser/trunk/suppserv/asn1_ect.c
URL: http://svn.digium.com/view/thirdparty/mISDNuser/trunk/suppserv/asn1_ect.c?view=auto&rev=28
==============================================================================
--- mISDNuser/trunk/suppserv/asn1_ect.c (added)
+++ mISDNuser/trunk/suppserv/asn1_ect.c Tue Nov 11 11:57:06 2008
@@ -1,0 +1,519 @@
+/*
+ * $Id$
+ *
+ * Explicit Call Transfer (ECT) Supplementary Services ETS 300 369-1
+ *
+ * ECT Facility ie encode/decode
+ */
+
+#include "asn1.h"
+#include "asn1_ect.h"
+
+/* ------------------------------------------------------------------- */
+
+
+
+
+/* ******************************************************************* */
+/*!
+ * \brief Encode the PresentedNumberUnscreened type.
+ *
+ * \param Dest Where to put the encoding
+ * \param Presented Number information to encode.
+ *
+ * \retval length
+ */
+int encodePresentedNumberUnscreened_Full(__u8 *Dest, const struct FacPresentedNumberUnscreened *Presented)
+{
+ __u8 *p;
+ __u8 *TagStart;
+
+ p = Dest;
+ switch (Presented->Type) {
+ case 0: /* presentationAllowedNumber */
+ TagStart = p;
+ TagStart[0] = ASN1_TAG_CONTEXT_SPECIFIC | ASN1_TAG_CONSTRUCTED | 0;
+ p = &TagStart[2];
+
+ p += encodePartyNumber_Full(p, &Presented->Unscreened);
+
+ /* tag Length */
+ TagStart[1] = p - &TagStart[2];
+ break;
+ case 1: /* presentationRestricted */
+ p += encodeNull(p, ASN1_TAG_CONTEXT_SPECIFIC | 1);
+ break;
+ case 2: /* numberNotAvailableDueToInterworking */
+ p += encodeNull(p, ASN1_TAG_CONTEXT_SPECIFIC | 2);
+ break;
+ case 3: /* presentationRestrictedNumber */
+ TagStart = p;
+ TagStart[0] = ASN1_TAG_CONTEXT_SPECIFIC | ASN1_TAG_CONSTRUCTED | 3;
+ p = &TagStart[2];
+
+ p += encodePartyNumber_Full(p, &Presented->Unscreened);
+
+ /* tag Length */
+ TagStart[1] = p - &TagStart[2];
+ break;
+ default:
+ break;
+ } /* end switch */
+
+ return p - Dest;
+} /* end encodePresentedNumberUnscreened_Full() */
+
+
+
+
+/* ******************************************************************* */
+/*!
+ * \brief Parse the PresentedNumberUnscreened argument parameters.
+ *
+ * \param pc Complete component message storage data.
+ * \param p Starting buffer position to parse arguments
+ * \param end End buffer position that must not go past.
+ * \param Presented Parameter storage to fill.
+ *
+ * \retval length of buffer consumed
+ * \retval -1 on error.
+ */
+int ParsePresentedNumberUnscreened_Full(struct asn1_parm *pc, u_char *p, u_char *end, struct FacPresentedNumberUnscreened *Presented)
+{
+ INIT;
+
+ Presented->Type = 0;
+ XCHOICE_1(ParsePartyNumber_Full, ASN1_TAG_EXPLICIT | ASN1_TAG_CONTEXT_SPECIFIC, 0, &Presented->Unscreened);
+ Presented->Type = 1;
+ XCHOICE(ParseNull, ASN1_TAG_CONTEXT_SPECIFIC, 1);
+ Presented->Type = 2;
+ XCHOICE(ParseNull, ASN1_TAG_CONTEXT_SPECIFIC, 2);
+ Presented->Type = 3;
+ XCHOICE_1(ParsePartyNumber_Full, ASN1_TAG_EXPLICIT | ASN1_TAG_CONTEXT_SPECIFIC, 3, &Presented->Unscreened);
+
+ XCHOICE_DEFAULT;
+} /* end ParsePresentedNumberUnscreened_Full() */
+
+
+
+
+/* ******************************************************************* */
+/*!
+ * \brief Encode the EctExecute facility ie.
+ *
+ * \param Dest Where to put the encoding
+ * \param EctExecute Information needed to encode in ie.
+ *
+ * \retval length on success.
+ * \retval -1 on error.
+ */
+int encodeFacEctExecute(__u8 *Dest, const struct FacEctExecute *EctExecute)
+{
+ int Length;
+ __u8 *p;
+
+ p = encodeComponentInvoke_Head(Dest, EctExecute->InvokeID, Fac_EctExecute);
+
+ Length = encodeComponent_Length(Dest, p);
+
+ return Length;
+} /* end encodeFacEctExecute() */
+
+
+
+
+/* ******************************************************************* */
+/*!
+ * \brief Encode the ExplicitEctExecute facility ie.
+ *
+ * \param Dest Where to put the encoding
+ * \param ExplicitEctExecute Information needed to encode in ie.
+ *
+ * \retval length on success.
+ * \retval -1 on error.
+ */
+int encodeFacExplicitEctExecute(__u8 *Dest, const struct FacExplicitEctExecute *ExplicitEctExecute)
+{
+ int Length;
+ __u8 *p;
+
+ p = encodeComponentInvoke_Head(Dest, ExplicitEctExecute->InvokeID, Fac_ExplicitEctExecute);
+
+ p += encodeInt(p, ASN1_TAG_INTEGER, ExplicitEctExecute->LinkID);
+
+ Length = encodeComponent_Length(Dest, p);
+
+ return Length;
+} /* end encodeFacExplicitEctExecute() */
+
+
+
+
+/* ******************************************************************* */
+/*!
+ * \brief Parse the ExplicitEctExecute invoke argument parameters.
+ *
+ * \param pc Complete component message storage data.
+ * \param p Starting buffer position to parse arguments
+ * \param end End buffer position that must not go past.
+ * \param ExplicitEctExecute Parameter storage to fill.
+ *
+ * \retval length of buffer consumed
+ * \retval -1 on error.
+ */
+int ParseExplicitEctExecute_ARG(struct asn1_parm *pc, u_char *p, u_char *end, struct FacExplicitEctExecute *ExplicitEctExecute)
+{
+ int LinkID;
+ int ret;
+ u_char *beg;
+
+ print_asn1msg(PRT_DEBUG_DECODE, " DEBUG> %s\n", __FUNCTION__);
+ beg = p;
+ XSEQUENCE_1(ParseInteger, ASN1_TAG_INTEGER, ASN1_NOT_TAGGED, &LinkID);
+ ExplicitEctExecute->LinkID = LinkID;
+ ExplicitEctExecute->InvokeID = pc->u.inv.invokeId;
+
+ return p - beg;
+} /* end ParseExplicitEctExecute_ARG() */
+
+
+
+
+/* ******************************************************************* */
+/*!
+ * \brief Encode the RequestSubaddress facility ie.
+ *
+ * \param Dest Where to put the encoding
+ * \param RequestSubaddress Information needed to encode in ie.
+ *
+ * \retval length on success.
+ * \retval -1 on error.
+ */
+int encodeFacRequestSubaddress(__u8 *Dest, const struct FacRequestSubaddress *RequestSubaddress)
+{
+ int Length;
+ __u8 *p;
+
+ p = encodeComponentInvoke_Head(Dest, RequestSubaddress->InvokeID, Fac_RequestSubaddress);
+
+ Length = encodeComponent_Length(Dest, p);
+
+ return Length;
+} /* end encodeFacRequestSubaddress() */
+
+
+
+
+/* ******************************************************************* */
+/*!
+ * \brief Encode the SubaddressTransfer facility ie.
+ *
+ * \param Dest Where to put the encoding
+ * \param SubaddressTransfer Information needed to encode in ie.
+ *
+ * \retval length on success.
+ * \retval -1 on error.
+ */
+int encodeFacSubaddressTransfer(__u8 *Dest, const struct FacSubaddressTransfer *SubaddressTransfer)
+{
+ int Length;
+ __u8 *p;
+
+ p = encodeComponentInvoke_Head(Dest, SubaddressTransfer->InvokeID, Fac_SubaddressTransfer);
+
+ p += encodePartySubaddress_Full(p, &SubaddressTransfer->Subaddress);
+
+ Length = encodeComponent_Length(Dest, p);
+
+ return Length;
+} /* end encodeFacSubaddressTransfer() */
+
+
+
+
+/* ******************************************************************* */
+/*!
+ * \brief Parse the SubaddressTransfer invoke argument parameters.
+ *
+ * \param pc Complete component message storage data.
+ * \param p Starting buffer position to parse arguments
+ * \param end End buffer position that must not go past.
+ * \param SubaddressTransfer Parameter storage to fill.
+ *
+ * \retval length of buffer consumed
+ * \retval -1 on error.
+ */
+int ParseSubaddressTransfer_ARG(struct asn1_parm *pc, u_char *p, u_char *end, struct FacSubaddressTransfer *SubaddressTransfer)
+{
+ int ret;
+ u_char *beg;
+
+ print_asn1msg(PRT_DEBUG_DECODE, " DEBUG> %s\n", __FUNCTION__);
+ beg = p;
+ XSEQUENCE_1(ParsePartySubaddress_Full, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &SubaddressTransfer->Subaddress);
+ SubaddressTransfer->InvokeID = pc->u.inv.invokeId;
+
+ return p - beg;
+} /* end ParseSubaddressTransfer_ARG() */
+
+
+
+
+/* ******************************************************************* */
+/*!
+ * \brief Encode the EctLinkIdRequest facility ie.
+ *
+ * \param Dest Where to put the encoding
+ * \param EctLinkIdRequest Information needed to encode in ie.
+ *
+ * \retval length on success.
+ * \retval -1 on error.
+ */
+int encodeFacEctLinkIdRequest(__u8 *Dest, const struct FacEctLinkIdRequest *EctLinkIdRequest)
+{
+ int Length;
+ __u8 *p;
+ __u8 *SeqStart;
+
+ switch (EctLinkIdRequest->ComponentType) {
+ case FacComponent_Invoke:
+ p = encodeComponentInvoke_Head(Dest, EctLinkIdRequest->InvokeID, Fac_EctLinkIdRequest);
+
+ /* No arguments */
+
+ Length = encodeComponent_Length(Dest, p);
+ break;
+ case FacComponent_Result:
+ p = encodeComponent_Head(Dest, asn1ComponentTag_Result);
+ p += encodeInt(p, ASN1_TAG_INTEGER, EctLinkIdRequest->InvokeID);
+
+ SeqStart = p;
+ SeqStart[0] = ASN1_TAG_SEQUENCE;
+ p = &SeqStart[2];
+ p += encodeOperationValue(p, Fac_EctLinkIdRequest);
+ p += encodeInt(p, ASN1_TAG_INTEGER, EctLinkIdRequest->Component.Result.LinkID);
+ /* sequence Length */
+ SeqStart[1] = p - &SeqStart[2];
+
+ Length = encodeComponent_Length(Dest, p);
+ break;
+ default:
+ Length = -1;
+ break;
+ } /* end switch */
+
+ return Length;
+} /* end encodeFacEctLinkIdRequest() */
+
+
+
+
+/* ******************************************************************* */
+/*!
+ * \brief Parse the EctLinkIdRequest result parameters.
+ *
+ * \param pc Complete component message storage data.
+ * \param p Starting buffer position to parse parameters
+ * \param end End buffer position that must not go past.
+ * \param EctLinkIdRequest Parameter storage to fill.
+ *
+ * \retval length of buffer consumed
+ * \retval -1 on error.
+ */
+int ParseEctLinkIdRequest_RES(struct asn1_parm *pc, u_char *p, u_char *end, struct FacEctLinkIdRequest_RES *EctLinkIdRequest)
+{
+ int LinkID;
+ int ret;
+ u_char *beg;
+
+ print_asn1msg(PRT_DEBUG_DECODE, " DEBUG> %s\n", __FUNCTION__);
+ beg = p;
+ XSEQUENCE_1(ParseInteger, ASN1_TAG_INTEGER, ASN1_NOT_TAGGED, &LinkID);
+ EctLinkIdRequest->LinkID = LinkID;
+
+ return p - beg;
+} /* end ParseEctLinkIdRequest_RES() */
+
+
+
+
+/* ******************************************************************* */
+/*!
+ * \brief Encode the EctInform facility ie.
+ *
+ * \param Dest Where to put the encoding
+ * \param EctInform Information needed to encode in ie.
+ *
+ * \retval length on success.
+ * \retval -1 on error.
+ */
+int encodeFacEctInform(__u8 *Dest, const struct FacEctInform *EctInform)
+{
+ int Length;
+ __u8 *p;
+ __u8 *SeqStart;
+
+ p = encodeComponentInvoke_Head(Dest, EctInform->InvokeID, Fac_EctInform);
+
+ SeqStart = p;
+ SeqStart[0] = ASN1_TAG_SEQUENCE;
+ p = &SeqStart[2];
+ p += encodeEnum(p, ASN1_TAG_ENUM, EctInform->Status);
+ if (EctInform->RedirectionPresent)
+ {
+ p += encodePresentedNumberUnscreened_Full(p, &EctInform->Redirection);
+ }
+ /* sequence Length */
+ SeqStart[1] = p - &SeqStart[2];
+
+ Length = encodeComponent_Length(Dest, p);
+
+ return Length;
+} /* end encodeFacEctInform() */
+
+
+
+
+/* ******************************************************************* */
+/*!
+ * \brief Parse the EctInform invoke argument parameters.
+ *
+ * \param pc Complete component message storage data.
+ * \param p Starting buffer position to parse arguments
+ * \param end End buffer position that must not go past.
+ * \param EctInform Parameter storage to fill.
+ *
+ * \retval length of buffer consumed
+ * \retval -1 on error.
+ */
+int ParseEctInform_ARG(struct asn1_parm *pc, u_char *p, u_char *end, struct FacEctInform *EctInform)
+{
+ int Status;
+ INIT;
+
+ XSEQUENCE_1(ParseEnum, ASN1_TAG_ENUM, ASN1_NOT_TAGGED, &Status);
+ EctInform->Status = Status;
+ if (p < end) {
+ XSEQUENCE_1(ParsePresentedNumberUnscreened_Full, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &EctInform->Redirection);
+ EctInform->RedirectionPresent = 1;
+ } else {
+ EctInform->RedirectionPresent = 0;
+ }
+ EctInform->InvokeID = pc->u.inv.invokeId;
+
+ return p - beg;
+} /* end ParseEctInform_ARG() */
+
+
+
+
+/* ******************************************************************* */
+/*!
+ * \brief Encode the EctLoopTest facility ie.
+ *
+ * \param Dest Where to put the encoding
+ * \param EctLoopTest Information needed to encode in ie.
+ *
+ * \retval length on success.
+ * \retval -1 on error.
+ */
+int encodeFacEctLoopTest(__u8 *Dest, const struct FacEctLoopTest *EctLoopTest)
+{
+ int Length;
+ __u8 *p;
+ __u8 *SeqStart;
+
+ switch (EctLoopTest->ComponentType) {
+ case FacComponent_Invoke:
+ p = encodeComponentInvoke_Head(Dest, EctLoopTest->InvokeID, Fac_EctLoopTest);
+
+ p += encodeInt(p, ASN1_TAG_INTEGER, EctLoopTest->Component.Invoke.CallTransferID);
+
+ Length = encodeComponent_Length(Dest, p);
+ break;
+ case FacComponent_Result:
+ p = encodeComponent_Head(Dest, asn1ComponentTag_Result);
+ p += encodeInt(p, ASN1_TAG_INTEGER, EctLoopTest->InvokeID);
+
+ SeqStart = p;
+ SeqStart[0] = ASN1_TAG_SEQUENCE;
+ p = &SeqStart[2];
+ p += encodeOperationValue(p, Fac_EctLoopTest);
+ p += encodeEnum(p, ASN1_TAG_ENUM, EctLoopTest->Component.Result.LoopResult);
+ /* sequence Length */
+ SeqStart[1] = p - &SeqStart[2];
+
+ Length = encodeComponent_Length(Dest, p);
+ break;
+ default:
+ Length = -1;
+ break;
+ } /* end switch */
+
+ return Length;
+} /* end encodeFacEctLoopTest() */
+
+
+
+
+/* ******************************************************************* */
+/*!
+ * \brief Parse the EctLoopTest invoke argument parameters.
+ *
+ * \param pc Complete component message storage data.
+ * \param p Starting buffer position to parse arguments
+ * \param end End buffer position that must not go past.
+ * \param EctLoopTest Parameter storage to fill.
+ *
+ * \retval length of buffer consumed
+ * \retval -1 on error.
+ */
+int ParseEctLoopTest_ARG(struct asn1_parm *pc, u_char *p, u_char *end, struct FacEctLoopTest_ARG *EctLoopTest)
+{
+ int CallTransferID;
+ int ret;
+ u_char *beg;
+
+ print_asn1msg(PRT_DEBUG_DECODE, " DEBUG> %s\n", __FUNCTION__);
+ beg = p;
+ XSEQUENCE_1(ParseInteger, ASN1_TAG_INTEGER, ASN1_NOT_TAGGED, &CallTransferID);
+ EctLoopTest->CallTransferID = CallTransferID;
+
+ return p - beg;
+} /* end ParseEctLoopTest_ARG() */
+
+
+
+
+/* ******************************************************************* */
+/*!
+ * \brief Parse the EctLoopTest result parameters.
+ *
+ * \param pc Complete component message storage data.
+ * \param p Starting buffer position to parse parameters
+ * \param end End buffer position that must not go past.
+ * \param EctLoopTest Parameter storage to fill.
+ *
+ * \retval length of buffer consumed
+ * \retval -1 on error.
+ */
+int ParseEctLoopTest_RES(struct asn1_parm *pc, u_char *p, u_char *end, struct FacEctLoopTest_RES *EctLoopTest)
+{
+ int LoopResult;
+ int ret;
+ u_char *beg;
+
+ print_asn1msg(PRT_DEBUG_DECODE, " DEBUG> %s\n", __FUNCTION__);
+ beg = p;
+ XSEQUENCE_1(ParseEnum, ASN1_TAG_ENUM, ASN1_NOT_TAGGED, &LoopResult);
+ EctLoopTest->LoopResult = LoopResult;
+
+ return p - beg;
+} /* end ParseEctLoopTest_RES() */
+
+
+
+
+/* ------------------------------------------------------------------- */
+/* end asn1_ect.c */
+
Propchange: mISDNuser/trunk/suppserv/asn1_ect.c
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: mISDNuser/trunk/suppserv/asn1_ect.c
------------------------------------------------------------------------------
svn:keywords = Author ID Date Revision
Propchange: mISDNuser/trunk/suppserv/asn1_ect.c
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: mISDNuser/trunk/suppserv/asn1_ect.h
URL: http://svn.digium.com/view/thirdparty/mISDNuser/trunk/suppserv/asn1_ect.h?view=auto&rev=28
==============================================================================
--- mISDNuser/trunk/suppserv/asn1_ect.h (added)
+++ mISDNuser/trunk/suppserv/asn1_ect.h Tue Nov 11 11:57:06 2008
@@ -1,0 +1,48 @@
+/*
+ * $Id$
+ *
+ * Explicit Call Transfer (ECT) Supplementary Services ETS 300 369-1
+ *
+ * ECT Facility ie encode/decode header
+ */
+
+#ifndef __ASN1_ECT_H
+#define __ASN1_ECT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ------------------------------------------------------------------- */
+
+
+int encodeFacEctExecute(__u8 *Dest, const struct FacEctExecute *EctExecute);
+
+int encodeFacExplicitEctExecute(__u8 *Dest, const struct FacExplicitEctExecute *ExplicitEctExecute);
+int ParseExplicitEctExecute_ARG(struct asn1_parm *pc, u_char *p, u_char *end, struct FacExplicitEctExecute *ExplicitEctExecute);
+
+int encodeFacRequestSubaddress(__u8 *Dest, const struct FacRequestSubaddress *RequestSubaddress);
+
+int encodeFacSubaddressTransfer(__u8 *Dest, const struct FacSubaddressTransfer *SubaddressTransfer);
+int ParseSubaddressTransfer_ARG(struct asn1_parm *pc, u_char *p, u_char *end, struct FacSubaddressTransfer *SubaddressTransfer);
+
+int encodeFacEctLinkIdRequest(__u8 *Dest, const struct FacEctLinkIdRequest *EctLinkIdRequest);
+int ParseEctLinkIdRequest_RES(struct asn1_parm *pc, u_char *p, u_char *end, struct FacEctLinkIdRequest_RES *EctLinkIdRequest);
+
+int encodeFacEctInform(__u8 *Dest, const struct FacEctInform *EctInform);
+int ParseEctInform_ARG(struct asn1_parm *pc, u_char *p, u_char *end, struct FacEctInform *EctInform);
+
+int encodeFacEctLoopTest(__u8 *Dest, const struct FacEctLoopTest *EctLoopTest);
+int ParseEctLoopTest_ARG(struct asn1_parm *pc, u_char *p, u_char *end, struct FacEctLoopTest_ARG *EctLoopTest);
+int ParseEctLoopTest_RES(struct asn1_parm *pc, u_char *p, u_char *end, struct FacEctLoopTest_RES *EctLoopTest);
+
+
+/* ------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __ASN1_ECT_H */
+/* ------------------------------------------------------------------- */
+/* end asn1_ect.h */
Propchange: mISDNuser/trunk/suppserv/asn1_ect.h
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: mISDNuser/trunk/suppserv/asn1_ect.h
------------------------------------------------------------------------------
svn:keywords = Author ID Date Revision
Propchange: mISDNuser/trunk/suppserv/asn1_ect.h
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: mISDNuser/trunk/suppserv/fac.c
URL: http://svn.digium.com/view/thirdparty/mISDNuser/trunk/suppserv/fac.c?view=diff&rev=28&r1=27&r2=28
==============================================================================
--- mISDNuser/trunk/suppserv/fac.c (original)
+++ mISDNuser/trunk/suppserv/fac.c Tue Nov 11 11:57:06 2008
@@ -26,6 +26,7 @@
#include "asn1.h"
#include "asn1_diversion.h"
#include "asn1_ccbs.h"
+#include "asn1_ect.h"
#include "l3dss1.h"
#include <string.h>
@@ -293,6 +294,8 @@
switch (fac->Function) {
case Fac_None:
break;
+
+ /* Diversion support */
case Fac_ActivationDiversion:
len = encodeFacActivationDiversion(dest, &fac->u.CFActivate);
break;
@@ -303,6 +306,7 @@
case Fac_DeactivationStatusNotificationDiv:
case Fac_InterrogationDiversion:
case Fac_DiversionInformation:
+ break;
case Fac_CallDeflection:
len = encodeFacCDeflection(dest, &fac->u.CDeflection);
break;
@@ -312,6 +316,31 @@
case Fac_DivertingLegInformation1:
case Fac_DivertingLegInformation3:
break;
+
+ /* ECT support */
+ case Fac_EctExecute:
+ len = encodeFacEctExecute(dest, &fac->u.EctExecute);
+ break;
+ case Fac_ExplicitEctExecute:
+ len = encodeFacExplicitEctExecute(dest, &fac->u.ExplicitEctExecute);
+ break;
+ case Fac_RequestSubaddress:
+ len = encodeFacRequestSubaddress(dest, &fac->u.RequestSubaddress);
+ break;
+ case Fac_SubaddressTransfer:
+ len = encodeFacSubaddressTransfer(dest, &fac->u.SubaddressTransfer);
+ break;
+ case Fac_EctLinkIdRequest:
+ len = encodeFacEctLinkIdRequest(dest, &fac->u.EctLinkIdRequest);
+ break;
+ case Fac_EctInform:
+ len = encodeFacEctInform(dest, &fac->u.EctInform);
+ break;
+ case Fac_EctLoopTest:
+ len = encodeFacEctLoopTest(dest, &fac->u.EctLoopTest);
+ break;
+
+ /* AOC support */
case Fac_ChargingRequest:
case Fac_AOCSCurrency:
case Fac_AOCSSpecialArr:
@@ -320,6 +349,7 @@
case Fac_AOCECurrency:
case Fac_AOCEChargingUnit:
break;
+
case Fac_RESULT:
len = encodeFacRESULT(dest, &fac->u.RESULT);
break;
@@ -329,9 +359,12 @@
case Fac_REJECT:
len = encodeFacREJECT(dest, &fac->u.REJECT);
break;
+
case Fac_StatusRequest:
len = encodeFacStatusRequest(dest, &fac->u.StatusRequest);
break;
+
+ /* CCBS/CCNR support */
case Fac_CallInfoRetain:
len = encodeFacCallInfoRetain(dest, &fac->u.CallInfoRetain);
break;
@@ -371,6 +404,7 @@
case Fac_CCNRInterrogate:
len = encodeFacCCNRInterrogate(dest, &fac->u.CCNRInterrogate);
break;
+
default:
break;
}
@@ -413,6 +447,7 @@
case invoke:
fac->Function = pc.u.inv.operationValue;
switch (pc.u.inv.operationValue) {
+ /* Diversion support */
case Fac_ActivationDiversion:
case Fac_DeactivationDiversion:
case Fac_ActivationStatusNotificationDiv:
@@ -439,6 +474,34 @@
case Fac_DivertingLegInformation1:
case Fac_DivertingLegInformation3:
break;
+
+ /* ECT support */
+ case Fac_EctExecute:
+ fac->u.EctExecute.InvokeID = pc.u.inv.invokeId;
+ return 0;
+ case Fac_ExplicitEctExecute:
+ fac->u.ExplicitEctExecute = pc.u.inv.o.ExplicitEctExecute;
+ return 0;
+ case Fac_RequestSubaddress:
+ fac->u.RequestSubaddress.InvokeID = pc.u.inv.invokeId;
+ return 0;
+ case Fac_SubaddressTransfer:
+ fac->u.SubaddressTransfer = pc.u.inv.o.SubaddressTransfer;
+ return 0;
+ case Fac_EctLinkIdRequest:
+ fac->u.EctLinkIdRequest.InvokeID = pc.u.inv.invokeId;
+ fac->u.EctLinkIdRequest.ComponentType = FacComponent_Invoke;
+ return 0;
+ case Fac_EctInform:
+ fac->u.EctInform = pc.u.inv.o.EctInform;
+ return 0;
+ case Fac_EctLoopTest:
+ fac->u.EctLoopTest.InvokeID = pc.u.inv.invokeId;
+ fac->u.EctLoopTest.ComponentType = FacComponent_Invoke;
+ fac->u.EctLoopTest.Component.Invoke = pc.u.inv.o.EctLoopTest;
+ return 0;
+
+ /* AOC support */
case Fac_ChargingRequest:
case Fac_AOCSCurrency:
case Fac_AOCSSpecialArr:
@@ -452,11 +515,14 @@
case Fac_AOCECurrency:
case Fac_AOCEChargingUnit:
break;
+
case Fac_StatusRequest:
fac->u.StatusRequest.InvokeID = pc.u.inv.invokeId;
fac->u.StatusRequest.ComponentType = FacComponent_Invoke;
fac->u.StatusRequest.Component.Invoke = pc.u.inv.o.StatusRequest;
return 0;
+
+ /* CCBS/CCNR support */
case Fac_CallInfoRetain:
fac->u.CallInfoRetain = pc.u.inv.o.CallInfoRetain;
return 0;
@@ -508,6 +574,7 @@
fac->u.CCNRInterrogate.ComponentType = FacComponent_Invoke;
fac->u.CCNRInterrogate.Component.Invoke = pc.u.inv.o.CCNRInterrogate;
return 0;
+
default:
break;
} /* end switch */
@@ -523,6 +590,7 @@
}
fac->Function = pc.u.retResult.operationValue;
switch (pc.u.retResult.operationValue) {
+ /* Diversion support */
case Fac_ActivationDiversion:
case Fac_DeactivationDiversion:
case Fac_ActivationStatusNotificationDiv:
@@ -536,6 +604,27 @@
case Fac_DivertingLegInformation1:
case Fac_DivertingLegInformation3:
break;
+
+ /* ECT support */
+ case Fac_EctExecute:
+ case Fac_ExplicitEctExecute:
+ case Fac_RequestSubaddress:
+ case Fac_SubaddressTransfer:
+ break;
+ case Fac_EctLinkIdRequest:
+ fac->u.EctLinkIdRequest.InvokeID = pc.u.retResult.invokeId;
+ fac->u.EctLinkIdRequest.ComponentType = FacComponent_Result;
+ fac->u.EctLinkIdRequest.Component.Result = pc.u.retResult.o.EctLinkIdRequest;
+ return 0;
+ case Fac_EctInform:
+ break;
+ case Fac_EctLoopTest:
+ fac->u.EctLoopTest.InvokeID = pc.u.retResult.invokeId;
+ fac->u.EctLoopTest.ComponentType = FacComponent_Result;
+ fac->u.EctLoopTest.Component.Result = pc.u.retResult.o.EctLoopTest;
+ return 0;
+
+ /* AOC support */
case Fac_ChargingRequest:
case Fac_AOCSCurrency:
case Fac_AOCSSpecialArr:
@@ -544,11 +633,14 @@
case Fac_AOCECurrency:
case Fac_AOCEChargingUnit:
break;
+
case Fac_StatusRequest:
fac->u.StatusRequest.InvokeID = pc.u.retResult.invokeId;
fac->u.StatusRequest.ComponentType = FacComponent_Result;
fac->u.StatusRequest.Component.Result = pc.u.retResult.o.StatusRequest;
return 0;
+
+ /* CCBS/CCNR support */
case Fac_CallInfoRetain:
[... 217 lines stripped ...]
More information about the thirdparty-commits
mailing list