aboutsummaryrefslogtreecommitdiffstats
path: root/asn1
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2013-02-18 19:34:04 +0000
committerAnders Broman <anders.broman@ericsson.com>2013-02-18 19:34:04 +0000
commitb38062ff8f502b985ad6ebfb5fcc3b640203eafd (patch)
tree9d02e051b0c7a402af8b1b015877d9b50bae978a /asn1
parent6a420594ab263a819d082fa871e63e64fc78d249 (diff)
Dissect more supplementarry services
svn path=/trunk/; revision=47738
Diffstat (limited to 'asn1')
-rw-r--r--asn1/isdn-sup/Advice-of-Charge-Operations.asn267
-rw-r--r--asn1/isdn-sup/Closed-User-Group-Service-Operations.asn79
-rw-r--r--asn1/isdn-sup/Conference-Add-On-Operations.asn125
-rw-r--r--asn1/isdn-sup/Diversion-Operations.asn80
-rw-r--r--asn1/isdn-sup/General-Errors.asn23
-rw-r--r--asn1/isdn-sup/Makefile.common7
-rw-r--r--asn1/isdn-sup/isdn-sup.cnf6
-rw-r--r--asn1/isdn-sup/packet-isdn-sup-template.c84
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"
};