Dissect more supplementarry services

svn path=/trunk/; revision=47738
This commit is contained in:
Anders Broman 2013-02-18 19:34:04 +00:00
parent 6a420594ab
commit b38062ff8f
9 changed files with 2372 additions and 66 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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"
};

File diff suppressed because it is too large Load Diff