diff --git a/suppserv/asn1.h b/suppserv/asn1.h index 176ae83..c11f01f 100644 --- a/suppserv/asn1.h +++ b/suppserv/asn1.h @@ -99,6 +99,7 @@ struct asn1ReturnResult { struct asn1ReturnError { __u16 invokeId; __u16 errorValue; + __u8 error[32]; }; struct asn1Reject { diff --git a/suppserv/asn1_comp.c b/suppserv/asn1_comp.c index 4646e33..97fd207 100644 --- a/suppserv/asn1_comp.c +++ b/suppserv/asn1_comp.c @@ -136,6 +136,8 @@ ParseReturnErrorComponent(struct asn1_parm *pc, u_char *p, u_char *end, int dumm } print_asn1msg(PRT_DEBUG_DECODE, "ReturnError: %s\n", error); + strcpy(pc->u.retError.error,error); + return p - beg; } diff --git a/suppserv/fac.c b/suppserv/fac.c index dfe57d9..57f7370 100644 --- a/suppserv/fac.c +++ b/suppserv/fac.c @@ -95,6 +95,7 @@ int encodeFac (__u8 *dest, struct FacParm *fac) case Fac_Listen: case Fac_Suspend: case Fac_Resume: + case Fac_RESULT: break; case Fac_CFActivate: len = encodeFacActivationDiversion(dest, &(fac->u.CFActivate)); @@ -110,6 +111,7 @@ int encodeFac (__u8 *dest, struct FacParm *fac) case Fac_CD: len = encodeFacCDeflection(dest, &(fac->u.CDeflection)); } + return len; } @@ -171,7 +173,13 @@ int decodeFac (__u8 *src, struct FacParm *fac) } break; case returnResult: + fac->Function = Fac_RESULT; + return 0; case returnError: + fac->Function = Fac_ERROR; + fac->u.ERROR.errorValue = pc.u.retError.errorValue; + strcpy(fac->u.ERROR.error, pc.u.retError.error); + return 0; case reject: goto _dec_err; } diff --git a/suppserv/suppserv.h b/suppserv/suppserv.h index d49ed6c..d7c4320 100644 --- a/suppserv/suppserv.h +++ b/suppserv/suppserv.h @@ -34,6 +34,8 @@ enum FacFunction { Fac_None = 0xffff, + Fac_ERROR = 0xfffe, + Fac_RESULT = 0xfffd, Fac_GetSupportedServices = 0x0000, Fac_Listen = 0x0001, Fac_Suspend = 0x0004, @@ -47,6 +49,15 @@ enum FacFunction { Fac_AOCDChargingUnit = 0x0022, }; +struct FacERROR { + __u8 errorValue; + __u8 error[32]; +}; + +struct FacRESULT { + __u8 result; +}; + struct FacListen { __u32 NotificationMask; }; @@ -118,6 +129,8 @@ struct FacParm { struct FacCDeflection CDeflection; struct FacAOCDChargingUnit AOCDchu; struct FacAOCDCurrency AOCDcur; + struct FacRESULT RESULT; + struct FacERROR ERROR; } u; };