int ParseARGDiversionInformation(struct asn1_parm *pc, u_char *p, u_char *end, int dummy) { char diversionReason[20]; int basicService; char servedUserSubaddress[30]; char callingAddress[80]; char originalCalledNr[80]; char lastDivertingNr[80]; char lastDivertingReason[20]; INIT; servedUserSubaddress[0] = 0; callingAddress[0] = 0; originalCalledNr[0] = 0; lastDivertingNr[0] = 0; lastDivertingReason[0] = 0; XSEQUENCE_1(ParseDiversionReason, ASN1_TAG_ENUM, ASN1_NOT_TAGGED, diversionReason); XSEQUENCE_1(ParseBasicService, ASN1_TAG_ENUM, ASN1_NOT_TAGGED, &basicService); XSEQUENCE_OPT_1(ParsePartySubaddress, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED, servedUserSubaddress); XSEQUENCE_OPT_1(ParsePresentedAddressScreened, ASN1_NOT_TAGGED, 0 | ASN1_TAG_EXPLICIT, callingAddress); XSEQUENCE_OPT_1(ParsePresentedNumberUnscreened, ASN1_NOT_TAGGED, 1 | ASN1_TAG_EXPLICIT, originalCalledNr); XSEQUENCE_OPT_1(ParsePresentedNumberUnscreened, ASN1_NOT_TAGGED, 2 | ASN1_TAG_EXPLICIT, lastDivertingNr); XSEQUENCE_OPT_1(ParseDiversionReason, ASN1_TAG_ENUM, 3 | ASN1_TAG_EXPLICIT, lastDivertingReason); // XSEQUENCE_OPT_1(ParseQ931InformationElement, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, userInfo); print_asn1msg(PRT_SHOWNUMBERS, "Diversion Information %s(%d) %s\n" " callingAddress %s originalCalled Nr %s\n" " lastDivertingNr %s lastDiverting Reason %s\n", diversionReason, basicService, servedUserSubaddress, callingAddress, originalCalledNr, lastDivertingNr, lastDivertingReason); return p - beg; }
int ParseReturnErrorComponent(struct Aoc *chanp, u_char *p, u_char *end, int dummy) { int invokeId; int errorValue; char error[80]; INIT; XSEQUENCE_1(ParseInvokeId, ASN1_TAG_INTEGER, ASN1_NOT_TAGGED, &invokeId); XSEQUENCE_1(ParseErrorValue, ASN1_TAG_INTEGER, ASN1_NOT_TAGGED, &errorValue); switch (errorValue) { case 0: sprintf(error, "not subscribed"); break; case 3: sprintf(error, "not available"); break; case 4: sprintf(error, "not implemented"); break; case 6: sprintf(error, "invalid served user nr"); break; case 7: sprintf(error, "invalid call state"); break; case 8: sprintf(error, "basic service not provided"); break; case 9: sprintf(error, "not incoming call"); break; case 10: sprintf(error, "supplementary service interaction not allowed"); break; case 11: sprintf(error, "resource unavailable"); break; case 12: sprintf(error, "invalid diverted-to nr"); break; case 14: sprintf(error, "special service nr"); break; case 15: sprintf(error, "diversion to served user nr"); break; case 23: sprintf(error, "incoming call accepted"); break; case 24: sprintf(error, "number of diversions exceeded"); break; case 46: sprintf(error, "not activated"); break; case 48: sprintf(error, "request already accepted"); break; default: sprintf(error, "(%d)", errorValue); break; } showmsg("ReturnError: %s\n", error); return p - beg; }
int ParseARGReqCallDeflection(struct asn1_parm *pc, u_char *p, u_char *end, struct ReqCallDeflection *reqCD) { INIT; XSEQUENCE_1(ParseAddress, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED, &reqCD->address); XSEQUENCE_1(ParseBoolean, ASN1_TAG_BOOLEAN, ASN1_NOT_TAGGED, &reqCD->pres); return p - beg; }
int ParseARGDeactivationStatusNotificationDiv(struct asn1_parm *pc, u_char *p, u_char *end, struct DeactDivNotification *deactNot) { INIT; XSEQUENCE_1(ParseProcedure, ASN1_TAG_ENUM, ASN1_NOT_TAGGED, &deactNot->procedure); XSEQUENCE_1(ParseBasicService, ASN1_TAG_ENUM, ASN1_NOT_TAGGED, &deactNot->basicService); XSEQUENCE_1(ParseServedUserNr, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &deactNot->servedUserNr); return p - beg; }
int ParseIntResult(struct asn1_parm *pc, u_char *p, u_char *end, struct IntResult *intResult) { INIT; XSEQUENCE_1(ParseServedUserNr, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &intResult->servedUserNr); XSEQUENCE_1(ParseBasicService, ASN1_TAG_ENUM, ASN1_NOT_TAGGED, &intResult->basicService); XSEQUENCE_1(ParseProcedure, ASN1_TAG_ENUM, ASN1_NOT_TAGGED, &intResult->procedure); XSEQUENCE_1(ParseAddress, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED, &intResult->address); return p - beg; }
int ParseARGInterrogationDiversion(struct asn1_parm *pc, u_char *p, u_char *end, int dummy) { int procedure, basicService; struct ServedUserNr servedUserNr; INIT; XSEQUENCE_1(ParseProcedure, ASN1_TAG_ENUM, ASN1_NOT_TAGGED, &procedure); XSEQUENCE_1(ParseBasicService, ASN1_TAG_ENUM, ASN1_NOT_TAGGED, &basicService); XSEQUENCE_1(ParseServedUserNr, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &servedUserNr); print_asn1msg(PRT_SHOWNUMBERS, "Interrogation Diversion %d (%d), \n", procedure, basicService); return p - beg; }
int ParseARGActivationDiversion(struct asn1_parm *pc, u_char *p, u_char *end, int dummy) { int procedure, basicService; struct ServedUserNr servedUserNr; struct Address address; INIT; XSEQUENCE_1(ParseProcedure, ASN1_TAG_ENUM, ASN1_NOT_TAGGED, &procedure); XSEQUENCE_1(ParseBasicService, ASN1_TAG_ENUM, ASN1_NOT_TAGGED, &basicService); XSEQUENCE_1(ParseAddress, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED, &address); XSEQUENCE_1(ParseServedUserNr, ASN1_NOT_TAGGED, ASN1_NOT_TAGGED, &servedUserNr); return p - beg; }
int ParseReturnResultComponent(struct Aoc *chanp, u_char *p, u_char *end, int dummy) { int invokeId; INIT; XSEQUENCE_1(ParseInvokeId, ASN1_TAG_INTEGER, ASN1_NOT_TAGGED, &invokeId); XSEQUENCE_OPT(ParseReturnResultComponentSequence, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED); return p - beg; }
int ParseInvokeComponent(struct Aoc *chanp, u_char *p, u_char *end, int dummy) { int invokeId, operationValue; INIT; XSEQUENCE_1(ParseInvokeId, ASN1_TAG_INTEGER, ASN1_NOT_TAGGED, &invokeId); // XSEQUENCE_OPT(ParseLinkedId, ASN1_TAG_INTEGER, 0); XSEQUENCE_1(ParseOperationValue, ASN1_TAG_INTEGER, ASN1_NOT_TAGGED, &operationValue); switch (operationValue) { case 7: XSEQUENCE(ParseARGActivationDiversion, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED); break; case 8: XSEQUENCE(ParseARGDeactivationDiversion, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED); break; case 9: XSEQUENCE(ParseARGActivationStatusNotificationDiv, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED); break; case 10: XSEQUENCE(ParseARGDeactivationStatusNotificationDiv, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED); break; case 11: XSEQUENCE(ParseARGInterrogationDiversion, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED); break; case 12: XSEQUENCE(ParseARGDiversionInformation, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED); break; case 17: XSEQUENCE(ParseARGInterrogateServedUserNumbers, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED); break; // case 30: XSEQUENCE(ParseChargingRequest, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED); break; // case 31: XSEQUENCE(ParseAOCSCurrency, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED); break; // case 32: XSEQUENCE(ParseAOCSSpecialArr, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED); break; case 33: XSEQUENCE(ParseAOCDCurrency, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED); break; case 34: XSEQUENCE(ParseAOCDChargingUnit, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED); break; case 35: XSEQUENCE(ParseAOCECurrency, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED); break; case 36: XSEQUENCE(ParseAOCEChargingUnit, ASN1_TAG_SEQUENCE, ASN1_NOT_TAGGED); break; default: return -1; } switch (operationValue) { case 33: case 34: case 35: case 36: chanp->type = operationValue; break; } return p - beg; }
int ParseReturnResultComponentSequence(struct Aoc *chanp, u_char *p, u_char *end, int dummy) { int operationValue; INIT; XSEQUENCE_1(ParseOperationValue, ASN1_TAG_INTEGER, ASN1_NOT_TAGGED, &operationValue); switch (operationValue) { case 11: XSEQUENCE(ParseRESInterrogationDiversion, ASN1_TAG_SET, ASN1_NOT_TAGGED); break; case 17: XSEQUENCE(ParseRESInterrogateServedUserNumbers, ASN1_TAG_SET, ASN1_NOT_TAGGED); break; default: return -1; } return p - beg; }