diff options
author | Anders Broman <anders.broman@ericsson.com> | 2013-02-18 19:34:04 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2013-02-18 19:34:04 +0000 |
commit | b38062ff8f502b985ad6ebfb5fcc3b640203eafd (patch) | |
tree | 9d02e051b0c7a402af8b1b015877d9b50bae978a /asn1/isdn-sup | |
parent | 6a420594ab263a819d082fa871e63e64fc78d249 (diff) |
Dissect more supplementarry services
svn path=/trunk/; revision=47738
Diffstat (limited to 'asn1/isdn-sup')
-rw-r--r-- | asn1/isdn-sup/Advice-of-Charge-Operations.asn | 267 | ||||
-rw-r--r-- | asn1/isdn-sup/Closed-User-Group-Service-Operations.asn | 79 | ||||
-rw-r--r-- | asn1/isdn-sup/Conference-Add-On-Operations.asn | 125 | ||||
-rw-r--r-- | asn1/isdn-sup/Diversion-Operations.asn | 80 | ||||
-rw-r--r-- | asn1/isdn-sup/General-Errors.asn | 23 | ||||
-rw-r--r-- | asn1/isdn-sup/Makefile.common | 7 | ||||
-rw-r--r-- | asn1/isdn-sup/isdn-sup.cnf | 6 | ||||
-rw-r--r-- | asn1/isdn-sup/packet-isdn-sup-template.c | 84 |
8 files changed, 621 insertions, 50 deletions
diff --git a/asn1/isdn-sup/Advice-of-Charge-Operations.asn b/asn1/isdn-sup/Advice-of-Charge-Operations.asn new file mode 100644 index 0000000000..f80474f456 --- /dev/null +++ b/asn1/isdn-sup/Advice-of-Charge-Operations.asn @@ -0,0 +1,267 @@ +-- +-- $Id$ +-- +-- EN 300 182-1 Ver. 1.3.6 +-- + +Advice-of-Charge-Operations {ccitt identified-organization etsi (0) 182 operations-and-errors (1)} + +DEFINITIONS IMPLICIT TAGS ::= + +BEGIN + +EXPORTS ChargingRequest, AOCSCurrency, AOCSSpecialArr, + AOCDCurrency, AOCDChargingUnit, AOCECurrency, AOCEChargingUnit, + NoChargingInfoAvailable, ChargingAssociation; + +IMPORTS OPERATION, ERROR + FROM Remote-Operations-Information-Objects {joint-iso-itu-t (2) remote-operations (4) informationObjects(5) version1(0)} + notSubscribed, notAvailable, notImplemented, invalidCallState + FROM General-Errors + {ccitt identified-organization etsi (0) 196 general-errors (2)} + PartyNumber + FROM Addressing-Data-Elements + {ccitt identified-organization etsi (0) 196 addressing-data-elements (6)}; + + chargingRequest OPERATION ::= { + ARGUMENT ChargingRequestArg + RESULT ChargingRequestRes + ERRORS {notSubscribed | notAvailable | notImplemented | + invalidCallState | NoChargingInfoAvailable} + CODE local: 30} + +ChargingRequestArg ::= ChargingCase + +ChargingRequestRes ::= CHOICE { + aOCSCurrencyInfoList AOCSCurrencyInfoList, + aOCSSpecialArrInfo AOCSSpecialArrInfo, + chargingInfoFollows NULL} + +aOCSCurrency OPERATION ::= { -- AOC-S given in currency units + ARGUMENT AOCSCurrencyArg + RETURN RESULT FALSE + CODE local: 31} + +AOCSCurrencyArg ::= CHOICE { + chargeNotAvailable NULL, + aOCSCurrencyInfoList AOCSCurrencyInfoList } + +aOCSSpecialArr OPERATION ::= { -- AOC-S for special charging arrangement + ARGUMENT AOCSSpecialArrArg + RETURN RESULT FALSE + CODE local: 32} + +AOCSSpecialArrArg ::=CHOICE { + chargeNotAvailable NULL, + aOCSSpecialArrInfo AOCSSpecialArrInfo } + +aOCDCurrency OPERATION ::= { -- AOC-D given in currency units + ARGUMENT AOCDCurrencyArg + RETURN RESULT FALSE + CODE local: 33} + +AOCDCurrencyArg ::= CHOICE { + chargeNotAvailable NULL, + aOCDCurrencyInfo AOCDCurrencyInfo } + +aOCDChargingUnit OPERATION ::= { -- AOC-D given in charging units + ARGUMENT AOCDChargingUnitArg + RETURN RESULT FALSE + CODE local: 34} + +AOCDChargingUnitArg ::= CHOICE { + chargeNotAvailable NULL, + aOCDChargingUnitInfo AOCDChargingUnitInfo } + +aOCECurrency OPERATION ::= { -- AOC-E given in currency units + ARGUMENT AOCECurrencyArg + RETURN RESULT FALSE + CODE local: 35} + + +AOCECurrencyArg ::=CHOICE { + chargeNotAvailable NULL, + aOCECurrencyInfo AOCECurrencyInfo } + +aOCEChargingUnit OPERATION::= { -- AOC-E given in charging units + ARGUMENT AOCEChargingUnitArg + RETURN RESULT FALSE + CODE local: 36} + +AOCEChargingUnitArg ::= CHOICE { + chargeNotAvailable NULL, + aOCEChargingUnitInfo AOCEChargingUnitInfo } + +ChargingCase ::= ENUMERATED { + chargingInformationAtCallSetup (0), + chargingDuringACall (1), + chargingAtTheEndOfACall (2) } + +AOCSCurrencyInfoList ::= SEQUENCE SIZE (1..10) OF AOCSCurrencyInfo + +AOCSCurrencyInfo ::= SEQUENCE { + chargedItem ChargedItem, + chargingtype CHOICE { + specificCurrency CHOICE { + durationCurrency [1] IMPLICIT DurationCurrency, + flatRateCurrency [2] IMPLICIT FlatRateCurrency, + volumeRateCurrency [3] IMPLICIT VolumeRateCurrency}, + specialChargingCode SpecialChargingCode, + freeOfCharge [4] IMPLICIT NULL, + currencyInfoNotAvailable [5] IMPLICIT NULL} } + +AOCSSpecialArrInfo ::= INTEGER (1..10) + +ChargedItem ::= ENUMERATED { + basicCommunication (0), + callAttempt (1), + callSetup (2), + userToUserInfo (3), + operationOfSupplementaryServ (4) } + +DurationCurrency ::= SEQUENCE { + dCurrency [1] IMPLICIT Currency, + dAmount [2] IMPLICIT Amount, + dChargingType [3] IMPLICIT ChargingType, + dTime [4] IMPLICIT Time, + dGranularity [5] IMPLICIT Time OPTIONAL } + +FlatRateCurrency ::= SEQUENCE { + fRCurrency [1] IMPLICIT Currency, + fRAmount [2] IMPLICIT Amount } + +VolumeRateCurrency ::= SEQUENCE { + vRCurrency [1] IMPLICIT Currency, + vRAmount [2] IMPLICIT Amount, + vRVolumeUnit [3] IMPLICIT VolumeUnit} + +SpecialChargingCode ::= INTEGER (1..10) + +AOCDCurrencyInfo ::= CHOICE { + specificCurrency SEQUENCE { + recordedCurrency [1] IMPLICIT RecordedCurrency, + typeOfChargingInfo [2] IMPLICIT TypeOfChargingInfo, + aOCDBillingId [3] IMPLICIT AOCDBillingId OPTIONAL }, + freeOfCharge [1] IMPLICIT NULL} + + +AOCDChargingUnitInfo ::= CHOICE { + specificChargingUnits SEQUENCE { + recordedUnitsList [1] IMPLICIT RecordedUnitsList, + typeOfChargingInfo [2] IMPLICIT TypeOfChargingInfo, + aOCDBillingId [3] IMPLICIT AOCDBillingId OPTIONAL }, + freeOfCharge [1] IMPLICIT NULL} + +RecordedCurrency ::= SEQUENCE { + rCurrency [1] IMPLICIT Currency, + rAmount [2] IMPLICIT Amount } + +RecordedUnitsList ::= SEQUENCE SIZE (1..32) OF RecordedUnits + +TypeOfChargingInfo ::= ENUMERATED { + subTotal (0), + total (1)} + +RecordedUnits ::= SEQUENCE { + cc CHOICE{ + recordedNumberOfUnits NumberOfUnits, + notAvailable NULL}, + recordedTypeOfUnits TypeOfUnit OPTIONAL } + +AOCDBillingId ::= ENUMERATED { + normalCharging (0), + reverseCharging (1), + creditCardCharging (2)} + +AOCECurrencyInfo ::= SEQUENCE { + cc CHOICE { + specificCurrency SEQUENCE { + recordedCurrency [1] IMPLICIT RecordedCurrency, + aOCEBillingId [2] IMPLICIT AOCEBillingId OPTIONAL}, + freeOfCharge [1] IMPLICIT NULL}, + chargingAssociation ChargingAssociation OPTIONAL} + +AOCEChargingUnitInfo ::= SEQUENCE { + cc CHOICE { + specificChargingUnits SEQUENCE { + recordedUnitsList [1] IMPLICIT RecordedUnitsList, + aOCEBillingId [2] IMPLICIT AOCEBillingId OPTIONAL}, + freeOfCharge [1] IMPLICIT NULL}, + chargingAssociation ChargingAssociation OPTIONAL} + +AOCEBillingId ::= ENUMERATED { + normalCharging (0), + reverseCharging (1), + creditCardCharging (2), + callForwardingUnconditional (3), + callForwardingBusy (4), + callForwardingNoReply (5), + callDeflection (6), + callTransfer (7)} + +Currency ::= IA5String (SIZE (1..10)) + +Amount ::= SEQUENCE { + currencyAmount [1] IMPLICIT CurrencyAmount, + multiplier [2] IMPLICIT Multiplier } + +CurrencyAmount ::= INTEGER (0..16777215) + +Multiplier ::= ENUMERATED { + oneThousandth (0), + oneHundredth (1), + oneTenth (2), + one (3), + ten (4), + hundred (5), + thousand (6)} + +Time ::= SEQUENCE { + lengthOfTimeUnit [1] IMPLICIT LengthOfTimeUnit, + scale [2] IMPLICIT Scale } + +LengthOfTimeUnit ::= INTEGER (0..16777215) + +Scale ::= ENUMERATED { + oneHundredthSecond (0), + oneTenthSecond (1), + oneSecond (2), + tenSeconds (3), + oneMinute (4), + oneHour (5), + twentyFourHours (6)} + +VolumeUnit ::= ENUMERATED { + octet (0), + segment (1), + message (2) } + +TypeOfUnit ::= INTEGER (1..16) -- Value 1-16 + +NumberOfUnits ::= INTEGER (0..16777215) + +ChargingType ::= ENUMERATED { + continuousCharging (0), + stepFunction (1) } + +ChargingAssociation ::= CHOICE { + chargeNumber [0] EXPLICIT PartyNumber, + chargeIdentifier ChargeIdentifier} + +ChargeIdentifier ::= INTEGER (-32768..32767) + +-- NoChargingInfoAvailable ::= ERROR + +-- chargingRequest ChargingRequest ::= 30 +-- aOCSCurrency AOCSCurrency ::= 31 +-- aOCSSpecialArr AOCSSpecialArr ::= 32 +-- aOCDCurrency AOCDCurrency ::= 33 +-- aOCDChargingUnit AOCDChargingUnit ::= 34 +-- aOCECurrency AOCECurrency ::= 35 +-- aOCEChargingUnit AOCEChargingUnit ::= 36 +-- noChargingInfoAvailable NoChargingInfoAvailable ::= 26 + +noChargingInfoAvailable ERROR ::= { CODE local: 26} + +END + diff --git a/asn1/isdn-sup/Closed-User-Group-Service-Operations.asn b/asn1/isdn-sup/Closed-User-Group-Service-Operations.asn new file mode 100644 index 0000000000..6e8ba9f855 --- /dev/null +++ b/asn1/isdn-sup/Closed-User-Group-Service-Operations.asn @@ -0,0 +1,79 @@ +-- +-- $Id$ +-- +-- EN 300 138-1 Ver. 1.3.4 +-- +Closed-User-Group-Service-Operations {ccitt identified-organization etsi (0) 138 operations-and-errors (1)} + +DEFINITIONS ::= +BEGIN + +EXPORTS CUGCall, + InvalidOrUnregisteredCUGIndex, + RequestedBasicServiceViolatesCUGConstraints, + OutgoingCallsBarredWithinCUG, + IncomingCallsBarredWithinCUG, + UserNotMemeberOfCUG, + InconsistencyInDesignatedFacilityAndSubscriberClass; + +IMPORTS OPERATION, ERROR FROM Remote-Operations-Information-Objects + {joint-iso-itu-t (2) remote-operations (4) informationObjects(5) version1(0)} + notSubscribed, + basicServiceNotProvided + FROM General-Errors + {ccitt identified-organization etsi(0) 196 general-errors}; + + + cUGcall OPERATION ::= { + -- in Facility information element. Invoked from calling user to originating + -- network side. Also from destination network side to called user + ARGUMENT CUGcallArg + -- in SETUP message + RETURN RESULT FALSE + + ERRORS { + invalidOrUnregisteredCUGIndex | + requestedBasicServiceViolatesCUGConstraints | + outgoingCallsBarredWithinCUG | + incomingCallsBarredWithinCUG | + userNotMemberOfCUG | + basicServiceNotProvided | + inconsistencyInDesignatedFacilityAndSubscriberClass | + notSubscribed + } + -- in clearing message to calling user. Also to destination network side. + CODE local: 2} + + +CUGcallArg ::= SEQUENCE{ + oARequested OARequested DEFAULT FALSE, + cUGIndex CUGIndex OPTIONAL + } + +OARequested ::= [1] IMPLICIT BOOLEAN +CUGIndex ::= [2] IMPLICIT INTEGER (0..32767) + +InvalidOrUnregisteredCUGIndex ::= ERROR +invalidOrUnregisteredCUGIndex ERROR ::= { CODE local: 16} +RequestedBasicServiceViolatesCUGConstraints ::= ERROR +requestedBasicServiceViolatesCUGConstraints ERROR ::= { CODE local: 17} +OutgoingCallsBarredWithinCUG ::= ERROR +outgoingCallsBarredWithinCUG ERROR ::= { CODE local: 18} +IncomingCallsBarredWithinCUG ::= ERROR +incomingCallsBarredWithinCUG ERROR ::= { CODE local: 19} +UserNotMemberOfCUG ::= ERROR +userNotMemberOfCUG ERROR ::= { CODE local: 20} +InconsistencyInDesignatedFacilityAndSubscriberClass ::= ERROR +inconsistencyInDesignatedFacilityAndSubscriberClass ERROR ::= { CODE local: 21} + +-- cUGCall CUGCall ::= localValue 2 + +--invalidOrUnregisteredCUGIndex InvalidOrUnregisteredCUGIndex ::= localValue 16 +--requestedBasicServiceViolatesCUGConstraints RequestedBasicServiceViolatesCUGConstraints ::= localValue 17 +--outgoingCallsBarredWithinCUG OutgoingCallsBarredWithinCUG ::= localValue 18 +--incomingCallsBarredWithinCUG IncomingCallsBarredWithinCUG ::= localValue 19 +--userNotMemberOfCUG UserNotMemberOfCUG ::= localValue 20 +--inconsistencyInDesignatedFacilityAndSubscriberClass InconsistencyInDesignatedFacilityAndSubscriberClass ::= localValue 21 + +END -- Closed-User-Group-Service-Operations + diff --git a/asn1/isdn-sup/Conference-Add-On-Operations.asn b/asn1/isdn-sup/Conference-Add-On-Operations.asn new file mode 100644 index 0000000000..cb93f13f6e --- /dev/null +++ b/asn1/isdn-sup/Conference-Add-On-Operations.asn @@ -0,0 +1,125 @@ +-- +-- $Id: MCID-Operations.asn 47730 2013-02-18 06:26:09Z etxrab $ +-- +-- EN 300 185-1 Ver. 1.2.4 +-- +Conference-Add-On-Operations {ccitt identified-organization etsi (0) 185 operations-and-types (1)} + +DEFINITIONS EXPLICIT TAGS ::= +BEGIN + +EXPORTS BeginCONF, AddCONF, SplitCONF, DropCONF, + IsolateCONF, ReattachCONF, PartyDISC, + IllConferenceId, IllPartyId, + NumberOfPartiesExceeded, + NotActive, NotAllowed, PartyId, ConferenceId, ConfSize; + +IMPORTS OPERATION, + ERROR + FROM Remote-Operations-Information-Objects + {joint-iso-itu-t (2) remote-operations (4) informationObjects(5) version1(0)} + notSubscribed, notAvailable, + supplementaryServiceInteractionNotAllowed, + resourceUnavailable, invalidCallState + FROM General-Errors + {ccitt identified-organization etsi(0) 196 general-errors (2)}; + +beginCONF OPERATION ::= { + ARGUMENT BeginCONFArg -- optional + RESULT BeginCONFRes + ERRORS {notSubscribed | notAvailable | + resourceUnavailable | + invalidCallState | + numberOfPartiesExceeded} + CODE local: 40} + +BeginCONFArg ::= ConfSize + +BeginCONFRes ::= SEQUENCE { + conferenceId ConferenceId, + partyId PartyId OPTIONAL } + +addCONF OPERATION ::= { + ARGUMENT AddCONFArg + RESULT AddCONFRes + ERRORS {IllConferenceId | + NumberOfPartiesExceeded | + NotAllowed | + supplementaryServiceInteractionNotAllowed | + invalidCallState} + CODE local: 41} + +AddCONFArg ::= ConferenceId +AddCONFRes ::= PartyId + +splitCONF OPERATION ::= { + ARGUMENT SplitCONFArg + RETURN RESULT FALSE + ERRORS {IllConferenceId | IllPartyId} + CODE local: 42} + + +SplitCONFArg ::= SEQUENCE { conferenceId ConferenceId, + partyId PartyId} + +dropCONF OPERATION ::= { + ARGUMENT DropCONFArg + RETURN RESULT FALSE + ERRORS {IllPartyId, NotActive} + CODE local: 43} + +DropCONFArg ::= PartyId + +isolateCONF OPERATION ::= { + ARGUMENT IsolateCONFArg + RETURN RESULT FALSE + ERRORS {IllPartyId, NotActive} + CODE local: 44} + +IsolateCONFArg ::= PartyId + +reattachCONF OPERATION ::= { + ARGUMENT ReattachCONFArg + RETURN RESULT FALSE + ERRORS {IllPartyId, NotActive} + CODE local: 45} + +ReattachCONFArg ::= PartyId + +partyDISC OPERATION ::= { + ARGUMENT PartyDISCArg + RETURN RESULT FALSE + CODE local: 46} + +PartyDISCArg ::= PartyId + +--IllConferenceId ::= ERROR +illConferenceId ERROR ::= { CODE local: 28} +--IllPartyId ::= ERROR +illPartyId ERROR ::= { CODE local: 29} +--NumberOfPartiesExceeded ::= ERROR +numberOfPartiesExceeded ERROR ::= { CODE local: 30} +--NotActive ::= ERROR +notActive ERROR ::= { CODE local: 31} +--NotAllowed ::= ERROR +notAllowed ERROR ::= { CODE local: 32} + +PartyId ::= INTEGER (0..127) +ConferenceId ::= INTEGER (0..127) +ConfSize ::= INTEGER (0..127) + +--beginCONF BeginCONF ::= 40 +--addCONF AddCONF ::= 41 +--splitCONF SplitCONF ::= 42 +--dropCONF DropCONF ::= 43 +--isolateCONF IsolateCONF ::= 44 +--reattachCONF ReattachCONF ::= 45 +--partyDISC PartyDISC ::= 46 +--illConferenceId IllConferenceId ::= 28 +--illPartyId IllPartyId ::= 29 +--numberOfPartiesExceeded NumberOfPartiesExceeded ::= 30 +--notActive NotActive ::= 31 +--notAllowed NotAllowed ::= 32 + +END -- of Conference-Add-On-Operations + diff --git a/asn1/isdn-sup/Diversion-Operations.asn b/asn1/isdn-sup/Diversion-Operations.asn index 3034ea7970..825cb84704 100644 --- a/asn1/isdn-sup/Diversion-Operations.asn +++ b/asn1/isdn-sup/Diversion-Operations.asn @@ -73,6 +73,17 @@ IMPORTS OPERATION, ERROR FROM Remote-Operations-Information-Objects ARGUMENT ActivationDiversionArg RETURN RESULT FALSE ALWAYS RESPONDS FALSE + ERRORS { + notSubscribed, + notAvailable, + invalidServedUserNr, + supplementaryServiceInteractionNotAllowed, + basicServiceNotProvided, + resourceUnavailable, + invalidDivertedToNr, + specialServiceNr, + diversionToServedUserNr, + invalidNoReplyTimerValue} CODE local: 7} ActivationDiversionArg ::= SEQUENCE { @@ -84,17 +95,7 @@ IMPORTS OPERATION, ERROR FROM Remote-Operations-Information-Objects } --- ERRORS { --- notSubscribed, --- notAvailable, --- invalidServedUserNr, --- supplementaryServiceInteractionNotAllowed, --- basicServiceNotProvided, --- resourceUnavailable, --- InvalidDivertedToNr, --- SpecialServiceNr, --- DiversionToServedUserNr, --- InvalidNoReplyTimerValue} + -- End of ActivationDiversion operation definition @@ -102,6 +103,11 @@ IMPORTS OPERATION, ERROR FROM Remote-Operations-Information-Objects ARGUMENT DeactivationDiversionArg RETURN RESULT FALSE ALWAYS RESPONDS FALSE + ERRORS { + notSubscribed | + notAvailable | + invalidServedUserNr | + NotActivated} CODE local: 8} DeactivationDiversionArg ::= SEQUENCE { @@ -110,12 +116,7 @@ IMPORTS OPERATION, ERROR FROM Remote-Operations-Information-Objects servedUserNr ServedUserNr } --- ERRORS { --- notSubscribed, --- notAvailable, --- invalidServedUserNr, --- NotActivated} --- + -- End of DeactivationDiversion operation definition activationStatusNotificationDiv OPERATION ::= { @@ -202,13 +203,13 @@ IMPORTS OPERATION, ERROR FROM Remote-Operations-Information-Objects ERRORS { notSubscribed | notAvailable | - InvalidDivertedToNr | - SpecialServiceNr | - DiversionToServedUserNr | - IncomingCallAccepted | - NumberOfDiversionsExceeded | + invalidDivertedToNr | + specialServiceNr | + diversionToServedUserNr | + incomingCallAccepted | + numberOfDiversionsExceeded | supplementaryServiceInteractionNotAllowed | - RequestAlreadyAccepted} + requestAlreadyAccepted} CODE local: 13} CallDeflectionArg ::= SEQUENCE { @@ -222,6 +223,15 @@ IMPORTS OPERATION, ERROR FROM Remote-Operations-Information-Objects ARGUMENT CallRerouteingArg RETURN RESULT FALSE ALWAYS RESPONDS FALSE + ERRORS { + notSubscribed | + notAvailable | + supplementaryServiceInteractionNotAllowed | + resourceUnavailable | + invalidDivertedToNr | + specialServiceNr | + diversionToServedUserNr | + numberOfDiversionsExceeded} CODE local: 14} CallRerouteingArg ::= SEQUENCE { @@ -239,15 +249,6 @@ IMPORTS OPERATION, ERROR FROM Remote-Operations-Information-Objects -- element (optional) as specified in EN 300 403-1 [11] clause 4.5 shall be embedded in the -- q931InfoElement. --- ERRORS { --- notSubscribed, --- notAvailable, --- supplementaryServiceInteractionNotAllowed, --- resourceUnavailable, --- InvalidDivertedToNr, --- SpecialServiceNr, --- DiversionToServedUserNr, --- NumberOfDiversionsExceeded} -- End of CallRerouteing operation definition @@ -320,13 +321,28 @@ DiversionReason ::= ENUMERATED {unknown (0), NoReplyTimer ::= INTEGER (1..180) InvalidDivertedToNr ::= ERROR +invalidDivertedToNr ERROR ::= { CODE local: 12} + SpecialServiceNr ::= ERROR +specialServiceNr ERROR ::= { CODE local: 14} + DiversionToServedUserNr ::= ERROR +diversionToServedUserNr ERROR ::= { CODE local: 15} + IncomingCallAccepted ::= ERROR +incomingCallAccepted ERROR ::= { CODE local: 23} + NumberOfDiversionsExceeded ::= ERROR +numberOfDiversionsExceeded ERROR ::= { CODE local: 24} + NotActivated ::= ERROR +notActivated ERROR ::= { CODE local: 46} + RequestAlreadyAccepted ::= ERROR +requestAlreadyAccepted ERROR ::= { CODE local: 48} + InvalidNoReplyTimerValue ::= ERROR +--invalidNoReplyTimerValue ERROR ::= { CODE local: xx} --deactivationDiversion DeactivationDiversion ::= localValue 8 --activationStatusNotificationDiv ActivationStatusNotificationDiv ::= localValue 9 diff --git a/asn1/isdn-sup/General-Errors.asn b/asn1/isdn-sup/General-Errors.asn index 9e6a097d7f..3f32168e42 100644 --- a/asn1/isdn-sup/General-Errors.asn +++ b/asn1/isdn-sup/General-Errors.asn @@ -15,50 +15,51 @@ EXPORTS notSubscribed, notAvailable, notImplemented, invalidServ supplementaryServiceInteractionNotAllowed, resourceUnavailable; IMPORTS ERROR - FROM Remote-Operation-Notation - {joint-iso-itu-t remote-operations(4) notation(0)}; + FROM Remote-Operations-Information-Objects + {joint-iso-itu-t (2) remote-operations (4) informationObjects(5) version1(0)}; + +notSubscribed ERROR ::= { CODE local: 0} -notSubscribed ERROR ::= 0 -- The requested service or function has not been subscribed for the basic service, and -- optionally the served user's ISDN number, included in the activation invoke component. -- Alternatively the basic service may not have been subscribed. -notAvailable ERROR ::= 3 +notAvailable ERROR ::= { CODE local: 3} -- The requested supplementary service or function is not available for the basic service, -- and optionally the served user's ISDN number (e.g. temporary fault). -notImplemented ERROR ::= 4 +notImplemented ERROR ::= { CODE local: 4} -- The supplementary service or function requested is not implemented for the basic -- service, and optionally the served user's ISDN number (e.g. service not provided). -invalidServedUserNr ERROR ::= 6 +invalidServedUserNr ERROR ::= { CODE local: 6} -- The served user's number provided is not a valid number. -invalidCallState ERROR ::= 7 +invalidCallState ERROR ::= { CODE local: 7} -- The supplementary service or function cannot be requested in the current basic call state -- or auxiliary state. -basicServiceNotProvided ERROR ::= 8 +basicServiceNotProvided ERROR ::= { CODE local: 8} -- The served user has not subscribed to the basic service (bearer and/or teleservice) for -- which the supplementary service or function was requested. -notIncomingCall ERROR ::= 9 +notIncomingCall ERROR ::= { CODE local: 9} -- The supplementary service or function was not requested for an incoming call. -supplementaryServiceInteractionNotAllowed ERROR ::= 10 +supplementaryServiceInteractionNotAllowed ERROR ::= { CODE local: 10} -- The performance of the requested supplementary service or function is prohibited -- by another supplementary service or function. -resourceUnavailable ERROR ::= 11 +resourceUnavailable ERROR ::= { CODE local: 11} -- The resources required to perform adequately the requested supplementary service or -- function are not available. diff --git a/asn1/isdn-sup/Makefile.common b/asn1/isdn-sup/Makefile.common index 6c5247b963..2887e5fea1 100644 --- a/asn1/isdn-sup/Makefile.common +++ b/asn1/isdn-sup/Makefile.common @@ -30,7 +30,12 @@ ASN_FILE_LIST = \ Addressing-Data-Elements.asn \ Basic-Service-Elements.asn \ Embedded-Q931-Types.asn \ - Diversion-Operations.asn + General-Errors.asn \ + Advice-of-Charge-Operations.asn \ + Closed-User-Group-Service-Operations.asn \ + Conference-Add-On-Operations.asn \ + Diversion-Operations.asn \ + MCID-Operations.asn # The packet-$(PROTOCOL_NAME)-template.h and $(PROTOCOL_NAME).asn # files do not exist for all protocols: Please add/remove as required. diff --git a/asn1/isdn-sup/isdn-sup.cnf b/asn1/isdn-sup/isdn-sup.cnf index 95f2e26380..2cf09e0c15 100644 --- a/asn1/isdn-sup/isdn-sup.cnf +++ b/asn1/isdn-sup/isdn-sup.cnf @@ -15,12 +15,14 @@ GROUP_BY_PROT #.MODULE Diversion-Operations isdn-sup - +MCID-Operations isdn-sup +Closed-User-Group-Service-Operations isdn-sup +Advice-of-Charge-Operations isdn-sup #.PDU_NEW OPERATION.&ArgumentType OPERATION.&ResultType -#ERROR.&ParameterType +ERROR.&ParameterType #.END diff --git a/asn1/isdn-sup/packet-isdn-sup-template.c b/asn1/isdn-sup/packet-isdn-sup-template.c index b96762e226..30a40f1333 100644 --- a/asn1/isdn-sup/packet-isdn-sup-template.c +++ b/asn1/isdn-sup/packet-isdn-sup-template.c @@ -40,6 +40,7 @@ /* Initialize the protocol and registered fields */ static int proto_isdn_sup = -1; static int hf_isdn_sup_operation = -1; +static int hf_isdn_sup_error = -1; /* Global variables */ @@ -54,17 +55,23 @@ typedef struct _isdn_sup_op_t { new_dissector_t res_pdu; } isdn_sup_op_t; + +typedef struct isdn_sup_err_t { + gint32 errcode; + new_dissector_t err_pdu; +} isdn_sup_err_t; + static const value_string isdn_sup_str_operation[] = { #include "packet-isdn-sup-table10.c" { 0, NULL} }; -#if 0 + static const value_string isdn_sup_str_error[] = { #include "packet-isdn-sup-table20.c" { 0, NULL} }; -#endif + static int hf_isdn_sup = -1; #include "packet-isdn-sup-hf.c" @@ -86,11 +93,11 @@ static const isdn_sup_op_t isdn_sup_op_tab[] = { #include "packet-isdn-sup-table11.c" }; -#if 0 + static const isdn_sup_err_t isdn_sup_err_tab[] = { #include "packet-isdn-sup-table21.c" }; -#endif + static const isdn_sup_op_t *get_op(gint32 opcode) { int i; @@ -102,6 +109,16 @@ static const isdn_sup_op_t *get_op(gint32 opcode) { return NULL; } +static const isdn_sup_err_t *get_err(gint32 errcode) { + int i; + + /* search from the end to get the last occurence if the operation is redefined in some newer specification */ + for (i = array_length(isdn_sup_err_tab) - 1; i >= 0; i--) + if (isdn_sup_err_tab[i].errcode == errcode) + return &isdn_sup_err_tab[i]; + return NULL; +} + /*--- dissect_isdn_sup_arg ------------------------------------------------------*/ static int dissect_isdn_sup_arg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { @@ -197,6 +214,51 @@ dissect_isdn_sup_res(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void * } +/*--- dissect_isdn_sup_err ------------------------------------------------------*/ +static int +dissect_isdn_sup_err(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { + int offset; + rose_ctx_t *rctx; + gint32 errcode; + const isdn_sup_err_t *err_ptr; + const gchar *p; + proto_item *ti; + proto_tree *isdn_sup_tree; + + offset = 0; + rctx = get_rose_ctx(pinfo->private_data); + DISSECTOR_ASSERT(rctx); + if (rctx->d.pdu != 3) /* returnError */ + return offset; + if (rctx->d.code != 0) /* local */ + return offset; + errcode = rctx->d.code_local; + err_ptr = get_err(errcode); + if (!err_ptr) + return offset; + + ti = proto_tree_add_item(tree, proto_isdn_sup, tvb, offset, tvb_length(tvb), ENC_NA); + isdn_sup_tree = proto_item_add_subtree(ti, ett_isdn_sup); + + proto_tree_add_uint(isdn_sup_tree, hf_isdn_sup_error, tvb, 0, 0, errcode); + p = match_strval(errcode, VALS(isdn_sup_str_error)); + if (p) { + proto_item_append_text(ti, ": %s", p); + proto_item_append_text(rctx->d.code_item, " - %s", p); + if (rctx->apdu_depth >= 0) + proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rctx->apdu_depth), " %s", p); + } + + if (err_ptr->err_pdu) + offset = err_ptr->err_pdu(tvb, pinfo, isdn_sup_tree, NULL); + else + if (tvb_length_remaining(tvb, offset) > 0) { + proto_tree_add_text(isdn_sup_tree, tvb, offset, -1, "UNSUPPORTED ERROR TYPE (ETSI sup)"); + offset += tvb_length_remaining(tvb, offset); + } + + return offset; +} /*--- proto_reg_handoff_isdn_sup ---------------------------------------*/ @@ -208,6 +270,7 @@ void proto_reg_handoff_isdn_sup(void) { #endif dissector_handle_t isdn_sup_arg_handle; dissector_handle_t isdn_sup_res_handle; + dissector_handle_t isdn_sup_err_handle; #if 0 q931_handle = find_dissector("q931"); @@ -220,6 +283,13 @@ void proto_reg_handoff_isdn_sup(void) { dissector_add_uint("q932.ros.etsi.local.res", isdn_sup_op_tab[i].opcode, isdn_sup_res_handle); } + isdn_sup_err_handle = new_create_dissector_handle(dissect_isdn_sup_err, proto_isdn_sup); + + for (i=0; i<(int)array_length(isdn_sup_err_tab); i++) { + dissector_add_uint("q932.ros.etsi.local.err", isdn_sup_err_tab[i].errcode, isdn_sup_err_handle); + } + + } void proto_register_isdn_sup(void) { @@ -236,6 +306,12 @@ void proto_register_isdn_sup(void) { FT_UINT8, BASE_DEC, VALS(isdn_sup_str_operation), 0x0, NULL, HFILL } }, + { &hf_isdn_sup_error, + { "Error", "isdn_sup.error", + FT_UINT8, BASE_DEC, VALS(isdn_sup_str_error), 0x0, + NULL, HFILL } + }, + #include "packet-isdn-sup-hfarr.c" }; |