Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
4312-megaco-Removed-all-deprecated-prev3-binary...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 4312-megaco-Removed-all-deprecated-prev3-binary-codec-s.patch of Package erlang
From 32a7a4547f15ff8f6843652cd014dda70f8ba851 Mon Sep 17 00:00:00 2001 From: Micael Karlberg <bmk@erlang.org> Date: Thu, 19 Mar 2020 17:52:38 +0100 Subject: [PATCH 2/8] [megaco] Removed all (deprecated) prev3 binary codec(s) OTP-16560 --- .../binary/MEDIA-GATEWAY-CONTROL-prev3a.asn | 1001 -------- .../binary/MEDIA-GATEWAY-CONTROL-prev3b.asn | 1001 -------- .../binary/MEDIA-GATEWAY-CONTROL-prev3c.asn | 1073 --------- lib/megaco/src/binary/Makefile | 39 +- lib/megaco/src/binary/depend.mk | 113 - lib/megaco/src/binary/megaco_ber_encoder.erl | 85 - ...er_media_gateway_control_prev3a.asn1config | 43 - ...o_ber_media_gateway_control_prev3a.set.asn | 1 - ...er_media_gateway_control_prev3b.asn1config | 43 - ...o_ber_media_gateway_control_prev3b.set.asn | 1 - ...er_media_gateway_control_prev3c.asn1config | 43 - ...o_ber_media_gateway_control_prev3c.set.asn | 1 - .../src/binary/megaco_binary_encoder.erl | 153 -- .../megaco_binary_name_resolver_prev3a.erl | 2009 ---------------- .../megaco_binary_name_resolver_prev3b.erl | 2009 ---------------- .../megaco_binary_name_resolver_prev3c.erl | 2010 ----------------- .../megaco_binary_transformer_prev3a.erl | 1628 ------------- .../megaco_binary_transformer_prev3b.erl | 1628 ------------- .../megaco_binary_transformer_prev3c.erl | 1755 -------------- lib/megaco/src/binary/megaco_per_encoder.erl | 48 - ...o_per_media_gateway_control_prev3a.set.asn | 1 - ...o_per_media_gateway_control_prev3b.set.asn | 1 - ...o_per_media_gateway_control_prev3c.set.asn | 1 - lib/megaco/src/binary/modules.mk | 35 +- 24 files changed, 9 insertions(+), 14713 deletions(-) delete mode 100644 lib/megaco/src/binary/MEDIA-GATEWAY-CONTROL-prev3a.asn delete mode 100644 lib/megaco/src/binary/MEDIA-GATEWAY-CONTROL-prev3b.asn delete mode 100644 lib/megaco/src/binary/MEDIA-GATEWAY-CONTROL-prev3c.asn delete mode 100644 lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3a.asn1config delete mode 100644 lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3a.set.asn delete mode 100644 lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3b.asn1config delete mode 100644 lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3b.set.asn delete mode 100644 lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3c.asn1config delete mode 100644 lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3c.set.asn delete mode 100644 lib/megaco/src/binary/megaco_binary_name_resolver_prev3a.erl delete mode 100644 lib/megaco/src/binary/megaco_binary_name_resolver_prev3b.erl delete mode 100644 lib/megaco/src/binary/megaco_binary_name_resolver_prev3c.erl delete mode 100644 lib/megaco/src/binary/megaco_binary_transformer_prev3a.erl delete mode 100644 lib/megaco/src/binary/megaco_binary_transformer_prev3b.erl delete mode 100644 lib/megaco/src/binary/megaco_binary_transformer_prev3c.erl delete mode 100644 lib/megaco/src/binary/megaco_per_media_gateway_control_prev3a.set.asn delete mode 100644 lib/megaco/src/binary/megaco_per_media_gateway_control_prev3b.set.asn delete mode 100644 lib/megaco/src/binary/megaco_per_media_gateway_control_prev3c.set.asn diff --git a/lib/megaco/src/binary/MEDIA-GATEWAY-CONTROL-prev3a.asn b/lib/megaco/src/binary/MEDIA-GATEWAY-CONTROL-prev3a.asn deleted file mode 100644 index 083f7e8271..0000000000 --- a/lib/megaco/src/binary/MEDIA-GATEWAY-CONTROL-prev3a.asn +++ /dev/null @@ -1,1001 +0,0 @@ -MEDIA-GATEWAY-CONTROL-prev3a -{itu-t(0) recommendation(0) h(8) h248(248) - modules(0) media-gateway-control(0) version3(3)} -DEFINITIONS AUTOMATIC TAGS ::= -BEGIN - - -MegacoMessage ::= SEQUENCE - { - authHeader AuthenticationHeader OPTIONAL, - mess Message - } - -AuthenticationHeader ::= SEQUENCE - { - secParmIndex SecurityParmIndex, - seqNum SequenceNum, - ad AuthData - } - -SecurityParmIndex ::= OCTET STRING(SIZE(4)) - -SequenceNum ::= OCTET STRING(SIZE(4)) - -AuthData ::= OCTET STRING (SIZE (12..32)) - -Message ::= SEQUENCE - { - version INTEGER(0..99), - -- The version of the protocol defined here is equal to 3. - mId MId, -- Name/address of message originator - messageBody CHOICE - { - messageError ErrorDescriptor, - transactions SEQUENCE OF Transaction - }, - ... - } - -MId ::= CHOICE - { - ip4Address IP4Address, - ip6Address IP6Address, - domainName DomainName, - deviceName PathName, - mtpAddress OCTET STRING(SIZE(2..4)), - -- Addressing structure of mtpAddress: - -- 25 - 15 0 - -- | PC | NI | - -- 24 - 14 bits 2 bits - -- Note: 14 bits are defined for international use. - -- Two national options exist where the point code is 16 or 24 - -- bits. - -- To octet align the mtpAddress, the MSBs shall be encoded as 0s. - ... - } - -DomainName ::= SEQUENCE - { - name IA5String, - -- The name starts with an alphanumeric digit followed by a - -- sequence of alphanumeric digits, hyphens and dots. No two - -- dots shall occur consecutively. - portNumber INTEGER(0..65535) OPTIONAL - } - -IP4Address ::= SEQUENCE - { - address OCTET STRING (SIZE(4)), - portNumber INTEGER(0..65535) OPTIONAL - } - -IP6Address ::= SEQUENCE - { - address OCTET STRING (SIZE(16)), - portNumber INTEGER(0..65535) OPTIONAL - } - -PathName ::= IA5String(SIZE (1..64)) --- See A.3 - -Transaction ::= CHOICE - { - transactionRequest TransactionRequest, - transactionPending TransactionPending, - transactionReply TransactionReply, - transactionResponseAck TransactionResponseAck, - -- use of response acks is dependent on underlying transport - ... - } - -TransactionId ::= INTEGER(0..4294967295) -- 32-bit unsigned integer - -TransactionRequest ::= SEQUENCE - { - transactionId TransactionId, - actions SEQUENCE OF ActionRequest, - ... - } - -TransactionPending ::= SEQUENCE - { - transactionId TransactionId, - ... - } - -TransactionReply ::= SEQUENCE - { - transactionId TransactionId, - immAckRequired NULL OPTIONAL, - transactionResult CHOICE - { - transactionError ErrorDescriptor, - actionReplies SEQUENCE OF ActionReply - }, - ..., - -- Erlang Note: NOT REALLY PART OF THIS IMPLEMENTATION - -- Erlang Note: The only reason why we need to include - -- Erlang Note: these definitions in this version is - -- Erlang Note: that we cannot distinguish between v3 - -- Erlang Note: versions in the megaco_messenger module - segmentNumber SegmentNumber OPTIONAL, - segmentationComplete NULL OPTIONAL - } - --- SegmentReply ::= SEQUENCE --- { --- transactionId TransactionId, --- segmentNumber SegmentNumber, --- segmentationComplete NULL OPTIONAL, --- ... --- } --- -SegmentNumber ::= INTEGER(0..65535) - -TransactionResponseAck ::= SEQUENCE OF TransactionAck -TransactionAck ::= SEQUENCE - { - firstAck TransactionId, - lastAck TransactionId OPTIONAL - } - -ErrorDescriptor ::= SEQUENCE - { - errorCode ErrorCode, - errorText ErrorText OPTIONAL - } - -ErrorCode ::= INTEGER(0..65535) --- See clause 14 for IANA considerations with respect to error codes -ErrorText ::= IA5String - -ContextID ::= INTEGER(0..4294967295) - --- Context NULL Value: 0 --- Context CHOOSE Value: 4294967294 (0xFFFFFFFE) --- Context ALL Value: 4294967295 (0xFFFFFFFF) - - -ActionRequest ::= SEQUENCE - { - contextId ContextID, - contextRequest ContextRequest OPTIONAL, - contextAttrAuditReq ContextAttrAuditRequest OPTIONAL, - commandRequests SEQUENCE OF CommandRequest - } - -ActionReply ::= SEQUENCE - { - contextId ContextID, - errorDescriptor ErrorDescriptor OPTIONAL, - contextReply ContextRequest OPTIONAL, - commandReply SEQUENCE OF CommandReply - } - -ContextRequest ::= SEQUENCE - { - priority INTEGER(0..15) OPTIONAL, - emergency BOOLEAN OPTIONAL, - topologyReq SEQUENCE OF TopologyRequest OPTIONAL, - ..., - iepsCallind BOOLEAN OPTIONAL, -- Fixed - contextProp SEQUENCE OF PropertyParm OPTIONAL - } - -ContextAttrAuditRequest ::= SEQUENCE - { - topology NULL OPTIONAL, - emergency NULL OPTIONAL, - priority NULL OPTIONAL, - ..., - iepsCallind NULL OPTIONAL, -- Fixed - contextPropAud SEQUENCE OF IndAudPropertyParm OPTIONAL - } - -CommandRequest ::= SEQUENCE - { - command Command, - optional NULL OPTIONAL, - wildcardReturn NULL OPTIONAL, - ... - } - -Command ::= CHOICE - { - addReq AmmRequest, - moveReq AmmRequest, - modReq AmmRequest, - -- Add, Move, Modify requests have the same parameters - subtractReq SubtractRequest, - auditCapRequest AuditRequest, - auditValueRequest AuditRequest, - notifyReq NotifyRequest, - serviceChangeReq ServiceChangeRequest, - ... - } - -CommandReply ::= CHOICE - { - addReply AmmsReply, - moveReply AmmsReply, - modReply AmmsReply, - subtractReply AmmsReply, - -- Add, Move, Modify, Subtract replies have the same parameters - auditCapReply AuditReply, - auditValueReply AuditReply, - notifyReply NotifyReply, - serviceChangeReply ServiceChangeReply, - ... - } - -TopologyRequest ::= SEQUENCE - { - terminationFrom TerminationID, - terminationTo TerminationID, - topologyDirection ENUMERATED - { - bothway(0), - isolate(1), - oneway(2) - }, - ..., - streamID StreamID OPTIONAL - } - -AmmRequest ::= SEQUENCE - { - terminationID TerminationIDList, - descriptors SEQUENCE OF AmmDescriptor, - -- At most one descriptor of each type (see AmmDescriptor) - -- allowed in the sequence. - ... - } - -AmmDescriptor ::= CHOICE - { - mediaDescriptor MediaDescriptor, - modemDescriptor ModemDescriptor, - muxDescriptor MuxDescriptor, - eventsDescriptor EventsDescriptor, - eventBufferDescriptor EventBufferDescriptor, - signalsDescriptor SignalsDescriptor, - digitMapDescriptor DigitMapDescriptor, - auditDescriptor AuditDescriptor, - ..., - statisticsDescriptor StatisticsDescriptor - } - - -AmmsReply ::= SEQUENCE - { - terminationID TerminationIDList, - terminationAudit TerminationAudit OPTIONAL, - ... - } - -SubtractRequest ::= SEQUENCE - { - terminationID TerminationIDList, - auditDescriptor AuditDescriptor OPTIONAL, - ... - } - -AuditRequest ::= SEQUENCE - { - terminationID TerminationID, - auditDescriptor AuditDescriptor, - ... - } - -AuditReply ::= CHOICE - { - contextAuditResult TerminationIDList, - error ErrorDescriptor, - auditResult AuditResult, - ... - } - -AuditResult ::= SEQUENCE - { - - terminationID TerminationID, - terminationAuditResult TerminationAudit - } - - - -TerminationAudit ::= SEQUENCE OF AuditReturnParameter - -AuditReturnParameter ::= CHOICE - { - errorDescriptor ErrorDescriptor, - mediaDescriptor MediaDescriptor, - modemDescriptor ModemDescriptor, - muxDescriptor MuxDescriptor, - eventsDescriptor EventsDescriptor, - eventBufferDescriptor EventBufferDescriptor, - signalsDescriptor SignalsDescriptor, - digitMapDescriptor DigitMapDescriptor, - observedEventsDescriptor ObservedEventsDescriptor, - statisticsDescriptor StatisticsDescriptor, - packagesDescriptor PackagesDescriptor, - emptyDescriptors AuditDescriptor, - ... - } - -AuditDescriptor ::= SEQUENCE - { - auditToken BIT STRING - { - muxToken(0), modemToken(1), mediaToken(2), - eventsToken(3), signalsToken(4), - digitMapToken(5), statsToken(6), - observedEventsToken(7), - packagesToken(8), eventBufferToken(9) - } OPTIONAL, - ..., - auditPropertyToken SEQUENCE OF IndAuditParameter OPTIONAL - } - - -IndAuditParameter ::= CHOICE - { - -- Note that the lower/upper case letters of the tags have - -- been changed. The same changes has been made in text... - indAudMediaDescriptor IndAudMediaDescriptor, - indAudEventsDescriptor IndAudEventsDescriptor, - indAudEventBufferDescriptor IndAudEventBufferDescriptor, - indAudSignalsDescriptor IndAudSignalsDescriptor, - indAudDigitMapDescriptor IndAudDigitMapDescriptor, - indAudStatisticsDescriptor IndAudStatisticsDescriptor, - indAudPackagesDescriptor IndAudPackagesDescriptor, - ... - } - -IndAudMediaDescriptor ::= SEQUENCE - { - - termStateDescr IndAudTerminationStateDescriptor OPTIONAL, - streams CHOICE - { - oneStream IndAudStreamParms, - multiStream SEQUENCE OF IndAudStreamDescriptor - } OPTIONAL, - ... - } - -IndAudStreamDescriptor ::= SEQUENCE - { - streamID StreamID, - streamParms IndAudStreamParms - } - -IndAudStreamParms ::= SEQUENCE - { - localControlDescriptor IndAudLocalControlDescriptor OPTIONAL, - localDescriptor IndAudLocalRemoteDescriptor OPTIONAL, - remoteDescriptor IndAudLocalRemoteDescriptor OPTIONAL, - ..., - statisticsDescriptor IndAudStatisticsDescriptor OPTIONAL - } - -IndAudLocalControlDescriptor ::= SEQUENCE - { - streamMode NULL OPTIONAL, - reserveValue NULL OPTIONAL, - reserveGroup NULL OPTIONAL, - propertyParms SEQUENCE OF IndAudPropertyParm OPTIONAL, - ... - } - -IndAudPropertyParm ::= SEQUENCE - { - name PkgdName, - ... - } - -IndAudLocalRemoteDescriptor ::= SEQUENCE - { - propGroupID INTEGER(0..65535) OPTIONAL, - propGrps IndAudPropertyGroup, - ... - } - -IndAudPropertyGroup ::= SEQUENCE OF IndAudPropertyParm - -IndAudTerminationStateDescriptor ::= SEQUENCE - { - propertyParms SEQUENCE OF IndAudPropertyParm, - eventBufferControl NULL OPTIONAL, - serviceState NULL OPTIONAL, - ... - } - -IndAudEventsDescriptor ::= SEQUENCE - { - requestID RequestID OPTIONAL, - pkgdName PkgdName, - streamID StreamID OPTIONAL, - ... - } - -IndAudEventBufferDescriptor ::= SEQUENCE - { - eventName PkgdName, - streamID StreamID OPTIONAL, - ... - } - -IndAudSignalsDescriptor ::=CHOICE - { - signal IndAudSignal, - seqSigList IndAudSeqSigList, - ... - } - -IndAudSeqSigList ::= SEQUENCE - { - id INTEGER(0..65535), - signalList IndAudSignal OPTIONAL - } - -IndAudSignal ::= SEQUENCE - { - signalName PkgdName, - streamID StreamID OPTIONAL, - ... - } - -IndAudDigitMapDescriptor ::= SEQUENCE - { - digitMapName DigitMapName OPTIONAL - } - -IndAudStatisticsDescriptor ::= SEQUENCE - { - statName PkgdName - } - -IndAudPackagesDescriptor ::= SEQUENCE - { - packageName Name, - packageVersion INTEGER(0..99), - ... - } - -NotifyRequest ::= SEQUENCE - { - terminationID TerminationIDList, - observedEventsDescriptor ObservedEventsDescriptor, - errorDescriptor ErrorDescriptor OPTIONAL, - ... - } - -NotifyReply ::= SEQUENCE - { - terminationID TerminationIDList, - errorDescriptor ErrorDescriptor OPTIONAL, - ... - } - -ObservedEventsDescriptor ::= SEQUENCE - { - requestId RequestID, - observedEventLst SEQUENCE OF ObservedEvent - } - -ObservedEvent ::= SEQUENCE - { - eventName EventName, - streamID StreamID OPTIONAL, - eventParList SEQUENCE OF EventParameter, - timeNotation TimeNotation OPTIONAL, - ... - } - -EventName ::= PkgdName - -EventParameter ::= SEQUENCE - { - eventParameterName Name, - value Value, - -- For use of extraInfo see the comment related to PropertyParm - extraInfo CHOICE - { - relation Relation, - range BOOLEAN, - sublist BOOLEAN - } OPTIONAL, - ... - - } - -ServiceChangeRequest ::= SEQUENCE - { - terminationID TerminationIDList, - serviceChangeParms ServiceChangeParm, - ... - } - -ServiceChangeReply ::= SEQUENCE - { - terminationID TerminationIDList, - serviceChangeResult ServiceChangeResult, - ... - } - --- For ServiceChangeResult, no parameters are mandatory. Hence the --- distinction between ServiceChangeParm and ServiceChangeResParm. - -ServiceChangeResult ::= CHOICE - { - errorDescriptor ErrorDescriptor, - serviceChangeResParms ServiceChangeResParm - } - -WildcardField ::= OCTET STRING(SIZE(1)) - -TerminationID ::= SEQUENCE - { - wildcard SEQUENCE OF WildcardField, - id OCTET STRING(SIZE(1..8)), - ... - } --- See A.1 for explanation of wildcarding mechanism. --- Termination ID 0xFFFFFFFFFFFFFFFF indicates the ROOT Termination. - -TerminationIDList ::= SEQUENCE OF TerminationID - -MediaDescriptor ::= SEQUENCE - { - termStateDescr TerminationStateDescriptor OPTIONAL, - streams CHOICE - { - oneStream StreamParms, - multiStream SEQUENCE OF StreamDescriptor - } OPTIONAL, - ... - } - -StreamDescriptor ::= SEQUENCE - { - streamID StreamID, - streamParms StreamParms - } - -StreamParms ::= SEQUENCE - { - localControlDescriptor LocalControlDescriptor OPTIONAL, - localDescriptor LocalRemoteDescriptor OPTIONAL, - remoteDescriptor LocalRemoteDescriptor OPTIONAL, - ..., - statisticsDescriptor StatisticsDescriptor OPTIONAL - } - -LocalControlDescriptor ::= SEQUENCE - { - streamMode StreamMode OPTIONAL, - reserveValue BOOLEAN OPTIONAL, - reserveGroup BOOLEAN OPTIONAL, - propertyParms SEQUENCE OF PropertyParm, - ... - } - -StreamMode ::= ENUMERATED - { - sendOnly(0), - recvOnly(1), - sendRecv(2), - inactive(3), - loopBack(4), - ... - } - --- In PropertyParm, value is a SEQUENCE OF octet string. When sent --- by an MGC the interpretation is as follows: --- empty sequence means CHOOSE --- one element sequence specifies value --- If the sublist field is not selected, a longer sequence means --- "choose one of the values" (i.e. value1 OR value2 OR ...) --- If the sublist field is selected, --- a sequence with more than one element encodes the value of a --- list-valued property (i.e. value1 AND value2 AND ...). --- The relation field may only be selected if the value sequence --- has length 1. It indicates that the MG has to choose a value --- for the property. E.g. x > 3 (using the greaterThan --- value for relation) instructs the MG to choose any value larger --- than 3 for property x. --- The range field may only be selected if the value sequence --- has length 2. It indicates that the MG has to choose a value --- in the range between the first octet in the value sequence and --- the trailing octet in the value sequence, including the --- boundary values. --- When sent by the MG, only responses to an AuditCapability request --- may contain multiple values, a range, or a relation field. - -PropertyParm ::= SEQUENCE - { - name PkgdName, - value SEQUENCE OF OCTET STRING, - extraInfo CHOICE - { - relation Relation, - range BOOLEAN, - sublist BOOLEAN - } OPTIONAL, - ... - } - -Name ::= OCTET STRING(SIZE(2)) - -PkgdName ::= OCTET STRING(SIZE(4)) --- represents Package Name (2 octets) plus Property, Event, --- Signal Names or Statistics ID. (2 octets) --- To wildcard a package use 0xFFFF for first two octets, choose --- is not allowed. To reference native property tag specified in --- Annex C, use 0x0000 as first two octets. --- To wildcard a Property, Event, Signal, or Statistics ID, use --- 0xFFFF for last two octets, choose is not allowed. --- Wildcarding of Package Name is permitted only if Property, --- Event, Signal, or Statistics ID are --- also wildcarded. - -Relation ::= ENUMERATED - { - greaterThan(0), - smallerThan(1), - unequalTo(2), - ... - } - -LocalRemoteDescriptor ::= SEQUENCE - { - propGrps SEQUENCE OF PropertyGroup, - ... - } - -PropertyGroup ::= SEQUENCE OF PropertyParm - -TerminationStateDescriptor ::= SEQUENCE - { - propertyParms SEQUENCE OF PropertyParm, - eventBufferControl EventBufferControl OPTIONAL, - serviceState ServiceState OPTIONAL, - ... - } - -EventBufferControl ::= ENUMERATED - { - off(0), - lockStep(1), - ... - } - -ServiceState ::= ENUMERATED - { - test(0), - outOfSvc(1), - inSvc(2), - ... - } - -MuxDescriptor ::= SEQUENCE - { - muxType MuxType, - termList SEQUENCE OF TerminationID, - nonStandardData NonStandardData OPTIONAL, - ... - } - -MuxType ::= ENUMERATED - { - h221(0), - h223(1), - h226(2), - v76(3), - ..., - nx64k(4) - } - -StreamID ::= INTEGER(0..65535) -- 16-bit unsigned integer - -EventsDescriptor ::= SEQUENCE - { - requestID RequestID OPTIONAL, - -- RequestID must be present if eventList - -- is non empty - eventList SEQUENCE OF RequestedEvent, - ... - } - -RequestedEvent ::= SEQUENCE - { - pkgdName PkgdName, - streamID StreamID OPTIONAL, - eventAction RequestedActions OPTIONAL, - evParList SEQUENCE OF EventParameter, - ... - } - -RequestedActions ::= SEQUENCE - { - keepActive BOOLEAN OPTIONAL, - eventDM EventDM OPTIONAL, - secondEvent SecondEventsDescriptor OPTIONAL, - signalsDescriptor SignalsDescriptor OPTIONAL, - ... - } - -EventDM ::= CHOICE - { - digitMapName DigitMapName, - digitMapValue DigitMapValue - } - -SecondEventsDescriptor ::= SEQUENCE - { - requestID RequestID OPTIONAL, - eventList SEQUENCE OF SecondRequestedEvent, - ... - } - -SecondRequestedEvent ::= SEQUENCE - { - pkgdName PkgdName, - streamID StreamID OPTIONAL, - eventAction SecondRequestedActions OPTIONAL, - evParList SEQUENCE OF EventParameter, - ... - } - -SecondRequestedActions ::= SEQUENCE - { - keepActive BOOLEAN OPTIONAL, - eventDM EventDM OPTIONAL, - signalsDescriptor SignalsDescriptor OPTIONAL, - ... - } - -EventBufferDescriptor ::= SEQUENCE OF EventSpec - -EventSpec ::= SEQUENCE - { - eventName EventName, - streamID StreamID OPTIONAL, - eventParList SEQUENCE OF EventParameter, - ... - } - - -SignalsDescriptor ::= SEQUENCE OF SignalRequest - -SignalRequest ::= CHOICE - { - signal Signal, - seqSigList SeqSigList, - ... - } - -SeqSigList ::= SEQUENCE - { - id INTEGER(0..65535), - signalList SEQUENCE OF Signal - } - -Signal ::= SEQUENCE - { - signalName SignalName, - streamID StreamID OPTIONAL, - sigType SignalType OPTIONAL, - duration INTEGER (0..65535) OPTIONAL, - notifyCompletion NotifyCompletion OPTIONAL, - keepActive BOOLEAN OPTIONAL, - sigParList SEQUENCE OF SigParameter, - ..., - direction SignalDirection OPTIONAL, - requestID RequestID OPTIONAL - } - -SignalType ::= ENUMERATED - { - brief(0), - onOff(1), - timeOut(2), - ... - } - -SignalDirection ::= ENUMERATED - { - internal(0), - external(1), - both(3), - ... - } - -SignalName ::= PkgdName - -NotifyCompletion ::= BIT STRING - { - onTimeOut(0), onInterruptByEvent(1), - onInterruptByNewSignalDescr(2), otherReason(3) - } - -SigParameter ::= SEQUENCE - { - sigParameterName Name, - value Value, - -- For use of extraInfo see the comment related to PropertyParm - extraInfo CHOICE - { - relation Relation, - range BOOLEAN, - sublist BOOLEAN - } OPTIONAL, - ... - } - --- For an AuditCapReply with all events, the RequestID SHALL be ALL. --- ALL is represented by 0xffffffff. - -RequestID ::= INTEGER(0..4294967295) -- 32-bit unsigned integer - -ModemDescriptor ::= SEQUENCE - { - mtl SEQUENCE OF ModemType, - mpl SEQUENCE OF PropertyParm, - nonStandardData NonStandardData OPTIONAL - } - -ModemType ::= ENUMERATED - { - v18(0), - v22(1), - v22bis(2), - v32(3), - v32bis(4), - v34(5), - v90(6), - v91(7), - synchISDN(8), - ... - } - -DigitMapDescriptor ::= SEQUENCE - { - digitMapName DigitMapName OPTIONAL, - digitMapValue DigitMapValue OPTIONAL - } - -DigitMapName ::= Name - -DigitMapValue ::= SEQUENCE - { - startTimer INTEGER(0..99) OPTIONAL, - shortTimer INTEGER(0..99) OPTIONAL, - longTimer INTEGER(0..99) OPTIONAL, - digitMapBody IA5String, - -- Units are seconds for start, short and long timers, and - -- hundreds of milliseconds for duration timer. Thus start, - -- short, and long range from 1 to 99 seconds and duration - -- from 100 ms to 9.9 s - -- See A.3 for explanation of digit map syntax - ..., - durationTimer INTEGER (0..99) OPTIONAL - } - -ServiceChangeParm ::= SEQUENCE - { - serviceChangeMethod ServiceChangeMethod, - serviceChangeAddress ServiceChangeAddress OPTIONAL, - serviceChangeVersion INTEGER(0..99) OPTIONAL, - serviceChangeProfile ServiceChangeProfile OPTIONAL, - serviceChangeReason Value, - -- A serviceChangeReason consists of a numeric reason code - -- and an optional text description. - -- The serviceChangeReason SHALL be a string consisting of - -- a decimal reason code, optionally followed by a single - -- space character and a textual description string. - -- This string is first BER-encoded as an IA5String. - -- The result of this BER-encoding is then encoded as - -- an ASN.1 OCTET STRING type, "double wrapping" the - -- value - -- as was done for package elements. - serviceChangeDelay INTEGER(0..4294967295) OPTIONAL, - -- 32-bit unsigned integer - serviceChangeMgcId MId OPTIONAL, - timeStamp TimeNotation OPTIONAL, - nonStandardData NonStandardData OPTIONAL, - ..., - serviceChangeInfo AuditDescriptor OPTIONAL, - serviceChangeIncompleteFlag NULL OPTIONAL - } - -ServiceChangeAddress ::= CHOICE - { - portNumber INTEGER(0..65535), -- TCP/UDP port number - ip4Address IP4Address, - ip6Address IP6Address, - domainName DomainName, - deviceName PathName, - mtpAddress OCTET STRING(SIZE(2..4)), - ... - } - -ServiceChangeResParm ::= SEQUENCE - { - serviceChangeMgcId MId OPTIONAL, - serviceChangeAddress ServiceChangeAddress OPTIONAL, - serviceChangeVersion INTEGER(0..99) OPTIONAL, - serviceChangeProfile ServiceChangeProfile OPTIONAL, - timestamp TimeNotation OPTIONAL, - ... - } - -ServiceChangeMethod ::= ENUMERATED - { - failover(0), - forced(1), - graceful(2), - restart(3), - disconnected(4), - handOff(5), - ... - } - -ServiceChangeProfile ::= SEQUENCE - { - profileName IA5String(SIZE (1..67)) - - -- 64 characters for name, 1 for "/", 2 for version to match ABNF - } - -PackagesDescriptor ::= SEQUENCE OF PackagesItem -PackagesItem ::= SEQUENCE - { - packageName Name, - packageVersion INTEGER(0..99), - ... - } - -StatisticsDescriptor ::= SEQUENCE OF StatisticsParameter - -StatisticsParameter ::= SEQUENCE - { - statName PkgdName, - statValue Value OPTIONAL - } - -NonStandardData ::= SEQUENCE - { - nonStandardIdentifier NonStandardIdentifier, - data OCTET STRING - } - -NonStandardIdentifier ::= CHOICE - { - object OBJECT IDENTIFIER, - h221NonStandard H221NonStandard, - experimental IA5String(SIZE(8)), - -- first two characters SHOULD be "X-" or "X+" - ... - } - -H221NonStandard ::= SEQUENCE - { t35CountryCode1 INTEGER(0..255), - t35CountryCode2 INTEGER(0..255), -- country, as per T.35 - t35Extension INTEGER(0..255), -- assigned nationally - manufacturerCode INTEGER(0..65535), -- assigned nationally - ... - } - -TimeNotation ::= SEQUENCE - { - date IA5String(SIZE(8)), -- yyyymmdd format - time IA5String(SIZE(8)) -- hhmmssss format - -- per ISO 8601:1988 - } - -Value ::= SEQUENCE OF OCTET STRING - -END diff --git a/lib/megaco/src/binary/MEDIA-GATEWAY-CONTROL-prev3b.asn b/lib/megaco/src/binary/MEDIA-GATEWAY-CONTROL-prev3b.asn deleted file mode 100644 index 1fb4d8fff2..0000000000 --- a/lib/megaco/src/binary/MEDIA-GATEWAY-CONTROL-prev3b.asn +++ /dev/null @@ -1,1001 +0,0 @@ -MEDIA-GATEWAY-CONTROL-prev3b -{itu-t(0) recommendation(0) h(8) h248(248) - modules(0) media-gateway-control(0) version3(3)} -DEFINITIONS AUTOMATIC TAGS ::= -BEGIN - - -MegacoMessage ::= SEQUENCE - { - authHeader AuthenticationHeader OPTIONAL, - mess Message - } - -AuthenticationHeader ::= SEQUENCE - { - secParmIndex SecurityParmIndex, - seqNum SequenceNum, - ad AuthData - } - -SecurityParmIndex ::= OCTET STRING(SIZE(4)) - -SequenceNum ::= OCTET STRING(SIZE(4)) - -AuthData ::= OCTET STRING (SIZE (12..32)) - -Message ::= SEQUENCE - { - version INTEGER(0..99), - -- The version of the protocol defined here is equal to 3. - mId MId, -- Name/address of message originator - messageBody CHOICE - { - messageError ErrorDescriptor, - transactions SEQUENCE OF Transaction - }, - ... - } - -MId ::= CHOICE - { - ip4Address IP4Address, - ip6Address IP6Address, - domainName DomainName, - deviceName PathName, - mtpAddress OCTET STRING(SIZE(2..4)), - -- Addressing structure of mtpAddress: - -- 25 - 15 0 - -- | PC | NI | - -- 24 - 14 bits 2 bits - -- Note: 14 bits are defined for international use. - -- Two national options exist where the point code is 16 or 24 - -- bits. - -- To octet align the mtpAddress, the MSBs shall be encoded as 0s. - ... - } - -DomainName ::= SEQUENCE - { - name IA5String, - -- The name starts with an alphanumeric digit followed by a - -- sequence of alphanumeric digits, hyphens and dots. No two - -- dots shall occur consecutively. - portNumber INTEGER(0..65535) OPTIONAL - } - -IP4Address ::= SEQUENCE - { - address OCTET STRING (SIZE(4)), - portNumber INTEGER(0..65535) OPTIONAL - } - -IP6Address ::= SEQUENCE - { - address OCTET STRING (SIZE(16)), - portNumber INTEGER(0..65535) OPTIONAL - } - -PathName ::= IA5String(SIZE (1..64)) --- See A.3 - -Transaction ::= CHOICE - { - transactionRequest TransactionRequest, - transactionPending TransactionPending, - transactionReply TransactionReply, - transactionResponseAck TransactionResponseAck, - -- use of response acks is dependent on underlying transport - ... - } - -TransactionId ::= INTEGER(0..4294967295) -- 32-bit unsigned integer - -TransactionRequest ::= SEQUENCE - { - transactionId TransactionId, - actions SEQUENCE OF ActionRequest, - ... - } - -TransactionPending ::= SEQUENCE - { - transactionId TransactionId, - ... - } - -TransactionReply ::= SEQUENCE - { - transactionId TransactionId, - immAckRequired NULL OPTIONAL, - transactionResult CHOICE - { - transactionError ErrorDescriptor, - actionReplies SEQUENCE OF ActionReply - }, - ..., - -- Erlang Note: NOT REALLY PART OF THIS IMPLEMENTATION - -- Erlang Note: The only reason why we need to include - -- Erlang Note: these definitions in this version is - -- Erlang Note: that we cannot distinguish between v3 - -- Erlang Note: versions in the megaco_messenger module - segmentNumber SegmentNumber OPTIONAL, - segmentationComplete NULL OPTIONAL - } - --- SegmentReply ::= SEQUENCE --- { --- transactionId TransactionId, --- segmentNumber SegmentNumber, --- segmentationComplete NULL OPTIONAL, --- ... --- } --- -SegmentNumber ::= INTEGER(0..65535) - -TransactionResponseAck ::= SEQUENCE OF TransactionAck -TransactionAck ::= SEQUENCE - { - firstAck TransactionId, - lastAck TransactionId OPTIONAL - } - -ErrorDescriptor ::= SEQUENCE - { - errorCode ErrorCode, - errorText ErrorText OPTIONAL - } - -ErrorCode ::= INTEGER(0..65535) --- See clause 14 for IANA considerations with respect to error codes -ErrorText ::= IA5String - -ContextID ::= INTEGER(0..4294967295) - --- Context NULL Value: 0 --- Context CHOOSE Value: 4294967294 (0xFFFFFFFE) --- Context ALL Value: 4294967295 (0xFFFFFFFF) - - -ActionRequest ::= SEQUENCE - { - contextId ContextID, - contextRequest ContextRequest OPTIONAL, - contextAttrAuditReq ContextAttrAuditRequest OPTIONAL, - commandRequests SEQUENCE OF CommandRequest - } - -ActionReply ::= SEQUENCE - { - contextId ContextID, - errorDescriptor ErrorDescriptor OPTIONAL, - contextReply ContextRequest OPTIONAL, - commandReply SEQUENCE OF CommandReply - } - -ContextRequest ::= SEQUENCE - { - priority INTEGER(0..15) OPTIONAL, - emergency BOOLEAN OPTIONAL, - topologyReq SEQUENCE OF TopologyRequest OPTIONAL, - ..., - iepscallind BOOLEAN OPTIONAL, - contextProp SEQUENCE OF PropertyParm OPTIONAL - } - -ContextAttrAuditRequest ::= SEQUENCE - { - topology NULL OPTIONAL, - emergency NULL OPTIONAL, - priority NULL OPTIONAL, - ..., - iepscallind NULL OPTIONAL, - contextPropAud SEQUENCE OF IndAudPropertyParm OPTIONAL - } - -CommandRequest ::= SEQUENCE - { - command Command, - optional NULL OPTIONAL, - wildcardReturn NULL OPTIONAL, - ... - } - -Command ::= CHOICE - { - addReq AmmRequest, - moveReq AmmRequest, - modReq AmmRequest, - -- Add, Move, Modify requests have the same parameters - subtractReq SubtractRequest, - auditCapRequest AuditRequest, - auditValueRequest AuditRequest, - notifyReq NotifyRequest, - serviceChangeReq ServiceChangeRequest, - ... - } - -CommandReply ::= CHOICE - { - addReply AmmsReply, - moveReply AmmsReply, - modReply AmmsReply, - subtractReply AmmsReply, - -- Add, Move, Modify, Subtract replies have the same parameters - auditCapReply AuditReply, - auditValueReply AuditReply, - notifyReply NotifyReply, - serviceChangeReply ServiceChangeReply, - ... - } - -TopologyRequest ::= SEQUENCE - { - terminationFrom TerminationID, - terminationTo TerminationID, - topologyDirection ENUMERATED - { - bothway(0), - isolate(1), - oneway(2) - }, - ..., - streamID StreamID OPTIONAL - } - -AmmRequest ::= SEQUENCE - { - terminationID TerminationIDList, - descriptors SEQUENCE OF AmmDescriptor, - -- At most one descriptor of each type (see AmmDescriptor) - -- allowed in the sequence. - ... - } - -AmmDescriptor ::= CHOICE - { - mediaDescriptor MediaDescriptor, - modemDescriptor ModemDescriptor, - muxDescriptor MuxDescriptor, - eventsDescriptor EventsDescriptor, - eventBufferDescriptor EventBufferDescriptor, - signalsDescriptor SignalsDescriptor, - digitMapDescriptor DigitMapDescriptor, - auditDescriptor AuditDescriptor, - ..., - statisticsDescriptor StatisticsDescriptor - } - - -AmmsReply ::= SEQUENCE - { - terminationID TerminationIDList, - terminationAudit TerminationAudit OPTIONAL, - ... - } - -SubtractRequest ::= SEQUENCE - { - terminationID TerminationIDList, - auditDescriptor AuditDescriptor OPTIONAL, - ... - } - -AuditRequest ::= SEQUENCE - { - terminationID TerminationID, - auditDescriptor AuditDescriptor, - ... - } - -AuditReply ::= CHOICE - { - contextAuditResult TerminationIDList, - error ErrorDescriptor, - auditResult AuditResult, - ... - } - -AuditResult ::= SEQUENCE - { - - terminationID TerminationID, - terminationAuditResult TerminationAudit - } - - - -TerminationAudit ::= SEQUENCE OF AuditReturnParameter - -AuditReturnParameter ::= CHOICE - { - errorDescriptor ErrorDescriptor, - mediaDescriptor MediaDescriptor, - modemDescriptor ModemDescriptor, - muxDescriptor MuxDescriptor, - eventsDescriptor EventsDescriptor, - eventBufferDescriptor EventBufferDescriptor, - signalsDescriptor SignalsDescriptor, - digitMapDescriptor DigitMapDescriptor, - observedEventsDescriptor ObservedEventsDescriptor, - statisticsDescriptor StatisticsDescriptor, - packagesDescriptor PackagesDescriptor, - emptyDescriptors AuditDescriptor, - ... - } - -AuditDescriptor ::= SEQUENCE - { - auditToken BIT STRING - { - muxToken(0), modemToken(1), mediaToken(2), - eventsToken(3), signalsToken(4), - digitMapToken(5), statsToken(6), - observedEventsToken(7), - packagesToken(8), eventBufferToken(9) - } OPTIONAL, - ..., - auditPropertyToken SEQUENCE OF IndAuditParameter OPTIONAL - } - - -IndAuditParameter ::= CHOICE - { - -- Note that the lower/upper case letters of the tags have - -- been changed. The same changes has been made in text... - indAudMediaDescriptor IndAudMediaDescriptor, - indAudEventsDescriptor IndAudEventsDescriptor, - indAudEventBufferDescriptor IndAudEventBufferDescriptor, - indAudSignalsDescriptor IndAudSignalsDescriptor, - indAudDigitMapDescriptor IndAudDigitMapDescriptor, - indAudStatisticsDescriptor IndAudStatisticsDescriptor, - indAudPackagesDescriptor IndAudPackagesDescriptor, - ... - } - -IndAudMediaDescriptor ::= SEQUENCE - { - - termStateDescr IndAudTerminationStateDescriptor OPTIONAL, - streams CHOICE - { - oneStream IndAudStreamParms, - multiStream SEQUENCE OF IndAudStreamDescriptor - } OPTIONAL, - ... - } - -IndAudStreamDescriptor ::= SEQUENCE - { - streamID StreamID, - streamParms IndAudStreamParms - } - -IndAudStreamParms ::= SEQUENCE - { - localControlDescriptor IndAudLocalControlDescriptor OPTIONAL, - localDescriptor IndAudLocalRemoteDescriptor OPTIONAL, - remoteDescriptor IndAudLocalRemoteDescriptor OPTIONAL, - ..., - statisticsDescriptor IndAudStatisticsDescriptor OPTIONAL - } - -IndAudLocalControlDescriptor ::= SEQUENCE - { - streamMode NULL OPTIONAL, - reserveValue NULL OPTIONAL, - reserveGroup NULL OPTIONAL, - propertyParms SEQUENCE OF IndAudPropertyParm OPTIONAL, - ... - } - -IndAudPropertyParm ::= SEQUENCE - { - name PkgdName, - ... - } - -IndAudLocalRemoteDescriptor ::= SEQUENCE - { - propGroupID INTEGER(0..65535) OPTIONAL, - propGrps IndAudPropertyGroup, - ... - } - -IndAudPropertyGroup ::= SEQUENCE OF IndAudPropertyParm - -IndAudTerminationStateDescriptor ::= SEQUENCE - { - propertyParms SEQUENCE OF IndAudPropertyParm, - eventBufferControl NULL OPTIONAL, - serviceState NULL OPTIONAL, - ... - } - -IndAudEventsDescriptor ::= SEQUENCE - { - requestID RequestID OPTIONAL, - pkgdName PkgdName, - streamID StreamID OPTIONAL, - ... - } - -IndAudEventBufferDescriptor ::= SEQUENCE - { - eventName PkgdName, - streamID StreamID OPTIONAL, - ... - } - -IndAudSignalsDescriptor ::=CHOICE - { - signal IndAudSignal, - seqSigList IndAudSeqSigList, - ... - } - -IndAudSeqSigList ::= SEQUENCE - { - id INTEGER(0..65535), - signalList IndAudSignal OPTIONAL - } - -IndAudSignal ::= SEQUENCE - { - signalName PkgdName, - streamID StreamID OPTIONAL, - ... - } - -IndAudDigitMapDescriptor ::= SEQUENCE - { - digitMapName DigitMapName OPTIONAL - } - -IndAudStatisticsDescriptor ::= SEQUENCE - { - statName PkgdName - } - -IndAudPackagesDescriptor ::= SEQUENCE - { - packageName Name, - packageVersion INTEGER(0..99), - ... - } - -NotifyRequest ::= SEQUENCE - { - terminationID TerminationIDList, - observedEventsDescriptor ObservedEventsDescriptor, - errorDescriptor ErrorDescriptor OPTIONAL, - ... - } - -NotifyReply ::= SEQUENCE - { - terminationID TerminationIDList, - errorDescriptor ErrorDescriptor OPTIONAL, - ... - } - -ObservedEventsDescriptor ::= SEQUENCE - { - requestId RequestID, - observedEventLst SEQUENCE OF ObservedEvent - } - -ObservedEvent ::= SEQUENCE - { - eventName EventName, - streamID StreamID OPTIONAL, - eventParList SEQUENCE OF EventParameter, - timeNotation TimeNotation OPTIONAL, - ... - } - -EventName ::= PkgdName - -EventParameter ::= SEQUENCE - { - eventParameterName Name, - value Value, - -- For use of extraInfo see the comment related to PropertyParm - extraInfo CHOICE - { - relation Relation, - range BOOLEAN, - sublist BOOLEAN - } OPTIONAL, - ... - - } - -ServiceChangeRequest ::= SEQUENCE - { - terminationID TerminationIDList, - serviceChangeParms ServiceChangeParm, - ... - } - -ServiceChangeReply ::= SEQUENCE - { - terminationID TerminationIDList, - serviceChangeResult ServiceChangeResult, - ... - } - --- For ServiceChangeResult, no parameters are mandatory. Hence the --- distinction between ServiceChangeParm and ServiceChangeResParm. - -ServiceChangeResult ::= CHOICE - { - errorDescriptor ErrorDescriptor, - serviceChangeResParms ServiceChangeResParm - } - -WildcardField ::= OCTET STRING(SIZE(1)) - -TerminationID ::= SEQUENCE - { - wildcard SEQUENCE OF WildcardField, - id OCTET STRING(SIZE(1..8)), - ... - } --- See A.1 for explanation of wildcarding mechanism. --- Termination ID 0xFFFFFFFFFFFFFFFF indicates the ROOT Termination. - -TerminationIDList ::= SEQUENCE OF TerminationID - -MediaDescriptor ::= SEQUENCE - { - termStateDescr TerminationStateDescriptor OPTIONAL, - streams CHOICE - { - oneStream StreamParms, - multiStream SEQUENCE OF StreamDescriptor - } OPTIONAL, - ... - } - -StreamDescriptor ::= SEQUENCE - { - streamID StreamID, - streamParms StreamParms - } - -StreamParms ::= SEQUENCE - { - localControlDescriptor LocalControlDescriptor OPTIONAL, - localDescriptor LocalRemoteDescriptor OPTIONAL, - remoteDescriptor LocalRemoteDescriptor OPTIONAL, - ..., - statisticsDescriptor StatisticsDescriptor OPTIONAL - } - -LocalControlDescriptor ::= SEQUENCE - { - streamMode StreamMode OPTIONAL, - reserveValue BOOLEAN OPTIONAL, - reserveGroup BOOLEAN OPTIONAL, - propertyParms SEQUENCE OF PropertyParm, - ... - } - -StreamMode ::= ENUMERATED - { - sendOnly(0), - recvOnly(1), - sendRecv(2), - inactive(3), - loopBack(4), - ... - } - --- In PropertyParm, value is a SEQUENCE OF octet string. When sent --- by an MGC the interpretation is as follows: --- empty sequence means CHOOSE --- one element sequence specifies value --- If the sublist field is not selected, a longer sequence means --- "choose one of the values" (i.e. value1 OR value2 OR ...) --- If the sublist field is selected, --- a sequence with more than one element encodes the value of a --- list-valued property (i.e. value1 AND value2 AND ...). --- The relation field may only be selected if the value sequence --- has length 1. It indicates that the MG has to choose a value --- for the property. E.g. x > 3 (using the greaterThan --- value for relation) instructs the MG to choose any value larger --- than 3 for property x. --- The range field may only be selected if the value sequence --- has length 2. It indicates that the MG has to choose a value --- in the range between the first octet in the value sequence and --- the trailing octet in the value sequence, including the --- boundary values. --- When sent by the MG, only responses to an AuditCapability request --- may contain multiple values, a range, or a relation field. - -PropertyParm ::= SEQUENCE - { - name PkgdName, - value SEQUENCE OF OCTET STRING, - extraInfo CHOICE - { - relation Relation, - range BOOLEAN, - sublist BOOLEAN - } OPTIONAL, - ... - } - -Name ::= OCTET STRING(SIZE(2)) - -PkgdName ::= OCTET STRING(SIZE(4)) --- represents Package Name (2 octets) plus Property, Event, --- Signal Names or Statistics ID. (2 octets) --- To wildcard a package use 0xFFFF for first two octets, choose --- is not allowed. To reference native property tag specified in --- Annex C, use 0x0000 as first two octets. --- To wildcard a Property, Event, Signal, or Statistics ID, use --- 0xFFFF for last two octets, choose is not allowed. --- Wildcarding of Package Name is permitted only if Property, --- Event, Signal, or Statistics ID are --- also wildcarded. - -Relation ::= ENUMERATED - { - greaterThan(0), - smallerThan(1), - unequalTo(2), - ... - } - -LocalRemoteDescriptor ::= SEQUENCE - { - propGrps SEQUENCE OF PropertyGroup, - ... - } - -PropertyGroup ::= SEQUENCE OF PropertyParm - -TerminationStateDescriptor ::= SEQUENCE - { - propertyParms SEQUENCE OF PropertyParm, - eventBufferControl EventBufferControl OPTIONAL, - serviceState ServiceState OPTIONAL, - ... - } - -EventBufferControl ::= ENUMERATED - { - off(0), - lockStep(1), - ... - } - -ServiceState ::= ENUMERATED - { - test(0), - outOfSvc(1), - inSvc(2), - ... - } - -MuxDescriptor ::= SEQUENCE - { - muxType MuxType, - termList SEQUENCE OF TerminationID, - nonStandardData NonStandardData OPTIONAL, - ... - } - -MuxType ::= ENUMERATED - { - h221(0), - h223(1), - h226(2), - v76(3), - ..., - nx64k(4) - } - -StreamID ::= INTEGER(0..65535) -- 16-bit unsigned integer - -EventsDescriptor ::= SEQUENCE - { - requestID RequestID OPTIONAL, - -- RequestID must be present if eventList - -- is non empty - eventList SEQUENCE OF RequestedEvent, - ... - } - -RequestedEvent ::= SEQUENCE - { - pkgdName PkgdName, - streamID StreamID OPTIONAL, - eventAction RequestedActions OPTIONAL, - evParList SEQUENCE OF EventParameter, - ... - } - -RequestedActions ::= SEQUENCE - { - keepActive BOOLEAN OPTIONAL, - eventDM EventDM OPTIONAL, - secondEvent SecondEventsDescriptor OPTIONAL, - signalsDescriptor SignalsDescriptor OPTIONAL, - ... - } - -EventDM ::= CHOICE - { - digitMapName DigitMapName, - digitMapValue DigitMapValue - } - -SecondEventsDescriptor ::= SEQUENCE - { - requestID RequestID OPTIONAL, - eventList SEQUENCE OF SecondRequestedEvent, - ... - } - -SecondRequestedEvent ::= SEQUENCE - { - pkgdName PkgdName, - streamID StreamID OPTIONAL, - eventAction SecondRequestedActions OPTIONAL, - evParList SEQUENCE OF EventParameter, - ... - } - -SecondRequestedActions ::= SEQUENCE - { - keepActive BOOLEAN OPTIONAL, - eventDM EventDM OPTIONAL, - signalsDescriptor SignalsDescriptor OPTIONAL, - ... - } - -EventBufferDescriptor ::= SEQUENCE OF EventSpec - -EventSpec ::= SEQUENCE - { - eventName EventName, - streamID StreamID OPTIONAL, - eventParList SEQUENCE OF EventParameter, - ... - } - - -SignalsDescriptor ::= SEQUENCE OF SignalRequest - -SignalRequest ::= CHOICE - { - signal Signal, - seqSigList SeqSigList, - ... - } - -SeqSigList ::= SEQUENCE - { - id INTEGER(0..65535), - signalList SEQUENCE OF Signal - } - -Signal ::= SEQUENCE - { - signalName SignalName, - streamID StreamID OPTIONAL, - sigType SignalType OPTIONAL, - duration INTEGER (0..65535) OPTIONAL, - notifyCompletion NotifyCompletion OPTIONAL, - keepActive BOOLEAN OPTIONAL, - sigParList SEQUENCE OF SigParameter, - ..., - direction SignalDirection OPTIONAL, - requestID RequestID OPTIONAL - } - -SignalType ::= ENUMERATED - { - brief(0), - onOff(1), - timeOut(2), - ... - } - -SignalDirection ::= ENUMERATED - { - internal(0), - external(1), - both(3), - ... - } - -SignalName ::= PkgdName - -NotifyCompletion ::= BIT STRING - { - onTimeOut(0), onInterruptByEvent(1), - onInterruptByNewSignalDescr(2), otherReason(3) - } - -SigParameter ::= SEQUENCE - { - sigParameterName Name, - value Value, - -- For use of extraInfo see the comment related to PropertyParm - extraInfo CHOICE - { - relation Relation, - range BOOLEAN, - sublist BOOLEAN - } OPTIONAL, - ... - } - --- For an AuditCapReply with all events, the RequestID SHALL be ALL. --- ALL is represented by 0xffffffff. - -RequestID ::= INTEGER(0..4294967295) -- 32-bit unsigned integer - -ModemDescriptor ::= SEQUENCE - { - mtl SEQUENCE OF ModemType, - mpl SEQUENCE OF PropertyParm, - nonStandardData NonStandardData OPTIONAL - } - -ModemType ::= ENUMERATED - { - v18(0), - v22(1), - v22bis(2), - v32(3), - v32bis(4), - v34(5), - v90(6), - v91(7), - synchISDN(8), - ... - } - -DigitMapDescriptor ::= SEQUENCE - { - digitMapName DigitMapName OPTIONAL, - digitMapValue DigitMapValue OPTIONAL - } - -DigitMapName ::= Name - -DigitMapValue ::= SEQUENCE - { - startTimer INTEGER(0..99) OPTIONAL, - shortTimer INTEGER(0..99) OPTIONAL, - longTimer INTEGER(0..99) OPTIONAL, - digitMapBody IA5String, - -- Units are seconds for start, short and long timers, and - -- hundreds of milliseconds for duration timer. Thus start, - -- short, and long range from 1 to 99 seconds and duration - -- from 100 ms to 9.9 s - -- See A.3 for explanation of digit map syntax - ..., - durationTimer INTEGER (0..99) OPTIONAL - } - -ServiceChangeParm ::= SEQUENCE - { - serviceChangeMethod ServiceChangeMethod, - serviceChangeAddress ServiceChangeAddress OPTIONAL, - serviceChangeVersion INTEGER(0..99) OPTIONAL, - serviceChangeProfile ServiceChangeProfile OPTIONAL, - serviceChangeReason Value, - -- A serviceChangeReason consists of a numeric reason code - -- and an optional text description. - -- The serviceChangeReason SHALL be a string consisting of - -- a decimal reason code, optionally followed by a single - -- space character and a textual description string. - -- This string is first BER-encoded as an IA5String. - -- The result of this BER-encoding is then encoded as - -- an ASN.1 OCTET STRING type, "double wrapping" the - -- value - -- as was done for package elements. - serviceChangeDelay INTEGER(0..4294967295) OPTIONAL, - -- 32-bit unsigned integer - serviceChangeMgcId MId OPTIONAL, - timeStamp TimeNotation OPTIONAL, - nonStandardData NonStandardData OPTIONAL, - ..., - serviceChangeInfo AuditDescriptor OPTIONAL, - serviceChangeIncompleteFlag NULL OPTIONAL - } - -ServiceChangeAddress ::= CHOICE - { - portNumber INTEGER(0..65535), -- TCP/UDP port number - ip4Address IP4Address, - ip6Address IP6Address, - domainName DomainName, - deviceName PathName, - mtpAddress OCTET STRING(SIZE(2..4)), - ... - } - -ServiceChangeResParm ::= SEQUENCE - { - serviceChangeMgcId MId OPTIONAL, - serviceChangeAddress ServiceChangeAddress OPTIONAL, - serviceChangeVersion INTEGER(0..99) OPTIONAL, - serviceChangeProfile ServiceChangeProfile OPTIONAL, - timestamp TimeNotation OPTIONAL, - ... - } - -ServiceChangeMethod ::= ENUMERATED - { - failover(0), - forced(1), - graceful(2), - restart(3), - disconnected(4), - handOff(5), - ... - } - -ServiceChangeProfile ::= SEQUENCE - { - profileName IA5String(SIZE (1..67)) - - -- 64 characters for name, 1 for "/", 2 for version to match ABNF - } - -PackagesDescriptor ::= SEQUENCE OF PackagesItem -PackagesItem ::= SEQUENCE - { - packageName Name, - packageVersion INTEGER(0..99), - ... - } - -StatisticsDescriptor ::= SEQUENCE OF StatisticsParameter - -StatisticsParameter ::= SEQUENCE - { - statName PkgdName, - statValue Value OPTIONAL - } - -NonStandardData ::= SEQUENCE - { - nonStandardIdentifier NonStandardIdentifier, - data OCTET STRING - } - -NonStandardIdentifier ::= CHOICE - { - object OBJECT IDENTIFIER, - h221NonStandard H221NonStandard, - experimental IA5String(SIZE(8)), - -- first two characters SHOULD be "X-" or "X+" - ... - } - -H221NonStandard ::= SEQUENCE - { t35CountryCode1 INTEGER(0..255), - t35CountryCode2 INTEGER(0..255), -- country, as per T.35 - t35Extension INTEGER(0..255), -- assigned nationally - manufacturerCode INTEGER(0..65535), -- assigned nationally - ... - } - -TimeNotation ::= SEQUENCE - { - date IA5String(SIZE(8)), -- yyyymmdd format - time IA5String(SIZE(8)) -- hhmmssss format - -- per ISO 8601:1988 - } - -Value ::= SEQUENCE OF OCTET STRING - -END diff --git a/lib/megaco/src/binary/MEDIA-GATEWAY-CONTROL-prev3c.asn b/lib/megaco/src/binary/MEDIA-GATEWAY-CONTROL-prev3c.asn deleted file mode 100644 index cb6940e8b0..0000000000 --- a/lib/megaco/src/binary/MEDIA-GATEWAY-CONTROL-prev3c.asn +++ /dev/null @@ -1,1073 +0,0 @@ -MEDIA-GATEWAY-CONTROL-prev3c -{itu-t(0) recommendation(0) h(8) h248(248) - modules(0) media-gateway-control(0) version3(3)} -DEFINITIONS AUTOMATIC TAGS ::= -BEGIN - - -MegacoMessage ::= SEQUENCE - { - authHeader AuthenticationHeader OPTIONAL, - mess Message - } - -AuthenticationHeader ::= SEQUENCE - { - secParmIndex SecurityParmIndex, - seqNum SequenceNum, - ad AuthData - } - -SecurityParmIndex ::= OCTET STRING(SIZE(4)) - -SequenceNum ::= OCTET STRING(SIZE(4)) - -AuthData ::= OCTET STRING (SIZE (12..32)) - -Message ::= SEQUENCE - { - version INTEGER(0..99), - -- The version of the protocol defined here is equal to 3. - mId MId, -- Name/address of message originator - messageBody CHOICE - { - messageError ErrorDescriptor, - transactions SEQUENCE OF Transaction - }, - ... - } - -MId ::= CHOICE - { - ip4Address IP4Address, - ip6Address IP6Address, - domainName DomainName, - deviceName PathName, - mtpAddress OCTET STRING(SIZE(2..4)), - -- Addressing structure of mtpAddress: - -- 25 - 15 0 - -- | PC | NI | - -- 24 - 14 bits 2 bits - -- Note: 14 bits are defined for international use. - -- Two national options exist where the point code is 16 or 24 - -- bits. - -- To octet align the mtpAddress, the MSBs shall be encoded as 0s. - ... - } - -DomainName ::= SEQUENCE - { - name IA5String, - -- The name starts with an alphanumeric digit followed by a - -- sequence of alphanumeric digits, hyphens and dots. No two - -- dots shall occur consecutively. - portNumber INTEGER(0..65535) OPTIONAL - } - -IP4Address ::= SEQUENCE - { - address OCTET STRING (SIZE(4)), - portNumber INTEGER(0..65535) OPTIONAL - } - -IP6Address ::= SEQUENCE - { - address OCTET STRING (SIZE(16)), - portNumber INTEGER(0..65535) OPTIONAL - } - -PathName ::= IA5String(SIZE (1..64)) --- See A.3 - -Transaction ::= CHOICE - { - transactionRequest TransactionRequest, - transactionPending TransactionPending, - transactionReply TransactionReply, - transactionResponseAck TransactionResponseAck, - -- use of response acks is dependent on underlying transport - ... - -- segmentReply SegmentReply - } - -TransactionId ::= INTEGER(0..4294967295) -- 32-bit unsigned integer - -TransactionRequest ::= SEQUENCE - { - transactionId TransactionId, - actions SEQUENCE OF ActionRequest, - ... - } - -TransactionPending ::= SEQUENCE - { - transactionId TransactionId, - ... - } - -TransactionReply ::= SEQUENCE - { - transactionId TransactionId, - immAckRequired NULL OPTIONAL, - transactionResult CHOICE - { - transactionError ErrorDescriptor, - actionReplies SEQUENCE OF ActionReply - }, - ..., - -- Erlang Note: NOT REALLY PART OF THIS IMPLEMENTATION - -- Erlang Note: The only reason why we need to include - -- Erlang Note: these definitions in this version is - -- Erlang Note: that we cannot distinguish between v3 - -- Erlang Note: versions in the megaco_messenger module - segmentNumber SegmentNumber OPTIONAL, - segmentationComplete NULL OPTIONAL - } - --- SegmentReply ::= SEQUENCE --- { --- transactionId TransactionId, --- segmentNumber SegmentNumber, --- segmentationComplete NULL OPTIONAL, --- ... --- } --- -SegmentNumber ::= INTEGER(0..65535) - -TransactionResponseAck ::= SEQUENCE OF TransactionAck -TransactionAck ::= SEQUENCE - { - firstAck TransactionId, - lastAck TransactionId OPTIONAL - } - -ErrorDescriptor ::= SEQUENCE - { - errorCode ErrorCode, - errorText ErrorText OPTIONAL - } - -ErrorCode ::= INTEGER(0..65535) --- See clause 14 for IANA considerations with respect to error codes -ErrorText ::= IA5String - -ContextID ::= INTEGER(0..4294967295) --- Context NULL Value: 0 --- Context CHOOSE Value: 4294967294 (0xFFFFFFFE) --- Context ALL Value: 4294967295 (0xFFFFFFFF) - - -ActionRequest ::= SEQUENCE - { - contextId ContextID, - contextRequest ContextRequest OPTIONAL, - contextAttrAuditReq ContextAttrAuditRequest OPTIONAL, - commandRequests SEQUENCE OF CommandRequest - } - -ActionReply ::= SEQUENCE - { - contextId ContextID, - errorDescriptor ErrorDescriptor OPTIONAL, - contextReply ContextRequest OPTIONAL, - commandReply SEQUENCE OF CommandReply - } - -ContextRequest ::= SEQUENCE - { - priority INTEGER(0..15) OPTIONAL, - emergency BOOLEAN OPTIONAL, - topologyReq SEQUENCE OF TopologyRequest OPTIONAL, - ..., - iepscallind BOOLEAN OPTIONAL, - contextProp SEQUENCE OF PropertyParm OPTIONAL, - contextList SEQUENCE OF ContextID OPTIONAL - } --- When returning a contextList, the contextId in the ActionReply --- construct will return the contextId from the associated ActionRequest. - -ContextAttrAuditRequest ::= SEQUENCE - { - topology NULL OPTIONAL, - emergency NULL OPTIONAL, - priority NULL OPTIONAL, - ..., - iepscallind NULL OPTIONAL, - contextPropAud SEQUENCE OF IndAudPropertyParm OPTIONAL, - - selectpriority INTEGER(0..15) OPTIONAL, - -- to select given priority - - selectemergency BOOLEAN OPTIONAL, - -- to select if emergency set/not set (T/F) - - selectiepscallind BOOLEAN OPTIONAL, - -- to select if IEPS set/not set (T/F) - - selectLogic SelectLogic OPTIONAL -- default is AND - } - -SelectLogic ::= CHOICE - { - andAUDITSelect NULL, -- all selection conditions satisfied - orAUDITSelect NULL, -- at least one selection condition satisfied - ... - } - - -CommandRequest ::= SEQUENCE - { - command Command, - optional NULL OPTIONAL, - wildcardReturn NULL OPTIONAL, - ... - } - -Command ::= CHOICE - { - addReq AmmRequest, - moveReq AmmRequest, - modReq AmmRequest, - -- Add, Move, Modify requests have the same parameters - subtractReq SubtractRequest, - auditCapRequest AuditRequest, - auditValueRequest AuditRequest, - notifyReq NotifyRequest, - serviceChangeReq ServiceChangeRequest, - ... - } - -CommandReply ::= CHOICE - { - addReply AmmsReply, - moveReply AmmsReply, - modReply AmmsReply, - subtractReply AmmsReply, - -- Add, Move, Modify, Subtract replies have the same parameters - auditCapReply AuditReply, - auditValueReply AuditReply, - notifyReply NotifyReply, - serviceChangeReply ServiceChangeReply, - ... - } - -TopologyRequest ::= SEQUENCE - { - terminationFrom TerminationID, - terminationTo TerminationID, - topologyDirection ENUMERATED - { - bothway(0), - isolate(1), - oneway(2) - }, - ..., - streamID StreamID OPTIONAL, - topologyDirectionExtension ENUMERATED - { - onewayexternal(0), - onewayboth(1), - ... - } OPTIONAL - -- This is not according to the standard, but without it - -- the TopologyRequest will be useless since topologyDirection - -- and topologyDirectionExtension are contradictory. - } - -AmmRequest ::= SEQUENCE - { - terminationID TerminationIDList, - descriptors SEQUENCE OF AmmDescriptor, - -- At most one descriptor of each type (see AmmDescriptor) - -- allowed in the sequence. - ... - } - -AmmDescriptor ::= CHOICE - { - mediaDescriptor MediaDescriptor, - modemDescriptor ModemDescriptor, - muxDescriptor MuxDescriptor, - eventsDescriptor EventsDescriptor, - eventBufferDescriptor EventBufferDescriptor, - signalsDescriptor SignalsDescriptor, - digitMapDescriptor DigitMapDescriptor, - auditDescriptor AuditDescriptor, - ..., - statisticsDescriptor StatisticsDescriptor - } - - -AmmsReply ::= SEQUENCE - { - terminationID TerminationIDList, - terminationAudit TerminationAudit OPTIONAL, - ... - } - -SubtractRequest ::= SEQUENCE - { - terminationID TerminationIDList, - auditDescriptor AuditDescriptor OPTIONAL, - ... - } - -AuditRequest ::= SEQUENCE - { - terminationID TerminationID, - auditDescriptor AuditDescriptor, - ..., - terminationIDList TerminationIDList OPTIONAL - } --- terminationID shall contain the first termination in the --- list when using the terminationIDList construct in AuditRequest - -AuditReply ::= CHOICE - { - contextAuditResult TerminationIDList, - error ErrorDescriptor, - auditResult AuditResult, - ..., - auditResultTermList TermListAuditResult - } - -AuditResult ::= SEQUENCE - { - - terminationID TerminationID, - terminationAuditResult TerminationAudit - } - -TermListAuditResult ::= SEQUENCE - { - terminationIDList TerminationIDList, - terminationAuditResult TerminationAudit, - ... - } - -TerminationAudit ::= SEQUENCE OF AuditReturnParameter - -AuditReturnParameter ::= CHOICE - { - errorDescriptor ErrorDescriptor, - mediaDescriptor MediaDescriptor, - modemDescriptor ModemDescriptor, - muxDescriptor MuxDescriptor, - eventsDescriptor EventsDescriptor, - eventBufferDescriptor EventBufferDescriptor, - signalsDescriptor SignalsDescriptor, - digitMapDescriptor DigitMapDescriptor, - observedEventsDescriptor ObservedEventsDescriptor, - statisticsDescriptor StatisticsDescriptor, - packagesDescriptor PackagesDescriptor, - emptyDescriptors AuditDescriptor, - ... - } - -AuditDescriptor ::= SEQUENCE - { - auditToken BIT STRING - { - muxToken(0), modemToken(1), mediaToken(2), - eventsToken(3), signalsToken(4), - digitMapToken(5), statsToken(6), - observedEventsToken(7), - packagesToken(8), eventBufferToken(9) - } OPTIONAL, - ..., - auditPropertyToken SEQUENCE OF IndAuditParameter OPTIONAL - } - - -IndAuditParameter ::= CHOICE - { - -- Note that the lower/upper case letters of the tags have - -- been changed. The same changes has been made in text... - indAudMediaDescriptor IndAudMediaDescriptor, - indAudEventsDescriptor IndAudEventsDescriptor, - indAudEventBufferDescriptor IndAudEventBufferDescriptor, - indAudSignalsDescriptor IndAudSignalsDescriptor, - indAudDigitMapDescriptor IndAudDigitMapDescriptor, - indAudStatisticsDescriptor IndAudStatisticsDescriptor, - indAudPackagesDescriptor IndAudPackagesDescriptor, - ... - } - -IndAudMediaDescriptor ::= SEQUENCE - { - - termStateDescr IndAudTerminationStateDescriptor OPTIONAL, - streams CHOICE - { - oneStream IndAudStreamParms, - multiStream SEQUENCE OF IndAudStreamDescriptor - } OPTIONAL, - ... - } - -IndAudStreamDescriptor ::= SEQUENCE - { - streamID StreamID, - streamParms IndAudStreamParms - } - -IndAudStreamParms ::= SEQUENCE - { - localControlDescriptor IndAudLocalControlDescriptor OPTIONAL, - localDescriptor IndAudLocalRemoteDescriptor OPTIONAL, - remoteDescriptor IndAudLocalRemoteDescriptor OPTIONAL, - ..., - statisticsDescriptor IndAudStatisticsDescriptor OPTIONAL - } - -IndAudLocalControlDescriptor ::= SEQUENCE - { - streamMode NULL OPTIONAL, - reserveValue NULL OPTIONAL, - reserveGroup NULL OPTIONAL, - propertyParms SEQUENCE OF IndAudPropertyParm OPTIONAL, - ..., - streamModeSel StreamMode OPTIONAL - -- must not have both streamMode and streamModeSel - -- if both are present only streamModeSel shall be honoured - } - -IndAudPropertyParm ::= SEQUENCE - { - name PkgdName, - ..., - propertyParms PropertyParm OPTIONAL - } --- to select based on property values --- AND/OR selection logic is specified at context level - -IndAudLocalRemoteDescriptor ::= SEQUENCE - { - propGroupID INTEGER(0..65535) OPTIONAL, - propGrps IndAudPropertyGroup, - ... - } - -IndAudPropertyGroup ::= SEQUENCE OF IndAudPropertyParm - -IndAudTerminationStateDescriptor ::= SEQUENCE - { - propertyParms SEQUENCE OF IndAudPropertyParm, - eventBufferControl NULL OPTIONAL, - serviceState NULL OPTIONAL, - ..., - serviceStateSel ServiceState OPTIONAL - -- must not have both serviceState and serviceStateSel - -- if both are present only serviceStateSel shall be honoured - } - -IndAudEventsDescriptor ::= SEQUENCE - { - requestID RequestID OPTIONAL, - pkgdName PkgdName, - streamID StreamID OPTIONAL, - ... - } - -IndAudEventBufferDescriptor ::= SEQUENCE - { - eventName PkgdName, - streamID StreamID OPTIONAL, - ... - } - -IndAudSignalsDescriptor ::=CHOICE - { - signal IndAudSignal, - seqSigList IndAudSeqSigList, - ... - } - -IndAudSeqSigList ::= SEQUENCE - { - id INTEGER(0..65535), - signalList IndAudSignal OPTIONAL - } - -IndAudSignal ::= SEQUENCE - { - signalName PkgdName, - streamID StreamID OPTIONAL, - ..., - signalRequestID RequestID OPTIONAL - } - -IndAudDigitMapDescriptor ::= SEQUENCE - { - digitMapName DigitMapName OPTIONAL - } - -IndAudStatisticsDescriptor ::= SEQUENCE - { - statName PkgdName - } - -IndAudPackagesDescriptor ::= SEQUENCE - { - packageName Name, - packageVersion INTEGER(0..99), - ... - } - -NotifyRequest ::= SEQUENCE - { - terminationID TerminationIDList, - observedEventsDescriptor ObservedEventsDescriptor, - errorDescriptor ErrorDescriptor OPTIONAL, - ... - } - -NotifyReply ::= SEQUENCE - { - terminationID TerminationIDList, - errorDescriptor ErrorDescriptor OPTIONAL, - ... - } - -ObservedEventsDescriptor ::= SEQUENCE - { - requestId RequestID, - observedEventLst SEQUENCE OF ObservedEvent - } - -ObservedEvent ::= SEQUENCE - { - eventName EventName, - streamID StreamID OPTIONAL, - eventParList SEQUENCE OF EventParameter, - timeNotation TimeNotation OPTIONAL, - ... - } - -EventName ::= PkgdName - -EventParameter ::= SEQUENCE - { - eventParameterName Name, - value Value, - -- For use of extraInfo see the comment related to PropertyParm - extraInfo CHOICE - { - relation Relation, - range BOOLEAN, - sublist BOOLEAN - } OPTIONAL, - ... - - } - -ServiceChangeRequest ::= SEQUENCE - { - terminationID TerminationIDList, - serviceChangeParms ServiceChangeParm, - ... - } - -ServiceChangeReply ::= SEQUENCE - { - terminationID TerminationIDList, - serviceChangeResult ServiceChangeResult, - ... - } - --- For ServiceChangeResult, no parameters are mandatory. Hence the --- distinction between ServiceChangeParm and ServiceChangeResParm. -ServiceChangeResult ::= CHOICE - { - errorDescriptor ErrorDescriptor, - serviceChangeResParms ServiceChangeResParm - } - -WildcardField ::= OCTET STRING(SIZE(1)) - -TerminationID ::= SEQUENCE - { - wildcard SEQUENCE OF WildcardField, - id OCTET STRING(SIZE(1..8)), - ... - } --- See A.1 for explanation of wildcarding mechanism. --- Termination ID 0xFFFFFFFFFFFFFFFF indicates the ROOT Termination. - -TerminationIDList ::= SEQUENCE OF TerminationID - -MediaDescriptor ::= SEQUENCE - { - termStateDescr TerminationStateDescriptor OPTIONAL, - streams CHOICE - { - oneStream StreamParms, - multiStream SEQUENCE OF StreamDescriptor - } OPTIONAL, - ... - } - -StreamDescriptor ::= SEQUENCE - { - streamID StreamID, - streamParms StreamParms - } - -StreamParms ::= SEQUENCE - { - localControlDescriptor LocalControlDescriptor OPTIONAL, - localDescriptor LocalRemoteDescriptor OPTIONAL, - remoteDescriptor LocalRemoteDescriptor OPTIONAL, - ..., - statisticsDescriptor StatisticsDescriptor OPTIONAL - } - -LocalControlDescriptor ::= SEQUENCE - { - streamMode StreamMode OPTIONAL, - reserveValue BOOLEAN OPTIONAL, - reserveGroup BOOLEAN OPTIONAL, - propertyParms SEQUENCE OF PropertyParm, - ... - } - -StreamMode ::= ENUMERATED - { - sendOnly(0), - recvOnly(1), - sendRecv(2), - inactive(3), - loopBack(4), - ... - } - --- In PropertyParm, value is a SEQUENCE OF octet string. When sent --- by an MGC the interpretation is as follows: --- empty sequence means CHOOSE --- one element sequence specifies value --- If the sublist field is not selected, a longer sequence means --- "choose one of the values" (i.e. value1 OR value2 OR ...) --- If the sublist field is selected, --- a sequence with more than one element encodes the value of a --- list-valued property (i.e. value1 AND value2 AND ...). --- The relation field may only be selected if the value sequence --- has length 1. It indicates that the MG has to choose a value --- for the property. E.g. x > 3 (using the greaterThan --- value for relation) instructs the MG to choose any value larger --- than 3 for property x. --- The range field may only be selected if the value sequence --- has length 2. It indicates that the MG has to choose a value --- in the range between the first octet in the value sequence and --- the trailing octet in the value sequence, including the --- boundary values. --- When sent by the MG, only responses to an AuditCapability request --- may contain multiple values, a range, or a relation field. - -PropertyParm ::= SEQUENCE - { - name PkgdName, - value SEQUENCE OF OCTET STRING, - extraInfo CHOICE - { - relation Relation, - range BOOLEAN, - sublist BOOLEAN - } OPTIONAL, - ... - } - -Name ::= OCTET STRING(SIZE(2)) - -PkgdName ::= OCTET STRING(SIZE(4)) --- represents Package Name (2 octets) plus Property, Event, --- Signal Names or Statistics ID. (2 octets) --- To wildcard a package use 0xFFFF for first two octets, choose --- is not allowed. To reference native property tag specified in --- Annex C, use 0x0000 as first two octets. --- To wildcard a Property, Event, Signal, or Statistics ID, use --- 0xFFFF for last two octets, choose is not allowed. --- Wildcarding of Package Name is permitted only if Property, --- Event, Signal, or Statistics ID are --- also wildcarded. - -Relation ::= ENUMERATED - { - greaterThan(0), - smallerThan(1), - unequalTo(2), - ... - } - -LocalRemoteDescriptor ::= SEQUENCE - { - propGrps SEQUENCE OF PropertyGroup, - ... - } - -PropertyGroup ::= SEQUENCE OF PropertyParm - -TerminationStateDescriptor ::= SEQUENCE - { - propertyParms SEQUENCE OF PropertyParm, - eventBufferControl EventBufferControl OPTIONAL, - serviceState ServiceState OPTIONAL, - ... - } - -EventBufferControl ::= ENUMERATED - { - off(0), - lockStep(1), - ... - } - -ServiceState ::= ENUMERATED - { - test(0), - outOfSvc(1), - inSvc(2), - ... - } - -MuxDescriptor ::= SEQUENCE - { - muxType MuxType, - termList SEQUENCE OF TerminationID, - nonStandardData NonStandardData OPTIONAL, - ... - } - -MuxType ::= ENUMERATED - { - h221(0), - h223(1), - h226(2), - v76(3), - ..., - nx64k(4) - } - -StreamID ::= INTEGER(0..65535) -- 16-bit unsigned integer - -EventsDescriptor ::= SEQUENCE - { - requestID RequestID OPTIONAL, - -- RequestID must be present if eventList - -- is non empty - eventList SEQUENCE OF RequestedEvent, - ... - } - -RequestedEvent ::= SEQUENCE - { - pkgdName PkgdName, - streamID StreamID OPTIONAL, - eventAction RequestedActions OPTIONAL, - evParList SEQUENCE OF EventParameter, - ... - } - -RegulatedEmbeddedDescriptor ::= SEQUENCE - { - secondEvent SecondEventsDescriptor OPTIONAL, - signalsDescriptor SignalsDescriptor OPTIONAL, - ... - } - -NotifyBehaviour ::= CHOICE - { - notifyImmediate NULL, - notifyRegulated RegulatedEmbeddedDescriptor, - neverNotify NULL, - ... - } - -RequestedActions ::= SEQUENCE - { - keepActive BOOLEAN OPTIONAL, - eventDM EventDM OPTIONAL, - secondEvent SecondEventsDescriptor OPTIONAL, - signalsDescriptor SignalsDescriptor OPTIONAL, - ..., - notifyBehaviour NotifyBehaviour OPTIONAL, - resetEventsDescriptor NULL OPTIONAL - } - -EventDM ::= CHOICE - { - digitMapName DigitMapName, - digitMapValue DigitMapValue - } - -SecondEventsDescriptor ::= SEQUENCE - { - requestID RequestID OPTIONAL, - eventList SEQUENCE OF SecondRequestedEvent, - ... - } - -SecondRequestedEvent ::= SEQUENCE - { - pkgdName PkgdName, - streamID StreamID OPTIONAL, - eventAction SecondRequestedActions OPTIONAL, - evParList SEQUENCE OF EventParameter, - ... - } - -SecondRequestedActions ::= SEQUENCE - { - keepActive BOOLEAN OPTIONAL, - eventDM EventDM OPTIONAL, - signalsDescriptor SignalsDescriptor OPTIONAL, - ..., - notifyBehaviour NotifyBehaviour OPTIONAL, - resetEventsDescriptor NULL OPTIONAL - } - -EventBufferDescriptor ::= SEQUENCE OF EventSpec - -EventSpec ::= SEQUENCE - { - eventName EventName, - streamID StreamID OPTIONAL, - eventParList SEQUENCE OF EventParameter, - ... - } - - -SignalsDescriptor ::= SEQUENCE OF SignalRequest - -SignalRequest ::= CHOICE - { - signal Signal, - seqSigList SeqSigList, - ... - } - -SeqSigList ::= SEQUENCE - { - id INTEGER(0..65535), - signalList SEQUENCE OF Signal - } - -Signal ::= SEQUENCE - { - signalName SignalName, - streamID StreamID OPTIONAL, - sigType SignalType OPTIONAL, - duration INTEGER (0..65535) OPTIONAL, - notifyCompletion NotifyCompletion OPTIONAL, - keepActive BOOLEAN OPTIONAL, - sigParList SEQUENCE OF SigParameter, - ..., - direction SignalDirection OPTIONAL, - requestID RequestID OPTIONAL, - intersigDelay INTEGER (0..65535) OPTIONAL - } - -SignalType ::= ENUMERATED - { - brief(0), - onOff(1), - timeOut(2), - ... - } - -SignalDirection ::= ENUMERATED - { - internal(0), - external(1), - both(3), - ... - } - -SignalName ::= PkgdName - -NotifyCompletion ::= BIT STRING - { - onTimeOut(0), onInterruptByEvent(1), - onInterruptByNewSignalDescr(2), otherReason(3), onIteration(4) - } - -SigParameter ::= SEQUENCE - { - sigParameterName Name, - value Value, - -- For use of extraInfo see the comment related to PropertyParm - extraInfo CHOICE - { - relation Relation, - range BOOLEAN, - sublist BOOLEAN - } OPTIONAL, - ... - } - --- For an AuditCapReply with all events, the RequestID SHALL be ALL. --- ALL is represented by 0xffffffff. -RequestID ::= INTEGER(0..4294967295) -- 32-bit unsigned integer - -ModemDescriptor ::= SEQUENCE - { - mtl SEQUENCE OF ModemType, - mpl SEQUENCE OF PropertyParm, - nonStandardData NonStandardData OPTIONAL - } - -ModemType ::= ENUMERATED - { - v18(0), - v22(1), - v22bis(2), - v32(3), - v32bis(4), - v34(5), - v90(6), - v91(7), - synchISDN(8), - ... - } - -DigitMapDescriptor ::= SEQUENCE - { - digitMapName DigitMapName OPTIONAL, - digitMapValue DigitMapValue OPTIONAL - } - -DigitMapName ::= Name - -DigitMapValue ::= SEQUENCE - { - startTimer INTEGER(0..99) OPTIONAL, - shortTimer INTEGER(0..99) OPTIONAL, - longTimer INTEGER(0..99) OPTIONAL, - digitMapBody IA5String, - -- Units are seconds for start, short and long timers, and - -- hundreds of milliseconds for duration timer. Thus start, - -- short, and long range from 1 to 99 seconds and duration - -- from 100 ms to 9.9 s - -- See A.3 for explanation of digit map syntax - ..., - durationTimer INTEGER (0..99) OPTIONAL - } - -ServiceChangeParm ::= SEQUENCE - { - serviceChangeMethod ServiceChangeMethod, - serviceChangeAddress ServiceChangeAddress OPTIONAL, - serviceChangeVersion INTEGER(0..99) OPTIONAL, - serviceChangeProfile ServiceChangeProfile OPTIONAL, - serviceChangeReason Value, - -- A serviceChangeReason consists of a numeric reason code - -- and an optional text description. - -- The serviceChangeReason SHALL be a string consisting of - -- a decimal reason code, optionally followed by a single - -- space character and a textual description string. - -- This string is first BER-encoded as an IA5String. - -- The result of this BER-encoding is then encoded as - -- an ASN.1 OCTET STRING type, "double wrapping" the - -- value - -- as was done for package elements. - serviceChangeDelay INTEGER(0..4294967295) OPTIONAL, - -- 32-bit unsigned integer - serviceChangeMgcId MId OPTIONAL, - timeStamp TimeNotation OPTIONAL, - nonStandardData NonStandardData OPTIONAL, - ..., - serviceChangeInfo AuditDescriptor OPTIONAL, - serviceChangeIncompleteFlag NULL OPTIONAL - } - -ServiceChangeAddress ::= CHOICE - { - portNumber INTEGER(0..65535), -- TCP/UDP port number - ip4Address IP4Address, - ip6Address IP6Address, - domainName DomainName, - deviceName PathName, - mtpAddress OCTET STRING(SIZE(2..4)), - ... - } - -ServiceChangeResParm ::= SEQUENCE - { - serviceChangeMgcId MId OPTIONAL, - serviceChangeAddress ServiceChangeAddress OPTIONAL, - serviceChangeVersion INTEGER(0..99) OPTIONAL, - serviceChangeProfile ServiceChangeProfile OPTIONAL, - timestamp TimeNotation OPTIONAL, - ... - } - -ServiceChangeMethod ::= ENUMERATED - { - failover(0), - forced(1), - graceful(2), - restart(3), - disconnected(4), - handOff(5), - ... - } - -ServiceChangeProfile ::= SEQUENCE - { - profileName IA5String(SIZE (1..67)) - - -- 64 characters for name, 1 for "/", 2 for version to match ABNF - } - -PackagesDescriptor ::= SEQUENCE OF PackagesItem - -PackagesItem ::= SEQUENCE - { - packageName Name, - packageVersion INTEGER(0..99), - ... - } - -StatisticsDescriptor ::= SEQUENCE OF StatisticsParameter - -StatisticsParameter ::= SEQUENCE - { - statName PkgdName, - statValue Value OPTIONAL - } - --- If statistic consists of a sub-list there will be more than one --- octetstring in statValue. - -NonStandardData ::= SEQUENCE - { - nonStandardIdentifier NonStandardIdentifier, - data OCTET STRING - } - -NonStandardIdentifier ::= CHOICE - { - object OBJECT IDENTIFIER, - h221NonStandard H221NonStandard, - experimental IA5String(SIZE(8)), - -- first two characters SHOULD be "X-" or "X+" - ... - } - -H221NonStandard ::= SEQUENCE - { t35CountryCode1 INTEGER(0..255), - t35CountryCode2 INTEGER(0..255), -- country, as per T.35 - t35Extension INTEGER(0..255), -- assigned nationally - manufacturerCode INTEGER(0..65535), -- assigned nationally - ... - } - -TimeNotation ::= SEQUENCE - { - date IA5String(SIZE(8)), -- yyyymmdd format - time IA5String(SIZE(8)) -- hhmmssss format - -- per ISO 8601:1988 - } - -Value ::= SEQUENCE OF OCTET STRING - -END diff --git a/lib/megaco/src/binary/Makefile b/lib/megaco/src/binary/Makefile index 7fc90fd6d5..9e33fe3ae5 100644 --- a/lib/megaco/src/binary/Makefile +++ b/lib/megaco/src/binary/Makefile @@ -47,53 +47,30 @@ include modules.mk ASN1_SPECS = $(ASN1_V1_SPEC) \ $(ASN1_V2_SPEC) \ - $(ASN1_V3_SPEC) \ - $(ASN1_PREV3A_SPEC) $(ASN1_PREV3B_SPEC) $(ASN1_PREV3C_SPEC) + $(ASN1_V3_SPEC) ASN1_FILES = $(ASN1_SPECS:%=%.asn) -V1_SPECS = $(BER_ASN1_V1_SPEC) \ +V1_SPECS = $(BER_ASN1_V1_SPEC) \ $(PER_ASN1_V1_SPEC) -V2_SPECS = $(BER_ASN1_V2_SPEC) \ +V2_SPECS = $(BER_ASN1_V2_SPEC) \ $(PER_ASN1_V2_SPEC) -PREV3A_SPECS = $(BER_ASN1_PREV3A_SPEC) \ - $(PER_ASN1_PREV3A_SPEC) - -PREV3B_SPECS = $(BER_ASN1_PREV3B_SPEC) \ - $(PER_ASN1_PREV3B_SPEC) - -PREV3C_SPECS = $(BER_ASN1_PREV3C_SPEC) \ - $(PER_ASN1_PREV3C_SPEC) - -V3_SPECS = $(BER_ASN1_V3_SPEC) \ - $(PER_ASN1_V3_SPEC) \ - $(PREV3A_SPECS) $(PREV3B_SPECS) $(PREV3C_SPECS) +V3_SPECS = $(BER_ASN1_V3_SPEC) \ + $(PER_ASN1_V3_SPEC) SPECS = $(V1_SPECS) $(V2_SPECS) $(V3_SPECS) V1_SPEC_ASN1DB = $(V1_SPECS:%=%.asn1db) V2_SPEC_ASN1DB = $(V2_SPECS:%=%.asn1db) -PREV3A_SPEC_ASN1DB = $(PREV3A_SPECS:%=%.asn1db) -PREV3B_SPEC_ASN1DB = $(PREV3B_SPECS:%=%.asn1db) -PREV3C_SPEC_ASN1DB = $(PREV3C_SPECS:%=%.asn1db) -V3_SPEC_ASN1DB = $(V3_SPECS:%=%.asn1db) \ - $(PREV3A_SPEC_ASN1DB) \ - $(PREV3B_SPEC_ASN1DB) \ - $(PREV3C_SPEC_ASN1DB) +V3_SPEC_ASN1DB = $(V3_SPECS:%=%.asn1db) SPEC_ASN1DB = $(V1_SPEC_ASN1DB) \ - $(V2_SPEC_ASN1DB)\ + $(V2_SPEC_ASN1DB) \ $(V3_SPEC_ASN1DB) V1_SPEC_BINS = $(V1_SPECS:%=%.erl) $(V1_SPECS:%=%.hrl) V2_SPEC_BINS = $(V2_SPECS:%=%.erl) $(V2_SPECS:%=%.hrl) -PREV3A_SPEC_BINS = $(PREV3A_SPECS:%=%.erl) $(PREV3A_SPECS:%=%.hrl) -PREV3B_SPEC_BINS = $(PREV3B_SPECS:%=%.erl) $(PREV3B_SPECS:%=%.hrl) -PREV3C_SPEC_BINS = $(PREV3C_SPECS:%=%.erl) $(PREV3C_SPECS:%=%.hrl) -V3_SPEC_BINS = $(V3_SPECS:%=%.erl) $(V3_SPECS:%=%.hrl) \ - $(PREV3A_SPEC_BINS) \ - $(PREV3B_SPEC_BINS) \ - $(PREV3C_SPEC_BINS) +V3_SPEC_BINS = $(V3_SPECS:%=%.erl) $(V3_SPECS:%=%.hrl) SPEC_BINS = $(V1_SPEC_BINS) $(V2_SPEC_BINS) $(V3_SPEC_BINS) ERL_FILES = $(MODULES:%=%.erl) diff --git a/lib/megaco/src/binary/depend.mk b/lib/megaco/src/binary/depend.mk index d831e5fe54..ca2872975c 100644 --- a/lib/megaco/src/binary/depend.mk +++ b/lib/megaco/src/binary/depend.mk @@ -37,19 +37,9 @@ endif BER_V1_FLAGS = $(ASN1_CT_OPTS) +asn1config BER_V2_FLAGS = $(ASN1_CT_OPTS) +asn1config -# <DEPRECATED> -BER_PREV3A_FLAGS = $(ASN1_CT_OPTS) +asn1config -BER_PREV3B_FLAGS = $(ASN1_CT_OPTS) +asn1config -BER_PREV3C_FLAGS = $(ASN1_CT_OPTS) +asn1config -# </DEPRECATED> BER_V3_FLAGS = $(ASN1_CT_OPTS) +asn1config PER_V1_FLAGS = $(ASN1_CT_OPTS) PER_V2_FLAGS = $(ASN1_CT_OPTS) -# <DEPRECATED> -PER_PREV3A_FLAGS = $(ASN1_CT_OPTS) -PER_PREV3B_FLAGS = $(ASN1_CT_OPTS) -PER_PREV3C_FLAGS = $(ASN1_CT_OPTS) -# </DEPRECATED> PER_V3_FLAGS = $(ASN1_CT_OPTS) @@ -96,75 +86,6 @@ $(EBIN)/$(PER_ASN1_V2_SPEC).$(EMULATOR): \ # --- Version 3 --- -# -- (prev3a) -- - -# <DEPRECATED> -$(BER_ASN1_PREV3A_SPEC).erl: \ - $(BER_ASN1_PREV3A_SPEC).set.asn \ - $(ASN1_PREV3A_SPEC).asn - $(V_colon)@echo "$(BER_ASN1_PREV3A_SPEC):" - $(asn_verbose)$(ERLC) -bber $(BER_PREV3A_FLAGS) $(BER_ASN1_PREV3A_SPEC).set.asn - -$(EBIN)/$(BER_ASN1_PREV3A_SPEC).$(EMULATOR): \ - $(BER_ASN1_PREV3A_SPEC).erl - -$(PER_ASN1_PREV3A_SPEC).erl: \ - $(PER_ASN1_PREV3A_SPEC).set.asn \ - $(ASN1_PREV3A_SPEC).asn - $(V_colon)@echo "$(PER_ASN1_PREV3A_SPEC):" - $(asn_verbose)$(ERLC) -bper $(PER_PREV3A_FLAGS) $(PER_ASN1_PREV3A_SPEC).set.asn - -$(EBIN)/$(PER_ASN1_PREV3A_SPEC).$(EMULATOR): \ - $(PER_ASN1_PREV3A_SPEC).erl -# </DEPRECATED> - - -# -- (prev3b) -- - -# <DEPRECATED> -$(BER_ASN1_PREV3B_SPEC).erl: \ - $(BER_ASN1_PREV3B_SPEC).set.asn \ - $(ASN1_PREV3B_SPEC).asn - $(V_colon)@echo "$(BER_ASN1_PREV3B_SPEC):" - $(asn_verbose)$(ERLC) -bber $(BER_PREV3B_FLAGS) $(BER_ASN1_PREV3B_SPEC).set.asn - -$(EBIN)/$(BER_ASN1_PREV3B_SPEC).$(EMULATOR): \ - $(BER_ASN1_PREV3B_SPEC).erl - -$(PER_ASN1_PREV3B_SPEC).erl: \ - $(PER_ASN1_PREV3B_SPEC).set.asn \ - $(ASN1_PREV3B_SPEC).asn - $(V_colon)@echo "$(PER_ASN1_PREV3B_SPEC):" - $(asn_verbose)$(ERLC) -bper $(PER_PREV3B_FLAGS) $(PER_ASN1_PREV3B_SPEC).set.asn - -$(EBIN)/$(PER_ASN1_PREV3B_SPEC).$(EMULATOR): \ - $(PER_ASN1_PREV3B_SPEC).erl -# </DEPRECATED> - - -# -- (prev3c) -- - -# <DEPRECATED> -$(BER_ASN1_PREV3C_SPEC).erl: \ - $(BER_ASN1_PREV3C_SPEC).set.asn \ - $(ASN1_PREV3C_SPEC).asn - $(V_colon)@echo "$(BER_ASN1_PREV3C_SPEC):" - $(asn_verbose)$(ERLC) -bber $(BER_PREV3C_FLAGS) $(BER_ASN1_PREV3C_SPEC).set.asn - -$(EBIN)/$(BER_ASN1_PREV3C_SPEC).$(EMULATOR): \ - $(BER_ASN1_PREV3C_SPEC).erl - -$(PER_ASN1_PREV3C_SPEC).erl: \ - $(PER_ASN1_PREV3C_SPEC).set.asn \ - $(ASN1_PREV3C_SPEC).asn - $(V_colon)@echo "$(PER_ASN1_PREV3C_SPEC):" - $(asn_verbose)$(ERLC) -bper $(PER_PREV3C_FLAGS) $(PER_ASN1_PREV3C_SPEC).set.asn - -$(EBIN)/$(PER_ASN1_PREV3C_SPEC).$(EMULATOR): \ - $(PER_ASN1_PREV3C_SPEC).erl -# </DEPRECATED> - - # -- (v3) -- $(BER_ASN1_V3_SPEC).erl: \ @@ -208,20 +129,6 @@ $(EBIN)/megaco_binary_name_resolver_v2.$(EMULATOR): \ megaco_binary_name_resolver_v2.erl \ ../app/megaco_internal.hrl -# <DEPRECATED> -$(EBIN)/megaco_binary_name_resolver_prev3a.$(EMULATOR): \ - megaco_binary_name_resolver_prev3a.erl \ - ../app/megaco_internal.hrl - -$(EBIN)/megaco_binary_name_resolver_prev3b.$(EMULATOR): \ - megaco_binary_name_resolver_prev3b.erl \ - ../app/megaco_internal.hrl - -$(EBIN)/megaco_binary_name_resolver_prev3c.$(EMULATOR): \ - megaco_binary_name_resolver_prev3c.erl \ - ../app/megaco_internal.hrl -# </DEPRECATED> - $(EBIN)/megaco_binary_name_resolver_v3.$(EMULATOR): \ megaco_binary_name_resolver_v3.erl @@ -241,26 +148,6 @@ $(EBIN)/megaco_binary_transformer_v2.$(EMULATOR): \ $(MEGACO_INCLUDEDIR)/megaco.hrl \ $(MEGACO_INCLUDEDIR)/megaco_message_v2.hrl -# <DEPRECATED> -$(EBIN)/megaco_binary_transformer_prev3a.$(EMULATOR): \ - megaco_binary_transformer_prev3a.erl \ - ../app/megaco_internal.hrl \ - $(MEGACO_INCLUDEDIR)/megaco.hrl \ - $(MEGACO_INCLUDEDIR)/megaco_message_prev3a.hrl - -$(EBIN)/megaco_binary_transformer_prev3b.$(EMULATOR): \ - megaco_binary_transformer_prev3b.erl \ - ../app/megaco_internal.hrl \ - $(MEGACO_INCLUDEDIR)/megaco.hrl \ - $(MEGACO_INCLUDEDIR)/megaco_message_prev3b.hrl - -$(EBIN)/megaco_binary_transformer_prev3c.$(EMULATOR): \ - megaco_binary_transformer_prev3c.erl \ - ../app/megaco_internal.hrl \ - $(MEGACO_INCLUDEDIR)/megaco.hrl \ - $(MEGACO_INCLUDEDIR)/megaco_message_prev3c.hrl -# </DEPRECATED> - $(EBIN)/megaco_binary_transformer_v3.$(EMULATOR): \ megaco_binary_transformer_v3.erl \ ../app/megaco_internal.hrl \ diff --git a/lib/megaco/src/binary/megaco_ber_encoder.erl b/lib/megaco/src/binary/megaco_ber_encoder.erl index 57f21f2a29..d4bdf14101 100644 --- a/lib/megaco/src/binary/megaco_ber_encoder.erl +++ b/lib/megaco/src/binary/megaco_ber_encoder.erl @@ -46,22 +46,10 @@ -define(V2_ASN1_MOD, megaco_ber_media_gateway_control_v2). -define(V3_ASN1_MOD, megaco_ber_media_gateway_control_v3). -%% <DEPRECATED> --define(PREV3A_ASN1_MOD, megaco_ber_media_gateway_control_prev3a). --define(PREV3B_ASN1_MOD, megaco_ber_media_gateway_control_prev3b). --define(PREV3C_ASN1_MOD, megaco_ber_media_gateway_control_prev3c). -%% </DEPRECATED> - -define(V1_TRANS_MOD, megaco_binary_transformer_v1). -define(V2_TRANS_MOD, megaco_binary_transformer_v2). -define(V3_TRANS_MOD, megaco_binary_transformer_v3). -%% <DEPRECATED> --define(PREV3A_TRANS_MOD, megaco_binary_transformer_prev3a). --define(PREV3B_TRANS_MOD, megaco_binary_transformer_prev3b). --define(PREV3C_TRANS_MOD, megaco_binary_transformer_prev3c). -%% </DEPRECATED> - -define(BIN_LIB, megaco_binary_encoder_lib). @@ -70,18 +58,6 @@ %% Return {ok, Version} | {error, Reason} %%---------------------------------------------------------------------- -%% <DEPRECATED> -version_of([{version3,prev3c}|EC], Binary) -> - Decoders = [?V1_ASN1_MOD, ?V2_ASN1_MOD, ?PREV3C_ASN1_MOD], - ?BIN_LIB:version_of(EC, Binary, 1, Decoders); -version_of([{version3,prev3b}|EC], Binary) -> - Decoders = [?V1_ASN1_MOD, ?V2_ASN1_MOD, ?PREV3B_ASN1_MOD], - ?BIN_LIB:version_of(EC, Binary, 1, Decoders); -version_of([{version3,prev3a}|EC], Binary) -> - Decoders = [?V1_ASN1_MOD, ?V2_ASN1_MOD, ?PREV3A_ASN1_MOD], - ?BIN_LIB:version_of(EC, Binary, 1, Decoders); -%% <DEPRECATED> - %% <BACKWARD-COMPAT-CLAUSE> version_of([{version3,v3}|EC], Binary) -> Decoders = [?V1_ASN1_MOD, ?V2_ASN1_MOD, ?V3_ASN1_MOD], @@ -135,21 +111,6 @@ encode_message(EC, 2, MegaMsg) -> %% -- Version 3 -- -%% <DEPRECATED> -encode_message([{version3,prev3c}|EC], 3, MegaMsg) -> - AsnMod = ?PREV3C_ASN1_MOD, - TransMod = ?PREV3C_TRANS_MOD, - ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); -encode_message([{version3,prev3b}|EC], 3, MegaMsg) -> - AsnMod = ?PREV3B_ASN1_MOD, - TransMod = ?PREV3B_TRANS_MOD, - ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); -encode_message([{version3,prev3a}|EC], 3, MegaMsg) -> - AsnMod = ?PREV3A_ASN1_MOD, - TransMod = ?PREV3A_TRANS_MOD, - ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); -%% </DEPRECATED> - %% <BACKWARD-COMPAT-CLAUSE> encode_message([{version3,v3}|EC], 3, MegaMsg) -> AsnMod = ?V3_ASN1_MOD, @@ -298,21 +259,6 @@ decode_message(EC, 2, Binary) -> %% -- Version 3 -- -%% <DEPRECATED> -decode_message([{version3,prev3c}|EC], 3, Binary) -> - AsnMod = ?PREV3C_ASN1_MOD, - TransMod = ?PREV3C_TRANS_MOD, - ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary); -decode_message([{version3,prev3b}|EC], 3, Binary) -> - AsnMod = ?PREV3B_ASN1_MOD, - TransMod = ?PREV3B_TRANS_MOD, - ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary); -decode_message([{version3,prev3a}|EC], 3, Binary) -> - AsnMod = ?PREV3A_ASN1_MOD, - TransMod = ?PREV3A_TRANS_MOD, - ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary); -%% </DEPRECATED> - %% <BACKWARD-COMPAT-CLAUSE> decode_message([{version3,v3}|EC], 3, Binary) -> AsnMod = ?V3_ASN1_MOD, @@ -326,24 +272,6 @@ decode_message(EC, 3, Binary) -> ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary). -%% <DEPRECATED> -decode_mini_message([{version3,prev3c}|EC], dynamic, Bin) -> - Mods = [?V1_ASN1_MOD, - ?V2_ASN1_MOD, - ?PREV3C_ASN1_MOD], - ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary); -decode_mini_message([{version3,prev3b}|EC], dynamic, Bin) -> - Mods = [?V1_ASN1_MOD, - ?V2_ASN1_MOD, - ?PREV3B_ASN1_MOD], - ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary); -decode_mini_message([{version3,prev3a}|EC], dynamic, Bin) -> - Mods = [?V1_ASN1_MOD, - ?V2_ASN1_MOD, - ?PREV3A_ASN1_MOD], - ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary); -%% </DEPRECATED> - %% <BACKWARD-COMPAT-CLAUSE> decode_mini_message([{version3,v3}|EC], dynamic, Bin) -> Mods = [?V1_ASN1_MOD, @@ -378,19 +306,6 @@ decode_mini_message(EC, 2, Bin) -> AsnMod = ?V2_ASN1_MOD, ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary); -%% <DEPRECATED> -decode_mini_message([{version3,prev3c}|EC], 3, Bin) -> - AsnMod = ?PREV3C_ASN1_MOD, - ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary); -decode_mini_message([{version3,prev3b}|EC], 3, Bin) -> - AsnMod = ?PREV3B_ASN1_MOD, - ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary); -decode_mini_message([{version3,prev3a}|EC], 3, Bin) -> - AsnMod = ?PREV3A_ASN1_MOD, - ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary); -%% </DEPRECATED> - - %% <BACKWARD-COMPAT-CLAUSE> decode_mini_message([{version3,v3}|EC], 3, Bin) -> AsnMod = ?V3_ASN1_MOD, diff --git a/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3a.asn1config b/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3a.asn1config deleted file mode 100644 index da67561f1b..0000000000 --- a/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3a.asn1config +++ /dev/null @@ -1,43 +0,0 @@ -{exclusive_decode, - {'megaco_ber_media_gateway_control_prev3a', - [ - {decode_message_trans_partial, - [ - 'MegacoMessage',[{mess,[{messageBody,[{transactions,parts}]}]}] - ] - }, - {decode_message_acts_partial, - ['Transaction', - [ - {transactionRequest, - [ - {actions,parts} - ] - }, - {transactionReply, - [ - {transactionResult, [{actionReplies,parts}]} - ] - } - ] - ] - }, - {decode_message_version, - ['MegacoMessage', - [ - {authHeader,undecoded}, - {mess,[{mId,undecoded},{messageBody,undecoded}]} - ] - ] - }, - {decode_message_mId, - ['MegacoMessage', - [ - {authHeader,undecoded}, - {mess,[{messageBody,undecoded}]} - ] - ] - } - ] - } -}. diff --git a/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3a.set.asn b/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3a.set.asn deleted file mode 100644 index b9ba7ffdb4..0000000000 --- a/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3a.set.asn +++ /dev/null @@ -1 +0,0 @@ -MEDIA-GATEWAY-CONTROL-prev3a.asn diff --git a/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3b.asn1config b/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3b.asn1config deleted file mode 100644 index 2f25f03d97..0000000000 --- a/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3b.asn1config +++ /dev/null @@ -1,43 +0,0 @@ -{exclusive_decode, - {'megaco_ber_media_gateway_control_prev3b', - [ - {decode_message_trans_partial, - [ - 'MegacoMessage',[{mess,[{messageBody,[{transactions,parts}]}]}] - ] - }, - {decode_message_acts_partial, - ['Transaction', - [ - {transactionRequest, - [ - {actions,parts} - ] - }, - {transactionReply, - [ - {transactionResult, [{actionReplies,parts}]} - ] - } - ] - ] - }, - {decode_message_version, - ['MegacoMessage', - [ - {authHeader,undecoded}, - {mess,[{mId,undecoded},{messageBody,undecoded}]} - ] - ] - }, - {decode_message_mId, - ['MegacoMessage', - [ - {authHeader,undecoded}, - {mess,[{messageBody,undecoded}]} - ] - ] - } - ] - } -}. diff --git a/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3b.set.asn b/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3b.set.asn deleted file mode 100644 index 0437bde310..0000000000 --- a/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3b.set.asn +++ /dev/null @@ -1 +0,0 @@ -MEDIA-GATEWAY-CONTROL-prev3b.asn diff --git a/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3c.asn1config b/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3c.asn1config deleted file mode 100644 index 23c343eed0..0000000000 --- a/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3c.asn1config +++ /dev/null @@ -1,43 +0,0 @@ -{exclusive_decode, - {'megaco_ber_media_gateway_control_prev3c', - [ - {decode_message_trans_partial, - [ - 'MegacoMessage',[{mess,[{messageBody,[{transactions,parts}]}]}] - ] - }, - {decode_message_acts_partial, - ['Transaction', - [ - {transactionRequest, - [ - {actions,parts} - ] - }, - {transactionReply, - [ - {transactionResult, [{actionReplies,parts}]} - ] - } - ] - ] - }, - {decode_message_version, - ['MegacoMessage', - [ - {authHeader,undecoded}, - {mess,[{mId,undecoded},{messageBody,undecoded}]} - ] - ] - }, - {decode_message_mId, - ['MegacoMessage', - [ - {authHeader,undecoded}, - {mess,[{messageBody,undecoded}]} - ] - ] - } - ] - } -}. diff --git a/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3c.set.asn b/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3c.set.asn deleted file mode 100644 index e78055fbad..0000000000 --- a/lib/megaco/src/binary/megaco_ber_media_gateway_control_prev3c.set.asn +++ /dev/null @@ -1 +0,0 @@ -MEDIA-GATEWAY-CONTROL-prev3c.asn diff --git a/lib/megaco/src/binary/megaco_binary_encoder.erl b/lib/megaco/src/binary/megaco_binary_encoder.erl index 40ee11c59d..af82541175 100644 --- a/lib/megaco/src/binary/megaco_binary_encoder.erl +++ b/lib/megaco/src/binary/megaco_binary_encoder.erl @@ -79,21 +79,6 @@ encode_message(EC, 2, MegaMsg) -> TransMod = megaco_binary_transformer_v2, ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); -%% <DEPRECATED> -encode_message([{version3,prev3c}|EC], 3, MegaMsg) -> - AsnMod = megaco_ber_media_gateway_control_prev3c, - TransMod = megaco_binary_transformer_prev3c, - ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); -encode_message([{version3,prev3b}|EC], 3, MegaMsg) -> - AsnMod = megaco_ber_media_gateway_control_prev3b, - TransMod = megaco_binary_transformer_prev3b, - ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); -encode_message([{version3,prev3a}|EC], 3, MegaMsg) -> - AsnMod = megaco_ber_media_gateway_control_prev3a, - TransMod = megaco_binary_transformer_prev3a, - ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); -%% </DEPRECATED> - %% <BACKWARD-COMPAT-CLAUSE> encode_message([{version3,v3}|EC], 3, MegaMsg) -> AsnMod = megaco_ber_media_gateway_control_v3, @@ -137,21 +122,6 @@ encode_transaction(EC, 2, Trans) -> TransMod = megaco_binary_transformer_v2, ?BIN_LIB:encode_transaction(EC, Trans, AsnMod, TransMod, io_list); -%% <DEPRECATED> -encode_transaction([{version3,prev3c}|EC], 3, Trans) -> - AsnMod = megaco_ber_media_gateway_control_prev3c, - TransMod = megaco_binary_transformer_prev3c, - ?BIN_LIB:encode_transaction(EC, Trans, AsnMod, TransMod, io_list); -encode_transaction([{version3,prev3b}|EC], 3, Trans) -> - AsnMod = megaco_ber_media_gateway_control_prev3b, - TransMod = megaco_binary_transformer_prev3b, - ?BIN_LIB:encode_transaction(EC, Trans, AsnMod, TransMod, io_list); -encode_transaction([{version3,prev3a}|EC], 3, Trans) -> - AsnMod = megaco_ber_media_gateway_control_prev3a, - TransMod = megaco_binary_transformer_prev3a, - ?BIN_LIB:encode_transaction(EC, Trans, AsnMod, TransMod, io_list); -%% </DEPRECATED> - %% <BACKWARD-COMPAT-CLAUSE> encode_transaction([{version3,v3}|EC], 3, Trans) -> AsnMod = megaco_ber_media_gateway_control_v3, @@ -196,24 +166,6 @@ encode_action_requests(EC, 2, ActReqs) when is_list(ActReqs) -> TransMod = megaco_binary_transformer_v2, ?BIN_LIB:encode_action_requests(EC, ActReqs, AsnMod, TransMod, io_list); -%% <DEPRECATED> -encode_action_requests([{version3,prev3c}|EC], 3, ActReqs) - when is_list(ActReqs) -> - AsnMod = megaco_ber_media_gateway_control_prev3c, - TransMod = megaco_binary_transformer_prev3c, - ?BIN_LIB:encode_action_requests(EC, ActReqs, AsnMod, TransMod, io_list); -encode_action_requests([{version3,prev3b}|EC], 3, ActReqs) - when is_list(ActReqs) -> - AsnMod = megaco_ber_media_gateway_control_prev3b, - TransMod = megaco_binary_transformer_prev3b, - ?BIN_LIB:encode_action_requests(EC, ActReqs, AsnMod, TransMod, io_list); -encode_action_requests([{version3,prev3a}|EC], 3, ActReqs) - when is_list(ActReqs) -> - AsnMod = megaco_ber_media_gateway_control_prev3a, - TransMod = megaco_binary_transformer_prev3a, - ?BIN_LIB:encode_action_requests(EC, ActReqs, AsnMod, TransMod, io_list); -%% </DEPRECATED> - %% <BACKWARD-COMPAT-CLAUSE> encode_action_requests([{version3,v3}|EC], 3, ActReqs) when is_list(ActReqs) -> @@ -257,21 +209,6 @@ encode_action_request(EC, 2, ActReq) -> TransMod = megaco_binary_transformer_v2, ?BIN_LIB:encode_action_request(EC, ActReq, AsnMod, TransMod, io_list); -%% <DEPRECATED> -encode_action_request([{version3,prev3c}|EC], 3, ActReq) -> - AsnMod = megaco_ber_media_gateway_control_prev3c, - TransMod = megaco_binary_transformer_prev3c, - ?BIN_LIB:encode_action_request(EC, ActReq, AsnMod, TransMod, io_list); -encode_action_request([{version3,prev3b}|EC], 3, ActReq) -> - AsnMod = megaco_ber_media_gateway_control_prev3b, - TransMod = megaco_binary_transformer_prev3b, - ?BIN_LIB:encode_action_request(EC, ActReq, AsnMod, TransMod, io_list); -encode_action_request([{version3,prev3a}|EC], 3, ActReq) -> - AsnMod = megaco_ber_media_gateway_control_prev3a, - TransMod = megaco_binary_transformer_prev3a, - ?BIN_LIB:encode_action_request(EC, ActReq, AsnMod, TransMod, io_list); -%% </DEPRECATED> - %% <BACKWARD-COMPAT-CLAUSE> encode_action_request([{version3,v3}|EC], 3, ActReq) -> AsnMod = megaco_ber_media_gateway_control_v3, @@ -300,24 +237,6 @@ encode_action_reply(_EC, _V, _AcionReply) -> %% Return {ok, Version} | {error, Reason} %%---------------------------------------------------------------------- -%% <DEPRECATED> -version_of([{version3,prev3c}|EC], Binary) -> - Decoders = [megaco_ber_media_gateway_control_v1, - megaco_ber_media_gateway_control_v2, - megaco_ber_media_gateway_control_prev3c], - ?BIN_LIB:version_of(EC, Binary, dynamic, Decoders); -version_of([{version3,prev3b}|EC], Binary) -> - Decoders = [megaco_ber_media_gateway_control_v1, - megaco_ber_media_gateway_control_v2, - megaco_ber_media_gateway_control_prev3b], - ?BIN_LIB:version_of(EC, Binary, dynamic, Decoders); -version_of([{version3,prev3a}|EC], Binary) -> - Decoders = [megaco_ber_media_gateway_control_v1, - megaco_ber_media_gateway_control_v2, - megaco_ber_media_gateway_control_prev3a], - ?BIN_LIB:version_of(EC, Binary, dynamic, Decoders); -%% </DEPRECATED> - %% <BACKWARD-COMPAT-CLAUSE> version_of([{version3,v3}|EC], Binary) -> Decoders = [megaco_ber_media_gateway_control_v1, @@ -341,33 +260,6 @@ version_of(EC, Binary) -> decode_message(EC, Binary) -> decode_message(EC, 1, Binary). -%% <DEPRECATED> -decode_message([{version3,prev3c}|EC], dynamic, Binary) -> - Decoders = [{megaco_ber_media_gateway_control_v1, - megaco_binary_transformer_v1}, - {megaco_ber_media_gateway_control_v2, - megaco_binary_transformer_v2}, - {megaco_ber_media_gateway_control_prev3c, - megaco_binary_transformer_prev3c}], - ?BIN_LIB:decode_message_dynamic(EC, Binary, Decoders, binary); -decode_message([{version3,prev3b}|EC], dynamic, Binary) -> - Decoders = [{megaco_ber_media_gateway_control_v1, - megaco_binary_transformer_v1}, - {megaco_ber_media_gateway_control_v2, - megaco_binary_transformer_v2}, - {megaco_ber_media_gateway_control_prev3b, - megaco_binary_transformer_prev3b}], - ?BIN_LIB:decode_message_dynamic(EC, Binary, Decoders, binary); -decode_message([{version3,prev3a}|EC], dynamic, Binary) -> - Decoders = [{megaco_ber_media_gateway_control_v1, - megaco_binary_transformer_v1}, - {megaco_ber_media_gateway_control_v2, - megaco_binary_transformer_v2}, - {megaco_ber_media_gateway_control_prev3a, - megaco_binary_transformer_prev3a}], - ?BIN_LIB:decode_message_dynamic(EC, Binary, Decoders, binary); -%% </DEPRECATED> - %% <BACKWARD-COMPAT-CLAUSE> decode_message([{version3,v3}|EC], dynamic, Binary) -> Decoders = [{megaco_ber_media_gateway_control_v1, @@ -421,21 +313,6 @@ decode_message(EC, 2, Binary) -> %% -- Version 3 -- -%% <DEPRECATED> -decode_message([{version3,prev3c}|EC], 3, Binary) -> - AsnMod = megaco_ber_media_gateway_control_prev3c, - TransMod = megaco_binary_transformer_prev3c, - ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary); -decode_message([{version3,prev3b}|EC], 3, Binary) -> - AsnMod = megaco_ber_media_gateway_control_prev3b, - TransMod = megaco_binary_transformer_prev3b, - ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary); -decode_message([{version3,prev3a}|EC], 3, Binary) -> - AsnMod = megaco_ber_media_gateway_control_prev3a, - TransMod = megaco_binary_transformer_prev3a, - ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary); -%% </DEPRECATED> - %% <BACKWARD-COMPAT-CLAUSE> decode_message([{version3,v3}|EC], 3, Binary) -> AsnMod = megaco_ber_media_gateway_control_v3, @@ -449,24 +326,6 @@ decode_message(EC, 3, Binary) -> ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary). -%% <DEPRECATED> -decode_mini_message([{version3,prev3c}|EC], dynamic, Bin) -> - Mods = [megaco_ber_media_gateway_control_v1, - megaco_ber_media_gateway_control_v2, - megaco_ber_media_gateway_control_prev3c], - ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary); -decode_mini_message([{version3,prev3b}|EC], dynamic, Bin) -> - Mods = [megaco_ber_media_gateway_control_v1, - megaco_ber_media_gateway_control_v2, - megaco_ber_media_gateway_control_prev3b], - ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary); -decode_mini_message([{version3,prev3a}|EC], dynamic, Bin) -> - Mods = [megaco_ber_media_gateway_control_v1, - megaco_ber_media_gateway_control_v2, - megaco_ber_media_gateway_control_prev3a], - ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary); -%% </DEPRECATED> - %% <BACKWARD-COMPAT-CLAUSE> decode_mini_message([{version3,v3}|EC], dynamic, Bin) -> Mods = [megaco_ber_media_gateway_control_v1, @@ -501,18 +360,6 @@ decode_mini_message(EC, 2, Bin) -> AsnMod = megaco_ber_media_gateway_control_v2, ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary); -%% <DEPRECATED> -decode_mini_message([{version3,prev3c}|EC], 3, Bin) -> - AsnMod = megaco_ber_media_gateway_control_prev3c, - ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary); -decode_mini_message([{version3,prev3b}|EC], 3, Bin) -> - AsnMod = megaco_ber_media_gateway_control_prev3b, - ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary); -decode_mini_message([{version3,prev3a}|EC], 3, Bin) -> - AsnMod = megaco_ber_media_gateway_control_prev3a, - ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary); -%% </DEPRECATED> - %% <BACKWARD-COMPAT-CLAUSE> decode_mini_message([{version3,v3}|EC], 3, Bin) -> AsnMod = megaco_ber_media_gateway_control_v3, diff --git a/lib/megaco/src/binary/megaco_binary_name_resolver_prev3a.erl b/lib/megaco/src/binary/megaco_binary_name_resolver_prev3a.erl deleted file mode 100644 index d8440c6bc8..0000000000 --- a/lib/megaco/src/binary/megaco_binary_name_resolver_prev3a.erl +++ /dev/null @@ -1,2009 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2004-2020. All Rights Reserved. -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. -%% -%% %CopyrightEnd% -%% - -%% -%%---------------------------------------------------------------------- -%% Purpose: Handle meta data about packages -%% -%% DEPRECATED -%% DEPRECATED -%% DEPRECATED -%% -%%---------------------------------------------------------------------- - --module(megaco_binary_name_resolver_prev3a). - --include_lib("megaco/src/engine/megaco_message_internal.hrl"). --include_lib("megaco/src/app/megaco_internal.hrl"). - - --define(LOWER(Char), - if - Char >= $A, Char =< $Z -> - Char - ($A - $a); - true -> - Char - end). - --export([packages/0, - capabilities/0, - capabilities/1, - decode_name/3, - encode_name/3 - ]). - -encode_name(Config, term_id, TermId) -> - case megaco:encode_binary_term_id(Config, TermId) of - {ok, TermId2} -> - TermId2; - {error, _Reason} -> - exit({bad_term_id, TermId}) - end; -encode_name(_Config, Scope, Item) -> - ?d("encode_name(~p) -> entry with" - "~n Item: ~p", [Scope, Item]), - encode(Scope, Item). - -decode_name(Config, term_id, TermId) -> - case megaco:decode_binary_term_id(Config, TermId) of - {ok, TermId2} -> - TermId2; - {error, _Reason} -> - exit({bad_term_id, TermId}) - end; -decode_name(_Config, Scope, Item) -> - ?d("decode_name(~p) -> entry with" - "~n Item: ~p", [Scope, Item]), - decode(Scope, Item). - - - -%%---------------------------------------------------------------------- -%% 12.1.1 Package -%% -%% Overall description of the package, specifying: -%% -%% Package Name: only descriptive -%% -%% PackageID: is an identifier -%% -%% Description: is a description of the package -%% -%% Version: -%% -%% A new version of a package can only add additional Properties, -%% Events, Signals, Statistics and new possible values for an -%% existing parameter described in the original package. No -%% deletions or modifications shall be allowed. A version is an -%% integer in the range from 1 to 99. -%% -%% Designed to be extended only (Optional): Yes -%% -%% This indicates that the package has been expressly designed to -%% be extended by others, not to be directly referenced. For -%% example, the package may not have any function on its own or be -%% nonsensical on its own. The MG SHOULD NOT publish this PackageID -%% when reporting packages. -%% -%% Extends: existing package Descriptor -%% -%% A package may extend an existing package. The version of the -%% original package must be specified. When a package extends -%% another package it shall only add additional Properties, Events, -%% Signals, Statistics and new possible values for an existing -%% parameter described in the original package. An extended package -%% shall not redefine or overload an identifier defined in the -%% original package and packages it may have extended (multiple -%% levels of extension). Hence, if package B version 1 extends -%% package A version 1, version 2 of B will not be able to extend -%% the A version 2 if A version 2 defines a name already in B -%% version 1. If the package does not extend another package, it -%% shall specify "none". -%% -%% -%% 12.1.2 Properties -%% -%% Properties defined by the package, specifying: -%% -%% Property Name: only descriptive -%% -%% PropertyID: is an identifier -%% -%% Description: is a description of the function of the property -%% -%% Type: One of: -%% -%% Boolean -%% -%% String: UTF-8 string -%% -%% Octet String: A number of octets. See Annex A and B.3 for -%% encoding -%% -%% Integer: 4 byte signed integer -%% -%% Double: 8 byte signed integer -%% -%% Character: unicode UTF-8 encoding of a single letter. -%% Could be more than one octet. -%% -%% Enumeration: one of a list of possible unique values (see 12.3) -%% -%% Sub-list: a list of several values from a list. -%% The type of sub-list SHALL also be specified. -%% The type shall be chosen from the types specified in -%% this section (with the exception of sub-list). For -%% example, Type: sub-list of enumeration. The encoding -%% of sub-lists is specified in Annexes A and B.3. -%% -%% Possible values: -%% -%% A package MUST specify either a specific set of values or a -%% description of how values are determined. A package MUST also -%% specify a default value or the default behaviour when the value -%% is omitted from its descriptor. For example, a package may -%% specify that procedures related to the property are suspended -%% when its value is omitted. -%% -%% Default: -%% -%% A default value (but not procedures) may be specified as -%% provisionable. -%% -%% Defined in: -%% -%% Which H.248.1 descriptor the property is defined in. -%% LocalControl is for stream-dependent properties. -%% TerminationState is for stream-independent properties. -%% ContextAttribute is for properties that affect the context as -%% a whole, i.e., mixing properties. These are expected to be the -%% most common cases, but it is possible for properties to be -%% defined in other descriptors. Context properties MUST be defined -%% in the ContextAttribute descriptor. -%% -%% Characteristics: Read/Write or both, and (optionally), global: -%% -%% Indicates whether a property is read-only, or read-write, and -%% if it is global. If Global is omitted, the property is not -%% global. If a property is declared as global, the value of the -%% property is shared by all Terminations realizing the package. -%% If a context property is declared as global, the property is -%% shared by all contexts realizing the package. -%% -%% -%% 12.1.3 Events -%% -%% Events defined by the package, specifying: -%% -%% Event name: only descriptive -%% -%% EventID: is an identifier -%% -%% Description: a description of the function of the event -%% -%% EventsDescriptor Parameters: -%% -%% Parameters used by the MGC to configure the event, and found in -%% the EventsDescriptor. See 12.2. If there are no parameters for -%% the Events Descriptor, then "none" shall be specified. -%% -%% ObservedEventsDescriptor Parameters: -%% -%% Parameters returned to the MGC in Notify requests and in replies -%% to command requests from the MGC that audit -%% ObservedEventsDescriptor, and found in the -%% ObservedEventsDescriptor. See 12.2. If there are no parameters -%% for the ObservedEvents Descriptor, then 'none' shall be specified. -%% -%% -%% 12.1.4 Signals -%% -%% Signals defined by the package, specifying: -%% -%% Signal Name: only descriptive -%% -%% SignalID: is an identifier. SignalID is used in a SignalsDescriptor -%% -%% Description: a description of the function of the signal -%% -%% SignalType: one of: -%% -%% OO (On/Off) -%% -%% TO (TimeOut) -%% -%% BR (Brief) -%% -%% NOTE - SignalType may be defined such that it is dependent on -%% the value of one or more parameters. The package MUST specify a -%% default signal type. If the default type is TO, the package MUST -%% specify a default duration which may be provisioned. A default -%% duration is meaningless for BR. -%% -%% Duration: in hundredths of seconds -%% -%% Additional Parameters: see 12.2 -%% -%% -%% 12.1.5 Statistics -%% -%% Statistics defined by the package, specifying: -%% -%% Statistic name: only descriptive -%% -%% StatisticID: is an identifier -%% -%% StatisticID is used in a StatisticsDescriptor -%% -%% Description: a description of the statistic -%% -%% Type: One of: -%% -%% Boolean -%% -%% String: UTF-8 string -%% -%% Octet String: A number of octets. -%% See Annex A and Annex B.3 for encoding -%% -%% Integer: 4 byte signed integer -%% -%% Double: 8 byte signed integer -%% -%% Character: Unicode UTF-8 encoding of a single letter. -%% Could be more than one octet. -%% -%% Enumeration: One of a list of possible unique values (See 12.3) -%% -%% Sub-list: A list of several values from a list. -%% The type of sub-list SHALL also be specified. -%% The type shall be chosen from the types specified in -%% this section (with the exception of sub-list). -%% For example, Type: sub-list of enumeration. -%% The encoding of sub-lists is specified in Annexes A -%% and B.3. -%% -%% Possible Values: -%% -%% A package must indicate the unit of measure, e.g. milliseconds, -%% packets, either here or along with the type above, as well as -%% indicating any restriction on the range. -%% -%% Level: Specify if the statistic can be kept at the Termination -%% level, Stream level or Either. -%% -%% -%% 12.1.6 Error Codes -%% -%% If the package does not define any error codes, this section may be omitted. -%% Otherwise, it describes error codes defined by the package, specifying: -%% -%% Error Code #: The error code number. -%% -%% Name: Name of the error -%% -%% Definition: A description of the error code. -%% -%% Error Text in the Error Descriptor: -%% -%% A description of what text to return in the Error Descriptor. -%% -%% Comment: Any further comments on the use of the error code. -%% -%% -%% 12.1.7 Procedures -%% -%% Additional guidance on the use of the package. -%% -%% -%% 12.2 Guidelines to defining parameters to events and signals -%% -%% Parameter Name: only descriptive -%% -%% ParameterID: is an identifier. The textual ParameterID of -%% parameters to Events and Signals shall not start with "EPA" and -%% "SPA", respectively. The textual ParameterID shall also not be -%% "ST", "Stream", "SY", "SignalType", "DR", "Duration", "NC", -%% "NotifyCompletion", "KA", "KeepActive", "EB", "Embed", "DM", -%% "DigitMap", "DI", "Direction", "RQ" or "RequestID". -%% -%% Description: a description of the function of the parameter. -%% -%% Type: One of: -%% -%% Boolean -%% -%% String: UTF-8 octet string -%% -%% Octet String: A number of octets. See Annex A and B.3 for -%% encoding -%% -%% Integer: 4-octet signed integer -%% -%% Double: 8-octet signed integer -%% -%% Character: Unicode UTF-8 encoding of a single letter. Could be -%% more than one octet. -%% -%% Enumeration: one of a list of possible unique values (see 12.3) -%% -%% Sub-list: a list of several values from a list (not supported -%% for statistics). The type of sub-list SHALL also be -%% specified The type shall be chosen from the types -%% specified in this section (with the exception of -%% sub-list). For example, Type: sub-list of enumeration. -%% The encoding of sub-lists is specified in Annex A -%% and B.3. -%% -%% Optional: Yes/No -%% -%% Describes if the parameter may be omitted from the signal or -%% event. -%% -%% Possible values: -%% -%% A package MUST specify either a specific set of values or a -%% description of how values are determined. A package MUST -%% also specify a default value or the default behavior when the -%% value is omitted from its descriptor. For example, a package -%% may specify that procedures related to the parameter are -%% suspended when its value is omitted. -%% -%% Default: -%% -%% A default value (but not procedures) may be specified as -%% provisionable. -%% -%% -%% 12.3 Lists -%% -%% Possible values for parameters include enumerations. Enumerations may be -%% defined in a list. It is recommended that the list be IANA registered so -%% that packages that extend the list can be defined without concern for -%% conflicting names. -%% -%% -%% 12.4 Identifiers -%% -%% Identifiers in text encoding shall be strings of up to 64 characters, -%% containing no spaces, starting with an alphabetic character and consisting -%% of alphanumeric characters and/or digits, and possibly including the -%% special character underscore ("_"). -%% -%% Identifiers in binary encoding are 2 octets long. -%% -%% Both text and binary values shall be specified for each identifier, -%% including identifiers used as values in enumerated types. -%% -%% -%% 12.5 Package registration -%% -%% A package can be registered with IANA for interoperability reasons. See -%% clause 14 for IANA considerations. -%% -%%---------------------------------------------------------------------- - -capabilities() -> - [{P, capabilities(P)} || P <- packages()]. - -%% -record(property, {name, type, values, defined_in, characteristics}). - -%%---------------------------------------------------------------------- -%% List all known packages -%% 'native' and 'all' are not real packages -%%---------------------------------------------------------------------- - -packages() -> - [ - "g", % Generic - "root", % Base Root Package - "tonegen", % Tone Generator Package - "tonedet", % Tone Detection Package - "dg", % Basic DTMF Generator Package - "dd", % DTMF detection Package - "cg", % Call Progress Tones Generator Package - "cd", % Call Progress Tones Detection Package - "al", % Analog Line Supervision Package - "ct", % Basic Continuity Package - "nt", % Network Package - "rtp", % RTP Package - "swb", % SwitchBoard Package - "tdmc", % TDM Circuit Package - "" % Native pseudo package - ]. - -%%---------------------------------------------------------------------- -%% List all matching capabilities -%%---------------------------------------------------------------------- - -capabilities(Package) -> - case Package of - "g" -> capabilities_g(); - "root" -> capabilities_root(); - "tonegen" -> capabilities_tonegen(); - "tonedet" -> capabilities_tonedet(); - "dg" -> capabilities_dg(); - "dd" -> capabilities_dd(); - "cg" -> capabilities_cg(); - "cd" -> capabilities_cd(); - "al" -> capabilities_al(); - "ct" -> capabilities_ct(); - "nt" -> capabilities_nt(); - "rtp" -> capabilities_rtp(); - "swb" -> capabilities_swb(); - "tdmc" -> capabilities_tdmc(); - "" -> capabilities_native() - end. - -%%---------------------------------------------------------------------- -%% Decode package name to internal form -%% Scope ::= property | event | signal | statistics -%%---------------------------------------------------------------------- - -decode(mid, Package) -> - decode_mid(Package); -decode(package, Package) -> - decode_package(Package); -decode(profile, Package) -> - decode_profile(Package); -decode(dialplan, Dialplan) -> - decode_dialplan(Dialplan); -decode(Scope, [A, B | Item]) when is_atom(Scope) -> - ?d("decode(~p) -> entry with" - "~n A: ~p" - "~n B: ~p" - "~n Item: ~p", [Scope, A, B, Item]), - case decode_package([A, B]) of - "" -> - ?d("decode -> \"no\" package",[]), - decode_item(Scope, [A, B], Item); - Package -> - ?d("decode -> Package: ~p", [Package]), - Package ++ "/" ++ decode_item(Scope, [A, B], Item) - end; -decode({Scope, [A, B | Item]}, SubItem) when is_atom(Scope) -> - ?d("decode(~p) -> entry with" - "~n A: ~p" - "~n B: ~p" - "~n Item: ~p" - "~n SubItem: ~p", [Scope, A, B, Item, SubItem]), - decode_item({Scope, Item}, [A, B], SubItem). - -decode_item(Scope, [A, B], Item) -> - ?d("decode_item -> entry",[]), - case A of - 16#00 -> - case B of - 16#01 -> decode_g(Scope, Item); - 16#02 -> decode_root(Scope, Item); - 16#03 -> decode_tonegen(Scope, Item); - 16#04 -> decode_tonedet(Scope, Item); - 16#05 -> decode_dg(Scope, Item); - 16#06 -> decode_dd(Scope, Item); - 16#07 -> decode_cg(Scope, Item); - 16#08 -> decode_cd(Scope, Item); - 16#09 -> decode_al(Scope, Item); - 16#0a -> decode_ct(Scope, Item); - 16#0b -> decode_nt(Scope, Item); - 16#0c -> decode_rtp(Scope, Item); - 16#0d -> decode_tdmc(Scope, Item); - 16#00 -> decode_native(Scope, Item) - end; - 16#fe -> - case B of - %% Proprietary extension - 16#fe -> decode_swb(Scope, Item) - end; - 16#ff -> - case B of - 16#ff when Item =:= [16#ff, 16#ff] -> "*" - end - end. - -decode_package(Package) -> - ?d("decode_package -> entry with" - "~n Package: ~p", [Package]), - [A, B] = Package, - case A of - 16#00 -> - case B of - 16#01 -> "g"; - 16#02 -> "root"; - 16#03 -> "tonegen"; - 16#04 -> "tonedet"; - 16#05 -> "dg"; - 16#06 -> "dd"; - 16#07 -> "cg"; - 16#08 -> "cd"; - 16#09 -> "al"; - 16#0a -> "ct"; - 16#0b -> "nt"; - 16#0c -> "rtp"; - 16#0d -> "tdmc"; - 16#00 -> "" - end; - 16#fe -> - case B of - 16#fe -> "swb" - end; - 16#ff -> - case B of - 16#ff -> "*" - end - end. - -decode_profile([A, B]) -> - case A of - 16#00 -> - case B of - 16#fe -> "resgw"; - _ -> "profile" ++ [A + $0, B + $0] - end; - _ -> - "profile" ++ [A + $0, B + $0] - end. - -decode_dialplan([A, B]) -> - "dialplan" ++ [A + $0, B + $0]. - -decode_mid(Mid) -> - case Mid of - {domainName, DN} -> - Lower = to_lower(DN#'DomainName'.name), - {domainName, DN#'DomainName'{name = Lower}}; - {deviceName, PathName} -> - Lower = to_lower(PathName), - {deviceName, Lower}; - Other -> - Other - end. - -to_lower(Chars) -> - [?LOWER(Char) || Char <- Chars]. - -%%---------------------------------------------------------------------- -%% Encode package name from internal form -%% Scope ::= property | event | signal | statistics -%%---------------------------------------------------------------------- - -encode(mid, Package) -> - encode_mid(Package); -encode(package, Package) -> - encode_package(Package); -encode(profile, Profile) -> - encode_profile(Profile); -encode(dialplan, Dialplan) -> - encode_dialplan(Dialplan); -encode(Scope, PackageItem) when is_atom(Scope) -> - ?d("encode(~p) -> entry with" - "~n PackageItem: ~p", [Scope, PackageItem]), - case string:tokens(PackageItem, [$/]) of - [Package, Item] -> - ?d("encode -> " - "~n Package: ~p" - "~n Item: ~p", [Package, Item]), - encode_package(Package) ++ encode_item(Scope, Package, Item); - [Item] -> - ?d("encode -> Item: ~p", [Item]), - [16#00, 16#00 | encode_native(Scope, Item)] - end; -encode({Scope, PackageItem}, SubItem) when is_atom(Scope) -> - ?d("encode(~p) -> entry with" - "~n PackageItem: ~p" - "~n SubItem: ~p", [Scope, PackageItem, SubItem]), - case string:tokens(PackageItem, [$/]) of - [Package, Item] -> - ?d("encode -> " - "~n Package: ~p" - "~n Item: ~p", [Package, Item]), - encode_item({Scope, Item}, Package, SubItem); - [_Item] -> - ?d("encode -> _Item: ~p", [_Item]), - encode_native(Scope, SubItem) - end. - -encode_item(_Scope, _Package, "*") -> - [16#ff, 16#ff]; -encode_item(Scope, Package, Item) -> - ?d("encode_item(~s) -> entry", [Package]), - case Package of - "g" -> encode_g(Scope, Item); - "root" -> encode_root(Scope, Item); - "tonegen" -> encode_tonegen(Scope, Item); - "tonedet" -> encode_tonedet(Scope, Item); - "dg" -> encode_dg(Scope, Item); - "dd" -> encode_dd(Scope, Item); - "cg" -> encode_cg(Scope, Item); - "cd" -> encode_cd(Scope, Item); - "al" -> encode_al(Scope, Item); - "ct" -> encode_ct(Scope, Item); - "nt" -> encode_nt(Scope, Item); - "rtp" -> encode_rtp(Scope, Item); - "tdmc" -> encode_tdmc(Scope, Item); - "swb" -> encode_swb(Scope, Item) - end. - -encode_package(Package) -> - case Package of - "g" -> [16#00, 16#01]; - "root" -> [16#00, 16#02]; - "tonegen" -> [16#00, 16#03]; - "tonedet" -> [16#00, 16#04]; - "dg" -> [16#00, 16#05]; - "dd" -> [16#00, 16#06]; - "cg" -> [16#00, 16#07]; - "cd" -> [16#00, 16#08]; - "al" -> [16#00, 16#09]; - "ct" -> [16#00, 16#0a]; - "nt" -> [16#00, 16#0b]; - "rtp" -> [16#00, 16#0c]; - "tdmc" -> [16#00, 16#0d]; - "" -> [16#00, 16#00]; - "*" -> [16#ff, 16#ff]; - "swb" -> [16#fe, 16#fe] - end. - -encode_profile(Profile) -> - case Profile of - "resgw" -> - [16#00, 16#fe]; - [$p, $r, $o, $f, $i, $l, $e | Name] -> - case Name of - [A, B] -> [A - $0, B - $0]; - [B] -> [0, B - $0]; - [] -> [0, 0] - end - end. - -encode_dialplan(Dialplan) -> - case Dialplan of - [$d, $i, $a, $l, $p, $l, $a, $n | Name] -> - case Name of - [A, B] -> [A - $0, B - $0]; - [B] -> [0, B - $0]; - [] -> [0, 0] - end - end. - -encode_mid(Mid) -> - Mid. - - -%%---------------------------------------------------------------------- -%% Name: g - Generic -%% Version: 1 -%% Extends: None -%% Purpose: Generic package for commonly encountered items -%%---------------------------------------------------------------------- - -capabilities_g() -> - [ - {event, "cause"}, - {event, "sc"} - ]. - -encode_g(event, Item) -> - case Item of - "cause" -> [16#00, 16#01]; - "sc" -> [16#00, 16#02] - end; - -encode_g({event_parameter, Item}, SubItem) -> - case Item of - "cause" -> - case SubItem of - "Generalcause" -> [16#00, 16#01]; - "Failurecause" -> [16#00, 16#02] - end; - "sc" -> - case SubItem of - "SigID" -> [16#00, 16#01]; - "Meth" -> [16#00, 16#02]; - "SLID" -> [16#00, 16#03]; - "RID" -> [16#00, 16#04] - end - end. - -decode_g(event, Item) -> - case Item of - [16#00, 16#01] -> "cause"; - [16#00, 16#02] -> "sc" - end; - -decode_g({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#01] -> % Event: cause - case SubItem of - [16#00, 16#01] -> "Generalcause"; - [16#00, 16#02] -> "Failurecause" - end; - - [16#00, 16#02] -> % Event: sc - case SubItem of - [16#00, 16#01] -> "SigID"; - [16#00, 16#02] -> "Meth"; - [16#00, 16#03] -> "SLID"; - [16#00, 16#04] -> "RID" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: root - Base Root Package -%% Version: 2 -%% Extends: None -%% Purpose: This package defines Gateway wide properties. -%%---------------------------------------------------------------------- - -capabilities_root() -> - [ - {property, "maxNumberOfContexts"}, - {property, "maxTerminationsPerContext"}, - {property, "normalMGExecutionTime"}, - {property, "normalMGCExecutionTime"}, - {property, "MGProvisionalResponseTimerValue"}, - {property, "MGCProvisionalResponseTimerValue"}, - {property, "MGCOriginatedPendingLimit"}, - {property, "MGOriginatedPendingLimit"} - ]. - -encode_root(Scope, Item) -> - case Scope of - property -> - case Item of - "maxNumberOfContexts" -> [16#00, 16#01]; - "maxTerminationsPerContext" -> [16#00, 16#02]; - "normalMGExecutionTime" -> [16#00, 16#03]; - "normalMGCExecutionTime" -> [16#00, 16#04]; - "MGProvisionalResponseTimerValue" -> [16#00, 16#05]; - "MGCProvisionalResponseTimerValue" -> [16#00, 16#06]; - "MGCOriginatedPendingLimit" -> [16#00, 16#07]; - "MGOriginatedPendingLimit" -> [16#00, 16#08] - end - end. - -decode_root(Scope, Item) -> - case Scope of - property -> - case Item of - [16#00, 16#01] -> "maxNumberOfContexts"; - [16#00, 16#02] -> "maxTerminationsPerContext"; - [16#00, 16#03] -> "normalMGExecutionTime"; - [16#00, 16#04] -> "normalMGCExecutionTime"; - [16#00, 16#05] -> "MGProvisionalResponseTimerValue"; - [16#00, 16#06] -> "MGCProvisionalResponseTimerValue"; - [16#00, 16#07] -> "MGCOriginatedPendingLimit"; - [16#00, 16#08] -> "MGOriginatedPendingLimit" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: tonegen - Tone Generator Package -%% Version: 2 -%% Extends: None -%% Purpose: This package defines signals to generate audio tones. -%% This package does not specify parameter values. It is -%% intended to be extendable. Generally, tones are defined -%% as an individual signal with a parameter, ind, -%% representing "interdigit" time delay, and a tone id to -%% be used with playtones. A tone id should be kept -%% consistent with any tone generation for the same tone. -%% MGs are expected to be provisioned with the characteristics -%% of appropriate tones for the country in which the MG is located. -%%---------------------------------------------------------------------- - -capabilities_tonegen() -> - [ - {signal, "pt"} - ]. - -encode_tonegen(signal, Item) -> - case Item of - "pt" -> [16#00, 16#01] - end; - -encode_tonegen({signal_parameter, Item}, SubItem) -> - case Item of - "pt" -> - case SubItem of - "tl" -> [16#00, 16#01]; - "ind" -> [16#00, 16#02]; - "btd" -> [16#00, 16#03] - end - end. - -decode_tonegen(signal, Item) -> - case Item of - [16#00, 16#01] -> "pt" - end; - -decode_tonegen({signal_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#01] -> % Event: pt - case SubItem of - [16#00, 16#01] -> "tl"; - [16#00, 16#02] -> "ind"; - [16#00, 16#03] -> "btd" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: tonedet - Tone Detection Package -%% Version: 1 -%% Extends: None -%% Purpose: This Package defines events for audio tone detection. -%% Tones are selected by name (tone id). MGs are expected -%% to be provisioned with the characteristics of appropriate -%% tones for the country in which the MG is located. -%% -%% This package does not specify parameter values. -%% It is intended to be extendable. -%%---------------------------------------------------------------------- - -capabilities_tonedet() -> - [ - {event, "std"}, - {event, "etd"}, - {event, "ltd"} - ]. - -encode_tonedet(event, Item) -> - case Item of - "std" -> [16#00, 16#01]; - "etd" -> [16#00, 16#02]; - "ltd" -> [16#00, 16#03] - end; - -encode_tonedet({event_parameter, Item}, SubItem) -> - case Item of - "std" -> - case SubItem of - "tl" -> [16#00, 16#01]; - "tid" -> [16#00, 16#03] - end; - "etd" -> - case SubItem of - "tl" -> [16#00, 16#01]; - "tid" -> [16#00, 16#03]; - "dur" -> [16#00, 16#02] - end; - "ltd" -> - case SubItem of - "tl" -> [16#00, 16#01]; - "dur" -> [16#00, 16#02]; - "tid" -> [16#00, 16#03] - end - end. - -decode_tonedet(event, Item) -> - case Item of - [16#00, 16#01] -> "std"; - [16#00, 16#02] -> "etd"; - [16#00, 16#03] -> "ltd" - end; - -decode_tonedet({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#01] -> % Event std - case SubItem of - [16#00, 16#01] -> "tl"; - [16#00, 16#03] -> "tid" - end; - [16#00, 16#02] -> % Event etd - case SubItem of - [16#00, 16#01] -> "tl"; - [16#00, 16#03] -> "tid"; - [16#00, 16#02] -> "dur" - end; - [16#00, 16#03] -> % Event ltd - case SubItem of - [16#00, 16#01] -> "tl"; - [16#00, 16#02] -> "dur"; - [16#00, 16#03] -> "tid" - end - end. - -%%---------------------------------------------------------------------- -%% Name: dg - Basic DTMF Generator Package -%% Version: 1 -%% Extends: tonegen version 1 -%% Purpose: This package defines the basic DTMF tones as signals and -%% extends the allowed values of parameter tl of playtone -%% in tonegen. -%%---------------------------------------------------------------------- - -capabilities_dg() -> - [ - {signal, "d0"}, - {signal, "d1"}, - {signal, "d2"}, - {signal, "d3"}, - {signal, "d4"}, - {signal, "d5"}, - {signal, "d6"}, - {signal, "d7"}, - {signal, "d8"}, - {signal, "d9"}, - {signal, "ds"}, - {signal, "do"}, - {signal, "da"}, - {signal, "db"}, - {signal, "dc"}, - {signal, "dd"} - ]. - -encode_dg(signal, Item) -> - case Item of - "d0" -> [16#00, 16#10]; - "d1" -> [16#00, 16#11]; - "d2" -> [16#00, 16#12]; - "d3" -> [16#00, 16#13]; - "d4" -> [16#00, 16#14]; - "d5" -> [16#00, 16#15]; - "d6" -> [16#00, 16#16]; - "d7" -> [16#00, 16#17]; - "d8" -> [16#00, 16#18]; - "d9" -> [16#00, 16#19]; - "ds" -> [16#00, 16#20]; - "do" -> [16#00, 16#21]; - "da" -> [16#00, 16#1a]; - "db" -> [16#00, 16#1b]; - "dc" -> [16#00, 16#1c]; - "dd" -> [16#00, 16#1d] - end; - -encode_dg({signal_parameter, Item}, SubItem) -> - case Item of - "d0" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d1" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d2" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d3" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d4" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d5" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d6" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d7" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d8" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d9" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "ds" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "do" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "da" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "db" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "dc" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "dd" -> - case SubItem of - "btd" -> [16#00, 16#01] - end - end. - -decode_dg(signal, Item) -> - case Item of - [16#00, 16#10] -> "d0"; - [16#00, 16#11] -> "d1"; - [16#00, 16#12] -> "d2"; - [16#00, 16#13] -> "d3"; - [16#00, 16#14] -> "d4"; - [16#00, 16#15] -> "d5"; - [16#00, 16#16] -> "d6"; - [16#00, 16#17] -> "d7"; - [16#00, 16#18] -> "d8"; - [16#00, 16#19] -> "d9"; - [16#00, 16#20] -> "ds"; - [16#00, 16#21] -> "do"; - [16#00, 16#1a] -> "da"; - [16#00, 16#1b] -> "db"; - [16#00, 16#1c] -> "dc"; - [16#00, 16#1d] -> "dd" - end; - -decode_dg({signal_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#10] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#11] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#12] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#13] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#14] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#15] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#16] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#17] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#18] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#19] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#20] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#21] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1a] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1b] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1c] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1d] -> - case SubItem of - [16#00, 16#01] -> "btd" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: dd - DTMF detection Package -%% Version: 1 -%% Extends: tonedet version 1 -%% Purpose: This package defines the basic DTMF tones detection. -%% Tones are selected by name (tone id). MGs are expected -%% to be provisioned with the characteristics of appropriate -%% tones for the country in which the MG is located. -%% -%% This package does not specify parameter values. -%% It is intended to be extendable. -%% -%% Additional tone id values are all tone ids described in package dg -%% (basic DTMF generator package). -%% -%% The following table maps DTMF events to digit map symbols as described -%% in section 7.1.14. -%% -%% _________________________________ -%% | DTMF Event | Symbol | -%% | d0 | "0" | -%% | d1 | "1" | -%% | d2 | "2" | -%% | d3 | "3" | -%% | d4 | "4" | -%% | d5 | "5" | -%% | d6 | "6" | -%% | d7 | "7" | -%% | d8 | "8" | -%% | d9 | "9" | -%% | da | "A" or "a"| -%% | db | "B" or "b"| -%% | dc | "C" or "c"| -%% | dd | "D" or "d"| -%% | ds | "E" or "e"| -%% | do | "F" or "f"| -%% |___________________|____________| -%% -%%---------------------------------------------------------------------- - -capabilities_dd() -> - [ - {event, "ce"}, - {event, "d0"}, - {event, "d1"}, - {event, "d2"}, - {event, "d3"}, - {event, "d4"}, - {event, "d5"}, - {event, "d6"}, - {event, "d7"}, - {event, "d8"}, - {event, "d9"}, - {event, "ds"}, - {event, "do"}, - {event, "da"}, - {event, "db"}, - {event, "dc"}, - {event, "dd"} - ]. - -encode_dd(event, Item) -> - case Item of - "ce" -> [16#00, 16#04]; - "d0" -> [16#00, 16#10]; - "d1" -> [16#00, 16#11]; - "d2" -> [16#00, 16#12]; - "d3" -> [16#00, 16#13]; - "d4" -> [16#00, 16#14]; - "d5" -> [16#00, 16#15]; - "d6" -> [16#00, 16#16]; - "d7" -> [16#00, 16#17]; - "d8" -> [16#00, 16#18]; - "d9" -> [16#00, 16#19]; - "ds" -> [16#00, 16#20]; - "do" -> [16#00, 16#21]; - "da" -> [16#00, 16#1a]; - "db" -> [16#00, 16#1b]; - "dc" -> [16#00, 16#1c]; - "dd" -> [16#00, 16#1d] - end; - -encode_dd({event_parameter, Item}, SubItem) -> - case Item of - "ce" -> - case SubItem of - "ds" -> [16#00, 16#01]; - "Meth" -> [16#00, 16#03] - end; - "d0" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d1" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d2" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d3" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d4" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d5" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d6" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d7" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d8" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d9" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "ds" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "do" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "da" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "db" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "dc" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "dd" -> - case SubItem of - "btd" -> [16#00, 16#01] - end - end. - -decode_dd(event, Item) -> - case Item of - [16#00, 16#04] -> "ce"; - [16#00, 16#10] -> "d0"; - [16#00, 16#11] -> "d1"; - [16#00, 16#12] -> "d2"; - [16#00, 16#13] -> "d3"; - [16#00, 16#14] -> "d4"; - [16#00, 16#15] -> "d5"; - [16#00, 16#16] -> "d6"; - [16#00, 16#17] -> "d7"; - [16#00, 16#18] -> "d8"; - [16#00, 16#19] -> "d9"; - [16#00, 16#20] -> "ds"; - [16#00, 16#21] -> "do"; - [16#00, 16#1a] -> "da"; - [16#00, 16#1b] -> "db"; - [16#00, 16#1c] -> "dc"; - [16#00, 16#1d] -> "dd" - end; - -decode_dd({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#04] -> % Event ce - case SubItem of - [16#00, 16#01] -> "ds"; - [16#00, 16#03] -> "Meth" - end; - [16#00, 16#10] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#11] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#12] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#13] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#14] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#15] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#16] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#17] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#18] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#19] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#20] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#21] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1a] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1b] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1c] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1d] -> - case SubItem of - [16#00, 16#01] -> "btd" - end - end. - -%%---------------------------------------------------------------------- -%% Name: cg - Call Progress Tones Generator Package -%% Version: 1 -%% Extends: tonegen version 1 -%% Purpose: This package defines the basic call progress tones as signals -%% and extends the allowed values of the tl parameter of -%% playtone in tonegen. -%%---------------------------------------------------------------------- - -capabilities_cg() -> - [ - {signal, "dt"}, - {signal, "rt"}, - {signal, "bt"}, - {signal, "ct"}, - {signal, "sit"}, - {signal, "wt"}, - {signal, "prt"}, - {signal, "cw"}, - {signal, "cr"} - ]. - - -encode_cg(Scope, Item) -> - case Scope of - signal -> - case Item of - "dt" -> [16#00, 16#30]; - "rt" -> [16#00, 16#31]; - "bt" -> [16#00, 16#32]; - "ct" -> [16#00, 16#33]; - "sit" -> [16#00, 16#34]; - "wt" -> [16#00, 16#35]; - "prt" -> [16#00, 16#36]; - "cw" -> [16#00, 16#37]; - "cr" -> [16#00, 16#38] - end - end. - -decode_cg(Scope, Item) -> - case Scope of - signal -> - case Item of - [16#00, 16#30] -> "dt"; - [16#00, 16#31] -> "rt"; - [16#00, 16#32] -> "bt"; - [16#00, 16#33] -> "ct"; - [16#00, 16#34] -> "sit"; - [16#00, 16#35] -> "wt"; - [16#00, 16#36] -> "prt"; - [16#00, 16#37] -> "cw"; - [16#00, 16#38] -> "cr" - end - end. - -%%---------------------------------------------------------------------- -%% Name: cd - Call Progress Tones Detection Package -%% Version: 1 -%% Extends: tonedet version 1 -%% Purpose: This package defines the basic call progress detection tones. -%% This Package extends the possible values of tone id -%% in the "start tone detected", "end tone detected" and -%% "long tone detected" events. -%% Additional values -%% tone id values are defined for start tone detected, -%% end tone detected and long tone detected with -%% the same values as those in package cg (call -%% progress tones generation package). -%% -%% The required set of tone ids corresponds to Recommendation E.180/Q.35 -%% [ITU-T Recommendation E.180/Q.35 (1998)]. See Recommendation E.180/Q.35 -%% for definition of the meanings of these tones. -%%---------------------------------------------------------------------- - -capabilities_cd() -> - [ - {event, "dt"}, - {event, "rt"}, - {event, "bt"}, - {event, "ct"}, - {event, "sit"}, - {event, "wt"}, - {event, "prt"}, - {event, "cw"}, - {event, "cr"} - ]. - - -encode_cd(Scope, Item) -> - case Scope of - event -> - case Item of - "dt" -> [16#00, 16#30]; - "rt" -> [16#00, 16#31]; - "bt" -> [16#00, 16#32]; - "ct" -> [16#00, 16#33]; - "sit"-> [16#00, 16#34]; - "wt" -> [16#00, 16#35]; - "prt"-> [16#00, 16#36]; - "cw" -> [16#00, 16#37]; - "cr" -> [16#00, 16#38] - end - end. - -decode_cd(Scope, Item) -> - case Scope of - event -> - case Item of - [16#00, 16#30] -> "dt"; - [16#00, 16#31] -> "rt"; - [16#00, 16#32] -> "bt"; - [16#00, 16#33] -> "ct"; - [16#00, 16#34] -> "sit"; - [16#00, 16#35] -> "wt"; - [16#00, 16#36] -> "prt"; - [16#00, 16#37] -> "cw"; - [16#00, 16#38] -> "cr" - end - end. - -%%---------------------------------------------------------------------- -%% Name: al - Analog Line Supervision Package -%% Version: 1 -%% Extends: None -%% Purpose: This package defines events and signals for an analog line. -%%---------------------------------------------------------------------- - -capabilities_al() -> - [ - {event, "on"}, - {event, "of"}, - {event, "fl"}, - {signal, "ri"} - ]. - -encode_al(event, Item) -> - ?d("encode_al(event) -> entry with" - "~n Item: ~p", [Item]), - case Item of - "on" -> [16#00, 16#04]; - "of" -> [16#00, 16#05]; - "fl" -> [16#00, 16#06] - end; - -encode_al({event_parameter, Item}, SubItem) -> - ?d("encode_al({event_parameter,~p}) -> entry with" - "~n SubItem: ~p", [Item, SubItem]), - case Item of - "on" -> - case SubItem of - "strict" -> [16#00, 16#01]; - "init" -> [16#00, 16#02] - end; - "of" -> - case SubItem of - "strict" -> [16#00, 16#01]; - "init" -> [16#00, 16#02] - end; - "fl" -> - case SubItem of - "mindur" -> [16#00, 16#04]; - "maxdur" -> [16#00, 16#05] - end - end; - -encode_al(signal, Item) -> - ?d("encode_al(signal) -> entry with" - "~n Item: ~p", [Item]), - case Item of - "ri" -> [16#00, 16#02] - end; - -encode_al({signal_parameter, Item}, SubItem) -> - ?d("encode_al({signal_parameter,~p}) -> entry with" - "~n SubItem: ~p", [Item, SubItem]), - case Item of - "ri" -> - case SubItem of - "cad" -> [16#00, 16#06]; - "freq" -> [16#00, 16#07] - end - end. - -decode_al(event, SubItem) -> - ?d("decode_al(event) -> entry with" - "~n SubItem: ~p", [SubItem]), - case SubItem of - [16#00, 16#04] -> "on"; - [16#00, 16#05] -> "of"; - [16#00, 16#06] -> "fl" - end; - -decode_al({event_parameter, Item}, SubItem) -> - ?d("decode_al({event_parameter,~p}) -> entry with" - "~n SubItem: ~p", [Item, SubItem]), - case Item of - [16#00,16#04] -> %% Event: on - case SubItem of - [16#00, 16#01] -> "strict"; - [16#00, 16#02] -> "init" - end; - [16#00,16#05] -> %% Event: of - case SubItem of - [16#00, 16#01] -> "strict"; - [16#00, 16#02] -> "init" - end; - [16#00,16#06] -> %% Event: fl - case SubItem of - [16#00, 16#04] -> "mindur"; - [16#00, 16#05] -> "maxdur" - end - end; - -decode_al(signal, SubItem) -> - ?d("decode_al(signal) -> entry with" - "~n SubItem: ~p", [SubItem]), - case SubItem of - [16#00, 16#02] -> "ri" - end; - -decode_al({signal_parameter, Item}, SubItem) -> - ?d("decode_al({signal_parameter,~p}) -> entry with" - "~n SubItem: ~p", [Item, SubItem]), - case Item of - [16#00,16#02] -> %% Event: ri - case SubItem of - [16#00, 16#06] -> "cad"; - [16#00, 16#07] -> "freq" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: ct - Basic Continuity Package -%% Version: 1 -%% Extends: None -%% Purpose: This package defines events and signals for continuity test. -%% The continuity test includes provision of either a loopback -%% or transceiver functionality. -%%---------------------------------------------------------------------- - -capabilities_ct() -> - [ - {event, "cmp"}, - {signal, "ct"}, - {signal, "rsp"} - ]. - -encode_ct(event, Item) -> - case Item of - "cmp" -> [16#00, 16#05] - end; -encode_ct({event_parameter, Item}, SubItem) -> - case Item of - "cmp" -> - case SubItem of - "res" -> [16#00, 16#08] - end - end; -encode_ct(signal, Item) -> - case Item of - "ct" -> [16#00, 16#03]; - "rsp" -> [16#00, 16#04] - end. - -decode_ct(event, Item) -> - case Item of - [16#00, 16#05] -> "cmp" - end; -decode_ct({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#05] -> % Event cmp - case SubItem of - [16#00, 16#08] -> "res" - end - end; -decode_ct(signal, Item) -> - case Item of - [16#00, 16#03] -> "ct"; - [16#00, 16#04] -> "rsp" - end. - -%%---------------------------------------------------------------------- -%% Name: nt - Network Package -%% Version: 1 -%% Extends: None -%% Purpose: This package defines properties of network terminations -%% independent of network type. -%%---------------------------------------------------------------------- - -capabilities_nt() -> - [ - {property, "jit"}, - {event, "netfail"}, - {event, "qualert"}, - {statistics, "dur"}, - {statistics, "os"}, - {statistics, "or"} - ]. - -encode_nt(property, Item) -> - case Item of - "jit" -> [16#00, 16#07] - end; -encode_nt(event, Item) -> - case Item of - "netfail" -> [16#00, 16#05]; - "qualert" -> [16#00, 16#06] - end; -encode_nt({event_parameter, Item}, SubItem) -> - case Item of - "netfail" -> - case SubItem of - "cs" -> [16#00, 16#01] - end; - "qualert" -> - case SubItem of - "th" -> [16#00, 16#01] - end - end; -encode_nt(statistics, Item) -> - case Item of - "dur" -> [16#00, 16#01]; - "os" -> [16#00, 16#02]; - "or" -> [16#00, 16#03] - end. - -decode_nt(property, Item) -> - case Item of - [16#00, 16#07] -> "jit" - end; -decode_nt(event, Item) -> - case Item of - [16#00, 16#05] -> "netfail"; - [16#00, 16#06] -> "qualert" - end; -decode_nt({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#05] -> % Event netfail - case SubItem of - [16#00, 16#01] -> "cs" - end; - [16#00, 16#06] -> % Event qualert - case SubItem of - [16#00, 16#01] -> "th" - end - end; -decode_nt(statistics, Item) -> - case Item of - [16#00, 16#01] -> "dur"; - [16#00, 16#02] -> "os"; - [16#00, 16#03] -> "or" - end. - -%%---------------------------------------------------------------------- -%% Name: rtp - RTP Package -%% Version: 1 -%% Extends: nt version 1 -%% Purpose: This package is used to support packet based multimedia -%% data transfer by means of the Real-time Transport Protocol -%% (RTP) [RFC 1889]. -%%---------------------------------------------------------------------- - -capabilities_rtp() -> - [ - {event, "pltrans"}, - {statistics, "ps"}, - {statistics, "pr"}, - {statistics, "pl"}, - {statistics, "jit"}, - {statistics, "delay"} - ]. - -encode_rtp(event, Item) -> - case Item of - "pltrans" -> [16#00, 16#01] - end; -encode_rtp({event_parameter, Item}, SubItem) -> - case Item of - "pltrans" -> - case SubItem of - "rtppltype" -> [16#00, 16#01] - end - end; -encode_rtp(statistics, Item) -> - case Item of - "ps" -> [16#00, 16#04]; - "pr" -> [16#00, 16#05]; - "pl" -> [16#00, 16#06]; - "jit" -> [16#00, 16#07]; - "delay" -> [16#00, 16#08] - end. - -decode_rtp(event, Item) -> - case Item of - [16#00, 16#01] -> "pltrans" - end; -decode_rtp({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#01] -> % Event pltrans - case SubItem of - [16#00, 16#01] -> "rtppltype" - end - end; -decode_rtp(statistics, Item) -> - case Item of - [16#00, 16#04] -> "ps"; - [16#00, 16#05] -> "pr"; - [16#00, 16#06] -> "pl"; - [16#00, 16#07] -> "jit"; - [16#00, 16#08] -> "delay" - end. - - -%%---------------------------------------------------------------------- -%% Name: tdmc - TDM Circuit Package -%% Version: 1 -%% Extends: nt version 1 -%% Purpose: This package is used to support TDM circuit terminations. -%%---------------------------------------------------------------------- - -capabilities_tdmc() -> - [ - {property, "ec"}, - {property, "gain"} - ]. - -encode_tdmc(Scope, Item) -> - case Scope of - property -> - case Item of - "ec" -> [16#00, 16#08]; - "gain" -> [16#00, 16#0a] - end - end. - -decode_tdmc(Scope, Item) -> - case Scope of - property -> - case Item of - [16#00, 16#08] -> "ec"; - [16#00, 16#0a] -> "gain" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: swb - SwitchBoard Package -%% Version: 1 -%% Extends: none -%% Purpose: This package is used to support SwitchBoard specials -%%---------------------------------------------------------------------- - -capabilities_swb() -> - [ - {statistics, "fs"}, % Free slots - {statistics, "as"} % Allocated slots - ]. - -encode_swb(Scope, Item) -> - case Scope of - statistics -> - case Item of - "fs" -> [16#00, 16#00]; - "as" -> [16#00, 16#01] - end - end. - -decode_swb(Scope, Item) -> - case Scope of - statistics -> - case Item of - [16#00, 16#00] -> "fs"; - [16#00, 16#01] -> "as" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: native - Pseudo package -%% Version: 1 -%% Extends: None -%% Purpose: Native tags for media stream properties -%% -%% Parameters for Local descriptors and Remote descriptors are -%% specified as tag-value pairs if binary encoding is used for the -%% protocol. This annex contains the property names (PropertyID), the -%% tags (Property Tag), type of the property (Type) and the values -%% (Value).Values presented in the Value field when the field contains -%% references shall be regarded as "information". The reference -%% contains the normative values. If a value field does not contain a -%% reference then the values in that field can be considered as -%% "normative". -%% -%% Tags are given as hexadecimal numbers in this annex. When setting -%% the value of a property, a MGC may underspecify the value according -%% to one of the mechanisms specified in section 7.1.1. -%% -%% For type "enumeration" the value is represented by the value in brack- -%% ets, e.g., Send(0), Receive(1). -%%---------------------------------------------------------------------- -%% -%% C.6. IP -%% -%% ________________________________________________________________ -%% | PropertyID| Tag | Type | Value | -%% | IPv4 | 6001 | 32 BITS | Ipv4Address | -%% | IPv6 | 6002 | 128 BITS | IPv6 Address | -%% | Port | 6003 | Unsigned Int| Port | -%% | Porttype | 6004 | Enumerated | TCP(0),UDP(1),SCTP(2)| -%% |___________|____________|______________|_______________________| -%% -%% -%% C.11. SDP Equivalents -%% -%% ______________________________________________________________ -%% | PropertyID| Tag | Type | Value | -%% | SDP_V | B001| STRING| Protocol Version | -%% | SDP_O | B002| STRING| Owner-creator and session ID | -%% | SDP_S | B003| STRING| Sesson name | -%% | SDP_I | B004| STRING| Session identifier | -%% | SDP_U | B005| STRING| URI of descriptor | -%% | SDC_E | B006| STRING| email address | -%% | SDP_P | B007| STRING| phone number | -%% | SDP_C | B008| STRING| Connection information | -%% | SDP_B | B009| STRING| Bandwidth Information | -%% | SDP_Z | B00A| STRING| time zone adjustment | -%% | SDP_K | B00B| STRING| Encryption Key | -%% | SDP_A | B00C| STRING| Zero or more session attributes| -%% | SDP_T | B00D| STRING| Active Session Time | -%% | SDP_R | B00E| STRING| Zero or more repeat times | -%% | SDP_M | B00F| STRING| Media name and transport addr | -%% | | | | Reference: IETF RFC 2327 | -%% |___________|______|________|_________________________________| -%% -%%---------------------------------------------------------------------- - -capabilities_native() -> - [ - %% C.6. IP - {property, "IPv4"}, - {property, "IPv6"}, - {property, "Port"}, - {property, "Porttype"}, - - %% C.11. SDP Equivalents - {property, "v"}, - {property, "o"}, - {property, "s"}, - {property, "i"}, - {property, "u"}, - {property, "e"}, - {property, "p"}, - {property, "c"}, - {property, "b"}, - {property, "z"}, - {property, "k"}, - {property, "a"}, - {property, "t"}, - {property, "r"}, - {property, "m"} - ]. - -encode_native(Scope, Item) -> - case Scope of - property -> - case Item of - %% IP - "IPv4" -> [16#60, 16#01]; - "IPv6" -> [16#60, 16#02]; - "Port" -> [16#60, 16#03]; - "Porttype" -> [16#60, 16#04]; - - %% SDP - "v" -> [16#b0, 16#01]; - "o" -> [16#b0, 16#02]; - "s" -> [16#b0, 16#03]; - "i" -> [16#b0, 16#04]; - "u" -> [16#b0, 16#05]; - "e" -> [16#b0, 16#06]; - "p" -> [16#b0, 16#07]; - "c" -> [16#b0, 16#08]; - "b" -> [16#b0, 16#09]; - "z" -> [16#b0, 16#0a]; - "k" -> [16#b0, 16#0b]; - "a" -> [16#b0, 16#0c]; - "t" -> [16#b0, 16#0d]; - "r" -> [16#b0, 16#0e]; - "m" -> [16#b0, 16#0f] - end - end. - -decode_native(Scope, [Type, Item]) -> - case Scope of - property -> - case Type of - 16#60 -> - case Item of - 16#01 -> "IPv4"; - 16#02 -> "IPv6"; - 16#03 -> "Port"; - 16#04 -> "Porttype" - end; - - 16#b0 -> - case Item of - 16#01 -> "v"; - 16#02 -> "o"; - 16#03 -> "s"; - 16#04 -> "i"; - 16#05 -> "u"; - 16#06 -> "e"; - 16#07 -> "p"; - 16#08 -> "c"; - 16#09 -> "b"; - 16#0a -> "z"; - 16#0b -> "k"; - 16#0c -> "a"; - 16#0d -> "t"; - 16#0e -> "r"; - 16#0f -> "m" - end - end - end. - -%% ------------------------------------------------------------------- - -% error(Reason) -> -% erlang:error(Reason). - diff --git a/lib/megaco/src/binary/megaco_binary_name_resolver_prev3b.erl b/lib/megaco/src/binary/megaco_binary_name_resolver_prev3b.erl deleted file mode 100644 index bb04eee3c2..0000000000 --- a/lib/megaco/src/binary/megaco_binary_name_resolver_prev3b.erl +++ /dev/null @@ -1,2009 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2005-2020. All Rights Reserved. -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. -%% -%% %CopyrightEnd% -%% - -%% -%%---------------------------------------------------------------------- -%% Purpose: Handle meta data about packages -%% -%% DEPRECATED -%% DEPRECATED -%% DEPRECATED -%% -%%---------------------------------------------------------------------- - --module(megaco_binary_name_resolver_prev3b). - --include_lib("megaco/src/engine/megaco_message_internal.hrl"). --include_lib("megaco/src/app/megaco_internal.hrl"). - - --define(LOWER(Char), - if - Char >= $A, Char =< $Z -> - Char - ($A - $a); - true -> - Char - end). - --export([packages/0, - capabilities/0, - capabilities/1, - decode_name/3, - encode_name/3 - ]). - -encode_name(Config, term_id, TermId) -> - case megaco:encode_binary_term_id(Config, TermId) of - {ok, TermId2} -> - TermId2; - {error, _Reason} -> - exit({bad_term_id, TermId}) - end; -encode_name(_Config, Scope, Item) -> - ?d("encode_name(~p) -> entry with" - "~n Item: ~p", [Scope, Item]), - encode(Scope, Item). - -decode_name(Config, term_id, TermId) -> - case megaco:decode_binary_term_id(Config, TermId) of - {ok, TermId2} -> - TermId2; - {error, _Reason} -> - exit({bad_term_id, TermId}) - end; -decode_name(_Config, Scope, Item) -> - ?d("decode_name(~p) -> entry with" - "~n Item: ~p", [Scope, Item]), - decode(Scope, Item). - - - -%%---------------------------------------------------------------------- -%% 12.1.1 Package -%% -%% Overall description of the package, specifying: -%% -%% Package Name: only descriptive -%% -%% PackageID: is an identifier -%% -%% Description: is a description of the package -%% -%% Version: -%% -%% A new version of a package can only add additional Properties, -%% Events, Signals, Statistics and new possible values for an -%% existing parameter described in the original package. No -%% deletions or modifications shall be allowed. A version is an -%% integer in the range from 1 to 99. -%% -%% Designed to be extended only (Optional): Yes -%% -%% This indicates that the package has been expressly designed to -%% be extended by others, not to be directly referenced. For -%% example, the package may not have any function on its own or be -%% nonsensical on its own. The MG SHOULD NOT publish this PackageID -%% when reporting packages. -%% -%% Extends: existing package Descriptor -%% -%% A package may extend an existing package. The version of the -%% original package must be specified. When a package extends -%% another package it shall only add additional Properties, Events, -%% Signals, Statistics and new possible values for an existing -%% parameter described in the original package. An extended package -%% shall not redefine or overload an identifier defined in the -%% original package and packages it may have extended (multiple -%% levels of extension). Hence, if package B version 1 extends -%% package A version 1, version 2 of B will not be able to extend -%% the A version 2 if A version 2 defines a name already in B -%% version 1. If the package does not extend another package, it -%% shall specify "none". -%% -%% -%% 12.1.2 Properties -%% -%% Properties defined by the package, specifying: -%% -%% Property Name: only descriptive -%% -%% PropertyID: is an identifier -%% -%% Description: is a description of the function of the property -%% -%% Type: One of: -%% -%% Boolean -%% -%% String: UTF-8 string -%% -%% Octet String: A number of octets. See Annex A and B.3 for -%% encoding -%% -%% Integer: 4 byte signed integer -%% -%% Double: 8 byte signed integer -%% -%% Character: unicode UTF-8 encoding of a single letter. -%% Could be more than one octet. -%% -%% Enumeration: one of a list of possible unique values (see 12.3) -%% -%% Sub-list: a list of several values from a list. -%% The type of sub-list SHALL also be specified. -%% The type shall be chosen from the types specified in -%% this section (with the exception of sub-list). For -%% example, Type: sub-list of enumeration. The encoding -%% of sub-lists is specified in Annexes A and B.3. -%% -%% Possible values: -%% -%% A package MUST specify either a specific set of values or a -%% description of how values are determined. A package MUST also -%% specify a default value or the default behaviour when the value -%% is omitted from its descriptor. For example, a package may -%% specify that procedures related to the property are suspended -%% when its value is omitted. -%% -%% Default: -%% -%% A default value (but not procedures) may be specified as -%% provisionable. -%% -%% Defined in: -%% -%% Which H.248.1 descriptor the property is defined in. -%% LocalControl is for stream-dependent properties. -%% TerminationState is for stream-independent properties. -%% ContextAttribute is for properties that affect the context as -%% a whole, i.e., mixing properties. These are expected to be the -%% most common cases, but it is possible for properties to be -%% defined in other descriptors. Context properties MUST be defined -%% in the ContextAttribute descriptor. -%% -%% Characteristics: Read/Write or both, and (optionally), global: -%% -%% Indicates whether a property is read-only, or read-write, and -%% if it is global. If Global is omitted, the property is not -%% global. If a property is declared as global, the value of the -%% property is shared by all Terminations realizing the package. -%% If a context property is declared as global, the property is -%% shared by all contexts realizing the package. -%% -%% -%% 12.1.3 Events -%% -%% Events defined by the package, specifying: -%% -%% Event name: only descriptive -%% -%% EventID: is an identifier -%% -%% Description: a description of the function of the event -%% -%% EventsDescriptor Parameters: -%% -%% Parameters used by the MGC to configure the event, and found in -%% the EventsDescriptor. See 12.2. If there are no parameters for -%% the Events Descriptor, then "none" shall be specified. -%% -%% ObservedEventsDescriptor Parameters: -%% -%% Parameters returned to the MGC in Notify requests and in replies -%% to command requests from the MGC that audit -%% ObservedEventsDescriptor, and found in the -%% ObservedEventsDescriptor. See 12.2. If there are no parameters -%% for the ObservedEvents Descriptor, then 'none' shall be specified. -%% -%% -%% 12.1.4 Signals -%% -%% Signals defined by the package, specifying: -%% -%% Signal Name: only descriptive -%% -%% SignalID: is an identifier. SignalID is used in a SignalsDescriptor -%% -%% Description: a description of the function of the signal -%% -%% SignalType: one of: -%% -%% OO (On/Off) -%% -%% TO (TimeOut) -%% -%% BR (Brief) -%% -%% NOTE - SignalType may be defined such that it is dependent on -%% the value of one or more parameters. The package MUST specify a -%% default signal type. If the default type is TO, the package MUST -%% specify a default duration which may be provisioned. A default -%% duration is meaningless for BR. -%% -%% Duration: in hundredths of seconds -%% -%% Additional Parameters: see 12.2 -%% -%% -%% 12.1.5 Statistics -%% -%% Statistics defined by the package, specifying: -%% -%% Statistic name: only descriptive -%% -%% StatisticID: is an identifier -%% -%% StatisticID is used in a StatisticsDescriptor -%% -%% Description: a description of the statistic -%% -%% Type: One of: -%% -%% Boolean -%% -%% String: UTF-8 string -%% -%% Octet String: A number of octets. -%% See Annex A and Annex B.3 for encoding -%% -%% Integer: 4 byte signed integer -%% -%% Double: 8 byte signed integer -%% -%% Character: Unicode UTF-8 encoding of a single letter. -%% Could be more than one octet. -%% -%% Enumeration: One of a list of possible unique values (See 12.3) -%% -%% Sub-list: A list of several values from a list. -%% The type of sub-list SHALL also be specified. -%% The type shall be chosen from the types specified in -%% this section (with the exception of sub-list). -%% For example, Type: sub-list of enumeration. -%% The encoding of sub-lists is specified in Annexes A -%% and B.3. -%% -%% Possible Values: -%% -%% A package must indicate the unit of measure, e.g. milliseconds, -%% packets, either here or along with the type above, as well as -%% indicating any restriction on the range. -%% -%% Level: Specify if the statistic can be kept at the Termination -%% level, Stream level or Either. -%% -%% -%% 12.1.6 Error Codes -%% -%% If the package does not define any error codes, this section may be omitted. -%% Otherwise, it describes error codes defined by the package, specifying: -%% -%% Error Code #: The error code number. -%% -%% Name: Name of the error -%% -%% Definition: A description of the error code. -%% -%% Error Text in the Error Descriptor: -%% -%% A description of what text to return in the Error Descriptor. -%% -%% Comment: Any further comments on the use of the error code. -%% -%% -%% 12.1.7 Procedures -%% -%% Additional guidance on the use of the package. -%% -%% -%% 12.2 Guidelines to defining parameters to events and signals -%% -%% Parameter Name: only descriptive -%% -%% ParameterID: is an identifier. The textual ParameterID of -%% parameters to Events and Signals shall not start with "EPA" and -%% "SPA", respectively. The textual ParameterID shall also not be -%% "ST", "Stream", "SY", "SignalType", "DR", "Duration", "NC", -%% "NotifyCompletion", "KA", "KeepActive", "EB", "Embed", "DM", -%% "DigitMap", "DI", "Direction", "RQ" or "RequestID". -%% -%% Description: a description of the function of the parameter. -%% -%% Type: One of: -%% -%% Boolean -%% -%% String: UTF-8 octet string -%% -%% Octet String: A number of octets. See Annex A and B.3 for -%% encoding -%% -%% Integer: 4-octet signed integer -%% -%% Double: 8-octet signed integer -%% -%% Character: Unicode UTF-8 encoding of a single letter. Could be -%% more than one octet. -%% -%% Enumeration: one of a list of possible unique values (see 12.3) -%% -%% Sub-list: a list of several values from a list (not supported -%% for statistics). The type of sub-list SHALL also be -%% specified The type shall be chosen from the types -%% specified in this section (with the exception of -%% sub-list). For example, Type: sub-list of enumeration. -%% The encoding of sub-lists is specified in Annex A -%% and B.3. -%% -%% Optional: Yes/No -%% -%% Describes if the parameter may be omitted from the signal or -%% event. -%% -%% Possible values: -%% -%% A package MUST specify either a specific set of values or a -%% description of how values are determined. A package MUST -%% also specify a default value or the default behavior when the -%% value is omitted from its descriptor. For example, a package -%% may specify that procedures related to the parameter are -%% suspended when its value is omitted. -%% -%% Default: -%% -%% A default value (but not procedures) may be specified as -%% provisionable. -%% -%% -%% 12.3 Lists -%% -%% Possible values for parameters include enumerations. Enumerations may be -%% defined in a list. It is recommended that the list be IANA registered so -%% that packages that extend the list can be defined without concern for -%% conflicting names. -%% -%% -%% 12.4 Identifiers -%% -%% Identifiers in text encoding shall be strings of up to 64 characters, -%% containing no spaces, starting with an alphabetic character and consisting -%% of alphanumeric characters and/or digits, and possibly including the -%% special character underscore ("_"). -%% -%% Identifiers in binary encoding are 2 octets long. -%% -%% Both text and binary values shall be specified for each identifier, -%% including identifiers used as values in enumerated types. -%% -%% -%% 12.5 Package registration -%% -%% A package can be registered with IANA for interoperability reasons. See -%% clause 14 for IANA considerations. -%% -%%---------------------------------------------------------------------- - -capabilities() -> - [{P, capabilities(P)} || P <- packages()]. - -%% -record(property, {name, type, values, defined_in, characteristics}). - -%%---------------------------------------------------------------------- -%% List all known packages -%% 'native' and 'all' are not real packages -%%---------------------------------------------------------------------- - -packages() -> - [ - "g", % Generic - "root", % Base Root Package - "tonegen", % Tone Generator Package - "tonedet", % Tone Detection Package - "dg", % Basic DTMF Generator Package - "dd", % DTMF detection Package - "cg", % Call Progress Tones Generator Package - "cd", % Call Progress Tones Detection Package - "al", % Analog Line Supervision Package - "ct", % Basic Continuity Package - "nt", % Network Package - "rtp", % RTP Package - "swb", % SwitchBoard Package - "tdmc", % TDM Circuit Package - "" % Native pseudo package - ]. - -%%---------------------------------------------------------------------- -%% List all matching capabilities -%%---------------------------------------------------------------------- - -capabilities(Package) -> - case Package of - "g" -> capabilities_g(); - "root" -> capabilities_root(); - "tonegen" -> capabilities_tonegen(); - "tonedet" -> capabilities_tonedet(); - "dg" -> capabilities_dg(); - "dd" -> capabilities_dd(); - "cg" -> capabilities_cg(); - "cd" -> capabilities_cd(); - "al" -> capabilities_al(); - "ct" -> capabilities_ct(); - "nt" -> capabilities_nt(); - "rtp" -> capabilities_rtp(); - "swb" -> capabilities_swb(); - "tdmc" -> capabilities_tdmc(); - "" -> capabilities_native() - end. - -%%---------------------------------------------------------------------- -%% Decode package name to internal form -%% Scope ::= property | event | signal | statistics -%%---------------------------------------------------------------------- - -decode(mid, Package) -> - decode_mid(Package); -decode(package, Package) -> - decode_package(Package); -decode(profile, Package) -> - decode_profile(Package); -decode(dialplan, Dialplan) -> - decode_dialplan(Dialplan); -decode(Scope, [A, B | Item]) when is_atom(Scope) -> - ?d("decode(~p) -> entry with" - "~n A: ~p" - "~n B: ~p" - "~n Item: ~p", [Scope, A, B, Item]), - case decode_package([A, B]) of - "" -> - ?d("decode -> \"no\" package",[]), - decode_item(Scope, [A, B], Item); - Package -> - ?d("decode -> Package: ~p", [Package]), - Package ++ "/" ++ decode_item(Scope, [A, B], Item) - end; -decode({Scope, [A, B | Item]}, SubItem) when is_atom(Scope) -> - ?d("decode(~p) -> entry with" - "~n A: ~p" - "~n B: ~p" - "~n Item: ~p" - "~n SubItem: ~p", [Scope, A, B, Item, SubItem]), - decode_item({Scope, Item}, [A, B], SubItem). - -decode_item(Scope, [A, B], Item) -> - ?d("decode_item -> entry",[]), - case A of - 16#00 -> - case B of - 16#01 -> decode_g(Scope, Item); - 16#02 -> decode_root(Scope, Item); - 16#03 -> decode_tonegen(Scope, Item); - 16#04 -> decode_tonedet(Scope, Item); - 16#05 -> decode_dg(Scope, Item); - 16#06 -> decode_dd(Scope, Item); - 16#07 -> decode_cg(Scope, Item); - 16#08 -> decode_cd(Scope, Item); - 16#09 -> decode_al(Scope, Item); - 16#0a -> decode_ct(Scope, Item); - 16#0b -> decode_nt(Scope, Item); - 16#0c -> decode_rtp(Scope, Item); - 16#0d -> decode_tdmc(Scope, Item); - 16#00 -> decode_native(Scope, Item) - end; - 16#fe -> - case B of - %% Proprietary extension - 16#fe -> decode_swb(Scope, Item) - end; - 16#ff -> - case B of - 16#ff when Item =:= [16#ff, 16#ff] -> "*" - end - end. - -decode_package(Package) -> - ?d("decode_package -> entry with" - "~n Package: ~p", [Package]), - [A, B] = Package, - case A of - 16#00 -> - case B of - 16#01 -> "g"; - 16#02 -> "root"; - 16#03 -> "tonegen"; - 16#04 -> "tonedet"; - 16#05 -> "dg"; - 16#06 -> "dd"; - 16#07 -> "cg"; - 16#08 -> "cd"; - 16#09 -> "al"; - 16#0a -> "ct"; - 16#0b -> "nt"; - 16#0c -> "rtp"; - 16#0d -> "tdmc"; - 16#00 -> "" - end; - 16#fe -> - case B of - 16#fe -> "swb" - end; - 16#ff -> - case B of - 16#ff -> "*" - end - end. - -decode_profile([A, B]) -> - case A of - 16#00 -> - case B of - 16#fe -> "resgw"; - _ -> "profile" ++ [A + $0, B + $0] - end; - _ -> - "profile" ++ [A + $0, B + $0] - end. - -decode_dialplan([A, B]) -> - "dialplan" ++ [A + $0, B + $0]. - -decode_mid(Mid) -> - case Mid of - {domainName, DN} -> - Lower = to_lower(DN#'DomainName'.name), - {domainName, DN#'DomainName'{name = Lower}}; - {deviceName, PathName} -> - Lower = to_lower(PathName), - {deviceName, Lower}; - Other -> - Other - end. - -to_lower(Chars) -> - [?LOWER(Char) || Char <- Chars]. - -%%---------------------------------------------------------------------- -%% Encode package name from internal form -%% Scope ::= property | event | signal | statistics -%%---------------------------------------------------------------------- - -encode(mid, Package) -> - encode_mid(Package); -encode(package, Package) -> - encode_package(Package); -encode(profile, Profile) -> - encode_profile(Profile); -encode(dialplan, Dialplan) -> - encode_dialplan(Dialplan); -encode(Scope, PackageItem) when is_atom(Scope) -> - ?d("encode(~p) -> entry with" - "~n PackageItem: ~p", [Scope, PackageItem]), - case string:tokens(PackageItem, [$/]) of - [Package, Item] -> - ?d("encode -> " - "~n Package: ~p" - "~n Item: ~p", [Package, Item]), - encode_package(Package) ++ encode_item(Scope, Package, Item); - [Item] -> - ?d("encode -> Item: ~p", [Item]), - [16#00, 16#00 | encode_native(Scope, Item)] - end; -encode({Scope, PackageItem}, SubItem) when is_atom(Scope) -> - ?d("encode(~p) -> entry with" - "~n PackageItem: ~p" - "~n SubItem: ~p", [Scope, PackageItem, SubItem]), - case string:tokens(PackageItem, [$/]) of - [Package, Item] -> - ?d("encode -> " - "~n Package: ~p" - "~n Item: ~p", [Package, Item]), - encode_item({Scope, Item}, Package, SubItem); - [_Item] -> - ?d("encode -> _Item: ~p", [_Item]), - encode_native(Scope, SubItem) - end. - -encode_item(_Scope, _Package, "*") -> - [16#ff, 16#ff]; -encode_item(Scope, Package, Item) -> - ?d("encode_item(~s) -> entry", [Package]), - case Package of - "g" -> encode_g(Scope, Item); - "root" -> encode_root(Scope, Item); - "tonegen" -> encode_tonegen(Scope, Item); - "tonedet" -> encode_tonedet(Scope, Item); - "dg" -> encode_dg(Scope, Item); - "dd" -> encode_dd(Scope, Item); - "cg" -> encode_cg(Scope, Item); - "cd" -> encode_cd(Scope, Item); - "al" -> encode_al(Scope, Item); - "ct" -> encode_ct(Scope, Item); - "nt" -> encode_nt(Scope, Item); - "rtp" -> encode_rtp(Scope, Item); - "tdmc" -> encode_tdmc(Scope, Item); - "swb" -> encode_swb(Scope, Item) - end. - -encode_package(Package) -> - case Package of - "g" -> [16#00, 16#01]; - "root" -> [16#00, 16#02]; - "tonegen" -> [16#00, 16#03]; - "tonedet" -> [16#00, 16#04]; - "dg" -> [16#00, 16#05]; - "dd" -> [16#00, 16#06]; - "cg" -> [16#00, 16#07]; - "cd" -> [16#00, 16#08]; - "al" -> [16#00, 16#09]; - "ct" -> [16#00, 16#0a]; - "nt" -> [16#00, 16#0b]; - "rtp" -> [16#00, 16#0c]; - "tdmc" -> [16#00, 16#0d]; - "" -> [16#00, 16#00]; - "*" -> [16#ff, 16#ff]; - "swb" -> [16#fe, 16#fe] - end. - -encode_profile(Profile) -> - case Profile of - "resgw" -> - [16#00, 16#fe]; - [$p, $r, $o, $f, $i, $l, $e | Name] -> - case Name of - [A, B] -> [A - $0, B - $0]; - [B] -> [0, B - $0]; - [] -> [0, 0] - end - end. - -encode_dialplan(Dialplan) -> - case Dialplan of - [$d, $i, $a, $l, $p, $l, $a, $n | Name] -> - case Name of - [A, B] -> [A - $0, B - $0]; - [B] -> [0, B - $0]; - [] -> [0, 0] - end - end. - -encode_mid(Mid) -> - Mid. - - -%%---------------------------------------------------------------------- -%% Name: g - Generic -%% Version: 1 -%% Extends: None -%% Purpose: Generic package for commonly encountered items -%%---------------------------------------------------------------------- - -capabilities_g() -> - [ - {event, "cause"}, - {event, "sc"} - ]. - -encode_g(event, Item) -> - case Item of - "cause" -> [16#00, 16#01]; - "sc" -> [16#00, 16#02] - end; - -encode_g({event_parameter, Item}, SubItem) -> - case Item of - "cause" -> - case SubItem of - "Generalcause" -> [16#00, 16#01]; - "Failurecause" -> [16#00, 16#02] - end; - "sc" -> - case SubItem of - "SigID" -> [16#00, 16#01]; - "Meth" -> [16#00, 16#02]; - "SLID" -> [16#00, 16#03]; - "RID" -> [16#00, 16#04] - end - end. - -decode_g(event, Item) -> - case Item of - [16#00, 16#01] -> "cause"; - [16#00, 16#02] -> "sc" - end; - -decode_g({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#01] -> % Event: cause - case SubItem of - [16#00, 16#01] -> "Generalcause"; - [16#00, 16#02] -> "Failurecause" - end; - - [16#00, 16#02] -> % Event: sc - case SubItem of - [16#00, 16#01] -> "SigID"; - [16#00, 16#02] -> "Meth"; - [16#00, 16#03] -> "SLID"; - [16#00, 16#04] -> "RID" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: root - Base Root Package -%% Version: 2 -%% Extends: None -%% Purpose: This package defines Gateway wide properties. -%%---------------------------------------------------------------------- - -capabilities_root() -> - [ - {property, "maxNumberOfContexts"}, - {property, "maxTerminationsPerContext"}, - {property, "normalMGExecutionTime"}, - {property, "normalMGCExecutionTime"}, - {property, "MGProvisionalResponseTimerValue"}, - {property, "MGCProvisionalResponseTimerValue"}, - {property, "MGCOriginatedPendingLimit"}, - {property, "MGOriginatedPendingLimit"} - ]. - -encode_root(Scope, Item) -> - case Scope of - property -> - case Item of - "maxNumberOfContexts" -> [16#00, 16#01]; - "maxTerminationsPerContext" -> [16#00, 16#02]; - "normalMGExecutionTime" -> [16#00, 16#03]; - "normalMGCExecutionTime" -> [16#00, 16#04]; - "MGProvisionalResponseTimerValue" -> [16#00, 16#05]; - "MGCProvisionalResponseTimerValue" -> [16#00, 16#06]; - "MGCOriginatedPendingLimit" -> [16#00, 16#07]; - "MGOriginatedPendingLimit" -> [16#00, 16#08] - end - end. - -decode_root(Scope, Item) -> - case Scope of - property -> - case Item of - [16#00, 16#01] -> "maxNumberOfContexts"; - [16#00, 16#02] -> "maxTerminationsPerContext"; - [16#00, 16#03] -> "normalMGExecutionTime"; - [16#00, 16#04] -> "normalMGCExecutionTime"; - [16#00, 16#05] -> "MGProvisionalResponseTimerValue"; - [16#00, 16#06] -> "MGCProvisionalResponseTimerValue"; - [16#00, 16#07] -> "MGCOriginatedPendingLimit"; - [16#00, 16#08] -> "MGOriginatedPendingLimit" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: tonegen - Tone Generator Package -%% Version: 2 -%% Extends: None -%% Purpose: This package defines signals to generate audio tones. -%% This package does not specify parameter values. It is -%% intended to be extendable. Generally, tones are defined -%% as an individual signal with a parameter, ind, -%% representing "interdigit" time delay, and a tone id to -%% be used with playtones. A tone id should be kept -%% consistent with any tone generation for the same tone. -%% MGs are expected to be provisioned with the characteristics -%% of appropriate tones for the country in which the MG is located. -%%---------------------------------------------------------------------- - -capabilities_tonegen() -> - [ - {signal, "pt"} - ]. - -encode_tonegen(signal, Item) -> - case Item of - "pt" -> [16#00, 16#01] - end; - -encode_tonegen({signal_parameter, Item}, SubItem) -> - case Item of - "pt" -> - case SubItem of - "tl" -> [16#00, 16#01]; - "ind" -> [16#00, 16#02]; - "btd" -> [16#00, 16#03] - end - end. - -decode_tonegen(signal, Item) -> - case Item of - [16#00, 16#01] -> "pt" - end; - -decode_tonegen({signal_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#01] -> % Event: pt - case SubItem of - [16#00, 16#01] -> "tl"; - [16#00, 16#02] -> "ind"; - [16#00, 16#03] -> "btd" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: tonedet - Tone Detection Package -%% Version: 1 -%% Extends: None -%% Purpose: This Package defines events for audio tone detection. -%% Tones are selected by name (tone id). MGs are expected -%% to be provisioned with the characteristics of appropriate -%% tones for the country in which the MG is located. -%% -%% This package does not specify parameter values. -%% It is intended to be extendable. -%%---------------------------------------------------------------------- - -capabilities_tonedet() -> - [ - {event, "std"}, - {event, "etd"}, - {event, "ltd"} - ]. - -encode_tonedet(event, Item) -> - case Item of - "std" -> [16#00, 16#01]; - "etd" -> [16#00, 16#02]; - "ltd" -> [16#00, 16#03] - end; - -encode_tonedet({event_parameter, Item}, SubItem) -> - case Item of - "std" -> - case SubItem of - "tl" -> [16#00, 16#01]; - "tid" -> [16#00, 16#03] - end; - "etd" -> - case SubItem of - "tl" -> [16#00, 16#01]; - "tid" -> [16#00, 16#03]; - "dur" -> [16#00, 16#02] - end; - "ltd" -> - case SubItem of - "tl" -> [16#00, 16#01]; - "dur" -> [16#00, 16#02]; - "tid" -> [16#00, 16#03] - end - end. - -decode_tonedet(event, Item) -> - case Item of - [16#00, 16#01] -> "std"; - [16#00, 16#02] -> "etd"; - [16#00, 16#03] -> "ltd" - end; - -decode_tonedet({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#01] -> % Event std - case SubItem of - [16#00, 16#01] -> "tl"; - [16#00, 16#03] -> "tid" - end; - [16#00, 16#02] -> % Event etd - case SubItem of - [16#00, 16#01] -> "tl"; - [16#00, 16#03] -> "tid"; - [16#00, 16#02] -> "dur" - end; - [16#00, 16#03] -> % Event ltd - case SubItem of - [16#00, 16#01] -> "tl"; - [16#00, 16#02] -> "dur"; - [16#00, 16#03] -> "tid" - end - end. - -%%---------------------------------------------------------------------- -%% Name: dg - Basic DTMF Generator Package -%% Version: 1 -%% Extends: tonegen version 1 -%% Purpose: This package defines the basic DTMF tones as signals and -%% extends the allowed values of parameter tl of playtone -%% in tonegen. -%%---------------------------------------------------------------------- - -capabilities_dg() -> - [ - {signal, "d0"}, - {signal, "d1"}, - {signal, "d2"}, - {signal, "d3"}, - {signal, "d4"}, - {signal, "d5"}, - {signal, "d6"}, - {signal, "d7"}, - {signal, "d8"}, - {signal, "d9"}, - {signal, "ds"}, - {signal, "do"}, - {signal, "da"}, - {signal, "db"}, - {signal, "dc"}, - {signal, "dd"} - ]. - -encode_dg(signal, Item) -> - case Item of - "d0" -> [16#00, 16#10]; - "d1" -> [16#00, 16#11]; - "d2" -> [16#00, 16#12]; - "d3" -> [16#00, 16#13]; - "d4" -> [16#00, 16#14]; - "d5" -> [16#00, 16#15]; - "d6" -> [16#00, 16#16]; - "d7" -> [16#00, 16#17]; - "d8" -> [16#00, 16#18]; - "d9" -> [16#00, 16#19]; - "ds" -> [16#00, 16#20]; - "do" -> [16#00, 16#21]; - "da" -> [16#00, 16#1a]; - "db" -> [16#00, 16#1b]; - "dc" -> [16#00, 16#1c]; - "dd" -> [16#00, 16#1d] - end; - -encode_dg({signal_parameter, Item}, SubItem) -> - case Item of - "d0" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d1" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d2" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d3" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d4" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d5" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d6" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d7" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d8" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d9" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "ds" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "do" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "da" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "db" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "dc" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "dd" -> - case SubItem of - "btd" -> [16#00, 16#01] - end - end. - -decode_dg(signal, Item) -> - case Item of - [16#00, 16#10] -> "d0"; - [16#00, 16#11] -> "d1"; - [16#00, 16#12] -> "d2"; - [16#00, 16#13] -> "d3"; - [16#00, 16#14] -> "d4"; - [16#00, 16#15] -> "d5"; - [16#00, 16#16] -> "d6"; - [16#00, 16#17] -> "d7"; - [16#00, 16#18] -> "d8"; - [16#00, 16#19] -> "d9"; - [16#00, 16#20] -> "ds"; - [16#00, 16#21] -> "do"; - [16#00, 16#1a] -> "da"; - [16#00, 16#1b] -> "db"; - [16#00, 16#1c] -> "dc"; - [16#00, 16#1d] -> "dd" - end; - -decode_dg({signal_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#10] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#11] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#12] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#13] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#14] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#15] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#16] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#17] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#18] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#19] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#20] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#21] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1a] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1b] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1c] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1d] -> - case SubItem of - [16#00, 16#01] -> "btd" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: dd - DTMF detection Package -%% Version: 1 -%% Extends: tonedet version 1 -%% Purpose: This package defines the basic DTMF tones detection. -%% Tones are selected by name (tone id). MGs are expected -%% to be provisioned with the characteristics of appropriate -%% tones for the country in which the MG is located. -%% -%% This package does not specify parameter values. -%% It is intended to be extendable. -%% -%% Additional tone id values are all tone ids described in package dg -%% (basic DTMF generator package). -%% -%% The following table maps DTMF events to digit map symbols as described -%% in section 7.1.14. -%% -%% _________________________________ -%% | DTMF Event | Symbol | -%% | d0 | "0" | -%% | d1 | "1" | -%% | d2 | "2" | -%% | d3 | "3" | -%% | d4 | "4" | -%% | d5 | "5" | -%% | d6 | "6" | -%% | d7 | "7" | -%% | d8 | "8" | -%% | d9 | "9" | -%% | da | "A" or "a"| -%% | db | "B" or "b"| -%% | dc | "C" or "c"| -%% | dd | "D" or "d"| -%% | ds | "E" or "e"| -%% | do | "F" or "f"| -%% |___________________|____________| -%% -%%---------------------------------------------------------------------- - -capabilities_dd() -> - [ - {event, "ce"}, - {event, "d0"}, - {event, "d1"}, - {event, "d2"}, - {event, "d3"}, - {event, "d4"}, - {event, "d5"}, - {event, "d6"}, - {event, "d7"}, - {event, "d8"}, - {event, "d9"}, - {event, "ds"}, - {event, "do"}, - {event, "da"}, - {event, "db"}, - {event, "dc"}, - {event, "dd"} - ]. - -encode_dd(event, Item) -> - case Item of - "ce" -> [16#00, 16#04]; - "d0" -> [16#00, 16#10]; - "d1" -> [16#00, 16#11]; - "d2" -> [16#00, 16#12]; - "d3" -> [16#00, 16#13]; - "d4" -> [16#00, 16#14]; - "d5" -> [16#00, 16#15]; - "d6" -> [16#00, 16#16]; - "d7" -> [16#00, 16#17]; - "d8" -> [16#00, 16#18]; - "d9" -> [16#00, 16#19]; - "ds" -> [16#00, 16#20]; - "do" -> [16#00, 16#21]; - "da" -> [16#00, 16#1a]; - "db" -> [16#00, 16#1b]; - "dc" -> [16#00, 16#1c]; - "dd" -> [16#00, 16#1d] - end; - -encode_dd({event_parameter, Item}, SubItem) -> - case Item of - "ce" -> - case SubItem of - "ds" -> [16#00, 16#01]; - "Meth" -> [16#00, 16#03] - end; - "d0" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d1" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d2" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d3" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d4" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d5" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d6" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d7" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d8" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d9" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "ds" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "do" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "da" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "db" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "dc" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "dd" -> - case SubItem of - "btd" -> [16#00, 16#01] - end - end. - -decode_dd(event, Item) -> - case Item of - [16#00, 16#04] -> "ce"; - [16#00, 16#10] -> "d0"; - [16#00, 16#11] -> "d1"; - [16#00, 16#12] -> "d2"; - [16#00, 16#13] -> "d3"; - [16#00, 16#14] -> "d4"; - [16#00, 16#15] -> "d5"; - [16#00, 16#16] -> "d6"; - [16#00, 16#17] -> "d7"; - [16#00, 16#18] -> "d8"; - [16#00, 16#19] -> "d9"; - [16#00, 16#20] -> "ds"; - [16#00, 16#21] -> "do"; - [16#00, 16#1a] -> "da"; - [16#00, 16#1b] -> "db"; - [16#00, 16#1c] -> "dc"; - [16#00, 16#1d] -> "dd" - end; - -decode_dd({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#04] -> % Event ce - case SubItem of - [16#00, 16#01] -> "ds"; - [16#00, 16#03] -> "Meth" - end; - [16#00, 16#10] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#11] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#12] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#13] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#14] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#15] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#16] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#17] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#18] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#19] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#20] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#21] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1a] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1b] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1c] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1d] -> - case SubItem of - [16#00, 16#01] -> "btd" - end - end. - -%%---------------------------------------------------------------------- -%% Name: cg - Call Progress Tones Generator Package -%% Version: 1 -%% Extends: tonegen version 1 -%% Purpose: This package defines the basic call progress tones as signals -%% and extends the allowed values of the tl parameter of -%% playtone in tonegen. -%%---------------------------------------------------------------------- - -capabilities_cg() -> - [ - {signal, "dt"}, - {signal, "rt"}, - {signal, "bt"}, - {signal, "ct"}, - {signal, "sit"}, - {signal, "wt"}, - {signal, "prt"}, - {signal, "cw"}, - {signal, "cr"} - ]. - - -encode_cg(Scope, Item) -> - case Scope of - signal -> - case Item of - "dt" -> [16#00, 16#30]; - "rt" -> [16#00, 16#31]; - "bt" -> [16#00, 16#32]; - "ct" -> [16#00, 16#33]; - "sit" -> [16#00, 16#34]; - "wt" -> [16#00, 16#35]; - "prt" -> [16#00, 16#36]; - "cw" -> [16#00, 16#37]; - "cr" -> [16#00, 16#38] - end - end. - -decode_cg(Scope, Item) -> - case Scope of - signal -> - case Item of - [16#00, 16#30] -> "dt"; - [16#00, 16#31] -> "rt"; - [16#00, 16#32] -> "bt"; - [16#00, 16#33] -> "ct"; - [16#00, 16#34] -> "sit"; - [16#00, 16#35] -> "wt"; - [16#00, 16#36] -> "prt"; - [16#00, 16#37] -> "cw"; - [16#00, 16#38] -> "cr" - end - end. - -%%---------------------------------------------------------------------- -%% Name: cd - Call Progress Tones Detection Package -%% Version: 1 -%% Extends: tonedet version 1 -%% Purpose: This package defines the basic call progress detection tones. -%% This Package extends the possible values of tone id -%% in the "start tone detected", "end tone detected" and -%% "long tone detected" events. -%% Additional values -%% tone id values are defined for start tone detected, -%% end tone detected and long tone detected with -%% the same values as those in package cg (call -%% progress tones generation package). -%% -%% The required set of tone ids corresponds to Recommendation E.180/Q.35 -%% [ITU-T Recommendation E.180/Q.35 (1998)]. See Recommendation E.180/Q.35 -%% for definition of the meanings of these tones. -%%---------------------------------------------------------------------- - -capabilities_cd() -> - [ - {event, "dt"}, - {event, "rt"}, - {event, "bt"}, - {event, "ct"}, - {event, "sit"}, - {event, "wt"}, - {event, "prt"}, - {event, "cw"}, - {event, "cr"} - ]. - - -encode_cd(Scope, Item) -> - case Scope of - event -> - case Item of - "dt" -> [16#00, 16#30]; - "rt" -> [16#00, 16#31]; - "bt" -> [16#00, 16#32]; - "ct" -> [16#00, 16#33]; - "sit"-> [16#00, 16#34]; - "wt" -> [16#00, 16#35]; - "prt"-> [16#00, 16#36]; - "cw" -> [16#00, 16#37]; - "cr" -> [16#00, 16#38] - end - end. - -decode_cd(Scope, Item) -> - case Scope of - event -> - case Item of - [16#00, 16#30] -> "dt"; - [16#00, 16#31] -> "rt"; - [16#00, 16#32] -> "bt"; - [16#00, 16#33] -> "ct"; - [16#00, 16#34] -> "sit"; - [16#00, 16#35] -> "wt"; - [16#00, 16#36] -> "prt"; - [16#00, 16#37] -> "cw"; - [16#00, 16#38] -> "cr" - end - end. - -%%---------------------------------------------------------------------- -%% Name: al - Analog Line Supervision Package -%% Version: 1 -%% Extends: None -%% Purpose: This package defines events and signals for an analog line. -%%---------------------------------------------------------------------- - -capabilities_al() -> - [ - {event, "on"}, - {event, "of"}, - {event, "fl"}, - {signal, "ri"} - ]. - -encode_al(event, Item) -> - ?d("encode_al(event) -> entry with" - "~n Item: ~p", [Item]), - case Item of - "on" -> [16#00, 16#04]; - "of" -> [16#00, 16#05]; - "fl" -> [16#00, 16#06] - end; - -encode_al({event_parameter, Item}, SubItem) -> - ?d("encode_al({event_parameter,~p}) -> entry with" - "~n SubItem: ~p", [Item, SubItem]), - case Item of - "on" -> - case SubItem of - "strict" -> [16#00, 16#01]; - "init" -> [16#00, 16#02] - end; - "of" -> - case SubItem of - "strict" -> [16#00, 16#01]; - "init" -> [16#00, 16#02] - end; - "fl" -> - case SubItem of - "mindur" -> [16#00, 16#04]; - "maxdur" -> [16#00, 16#05] - end - end; - -encode_al(signal, Item) -> - ?d("encode_al(signal) -> entry with" - "~n Item: ~p", [Item]), - case Item of - "ri" -> [16#00, 16#02] - end; - -encode_al({signal_parameter, Item}, SubItem) -> - ?d("encode_al({signal_parameter,~p}) -> entry with" - "~n SubItem: ~p", [Item, SubItem]), - case Item of - "ri" -> - case SubItem of - "cad" -> [16#00, 16#06]; - "freq" -> [16#00, 16#07] - end - end. - -decode_al(event, SubItem) -> - ?d("decode_al(event) -> entry with" - "~n SubItem: ~p", [SubItem]), - case SubItem of - [16#00, 16#04] -> "on"; - [16#00, 16#05] -> "of"; - [16#00, 16#06] -> "fl" - end; - -decode_al({event_parameter, Item}, SubItem) -> - ?d("decode_al({event_parameter,~p}) -> entry with" - "~n SubItem: ~p", [Item, SubItem]), - case Item of - [16#00,16#04] -> %% Event: on - case SubItem of - [16#00, 16#01] -> "strict"; - [16#00, 16#02] -> "init" - end; - [16#00,16#05] -> %% Event: of - case SubItem of - [16#00, 16#01] -> "strict"; - [16#00, 16#02] -> "init" - end; - [16#00,16#06] -> %% Event: fl - case SubItem of - [16#00, 16#04] -> "mindur"; - [16#00, 16#05] -> "maxdur" - end - end; - -decode_al(signal, SubItem) -> - ?d("decode_al(signal) -> entry with" - "~n SubItem: ~p", [SubItem]), - case SubItem of - [16#00, 16#02] -> "ri" - end; - -decode_al({signal_parameter, Item}, SubItem) -> - ?d("decode_al({signal_parameter,~p}) -> entry with" - "~n SubItem: ~p", [Item, SubItem]), - case Item of - [16#00,16#02] -> %% Event: ri - case SubItem of - [16#00, 16#06] -> "cad"; - [16#00, 16#07] -> "freq" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: ct - Basic Continuity Package -%% Version: 1 -%% Extends: None -%% Purpose: This package defines events and signals for continuity test. -%% The continuity test includes provision of either a loopback -%% or transceiver functionality. -%%---------------------------------------------------------------------- - -capabilities_ct() -> - [ - {event, "cmp"}, - {signal, "ct"}, - {signal, "rsp"} - ]. - -encode_ct(event, Item) -> - case Item of - "cmp" -> [16#00, 16#05] - end; -encode_ct({event_parameter, Item}, SubItem) -> - case Item of - "cmp" -> - case SubItem of - "res" -> [16#00, 16#08] - end - end; -encode_ct(signal, Item) -> - case Item of - "ct" -> [16#00, 16#03]; - "rsp" -> [16#00, 16#04] - end. - -decode_ct(event, Item) -> - case Item of - [16#00, 16#05] -> "cmp" - end; -decode_ct({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#05] -> % Event cmp - case SubItem of - [16#00, 16#08] -> "res" - end - end; -decode_ct(signal, Item) -> - case Item of - [16#00, 16#03] -> "ct"; - [16#00, 16#04] -> "rsp" - end. - -%%---------------------------------------------------------------------- -%% Name: nt - Network Package -%% Version: 1 -%% Extends: None -%% Purpose: This package defines properties of network terminations -%% independent of network type. -%%---------------------------------------------------------------------- - -capabilities_nt() -> - [ - {property, "jit"}, - {event, "netfail"}, - {event, "qualert"}, - {statistics, "dur"}, - {statistics, "os"}, - {statistics, "or"} - ]. - -encode_nt(property, Item) -> - case Item of - "jit" -> [16#00, 16#07] - end; -encode_nt(event, Item) -> - case Item of - "netfail" -> [16#00, 16#05]; - "qualert" -> [16#00, 16#06] - end; -encode_nt({event_parameter, Item}, SubItem) -> - case Item of - "netfail" -> - case SubItem of - "cs" -> [16#00, 16#01] - end; - "qualert" -> - case SubItem of - "th" -> [16#00, 16#01] - end - end; -encode_nt(statistics, Item) -> - case Item of - "dur" -> [16#00, 16#01]; - "os" -> [16#00, 16#02]; - "or" -> [16#00, 16#03] - end. - -decode_nt(property, Item) -> - case Item of - [16#00, 16#07] -> "jit" - end; -decode_nt(event, Item) -> - case Item of - [16#00, 16#05] -> "netfail"; - [16#00, 16#06] -> "qualert" - end; -decode_nt({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#05] -> % Event netfail - case SubItem of - [16#00, 16#01] -> "cs" - end; - [16#00, 16#06] -> % Event qualert - case SubItem of - [16#00, 16#01] -> "th" - end - end; -decode_nt(statistics, Item) -> - case Item of - [16#00, 16#01] -> "dur"; - [16#00, 16#02] -> "os"; - [16#00, 16#03] -> "or" - end. - -%%---------------------------------------------------------------------- -%% Name: rtp - RTP Package -%% Version: 1 -%% Extends: nt version 1 -%% Purpose: This package is used to support packet based multimedia -%% data transfer by means of the Real-time Transport Protocol -%% (RTP) [RFC 1889]. -%%---------------------------------------------------------------------- - -capabilities_rtp() -> - [ - {event, "pltrans"}, - {statistics, "ps"}, - {statistics, "pr"}, - {statistics, "pl"}, - {statistics, "jit"}, - {statistics, "delay"} - ]. - -encode_rtp(event, Item) -> - case Item of - "pltrans" -> [16#00, 16#01] - end; -encode_rtp({event_parameter, Item}, SubItem) -> - case Item of - "pltrans" -> - case SubItem of - "rtppltype" -> [16#00, 16#01] - end - end; -encode_rtp(statistics, Item) -> - case Item of - "ps" -> [16#00, 16#04]; - "pr" -> [16#00, 16#05]; - "pl" -> [16#00, 16#06]; - "jit" -> [16#00, 16#07]; - "delay" -> [16#00, 16#08] - end. - -decode_rtp(event, Item) -> - case Item of - [16#00, 16#01] -> "pltrans" - end; -decode_rtp({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#01] -> % Event pltrans - case SubItem of - [16#00, 16#01] -> "rtppltype" - end - end; -decode_rtp(statistics, Item) -> - case Item of - [16#00, 16#04] -> "ps"; - [16#00, 16#05] -> "pr"; - [16#00, 16#06] -> "pl"; - [16#00, 16#07] -> "jit"; - [16#00, 16#08] -> "delay" - end. - - -%%---------------------------------------------------------------------- -%% Name: tdmc - TDM Circuit Package -%% Version: 1 -%% Extends: nt version 1 -%% Purpose: This package is used to support TDM circuit terminations. -%%---------------------------------------------------------------------- - -capabilities_tdmc() -> - [ - {property, "ec"}, - {property, "gain"} - ]. - -encode_tdmc(Scope, Item) -> - case Scope of - property -> - case Item of - "ec" -> [16#00, 16#08]; - "gain" -> [16#00, 16#0a] - end - end. - -decode_tdmc(Scope, Item) -> - case Scope of - property -> - case Item of - [16#00, 16#08] -> "ec"; - [16#00, 16#0a] -> "gain" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: swb - SwitchBoard Package -%% Version: 1 -%% Extends: none -%% Purpose: This package is used to support SwitchBoard specials -%%---------------------------------------------------------------------- - -capabilities_swb() -> - [ - {statistics, "fs"}, % Free slots - {statistics, "as"} % Allocated slots - ]. - -encode_swb(Scope, Item) -> - case Scope of - statistics -> - case Item of - "fs" -> [16#00, 16#00]; - "as" -> [16#00, 16#01] - end - end. - -decode_swb(Scope, Item) -> - case Scope of - statistics -> - case Item of - [16#00, 16#00] -> "fs"; - [16#00, 16#01] -> "as" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: native - Pseudo package -%% Version: 1 -%% Extends: None -%% Purpose: Native tags for media stream properties -%% -%% Parameters for Local descriptors and Remote descriptors are -%% specified as tag-value pairs if binary encoding is used for the -%% protocol. This annex contains the property names (PropertyID), the -%% tags (Property Tag), type of the property (Type) and the values -%% (Value).Values presented in the Value field when the field contains -%% references shall be regarded as "information". The reference -%% contains the normative values. If a value field does not contain a -%% reference then the values in that field can be considered as -%% "normative". -%% -%% Tags are given as hexadecimal numbers in this annex. When setting -%% the value of a property, a MGC may underspecify the value according -%% to one of the mechanisms specified in section 7.1.1. -%% -%% For type "enumeration" the value is represented by the value in brack- -%% ets, e.g., Send(0), Receive(1). -%%---------------------------------------------------------------------- -%% -%% C.6. IP -%% -%% ________________________________________________________________ -%% | PropertyID| Tag | Type | Value | -%% | IPv4 | 6001 | 32 BITS | Ipv4Address | -%% | IPv6 | 6002 | 128 BITS | IPv6 Address | -%% | Port | 6003 | Unsigned Int| Port | -%% | Porttype | 6004 | Enumerated | TCP(0),UDP(1),SCTP(2)| -%% |___________|____________|______________|_______________________| -%% -%% -%% C.11. SDP Equivalents -%% -%% ______________________________________________________________ -%% | PropertyID| Tag | Type | Value | -%% | SDP_V | B001| STRING| Protocol Version | -%% | SDP_O | B002| STRING| Owner-creator and session ID | -%% | SDP_S | B003| STRING| Sesson name | -%% | SDP_I | B004| STRING| Session identifier | -%% | SDP_U | B005| STRING| URI of descriptor | -%% | SDC_E | B006| STRING| email address | -%% | SDP_P | B007| STRING| phone number | -%% | SDP_C | B008| STRING| Connection information | -%% | SDP_B | B009| STRING| Bandwidth Information | -%% | SDP_Z | B00A| STRING| time zone adjustment | -%% | SDP_K | B00B| STRING| Encryption Key | -%% | SDP_A | B00C| STRING| Zero or more session attributes| -%% | SDP_T | B00D| STRING| Active Session Time | -%% | SDP_R | B00E| STRING| Zero or more repeat times | -%% | SDP_M | B00F| STRING| Media name and transport addr | -%% | | | | Reference: IETF RFC 2327 | -%% |___________|______|________|_________________________________| -%% -%%---------------------------------------------------------------------- - -capabilities_native() -> - [ - %% C.6. IP - {property, "IPv4"}, - {property, "IPv6"}, - {property, "Port"}, - {property, "Porttype"}, - - %% C.11. SDP Equivalents - {property, "v"}, - {property, "o"}, - {property, "s"}, - {property, "i"}, - {property, "u"}, - {property, "e"}, - {property, "p"}, - {property, "c"}, - {property, "b"}, - {property, "z"}, - {property, "k"}, - {property, "a"}, - {property, "t"}, - {property, "r"}, - {property, "m"} - ]. - -encode_native(Scope, Item) -> - case Scope of - property -> - case Item of - %% IP - "IPv4" -> [16#60, 16#01]; - "IPv6" -> [16#60, 16#02]; - "Port" -> [16#60, 16#03]; - "Porttype" -> [16#60, 16#04]; - - %% SDP - "v" -> [16#b0, 16#01]; - "o" -> [16#b0, 16#02]; - "s" -> [16#b0, 16#03]; - "i" -> [16#b0, 16#04]; - "u" -> [16#b0, 16#05]; - "e" -> [16#b0, 16#06]; - "p" -> [16#b0, 16#07]; - "c" -> [16#b0, 16#08]; - "b" -> [16#b0, 16#09]; - "z" -> [16#b0, 16#0a]; - "k" -> [16#b0, 16#0b]; - "a" -> [16#b0, 16#0c]; - "t" -> [16#b0, 16#0d]; - "r" -> [16#b0, 16#0e]; - "m" -> [16#b0, 16#0f] - end - end. - -decode_native(Scope, [Type, Item]) -> - case Scope of - property -> - case Type of - 16#60 -> - case Item of - 16#01 -> "IPv4"; - 16#02 -> "IPv6"; - 16#03 -> "Port"; - 16#04 -> "Porttype" - end; - - 16#b0 -> - case Item of - 16#01 -> "v"; - 16#02 -> "o"; - 16#03 -> "s"; - 16#04 -> "i"; - 16#05 -> "u"; - 16#06 -> "e"; - 16#07 -> "p"; - 16#08 -> "c"; - 16#09 -> "b"; - 16#0a -> "z"; - 16#0b -> "k"; - 16#0c -> "a"; - 16#0d -> "t"; - 16#0e -> "r"; - 16#0f -> "m" - end - end - end. - -%% ------------------------------------------------------------------- - -% error(Reason) -> -% erlang:error(Reason). - diff --git a/lib/megaco/src/binary/megaco_binary_name_resolver_prev3c.erl b/lib/megaco/src/binary/megaco_binary_name_resolver_prev3c.erl deleted file mode 100644 index 5336f9a8ad..0000000000 --- a/lib/megaco/src/binary/megaco_binary_name_resolver_prev3c.erl +++ /dev/null @@ -1,2010 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2005-2020. All Rights Reserved. -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. -%% -%% %CopyrightEnd% -%% - -%% -%%---------------------------------------------------------------------- -%% Purpose: Handle meta data about packages -%% -%% DEPRECATED -%% DEPRECATED -%% DEPRECATED -%% -%%---------------------------------------------------------------------- - --module(megaco_binary_name_resolver_prev3c). - --include_lib("megaco/src/engine/megaco_message_internal.hrl"). --include_lib("megaco/src/app/megaco_internal.hrl"). - - --define(LOWER(Char), - if - Char >= $A, Char =< $Z -> - Char - ($A - $a); - true -> - Char - end). - --export([packages/0, - capabilities/0, - capabilities/1, - decode_name/3, - encode_name/3 - ]). - -encode_name(Config, term_id, TermId) -> - case megaco:encode_binary_term_id(Config, TermId) of - {ok, TermId2} -> - TermId2; - {error, Reason} -> - exit({bad_term_id, TermId, Reason}) - end; -encode_name(_Config, Scope, Item) -> - ?d("encode_name(~p) -> entry with" - "~n Item: ~p", [Scope, Item]), - encode(Scope, Item). - -decode_name(Config, term_id, TermId) -> - case megaco:decode_binary_term_id(Config, TermId) of - {ok, TermId2} -> - TermId2; - {error, Reason} -> - exit({bad_term_id, TermId, Reason}) - end; -decode_name(_Config, Scope, Item) -> - ?d("decode_name(~p) -> entry with" - "~n Item: ~p", [Scope, Item]), - decode(Scope, Item). - - - -%%---------------------------------------------------------------------- -%% 12.1.1 Package -%% -%% Overall description of the package, specifying: -%% -%% Package Name: only descriptive -%% -%% PackageID: is an identifier -%% -%% Description: is a description of the package -%% -%% Version: -%% -%% A new version of a package can only add additional Properties, -%% Events, Signals, Statistics and new possible values for an -%% existing parameter described in the original package. No -%% deletions or modifications shall be allowed. A version is an -%% integer in the range from 1 to 99. -%% -%% Designed to be extended only (Optional): Yes -%% -%% This indicates that the package has been expressly designed to -%% be extended by others, not to be directly referenced. For -%% example, the package may not have any function on its own or be -%% nonsensical on its own. The MG SHOULD NOT publish this PackageID -%% when reporting packages. -%% -%% Extends: existing package Descriptor -%% -%% A package may extend an existing package. The version of the -%% original package must be specified. When a package extends -%% another package it shall only add additional Properties, Events, -%% Signals, Statistics and new possible values for an existing -%% parameter described in the original package. An extended package -%% shall not redefine or overload an identifier defined in the -%% original package and packages it may have extended (multiple -%% levels of extension). Hence, if package B version 1 extends -%% package A version 1, version 2 of B will not be able to extend -%% the A version 2 if A version 2 defines a name already in B -%% version 1. If the package does not extend another package, it -%% shall specify "none". -%% -%% -%% 12.1.2 Properties -%% -%% Properties defined by the package, specifying: -%% -%% Property Name: only descriptive -%% -%% PropertyID: is an identifier -%% -%% Description: is a description of the function of the property -%% -%% Type: One of: -%% -%% Boolean -%% -%% String: UTF-8 string -%% -%% Octet String: A number of octets. See Annex A and B.3 for -%% encoding -%% -%% Integer: 4 byte signed integer -%% -%% Double: 8 byte signed integer -%% -%% Character: unicode UTF-8 encoding of a single letter. -%% Could be more than one octet. -%% -%% Enumeration: one of a list of possible unique values (see 12.3) -%% -%% Sub-list: a list of several values from a list. -%% The type of sub-list SHALL also be specified. -%% The type shall be chosen from the types specified in -%% this section (with the exception of sub-list). For -%% example, Type: sub-list of enumeration. The encoding -%% of sub-lists is specified in Annexes A and B.3. -%% -%% Possible values: -%% -%% A package MUST specify either a specific set of values or a -%% description of how values are determined. A package MUST also -%% specify a default value or the default behaviour when the value -%% is omitted from its descriptor. For example, a package may -%% specify that procedures related to the property are suspended -%% when its value is omitted. -%% -%% Default: -%% -%% A default value (but not procedures) may be specified as -%% provisionable. -%% -%% Defined in: -%% -%% Which H.248.1 descriptor the property is defined in. -%% LocalControl is for stream-dependent properties. -%% TerminationState is for stream-independent properties. -%% ContextAttribute is for properties that affect the context as -%% a whole, i.e., mixing properties. These are expected to be the -%% most common cases, but it is possible for properties to be -%% defined in other descriptors. Context properties MUST be defined -%% in the ContextAttribute descriptor. -%% -%% Characteristics: Read/Write or both, and (optionally), global: -%% -%% Indicates whether a property is read-only, or read-write, and -%% if it is global. If Global is omitted, the property is not -%% global. If a property is declared as global, the value of the -%% property is shared by all Terminations realizing the package. -%% If a context property is declared as global, the property is -%% shared by all contexts realizing the package. -%% -%% -%% 12.1.3 Events -%% -%% Events defined by the package, specifying: -%% -%% Event name: only descriptive -%% -%% EventID: is an identifier -%% -%% Description: a description of the function of the event -%% -%% EventsDescriptor Parameters: -%% -%% Parameters used by the MGC to configure the event, and found in -%% the EventsDescriptor. See 12.2. If there are no parameters for -%% the Events Descriptor, then "none" shall be specified. -%% -%% ObservedEventsDescriptor Parameters: -%% -%% Parameters returned to the MGC in Notify requests and in replies -%% to command requests from the MGC that audit -%% ObservedEventsDescriptor, and found in the -%% ObservedEventsDescriptor. See 12.2. If there are no parameters -%% for the ObservedEvents Descriptor, then 'none' shall be specified. -%% -%% -%% 12.1.4 Signals -%% -%% Signals defined by the package, specifying: -%% -%% Signal Name: only descriptive -%% -%% SignalID: is an identifier. SignalID is used in a SignalsDescriptor -%% -%% Description: a description of the function of the signal -%% -%% SignalType: one of: -%% -%% OO (On/Off) -%% -%% TO (TimeOut) -%% -%% BR (Brief) -%% -%% NOTE - SignalType may be defined such that it is dependent on -%% the value of one or more parameters. The package MUST specify a -%% default signal type. If the default type is TO, the package MUST -%% specify a default duration which may be provisioned. A default -%% duration is meaningless for BR. -%% -%% Duration: in hundredths of seconds -%% -%% Additional Parameters: see 12.2 -%% -%% -%% 12.1.5 Statistics -%% -%% Statistics defined by the package, specifying: -%% -%% Statistic name: only descriptive -%% -%% StatisticID: is an identifier -%% -%% StatisticID is used in a StatisticsDescriptor -%% -%% Description: a description of the statistic -%% -%% Type: One of: -%% -%% Boolean -%% -%% String: UTF-8 string -%% -%% Octet String: A number of octets. -%% See Annex A and Annex B.3 for encoding -%% -%% Integer: 4 byte signed integer -%% -%% Double: 8 byte signed integer -%% -%% Character: Unicode UTF-8 encoding of a single letter. -%% Could be more than one octet. -%% -%% Enumeration: One of a list of possible unique values (See 12.3) -%% -%% Sub-list: A list of several values from a list. -%% The type of sub-list SHALL also be specified. -%% The type shall be chosen from the types specified in -%% this section (with the exception of sub-list). -%% For example, Type: sub-list of enumeration. -%% The encoding of sub-lists is specified in Annexes A -%% and B.3. -%% -%% Possible Values: -%% -%% A package must indicate the unit of measure, e.g. milliseconds, -%% packets, either here or along with the type above, as well as -%% indicating any restriction on the range. -%% -%% Level: Specify if the statistic can be kept at the Termination -%% level, Stream level or Either. -%% -%% -%% 12.1.6 Error Codes -%% -%% If the package does not define any error codes, this section may be omitted. -%% Otherwise, it describes error codes defined by the package, specifying: -%% -%% Error Code #: The error code number. -%% -%% Name: Name of the error -%% -%% Definition: A description of the error code. -%% -%% Error Text in the Error Descriptor: -%% -%% A description of what text to return in the Error Descriptor. -%% -%% Comment: Any further comments on the use of the error code. -%% -%% -%% 12.1.7 Procedures -%% -%% Additional guidance on the use of the package. -%% -%% -%% 12.2 Guidelines to defining parameters to events and signals -%% -%% Parameter Name: only descriptive -%% -%% ParameterID: is an identifier. The textual ParameterID of -%% parameters to Events and Signals shall not start with "EPA" and -%% "SPA", respectively. The textual ParameterID shall also not be -%% "ST", "Stream", "SY", "SignalType", "DR", "Duration", "NC", -%% "NotifyCompletion", "KA", "KeepActive", "EB", "Embed", "DM", -%% "DigitMap", "DI", "Direction", "RQ" or "RequestID". -%% -%% Description: a description of the function of the parameter. -%% -%% Type: One of: -%% -%% Boolean -%% -%% String: UTF-8 octet string -%% -%% Octet String: A number of octets. See Annex A and B.3 for -%% encoding -%% -%% Integer: 4-octet signed integer -%% -%% Double: 8-octet signed integer -%% -%% Character: Unicode UTF-8 encoding of a single letter. Could be -%% more than one octet. -%% -%% Enumeration: one of a list of possible unique values (see 12.3) -%% -%% Sub-list: a list of several values from a list (not supported -%% for statistics). The type of sub-list SHALL also be -%% specified The type shall be chosen from the types -%% specified in this section (with the exception of -%% sub-list). For example, Type: sub-list of enumeration. -%% The encoding of sub-lists is specified in Annex A -%% and B.3. -%% -%% Optional: Yes/No -%% -%% Describes if the parameter may be omitted from the signal or -%% event. -%% -%% Possible values: -%% -%% A package MUST specify either a specific set of values or a -%% description of how values are determined. A package MUST -%% also specify a default value or the default behavior when the -%% value is omitted from its descriptor. For example, a package -%% may specify that procedures related to the parameter are -%% suspended when its value is omitted. -%% -%% Default: -%% -%% A default value (but not procedures) may be specified as -%% provisionable. -%% -%% -%% 12.3 Lists -%% -%% Possible values for parameters include enumerations. Enumerations may be -%% defined in a list. It is recommended that the list be IANA registered so -%% that packages that extend the list can be defined without concern for -%% conflicting names. -%% -%% -%% 12.4 Identifiers -%% -%% Identifiers in text encoding shall be strings of up to 64 characters, -%% containing no spaces, starting with an alphabetic character and consisting -%% of alphanumeric characters and/or digits, and possibly including the -%% special character underscore ("_"). -%% -%% Identifiers in binary encoding are 2 octets long. -%% -%% Both text and binary values shall be specified for each identifier, -%% including identifiers used as values in enumerated types. -%% -%% -%% 12.5 Package registration -%% -%% A package can be registered with IANA for interoperability reasons. See -%% clause 14 for IANA considerations. -%% -%%---------------------------------------------------------------------- - -capabilities() -> - [{P, capabilities(P)} || P <- packages()]. - -%% -record(property, {name, type, values, defined_in, characteristics}). - -%%---------------------------------------------------------------------- -%% List all known packages -%% 'native' and 'all' are not real packages -%%---------------------------------------------------------------------- - -packages() -> - [ - "g", % Generic - "root", % Base Root Package - "tonegen", % Tone Generator Package - "tonedet", % Tone Detection Package - "dg", % Basic DTMF Generator Package - "dd", % DTMF detection Package - "cg", % Call Progress Tones Generator Package - "cd", % Call Progress Tones Detection Package - "al", % Analog Line Supervision Package - "ct", % Basic Continuity Package - "nt", % Network Package - "rtp", % RTP Package - "swb", % SwitchBoard Package - "tdmc", % TDM Circuit Package - "" % Native pseudo package - ]. - -%%---------------------------------------------------------------------- -%% List all matching capabilities -%%---------------------------------------------------------------------- - -capabilities(Package) -> - case Package of - "g" -> capabilities_g(); - "root" -> capabilities_root(); - "tonegen" -> capabilities_tonegen(); - "tonedet" -> capabilities_tonedet(); - "dg" -> capabilities_dg(); - "dd" -> capabilities_dd(); - "cg" -> capabilities_cg(); - "cd" -> capabilities_cd(); - "al" -> capabilities_al(); - "ct" -> capabilities_ct(); - "nt" -> capabilities_nt(); - "rtp" -> capabilities_rtp(); - "swb" -> capabilities_swb(); - "tdmc" -> capabilities_tdmc(); - "" -> capabilities_native() - end. - -%%---------------------------------------------------------------------- -%% Decode package name to internal form -%% Scope ::= property | event | signal | statistics -%%---------------------------------------------------------------------- - -decode(mid, Package) -> - decode_mid(Package); -decode(package, Package) -> - decode_package(Package); -decode(profile, Package) -> - decode_profile(Package); -decode(dialplan, Dialplan) -> - decode_dialplan(Dialplan); -decode(Scope, [A, B | Item]) when is_atom(Scope) -> - ?d("decode(~p) -> entry with" - "~n A: ~p" - "~n B: ~p" - "~n Item: ~p", [Scope, A, B, Item]), - case decode_package([A, B]) of - "" -> - ?d("decode -> \"no\" package",[]), - decode_item(Scope, [A, B], Item); - Package -> - ?d("decode -> Package: ~p", [Package]), - Package ++ "/" ++ decode_item(Scope, [A, B], Item) - end; -decode({Scope, [A, B | Item]}, SubItem) when is_atom(Scope) -> - ?d("decode(~p) -> entry with" - "~n A: ~p" - "~n B: ~p" - "~n Item: ~p" - "~n SubItem: ~p", [Scope, A, B, Item, SubItem]), - decode_item({Scope, Item}, [A, B], SubItem). - -decode_item(Scope, [A, B], Item) -> - ?d("decode_item -> entry",[]), - case A of - 16#00 -> - case B of - 16#01 -> decode_g(Scope, Item); - 16#02 -> decode_root(Scope, Item); - 16#03 -> decode_tonegen(Scope, Item); - 16#04 -> decode_tonedet(Scope, Item); - 16#05 -> decode_dg(Scope, Item); - 16#06 -> decode_dd(Scope, Item); - 16#07 -> decode_cg(Scope, Item); - 16#08 -> decode_cd(Scope, Item); - 16#09 -> decode_al(Scope, Item); - 16#0a -> decode_ct(Scope, Item); - 16#0b -> decode_nt(Scope, Item); - 16#0c -> decode_rtp(Scope, Item); - 16#0d -> decode_tdmc(Scope, Item); - 16#00 -> decode_native(Scope, Item) - end; - 16#fe -> - case B of - %% Proprietary extension - 16#fe -> decode_swb(Scope, Item) - end; - 16#ff -> - case B of - 16#ff when Item =:= [16#ff, 16#ff] -> "*" - end - end. - -decode_package(Package) -> - ?d("decode_package -> entry with" - "~n Package: ~p", [Package]), - [A, B] = Package, - case A of - 16#00 -> - case B of - 16#01 -> "g"; - 16#02 -> "root"; - 16#03 -> "tonegen"; - 16#04 -> "tonedet"; - 16#05 -> "dg"; - 16#06 -> "dd"; - 16#07 -> "cg"; - 16#08 -> "cd"; - 16#09 -> "al"; - 16#0a -> "ct"; - 16#0b -> "nt"; - 16#0c -> "rtp"; - 16#0d -> "tdmc"; - 16#00 -> "" - end; - 16#fe -> - case B of - 16#fe -> "swb" - end; - 16#ff -> - case B of - 16#ff -> "*" - end - end. - -decode_profile([A, B]) -> - case A of - 16#00 -> - case B of - 16#fe -> "resgw"; - _ -> "profile" ++ [A + $0, B + $0] - end; - _ -> - "profile" ++ [A + $0, B + $0] - end. - -decode_dialplan([A, B]) -> - "dialplan" ++ [A + $0, B + $0]. - -decode_mid(Mid) -> - case Mid of - {domainName, DN} -> - Lower = to_lower(DN#'DomainName'.name), - {domainName, DN#'DomainName'{name = Lower}}; - {deviceName, PathName} -> - Lower = to_lower(PathName), - {deviceName, Lower}; - Other -> - Other - end. - -to_lower(Chars) -> - [?LOWER(Char) || Char <- Chars]. - -%%---------------------------------------------------------------------- -%% Encode package name from internal form -%% Scope ::= property | event | signal | statistics -%%---------------------------------------------------------------------- - -encode(mid, Package) -> - encode_mid(Package); -encode(package, Package) -> - encode_package(Package); -encode(profile, Profile) -> - encode_profile(Profile); -encode(dialplan, Dialplan) -> - encode_dialplan(Dialplan); -encode(Scope, PackageItem) when is_atom(Scope) -> - ?d("encode(~p) -> entry with" - "~n PackageItem: ~p", [Scope, PackageItem]), - case string:tokens(PackageItem, [$/]) of - [Package, Item] -> - ?d("encode -> " - "~n Package: ~p" - "~n Item: ~p", [Package, Item]), - encode_package(Package) ++ encode_item(Scope, Package, Item); - [Item] -> - ?d("encode -> Item: ~p", [Item]), - [16#00, 16#00 | encode_native(Scope, Item)] - end; -encode({Scope, PackageItem}, SubItem) when is_atom(Scope) -> - ?d("encode(~p) -> entry with" - "~n PackageItem: ~p" - "~n SubItem: ~p", [Scope, PackageItem, SubItem]), - case string:tokens(PackageItem, [$/]) of - [Package, Item] -> - ?d("encode -> " - "~n Package: ~p" - "~n Item: ~p", [Package, Item]), - encode_item({Scope, Item}, Package, SubItem); - [_Item] -> - ?d("encode -> _Item: ~p", [_Item]), - encode_native(Scope, SubItem) - end. - -encode_item(_Scope, _Package, "*") -> - [16#ff, 16#ff]; -encode_item(Scope, Package, Item) -> - ?d("encode_item(~s) -> entry", [Package]), - case Package of - "g" -> encode_g(Scope, Item); - "root" -> encode_root(Scope, Item); - "tonegen" -> encode_tonegen(Scope, Item); - "tonedet" -> encode_tonedet(Scope, Item); - "dg" -> encode_dg(Scope, Item); - "dd" -> encode_dd(Scope, Item); - "cg" -> encode_cg(Scope, Item); - "cd" -> encode_cd(Scope, Item); - "al" -> encode_al(Scope, Item); - "ct" -> encode_ct(Scope, Item); - "nt" -> encode_nt(Scope, Item); - "rtp" -> encode_rtp(Scope, Item); - "tdmc" -> encode_tdmc(Scope, Item); - "swb" -> encode_swb(Scope, Item) - end. - -encode_package(Package) -> - case Package of - "g" -> [16#00, 16#01]; - "root" -> [16#00, 16#02]; - "tonegen" -> [16#00, 16#03]; - "tonedet" -> [16#00, 16#04]; - "dg" -> [16#00, 16#05]; - "dd" -> [16#00, 16#06]; - "cg" -> [16#00, 16#07]; - "cd" -> [16#00, 16#08]; - "al" -> [16#00, 16#09]; - "ct" -> [16#00, 16#0a]; - "nt" -> [16#00, 16#0b]; - "rtp" -> [16#00, 16#0c]; - "tdmc" -> [16#00, 16#0d]; - "" -> [16#00, 16#00]; - "*" -> [16#ff, 16#ff]; - "swb" -> [16#fe, 16#fe] - end. - -encode_profile(Profile) -> - case Profile of - "resgw" -> - [16#00, 16#fe]; - [$p, $r, $o, $f, $i, $l, $e | Name] -> - case Name of - [A, B] -> [A - $0, B - $0]; - [B] -> [0, B - $0]; - [] -> [0, 0] - end - end. - -encode_dialplan(Dialplan) -> - case Dialplan of - [$d, $i, $a, $l, $p, $l, $a, $n | Name] -> - case Name of - [A, B] -> [A - $0, B - $0]; - [B] -> [0, B - $0]; - [] -> [0, 0] - end - end. - -encode_mid(Mid) -> - Mid. - - -%%---------------------------------------------------------------------- -%% Name: g - Generic -%% Version: 1 -%% Extends: None -%% Purpose: Generic package for commonly encountered items -%%---------------------------------------------------------------------- - -capabilities_g() -> - [ - {event, "cause"}, - {event, "sc"} - ]. - -encode_g(event, Item) -> - case Item of - "cause" -> [16#00, 16#01]; - "sc" -> [16#00, 16#02] - end; - -encode_g({event_parameter, Item}, SubItem) -> - case Item of - "cause" -> - case SubItem of - "Generalcause" -> [16#00, 16#01]; - "Failurecause" -> [16#00, 16#02] - end; - "sc" -> - case SubItem of - "SigID" -> [16#00, 16#01]; - "Meth" -> [16#00, 16#02]; - "SLID" -> [16#00, 16#03]; - "RID" -> [16#00, 16#04] - end - end. - -decode_g(event, Item) -> - case Item of - [16#00, 16#01] -> "cause"; - [16#00, 16#02] -> "sc" - end; - -decode_g({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#01] -> % Event: cause - case SubItem of - [16#00, 16#01] -> "Generalcause"; - [16#00, 16#02] -> "Failurecause" - end; - - [16#00, 16#02] -> % Event: sc - case SubItem of - [16#00, 16#01] -> "SigID"; - [16#00, 16#02] -> "Meth"; - [16#00, 16#03] -> "SLID"; - [16#00, 16#04] -> "RID" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: root - Base Root Package -%% Version: 2 -%% Extends: None -%% Purpose: This package defines Gateway wide properties. -%%---------------------------------------------------------------------- - -capabilities_root() -> - [ - {property, "maxNumberOfContexts"}, - {property, "maxTerminationsPerContext"}, - {property, "normalMGExecutionTime"}, - {property, "normalMGCExecutionTime"}, - {property, "MGProvisionalResponseTimerValue"}, - {property, "MGCProvisionalResponseTimerValue"}, - {property, "MGCOriginatedPendingLimit"}, - {property, "MGOriginatedPendingLimit"} - ]. - -encode_root(Scope, Item) -> - case Scope of - property -> - case Item of - "maxNumberOfContexts" -> [16#00, 16#01]; - "maxTerminationsPerContext" -> [16#00, 16#02]; - "normalMGExecutionTime" -> [16#00, 16#03]; - "normalMGCExecutionTime" -> [16#00, 16#04]; - "MGProvisionalResponseTimerValue" -> [16#00, 16#05]; - "MGCProvisionalResponseTimerValue" -> [16#00, 16#06]; - "MGCOriginatedPendingLimit" -> [16#00, 16#07]; - "MGOriginatedPendingLimit" -> [16#00, 16#08] - end - end. - -decode_root(Scope, Item) -> - case Scope of - property -> - case Item of - [16#00, 16#01] -> "maxNumberOfContexts"; - [16#00, 16#02] -> "maxTerminationsPerContext"; - [16#00, 16#03] -> "normalMGExecutionTime"; - [16#00, 16#04] -> "normalMGCExecutionTime"; - [16#00, 16#05] -> "MGProvisionalResponseTimerValue"; - [16#00, 16#06] -> "MGCProvisionalResponseTimerValue"; - [16#00, 16#07] -> "MGCOriginatedPendingLimit"; - [16#00, 16#08] -> "MGOriginatedPendingLimit" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: tonegen - Tone Generator Package -%% Version: 2 -%% Extends: None -%% Purpose: This package defines signals to generate audio tones. -%% This package does not specify parameter values. It is -%% intended to be extendable. Generally, tones are defined -%% as an individual signal with a parameter, ind, -%% representing "interdigit" time delay, and a tone id to -%% be used with playtones. A tone id should be kept -%% consistent with any tone generation for the same tone. -%% MGs are expected to be provisioned with the characteristics -%% of appropriate tones for the country in which the MG is located. -%%---------------------------------------------------------------------- - -capabilities_tonegen() -> - [ - {signal, "pt"} - ]. - -encode_tonegen(signal, Item) -> - case Item of - "pt" -> [16#00, 16#01] - end; - -encode_tonegen({signal_parameter, Item}, SubItem) -> - case Item of - "pt" -> - case SubItem of - "tl" -> [16#00, 16#01]; - "ind" -> [16#00, 16#02]; - "btd" -> [16#00, 16#03] - end - end. - -decode_tonegen(signal, Item) -> - case Item of - [16#00, 16#01] -> "pt" - end; - -decode_tonegen({signal_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#01] -> % Event: pt - case SubItem of - [16#00, 16#01] -> "tl"; - [16#00, 16#02] -> "ind"; - [16#00, 16#03] -> "btd" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: tonedet - Tone Detection Package -%% Version: 1 -%% Extends: None -%% Purpose: This Package defines events for audio tone detection. -%% Tones are selected by name (tone id). MGs are expected -%% to be provisioned with the characteristics of appropriate -%% tones for the country in which the MG is located. -%% -%% This package does not specify parameter values. -%% It is intended to be extendable. -%%---------------------------------------------------------------------- - -capabilities_tonedet() -> - [ - {event, "std"}, - {event, "etd"}, - {event, "ltd"} - ]. - -encode_tonedet(event, Item) -> - case Item of - "std" -> [16#00, 16#01]; - "etd" -> [16#00, 16#02]; - "ltd" -> [16#00, 16#03] - end; - -encode_tonedet({event_parameter, Item}, SubItem) -> - case Item of - "std" -> - case SubItem of - "tl" -> [16#00, 16#01]; - "tid" -> [16#00, 16#03] - end; - "etd" -> - case SubItem of - "tl" -> [16#00, 16#01]; - "tid" -> [16#00, 16#03]; - "dur" -> [16#00, 16#02] - end; - "ltd" -> - case SubItem of - "tl" -> [16#00, 16#01]; - "dur" -> [16#00, 16#02]; - "tid" -> [16#00, 16#03] - end - end. - -decode_tonedet(event, Item) -> - case Item of - [16#00, 16#01] -> "std"; - [16#00, 16#02] -> "etd"; - [16#00, 16#03] -> "ltd" - end; - -decode_tonedet({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#01] -> % Event std - case SubItem of - [16#00, 16#01] -> "tl"; - [16#00, 16#03] -> "tid" - end; - [16#00, 16#02] -> % Event etd - case SubItem of - [16#00, 16#01] -> "tl"; - [16#00, 16#03] -> "tid"; - [16#00, 16#02] -> "dur" - end; - [16#00, 16#03] -> % Event ltd - case SubItem of - [16#00, 16#01] -> "tl"; - [16#00, 16#02] -> "dur"; - [16#00, 16#03] -> "tid" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: dg - Basic DTMF Generator Package -%% Version: 1 -%% Extends: tonegen version 1 -%% Purpose: This package defines the basic DTMF tones as signals and -%% extends the allowed values of parameter tl of playtone -%% in tonegen. -%%---------------------------------------------------------------------- - -capabilities_dg() -> - [ - {signal, "d0"}, - {signal, "d1"}, - {signal, "d2"}, - {signal, "d3"}, - {signal, "d4"}, - {signal, "d5"}, - {signal, "d6"}, - {signal, "d7"}, - {signal, "d8"}, - {signal, "d9"}, - {signal, "ds"}, - {signal, "do"}, - {signal, "da"}, - {signal, "db"}, - {signal, "dc"}, - {signal, "dd"} - ]. - -encode_dg(signal, Item) -> - case Item of - "d0" -> [16#00, 16#10]; - "d1" -> [16#00, 16#11]; - "d2" -> [16#00, 16#12]; - "d3" -> [16#00, 16#13]; - "d4" -> [16#00, 16#14]; - "d5" -> [16#00, 16#15]; - "d6" -> [16#00, 16#16]; - "d7" -> [16#00, 16#17]; - "d8" -> [16#00, 16#18]; - "d9" -> [16#00, 16#19]; - "ds" -> [16#00, 16#20]; - "do" -> [16#00, 16#21]; - "da" -> [16#00, 16#1a]; - "db" -> [16#00, 16#1b]; - "dc" -> [16#00, 16#1c]; - "dd" -> [16#00, 16#1d] - end; - -encode_dg({signal_parameter, Item}, SubItem) -> - case Item of - "d0" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d1" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d2" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d3" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d4" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d5" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d6" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d7" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d8" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d9" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "ds" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "do" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "da" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "db" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "dc" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "dd" -> - case SubItem of - "btd" -> [16#00, 16#01] - end - end. - -decode_dg(signal, Item) -> - case Item of - [16#00, 16#10] -> "d0"; - [16#00, 16#11] -> "d1"; - [16#00, 16#12] -> "d2"; - [16#00, 16#13] -> "d3"; - [16#00, 16#14] -> "d4"; - [16#00, 16#15] -> "d5"; - [16#00, 16#16] -> "d6"; - [16#00, 16#17] -> "d7"; - [16#00, 16#18] -> "d8"; - [16#00, 16#19] -> "d9"; - [16#00, 16#20] -> "ds"; - [16#00, 16#21] -> "do"; - [16#00, 16#1a] -> "da"; - [16#00, 16#1b] -> "db"; - [16#00, 16#1c] -> "dc"; - [16#00, 16#1d] -> "dd" - end; - -decode_dg({signal_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#10] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#11] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#12] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#13] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#14] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#15] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#16] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#17] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#18] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#19] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#20] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#21] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1a] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1b] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1c] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1d] -> - case SubItem of - [16#00, 16#01] -> "btd" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: dd - DTMF detection Package -%% Version: 1 -%% Extends: tonedet version 1 -%% Purpose: This package defines the basic DTMF tones detection. -%% Tones are selected by name (tone id). MGs are expected -%% to be provisioned with the characteristics of appropriate -%% tones for the country in which the MG is located. -%% -%% This package does not specify parameter values. -%% It is intended to be extendable. -%% -%% Additional tone id values are all tone ids described in package dg -%% (basic DTMF generator package). -%% -%% The following table maps DTMF events to digit map symbols as described -%% in section 7.1.14. -%% -%% _________________________________ -%% | DTMF Event | Symbol | -%% | d0 | "0" | -%% | d1 | "1" | -%% | d2 | "2" | -%% | d3 | "3" | -%% | d4 | "4" | -%% | d5 | "5" | -%% | d6 | "6" | -%% | d7 | "7" | -%% | d8 | "8" | -%% | d9 | "9" | -%% | da | "A" or "a"| -%% | db | "B" or "b"| -%% | dc | "C" or "c"| -%% | dd | "D" or "d"| -%% | ds | "E" or "e"| -%% | do | "F" or "f"| -%% |___________________|____________| -%% -%%---------------------------------------------------------------------- - -capabilities_dd() -> - [ - {event, "ce"}, - {event, "d0"}, - {event, "d1"}, - {event, "d2"}, - {event, "d3"}, - {event, "d4"}, - {event, "d5"}, - {event, "d6"}, - {event, "d7"}, - {event, "d8"}, - {event, "d9"}, - {event, "ds"}, - {event, "do"}, - {event, "da"}, - {event, "db"}, - {event, "dc"}, - {event, "dd"} - ]. - -encode_dd(event, Item) -> - case Item of - "ce" -> [16#00, 16#04]; - "d0" -> [16#00, 16#10]; - "d1" -> [16#00, 16#11]; - "d2" -> [16#00, 16#12]; - "d3" -> [16#00, 16#13]; - "d4" -> [16#00, 16#14]; - "d5" -> [16#00, 16#15]; - "d6" -> [16#00, 16#16]; - "d7" -> [16#00, 16#17]; - "d8" -> [16#00, 16#18]; - "d9" -> [16#00, 16#19]; - "ds" -> [16#00, 16#20]; - "do" -> [16#00, 16#21]; - "da" -> [16#00, 16#1a]; - "db" -> [16#00, 16#1b]; - "dc" -> [16#00, 16#1c]; - "dd" -> [16#00, 16#1d] - end; - -encode_dd({event_parameter, Item}, SubItem) -> - case Item of - "ce" -> - case SubItem of - "ds" -> [16#00, 16#01]; - "Meth" -> [16#00, 16#03] - end; - "d0" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d1" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d2" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d3" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d4" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d5" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d6" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d7" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d8" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "d9" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "ds" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "do" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "da" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "db" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "dc" -> - case SubItem of - "btd" -> [16#00, 16#01] - end; - "dd" -> - case SubItem of - "btd" -> [16#00, 16#01] - end - end. - -decode_dd(event, Item) -> - case Item of - [16#00, 16#04] -> "ce"; - [16#00, 16#10] -> "d0"; - [16#00, 16#11] -> "d1"; - [16#00, 16#12] -> "d2"; - [16#00, 16#13] -> "d3"; - [16#00, 16#14] -> "d4"; - [16#00, 16#15] -> "d5"; - [16#00, 16#16] -> "d6"; - [16#00, 16#17] -> "d7"; - [16#00, 16#18] -> "d8"; - [16#00, 16#19] -> "d9"; - [16#00, 16#20] -> "ds"; - [16#00, 16#21] -> "do"; - [16#00, 16#1a] -> "da"; - [16#00, 16#1b] -> "db"; - [16#00, 16#1c] -> "dc"; - [16#00, 16#1d] -> "dd" - end; - -decode_dd({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#04] -> % Event ce - case SubItem of - [16#00, 16#01] -> "ds"; - [16#00, 16#03] -> "Meth" - end; - [16#00, 16#10] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#11] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#12] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#13] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#14] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#15] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#16] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#17] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#18] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#19] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#20] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#21] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1a] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1b] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1c] -> - case SubItem of - [16#00, 16#01] -> "btd" - end; - [16#00, 16#1d] -> - case SubItem of - [16#00, 16#01] -> "btd" - end - end. - -%%---------------------------------------------------------------------- -%% Name: cg - Call Progress Tones Generator Package -%% Version: 1 -%% Extends: tonegen version 1 -%% Purpose: This package defines the basic call progress tones as signals -%% and extends the allowed values of the tl parameter of -%% playtone in tonegen. -%%---------------------------------------------------------------------- - -capabilities_cg() -> - [ - {signal, "dt"}, - {signal, "rt"}, - {signal, "bt"}, - {signal, "ct"}, - {signal, "sit"}, - {signal, "wt"}, - {signal, "prt"}, - {signal, "cw"}, - {signal, "cr"} - ]. - - -encode_cg(Scope, Item) -> - case Scope of - signal -> - case Item of - "dt" -> [16#00, 16#30]; - "rt" -> [16#00, 16#31]; - "bt" -> [16#00, 16#32]; - "ct" -> [16#00, 16#33]; - "sit" -> [16#00, 16#34]; - "wt" -> [16#00, 16#35]; - "prt" -> [16#00, 16#36]; - "cw" -> [16#00, 16#37]; - "cr" -> [16#00, 16#38] - end - end. - -decode_cg(Scope, Item) -> - case Scope of - signal -> - case Item of - [16#00, 16#30] -> "dt"; - [16#00, 16#31] -> "rt"; - [16#00, 16#32] -> "bt"; - [16#00, 16#33] -> "ct"; - [16#00, 16#34] -> "sit"; - [16#00, 16#35] -> "wt"; - [16#00, 16#36] -> "prt"; - [16#00, 16#37] -> "cw"; - [16#00, 16#38] -> "cr" - end - end. - -%%---------------------------------------------------------------------- -%% Name: cd - Call Progress Tones Detection Package -%% Version: 1 -%% Extends: tonedet version 1 -%% Purpose: This package defines the basic call progress detection tones. -%% This Package extends the possible values of tone id -%% in the "start tone detected", "end tone detected" and -%% "long tone detected" events. -%% Additional values -%% tone id values are defined for start tone detected, -%% end tone detected and long tone detected with -%% the same values as those in package cg (call -%% progress tones generation package). -%% -%% The required set of tone ids corresponds to Recommendation E.180/Q.35 -%% [ITU-T Recommendation E.180/Q.35 (1998)]. See Recommendation E.180/Q.35 -%% for definition of the meanings of these tones. -%%---------------------------------------------------------------------- - -capabilities_cd() -> - [ - {event, "dt"}, - {event, "rt"}, - {event, "bt"}, - {event, "ct"}, - {event, "sit"}, - {event, "wt"}, - {event, "prt"}, - {event, "cw"}, - {event, "cr"} - ]. - - -encode_cd(Scope, Item) -> - case Scope of - event -> - case Item of - "dt" -> [16#00, 16#30]; - "rt" -> [16#00, 16#31]; - "bt" -> [16#00, 16#32]; - "ct" -> [16#00, 16#33]; - "sit"-> [16#00, 16#34]; - "wt" -> [16#00, 16#35]; - "prt"-> [16#00, 16#36]; - "cw" -> [16#00, 16#37]; - "cr" -> [16#00, 16#38] - end - end. - -decode_cd(Scope, Item) -> - case Scope of - event -> - case Item of - [16#00, 16#30] -> "dt"; - [16#00, 16#31] -> "rt"; - [16#00, 16#32] -> "bt"; - [16#00, 16#33] -> "ct"; - [16#00, 16#34] -> "sit"; - [16#00, 16#35] -> "wt"; - [16#00, 16#36] -> "prt"; - [16#00, 16#37] -> "cw"; - [16#00, 16#38] -> "cr" - end - end. - -%%---------------------------------------------------------------------- -%% Name: al - Analog Line Supervision Package -%% Version: 1 -%% Extends: None -%% Purpose: This package defines events and signals for an analog line. -%%---------------------------------------------------------------------- - -capabilities_al() -> - [ - {event, "on"}, - {event, "of"}, - {event, "fl"}, - {signal, "ri"} - ]. - -encode_al(event, Item) -> - ?d("encode_al(event) -> entry with" - "~n Item: ~p", [Item]), - case Item of - "on" -> [16#00, 16#04]; - "of" -> [16#00, 16#05]; - "fl" -> [16#00, 16#06] - end; - -encode_al({event_parameter, Item}, SubItem) -> - ?d("encode_al({event_parameter,~p}) -> entry with" - "~n SubItem: ~p", [Item, SubItem]), - case Item of - "on" -> - case SubItem of - "strict" -> [16#00, 16#01]; - "init" -> [16#00, 16#02] - end; - "of" -> - case SubItem of - "strict" -> [16#00, 16#01]; - "init" -> [16#00, 16#02] - end; - "fl" -> - case SubItem of - "mindur" -> [16#00, 16#04]; - "maxdur" -> [16#00, 16#05] - end - end; - -encode_al(signal, Item) -> - ?d("encode_al(signal) -> entry with" - "~n Item: ~p", [Item]), - case Item of - "ri" -> [16#00, 16#02] - end; - -encode_al({signal_parameter, Item}, SubItem) -> - ?d("encode_al({signal_parameter,~p}) -> entry with" - "~n SubItem: ~p", [Item, SubItem]), - case Item of - "ri" -> - case SubItem of - "cad" -> [16#00, 16#06]; - "freq" -> [16#00, 16#07] - end - end. - -decode_al(event, SubItem) -> - ?d("decode_al(event) -> entry with" - "~n SubItem: ~p", [SubItem]), - case SubItem of - [16#00, 16#04] -> "on"; - [16#00, 16#05] -> "of"; - [16#00, 16#06] -> "fl" - end; - -decode_al({event_parameter, Item}, SubItem) -> - ?d("decode_al({event_parameter,~p}) -> entry with" - "~n SubItem: ~p", [Item, SubItem]), - case Item of - [16#00,16#04] -> %% Event: on - case SubItem of - [16#00, 16#01] -> "strict"; - [16#00, 16#02] -> "init" - end; - [16#00,16#05] -> %% Event: of - case SubItem of - [16#00, 16#01] -> "strict"; - [16#00, 16#02] -> "init" - end; - [16#00,16#06] -> %% Event: fl - case SubItem of - [16#00, 16#04] -> "mindur"; - [16#00, 16#05] -> "maxdur" - end - end; - -decode_al(signal, SubItem) -> - ?d("decode_al(signal) -> entry with" - "~n SubItem: ~p", [SubItem]), - case SubItem of - [16#00, 16#02] -> "ri" - end; - -decode_al({signal_parameter, Item}, SubItem) -> - ?d("decode_al({signal_parameter,~p}) -> entry with" - "~n SubItem: ~p", [Item, SubItem]), - case Item of - [16#00,16#02] -> %% Event: ri - case SubItem of - [16#00, 16#06] -> "cad"; - [16#00, 16#07] -> "freq" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: ct - Basic Continuity Package -%% Version: 1 -%% Extends: None -%% Purpose: This package defines events and signals for continuity test. -%% The continuity test includes provision of either a loopback -%% or transceiver functionality. -%%---------------------------------------------------------------------- - -capabilities_ct() -> - [ - {event, "cmp"}, - {signal, "ct"}, - {signal, "rsp"} - ]. - -encode_ct(event, Item) -> - case Item of - "cmp" -> [16#00, 16#05] - end; -encode_ct({event_parameter, Item}, SubItem) -> - case Item of - "cmp" -> - case SubItem of - "res" -> [16#00, 16#08] - end - end; -encode_ct(signal, Item) -> - case Item of - "ct" -> [16#00, 16#03]; - "rsp" -> [16#00, 16#04] - end. - -decode_ct(event, Item) -> - case Item of - [16#00, 16#05] -> "cmp" - end; -decode_ct({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#05] -> % Event cmp - case SubItem of - [16#00, 16#08] -> "res" - end - end; -decode_ct(signal, Item) -> - case Item of - [16#00, 16#03] -> "ct"; - [16#00, 16#04] -> "rsp" - end. - -%%---------------------------------------------------------------------- -%% Name: nt - Network Package -%% Version: 1 -%% Extends: None -%% Purpose: This package defines properties of network terminations -%% independent of network type. -%%---------------------------------------------------------------------- - -capabilities_nt() -> - [ - {property, "jit"}, - {event, "netfail"}, - {event, "qualert"}, - {statistics, "dur"}, - {statistics, "os"}, - {statistics, "or"} - ]. - -encode_nt(property, Item) -> - case Item of - "jit" -> [16#00, 16#07] - end; -encode_nt(event, Item) -> - case Item of - "netfail" -> [16#00, 16#05]; - "qualert" -> [16#00, 16#06] - end; -encode_nt({event_parameter, Item}, SubItem) -> - case Item of - "netfail" -> - case SubItem of - "cs" -> [16#00, 16#01] - end; - "qualert" -> - case SubItem of - "th" -> [16#00, 16#01] - end - end; -encode_nt(statistics, Item) -> - case Item of - "dur" -> [16#00, 16#01]; - "os" -> [16#00, 16#02]; - "or" -> [16#00, 16#03] - end. - -decode_nt(property, Item) -> - case Item of - [16#00, 16#07] -> "jit" - end; -decode_nt(event, Item) -> - case Item of - [16#00, 16#05] -> "netfail"; - [16#00, 16#06] -> "qualert" - end; -decode_nt({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#05] -> % Event netfail - case SubItem of - [16#00, 16#01] -> "cs" - end; - [16#00, 16#06] -> % Event qualert - case SubItem of - [16#00, 16#01] -> "th" - end - end; -decode_nt(statistics, Item) -> - case Item of - [16#00, 16#01] -> "dur"; - [16#00, 16#02] -> "os"; - [16#00, 16#03] -> "or" - end. - -%%---------------------------------------------------------------------- -%% Name: rtp - RTP Package -%% Version: 1 -%% Extends: nt version 1 -%% Purpose: This package is used to support packet based multimedia -%% data transfer by means of the Real-time Transport Protocol -%% (RTP) [RFC 1889]. -%%---------------------------------------------------------------------- - -capabilities_rtp() -> - [ - {event, "pltrans"}, - {statistics, "ps"}, - {statistics, "pr"}, - {statistics, "pl"}, - {statistics, "jit"}, - {statistics, "delay"} - ]. - -encode_rtp(event, Item) -> - case Item of - "pltrans" -> [16#00, 16#01] - end; -encode_rtp({event_parameter, Item}, SubItem) -> - case Item of - "pltrans" -> - case SubItem of - "rtppltype" -> [16#00, 16#01] - end - end; -encode_rtp(statistics, Item) -> - case Item of - "ps" -> [16#00, 16#04]; - "pr" -> [16#00, 16#05]; - "pl" -> [16#00, 16#06]; - "jit" -> [16#00, 16#07]; - "delay" -> [16#00, 16#08] - end. - -decode_rtp(event, Item) -> - case Item of - [16#00, 16#01] -> "pltrans" - end; -decode_rtp({event_parameter, Item}, SubItem) -> - case Item of - [16#00, 16#01] -> % Event pltrans - case SubItem of - [16#00, 16#01] -> "rtppltype" - end - end; -decode_rtp(statistics, Item) -> - case Item of - [16#00, 16#04] -> "ps"; - [16#00, 16#05] -> "pr"; - [16#00, 16#06] -> "pl"; - [16#00, 16#07] -> "jit"; - [16#00, 16#08] -> "delay" - end. - - -%%---------------------------------------------------------------------- -%% Name: tdmc - TDM Circuit Package -%% Version: 1 -%% Extends: nt version 1 -%% Purpose: This package is used to support TDM circuit terminations. -%%---------------------------------------------------------------------- - -capabilities_tdmc() -> - [ - {property, "ec"}, - {property, "gain"} - ]. - -encode_tdmc(Scope, Item) -> - case Scope of - property -> - case Item of - "ec" -> [16#00, 16#08]; - "gain" -> [16#00, 16#0a] - end - end. - -decode_tdmc(Scope, Item) -> - case Scope of - property -> - case Item of - [16#00, 16#08] -> "ec"; - [16#00, 16#0a] -> "gain" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: swb - SwitchBoard Package -%% Version: 1 -%% Extends: none -%% Purpose: This package is used to support SwitchBoard specials -%%---------------------------------------------------------------------- - -capabilities_swb() -> - [ - {statistics, "fs"}, % Free slots - {statistics, "as"} % Allocated slots - ]. - -encode_swb(Scope, Item) -> - case Scope of - statistics -> - case Item of - "fs" -> [16#00, 16#00]; - "as" -> [16#00, 16#01] - end - end. - -decode_swb(Scope, Item) -> - case Scope of - statistics -> - case Item of - [16#00, 16#00] -> "fs"; - [16#00, 16#01] -> "as" - end - end. - - -%%---------------------------------------------------------------------- -%% Name: native - Pseudo package -%% Version: 1 -%% Extends: None -%% Purpose: Native tags for media stream properties -%% -%% Parameters for Local descriptors and Remote descriptors are -%% specified as tag-value pairs if binary encoding is used for the -%% protocol. This annex contains the property names (PropertyID), the -%% tags (Property Tag), type of the property (Type) and the values -%% (Value).Values presented in the Value field when the field contains -%% references shall be regarded as "information". The reference -%% contains the normative values. If a value field does not contain a -%% reference then the values in that field can be considered as -%% "normative". -%% -%% Tags are given as hexadecimal numbers in this annex. When setting -%% the value of a property, a MGC may underspecify the value according -%% to one of the mechanisms specified in section 7.1.1. -%% -%% For type "enumeration" the value is represented by the value in brack- -%% ets, e.g., Send(0), Receive(1). -%%---------------------------------------------------------------------- -%% -%% C.6. IP -%% -%% ________________________________________________________________ -%% | PropertyID| Tag | Type | Value | -%% | IPv4 | 6001 | 32 BITS | Ipv4Address | -%% | IPv6 | 6002 | 128 BITS | IPv6 Address | -%% | Port | 6003 | Unsigned Int| Port | -%% | Porttype | 6004 | Enumerated | TCP(0),UDP(1),SCTP(2)| -%% |___________|____________|______________|_______________________| -%% -%% -%% C.11. SDP Equivalents -%% -%% ______________________________________________________________ -%% | PropertyID| Tag | Type | Value | -%% | SDP_V | B001| STRING| Protocol Version | -%% | SDP_O | B002| STRING| Owner-creator and session ID | -%% | SDP_S | B003| STRING| Sesson name | -%% | SDP_I | B004| STRING| Session identifier | -%% | SDP_U | B005| STRING| URI of descriptor | -%% | SDC_E | B006| STRING| email address | -%% | SDP_P | B007| STRING| phone number | -%% | SDP_C | B008| STRING| Connection information | -%% | SDP_B | B009| STRING| Bandwidth Information | -%% | SDP_Z | B00A| STRING| time zone adjustment | -%% | SDP_K | B00B| STRING| Encryption Key | -%% | SDP_A | B00C| STRING| Zero or more session attributes| -%% | SDP_T | B00D| STRING| Active Session Time | -%% | SDP_R | B00E| STRING| Zero or more repeat times | -%% | SDP_M | B00F| STRING| Media name and transport addr | -%% | | | | Reference: IETF RFC 2327 | -%% |___________|______|________|_________________________________| -%% -%%---------------------------------------------------------------------- - -capabilities_native() -> - [ - %% C.6. IP - {property, "IPv4"}, - {property, "IPv6"}, - {property, "Port"}, - {property, "Porttype"}, - - %% C.11. SDP Equivalents - {property, "v"}, - {property, "o"}, - {property, "s"}, - {property, "i"}, - {property, "u"}, - {property, "e"}, - {property, "p"}, - {property, "c"}, - {property, "b"}, - {property, "z"}, - {property, "k"}, - {property, "a"}, - {property, "t"}, - {property, "r"}, - {property, "m"} - ]. - -encode_native(Scope, Item) -> - case Scope of - property -> - case Item of - %% IP - "IPv4" -> [16#60, 16#01]; - "IPv6" -> [16#60, 16#02]; - "Port" -> [16#60, 16#03]; - "Porttype" -> [16#60, 16#04]; - - %% SDP - "v" -> [16#b0, 16#01]; - "o" -> [16#b0, 16#02]; - "s" -> [16#b0, 16#03]; - "i" -> [16#b0, 16#04]; - "u" -> [16#b0, 16#05]; - "e" -> [16#b0, 16#06]; - "p" -> [16#b0, 16#07]; - "c" -> [16#b0, 16#08]; - "b" -> [16#b0, 16#09]; - "z" -> [16#b0, 16#0a]; - "k" -> [16#b0, 16#0b]; - "a" -> [16#b0, 16#0c]; - "t" -> [16#b0, 16#0d]; - "r" -> [16#b0, 16#0e]; - "m" -> [16#b0, 16#0f] - end - end. - -decode_native(Scope, [Type, Item]) -> - case Scope of - property -> - case Type of - 16#60 -> - case Item of - 16#01 -> "IPv4"; - 16#02 -> "IPv6"; - 16#03 -> "Port"; - 16#04 -> "Porttype" - end; - - 16#b0 -> - case Item of - 16#01 -> "v"; - 16#02 -> "o"; - 16#03 -> "s"; - 16#04 -> "i"; - 16#05 -> "u"; - 16#06 -> "e"; - 16#07 -> "p"; - 16#08 -> "c"; - 16#09 -> "b"; - 16#0a -> "z"; - 16#0b -> "k"; - 16#0c -> "a"; - 16#0d -> "t"; - 16#0e -> "r"; - 16#0f -> "m" - end - end - end. - -%% ------------------------------------------------------------------- - -% error(Reason) -> -% erlang:error(Reason). - diff --git a/lib/megaco/src/binary/megaco_binary_transformer_prev3a.erl b/lib/megaco/src/binary/megaco_binary_transformer_prev3a.erl deleted file mode 100644 index be716188d3..0000000000 --- a/lib/megaco/src/binary/megaco_binary_transformer_prev3a.erl +++ /dev/null @@ -1,1628 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2004-2020. All Rights Reserved. -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. -%% -%% %CopyrightEnd% -%% - -%% -%%---------------------------------------------------------------------- -%% Purpose: Transform internal form of Megaco/H.248 messages -%% -%% DEPRECATED -%% DEPRECATED -%% DEPRECATED -%% -%%---------------------------------------------------------------------- - --module(megaco_binary_transformer_prev3a). - --include_lib("megaco/include/megaco.hrl"). -%% -include_lib("megaco/include/megaco_message.hrl"). --include_lib("megaco/include/megaco_message_prev3a.hrl"). --include_lib("megaco/src/app/megaco_internal.hrl"). - --export([tr_message/3, tr_transaction/3]). - - --define(DEFAULT_NAME_RESOLVER, megaco_binary_name_resolver_prev3a). - --record(state, {mode, % verify | encode | decode - resolver_module, % - resolver_options}). - -resolve(Type, Item, State, Constraint) -> - case State#state.mode of - verify -> - Item; - encode -> - ?d("resolve(encode) -> encode: ~p",[Item]), - Mod = State#state.resolver_module, - Opt = State#state.resolver_options, - EncodedItem = Mod:encode_name(Opt, Type, Item), - ?d("resolve -> verify contraint for ~p",[EncodedItem]), - verify_constraint(EncodedItem, Constraint); - decode -> - ?d("resolve(decode) -> verify contraint for ~p",[Item]), - DecodedItem = verify_constraint(Item, Constraint), - Mod = State#state.resolver_module, - Opt = State#state.resolver_options, - ?d("resolve(decode) -> decode: ~p",[DecodedItem]), - Mod:decode_name(Opt, Type, DecodedItem) - end. - -verify_constraint(Item, valid) -> - Item; -verify_constraint(Item, Constraint) when is_function(Constraint) -> - Constraint(Item). - -tr_message(MegaMsg, Mode, Config) -> - case Config of - [native] -> - MegaMsg; - [verify] -> - State = #state{mode = verify}, - tr_MegacoMessage(MegaMsg, State); - [] -> - State = #state{mode = Mode, - resolver_module = ?DEFAULT_NAME_RESOLVER, - resolver_options = [8, 8, 8]}, - tr_MegacoMessage(MegaMsg, State); - [{binary_name_resolver, {Module, Options}}] when is_atom(Module) -> - State = #state{mode = Mode, - resolver_module = Module, - resolver_options = Options}, - tr_MegacoMessage(MegaMsg, State) - end. - -tr_transaction(Trans, Mode, Config) -> - case Config of - [native] -> - Trans; - [verify] -> - State = #state{mode = verify}, - tr_Transaction(Trans, State); - [] -> - State = #state{mode = Mode, - resolver_module = ?DEFAULT_NAME_RESOLVER, - resolver_options = [8, 8, 8]}, - tr_Transaction(Trans, State); - [{binary_name_resolver, {Module, Options}}] when is_atom(Module) -> - State = #state{mode = Mode, - resolver_module = Module, - resolver_options = Options}, - tr_Transaction(Trans, State) - end. - -tr_MegacoMessage(#'MegacoMessage'{authHeader = Auth, - mess = Mess}, - State) -> - ?d("tr_MegacoMessage -> entry with" - "~n Auth: ~p" - "~n Mess: ~p" - "~n State: ~p", [Auth, Mess, State]), - #'MegacoMessage'{authHeader = tr_opt_AuthenticationHeader(Auth, State), - mess = tr_Message(Mess, State)}. - -tr_opt_AuthenticationHeader(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_AuthenticationHeader(#'AuthenticationHeader'{secParmIndex = SPI, - seqNum = SN, - ad = AuthData}, - State) -> - #'AuthenticationHeader'{secParmIndex = tr_SecurityParmIndex(SPI, State), - seqNum = tr_SequenceNum(SN, State), - ad = tr_AuthData(AuthData, State)}. - -tr_SecurityParmIndex(SPI, State) -> - tr_HEXDIG(SPI, State, 4, 4). % BUGBUG: Mismatch between ASN.1 and ABNF - -tr_SequenceNum(SN, State) -> - tr_HEXDIG(SN, State, 4, 4). % BUGBUG: Mismatch between ASN.1 and ABNF - -tr_AuthData(AuthData, State) -> - tr_HEXDIG(AuthData, State, 12, 32). % BUGBUG: Mismatch between ASN.1 and ABNF - -tr_Message(#'Message'{version = Version, - mId = MID, - messageBody = Body}, - State) -> - #'Message'{version = tr_version(Version, State), - mId = tr_MId(MID, State), - messageBody = tr_Message_messageBody(Body, State)}. - -tr_version(Version, State) -> - tr_DIGIT(Version, State, 0, 99). - -tr_Message_messageBody({Tag, Val}, State) -> - Val2 = - case Tag of - messageError -> tr_ErrorDescriptor(Val, State); - transactions when is_list(Val) -> [tr_Transaction(T, State) || T <- Val] - end, - {Tag, Val2}. - -tr_MId({Tag, Val}, State) -> - Val2 = - case Tag of - ip4Address -> tr_IP4Address(Val, State); - ip6Address -> tr_IP6Address(Val, State); - domainName -> tr_DomainName(Val, State); - deviceName -> tr_PathName(Val, State); - mtpAddress -> tr_mtpAddress(Val, State) - end, - {Tag, Val2}. - -tr_mtpAddress(MtpAddr, State) -> - tr_OCTET_STRING(MtpAddr, State, 2, 4). % BUGBUG: Mismatch between ASN.1 and ABNF - -tr_DomainName(#'DomainName'{name = Name, - portNumber = Port}, - State) -> - Domain = #'DomainName'{name = tr_STRING(Name, State), % BUGBUG: Mismatch between ASN.1 and ABNF - portNumber = tr_opt_portNumber(Port, State)}, - {domainName, Domain2} = resolve(mid, {domainName, Domain}, State, valid), - Domain2. - -tr_IP4Address(#'IP4Address'{address = [A1, A2, A3, A4], - portNumber = Port}, - State) -> - #'IP4Address'{address = [tr_V4hex(A1, State), - tr_V4hex(A2, State), - tr_V4hex(A3, State), - tr_V4hex(A4, State)], - portNumber = tr_opt_portNumber(Port, State)}. - -tr_V4hex(Val, State) -> - tr_DIGIT(Val, State, 0, 255). - -tr_IP6Address(_Val, _State) -> - error(ipv6_not_supported). %% BUGBUG: nyi - -tr_PathName(Path, State) -> - %% BUGBUG: ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" ) - %% BUGBUG: ["@" pathDomainName ] - Constraint = fun({deviceName, Item}) -> tr_STRING(Item, State, 1, 64) end, - resolve(mid, {deviceName, Path}, State, Constraint). - -tr_Transaction({Tag, Val}, State) -> - Val2 = - case Tag of - transactionRequest -> tr_TransactionRequest(Val, State); - transactionPending -> tr_TransactionPending(Val, State); - transactionReply -> tr_TransactionReply(Val, State); - transactionResponseAck -> [tr_TransactionAck(T, State) || T <- Val] - end, - {Tag, Val2}. - -tr_TransactionAck(#'TransactionAck'{firstAck = First, - lastAck = Last}, - State) -> - #'TransactionAck'{firstAck = tr_TransactionId(First, State), - lastAck = tr_opt_TransactionId(Last, State)}. - -tr_opt_TransactionId(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_TransactionId(Id, State) -> - tr_TransactionId(Id, State). - -tr_TransactionId(Id, State) -> - tr_UINT32(Id, State). - -tr_TransactionRequest(#'TransactionRequest'{transactionId = Id, - actions = Actions}, - State) when is_list(Actions) -> - - #'TransactionRequest'{transactionId = tr_TransactionId(Id, State), - actions = [tr_ActionRequest(ActReq, State) || ActReq <- Actions]}. - -tr_TransactionPending(#'TransactionPending'{transactionId = Id}, - State) -> - #'TransactionPending'{transactionId = tr_TransactionId(Id, State)}. - -tr_TransactionReply(#'TransactionReply'{transactionId = Id, - immAckRequired = ImmAck, - transactionResult = TransRes, - %% These fields are actually not - %% supported in this implementation, - %% but because the messanger module - %% cannot see any diff between the - %% various v3 implementations... - segmentNumber = asn1_NOVALUE, - segmentationComplete = asn1_NOVALUE}, - State) -> - #'TransactionReply'{transactionId = tr_TransactionId(Id, State), - immAckRequired = tr_opt_null(ImmAck, State), - transactionResult = tr_TransactionReply_transactionResult(TransRes, State), - segmentNumber = asn1_NOVALUE, - segmentationComplete = asn1_NOVALUE}; -tr_TransactionReply(TR, _State) -> - error({unsupported_TransactionReply, TR}). - -tr_opt_null(asn1_NOVALUE, _State) -> asn1_NOVALUE; -tr_opt_null('NULL', _State) -> 'NULL'. - -tr_TransactionReply_transactionResult({Tag, Val}, State) -> - Val2 = - case Tag of - transactionError -> - tr_ErrorDescriptor(Val, State); - actionReplies when is_list(Val) andalso (Val =/= []) -> - [tr_ActionReply(ActRep, State) || ActRep <- Val] - end, - {Tag, Val2}. - -tr_opt_ErrorDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_ErrorDescriptor(ErrDesc, State) -> - tr_ErrorDescriptor(ErrDesc, State). - -tr_ErrorDescriptor(#'ErrorDescriptor'{errorCode = Code, - errorText = Text}, - State) -> - #'ErrorDescriptor'{errorCode = tr_ErrorCode(Code, State), - errorText = tr_opt_ErrorText(Text, State)}. - -tr_ErrorCode(Code, State) -> - tr_DIGIT(Code, State, 0, 999). - -tr_opt_ErrorText(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_ErrorText(Text, State) -> - tr_QUOTED_STRING(Text, State). - -tr_ContextID(CtxId, State) -> - case CtxId of - ?megaco_all_context_id -> ?megaco_all_context_id; - ?megaco_null_context_id -> ?megaco_null_context_id; - ?megaco_choose_context_id -> ?megaco_choose_context_id; - Int when is_integer(Int) -> tr_UINT32(Int, State) - end. - -tr_ActionRequest(#'ActionRequest'{contextId = CtxId, - contextRequest = CtxReq, - contextAttrAuditReq = CtxAuditReq, - commandRequests = CmdReqList}, - State) -> - #'ActionRequest'{contextId = tr_ContextID(CtxId, State), - contextRequest = tr_opt_ContextRequest(CtxReq, State), - contextAttrAuditReq = tr_opt_ContextAttrAuditRequest(CtxAuditReq, State), - commandRequests = [tr_CommandRequest(CmdReq, State) || CmdReq <- CmdReqList]}. - -tr_ActionReply(#'ActionReply'{contextId = CtxId, - errorDescriptor = ErrDesc, - contextReply = CtxRep, - commandReply = CmdRepList}, - State) -> - CmdRepList2 = [tr_CommandReply(CmdRep, State) || CmdRep <- CmdRepList], - #'ActionReply'{contextId = tr_ContextID(CtxId, State), - errorDescriptor = tr_opt_ErrorDescriptor(ErrDesc, State), - contextReply = tr_opt_ContextRequest(CtxRep, State), - commandReply = CmdRepList2}. - -tr_opt_ContextRequest(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_ContextRequest(CR, State) -> - tr_ContextRequest(CR, State). - -tr_ContextRequest(#'ContextRequest'{priority = Prio, - emergency = Em, - topologyReq = TopReqList, - iepsCallind = Ind, - contextProp = Props}, - State) -> - Prio2 = - case Prio of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> tr_integer(Prio, State, 0, 15) - end, - Em2 = - case Em of - asn1_NOVALUE -> asn1_NOVALUE; - false -> false; - true -> true - end, - TopReqList2 = - case TopReqList of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> [tr_TopologyRequest(TopReq, State) || - TopReq <- TopReqList] - end, - Ind2 = - case Ind of - asn1_NOVALUE -> asn1_NOVALUE; - false -> false; - true -> true - end, - Props2 = - case Props of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> [tr_PropertyParm(Prop, State) || Prop <- Props] - end, - #'ContextRequest'{priority = Prio2, - emergency = Em2, - topologyReq = TopReqList2, - iepsCallind = Ind2, - contextProp = Props2}. - -tr_opt_ContextAttrAuditRequest(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_ContextAttrAuditRequest(CAAR, State) -> - tr_ContextAttrAuditRequest(CAAR, State). - -tr_ContextAttrAuditRequest(#'ContextAttrAuditRequest'{topology = Top, - emergency = Em, - priority = Prio, - iepsCallind = Ind, - contextPropAud = Props}, - State) -> - Top2 = tr_opt_null(Top, State), - Em2 = tr_opt_null(Em, State), - Prio2 = tr_opt_null(Prio, State), - Ind2 = tr_opt_null(Ind, State), - Props2 = - case Props of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - [tr_indAudPropertyParm(Prop, State) || Prop <- Props] - end, - #'ContextAttrAuditRequest'{topology = Top2, - emergency = Em2, - priority = Prio2, - iepsCallind = Ind2, - contextPropAud = Props2}. - -tr_CommandRequest(#'CommandRequest'{command = Cmd, - optional = Opt, - wildcardReturn = Wild}, - State) -> - #'CommandRequest'{optional = tr_opt_null(Opt, State), - wildcardReturn = tr_opt_null(Wild, State), - command = tr_Command(Cmd, State)}. - -tr_Command({Tag, Val}, State) -> - Val2 = - case Tag of - addReq -> tr_AmmRequest(Val, State); - moveReq -> tr_AmmRequest(Val, State); - modReq -> tr_AmmRequest(Val, State); - subtractReq -> tr_SubtractRequest(Val, State); - auditCapRequest -> tr_AuditRequest(Val, State); - auditValueRequest -> tr_AuditRequest(Val, State); - notifyReq -> tr_NotifyRequest(Val, State); - serviceChangeReq -> tr_ServiceChangeRequest(Val, State) - end, - {Tag, Val2}. - -tr_CommandReply({Tag, Val}, State) -> - Val2 = - case Tag of - addReply -> tr_AmmsReply(Val, State); - moveReply -> tr_AmmsReply(Val, State); - modReply -> tr_AmmsReply(Val, State); - subtractReply -> tr_AmmsReply(Val, State); - auditCapReply -> tr_AuditReply(Val, State); - auditValueReply -> tr_AuditReply(Val, State); - notifyReply -> tr_NotifyReply(Val, State); - serviceChangeReply -> tr_ServiceChangeReply(Val, State) - end, - {Tag, Val2}. - -tr_TopologyRequest(#'TopologyRequest'{terminationFrom = From, - terminationTo = To, - topologyDirection = Dir}, - State) -> - Dir2 = - case Dir of - bothway -> bothway; - isolate -> isolate; - oneway -> oneway - end, - #'TopologyRequest'{terminationFrom = tr_TerminationID(From, State), - terminationTo = tr_TerminationID(To, State), - topologyDirection = Dir2}. - -tr_AmmRequest(#'AmmRequest'{terminationID = IdList, - descriptors = DescList}, - State) -> - #'AmmRequest'{terminationID = [tr_TerminationID(Id, State) || - Id <- IdList], - descriptors = tr_ammDescriptors(DescList, [], State)}. - -tr_ammDescriptors([], Acc, _State) -> - lists:reverse(Acc); -tr_ammDescriptors([Desc|Descs], Acc, State) -> - case tr_ammDescriptor(Desc, State) of - {_, deprecated} when State#state.mode =:= encode -> - error({deprecated, Desc}); - {_, deprecated} when State#state.mode =:= decode -> - %% SKIP - tr_ammDescriptors(Descs, Acc, State); - {_, deprecated} -> - %% SKIP - tr_ammDescriptors(Descs, Acc, State); - NewDesc -> - tr_ammDescriptors(Descs, [NewDesc|Acc], State) - end. - -tr_ammDescriptor({Tag, Desc}, State) -> - Desc2 = - case Tag of - mediaDescriptor -> tr_MediaDescriptor(Desc, State); - modemDescriptor -> tr_ModemDescriptor(Desc, State); - muxDescriptor -> tr_MuxDescriptor(Desc, State); - eventsDescriptor -> tr_EventsDescriptor(Desc, State); - eventBufferDescriptor -> tr_EventBufferDescriptor(Desc, State); - signalsDescriptor -> tr_SignalsDescriptor(Desc, State); - digitMapDescriptor -> tr_DigitMapDescriptor(Desc, State); - auditDescriptor -> tr_AuditDescriptor(Desc, State); - statisticsDescriptor -> tr_StatisticsDescriptor(Desc, State) - end, - {Tag, Desc2}. - -tr_AmmsReply(#'AmmsReply'{terminationID = IdList, - terminationAudit = TermAudit}, - State) -> - TermAudit2 = - case TermAudit of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> tr_TerminationAudit(TermAudit, State) - end, - #'AmmsReply'{terminationID = [tr_TerminationID(Id, State) || - Id <- IdList], - terminationAudit = TermAudit2}. - -tr_SubtractRequest(#'SubtractRequest'{terminationID = IdList, - auditDescriptor = Desc}, - State) -> - #'SubtractRequest'{terminationID = [tr_TerminationID(Id, State) || - Id <- IdList], - auditDescriptor = tr_opt_AuditDescriptor(Desc, State)}. - -tr_AuditRequest(#'AuditRequest'{terminationID = Id, - auditDescriptor = Desc}, - State) -> - #'AuditRequest'{terminationID = tr_TerminationID(Id, State), - auditDescriptor = tr_AuditDescriptor(Desc, State)}. - -%% auditReply = (AuditValueToken / AuditCapToken ) -%% ( contextTerminationAudit / auditOther) -%% auditOther = EQUAL TerminationID LBRKT -%% terminationAudit RBRKT -%% terminationAudit = auditReturnParameter *(COMMA auditReturnParameter) -%% -%% contextTerminationAudit = EQUAL CtxToken ( terminationIDList / -%% LBRKT errorDescriptor RBRKT ) - -tr_AuditReply({Tag, Val}, State) -> - Val2 = - case Tag of - contextAuditResult -> - [tr_TerminationID(Id, State) || Id <- Val]; - error -> - tr_ErrorDescriptor(Val, State); - auditResult -> - tr_AuditResult(Val, State) - end, - {Tag, Val2}. - -tr_AuditResult(#'AuditResult'{terminationID = Id, - terminationAuditResult = AuditRes}, - State) -> - #'AuditResult'{terminationID = tr_TerminationID(Id, State), - terminationAuditResult = tr_TerminationAudit(AuditRes, State)}. - -tr_opt_AuditDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_AuditDescriptor(Desc, State) -> - tr_AuditDescriptor(Desc, State). - -%% BUGBUG BUGBUG BUGBUG -%% With this construction it is possible to have both auditToken -%% and auditPropertyToken, but it is actually valid? -tr_AuditDescriptor(#'AuditDescriptor'{auditToken = Tokens, - auditPropertyToken = APTs}, - State) -> - Tokens2 = - case Tokens of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> [tr_auditItem(Token, State) || Token <- Tokens] - end, - %% v2 - APTs2 = - case APTs of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - [tr_indAuditParameter(APT, State) || APT <- APTs] - end, - #'AuditDescriptor'{auditToken = Tokens2, - auditPropertyToken = APTs2}. - -tr_auditItem(Token, _State) -> - case Token of - muxToken -> muxToken; - modemToken -> modemToken; - mediaToken -> mediaToken; - eventsToken -> eventsToken; - signalsToken -> signalsToken; - digitMapToken -> digitMapToken; - statsToken -> statsToken; - observedEventsToken -> observedEventsToken; - packagesToken -> packagesToken; - eventBufferToken -> eventBufferToken - end. - -%% --- v2 begin --- - -tr_indAuditParameter({Tag, Val}, State) -> - Val2 = - case Tag of - indAudMediaDescriptor -> - tr_indAudMediaDescriptor(Val, State); - indAudEventsDescriptor -> - tr_indAudEventsDescriptor(Val, State); - indAudSignalsDescriptor -> - tr_indAudSignalsDescriptor(Val, State); - indAudDigitMapDescriptor -> - tr_indAudDigitMapDescriptor(Val, State); - indAudEventBufferDescriptor -> - tr_indAudEventBufferDescriptor(Val, State); - indAudStatisticsDescriptor -> - tr_indAudStatisticsDescriptor(Val, State); - indAudPackagesDescriptor -> - tr_indAudPackagesDescriptor(Val, State) - end, - {Tag, Val2}. - - -%% - - -tr_indAudMediaDescriptor(#'IndAudMediaDescriptor'{termStateDescr = TSD, - streams = S}, - State) -> - TSD2 = - case TSD of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - tr_indAudTerminationStateDescriptor(TSD, State) - end, - S2 = - case S of - asn1_NOVALUE -> - asn1_NOVALUE; - {oneStream, OS} -> - {oneStream, tr_indAudStreamParms(OS, State)}; - {multiStream, MS} -> - MS2 = [tr_indAudStreamDescriptor(MS1, State) || MS1 <- MS], - {multiStream, MS2} - end, - #'IndAudMediaDescriptor'{termStateDescr = TSD2, - streams = S2}. - -tr_indAudTerminationStateDescriptor(Val, State) - when is_record(Val, 'IndAudTerminationStateDescriptor') -> - #'IndAudTerminationStateDescriptor'{propertyParms = Parms, - eventBufferControl = EBC, - serviceState = SS} = Val, - Parms2 = [tr_indAudPropertyParm(Parm, State) || Parm <- Parms], - EBC2 = tr_opt_null(EBC, State), - SS2 = tr_opt_null(SS, State), - #'IndAudTerminationStateDescriptor'{propertyParms = Parms2, - eventBufferControl = EBC2, - serviceState = SS2}. - - -tr_indAudStreamParms(#'IndAudStreamParms'{localControlDescriptor = LCD, - localDescriptor = LD, - remoteDescriptor = RD, - statisticsDescriptor = SD}, - State) -> - LCD2 = - case LCD of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - tr_indAudLocalControlDescriptor(LCD, State) - end, - LD2 = - case LD of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - tr_indAudLocalRemoteDescriptor(LD, State) - end, - RD2 = - case RD of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - tr_indAudLocalRemoteDescriptor(RD, State) - end, - SD2 = - case SD of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - tr_indAudStatisticsDescriptor(SD, State) - end, - #'IndAudStreamParms'{localControlDescriptor = LCD2, - localDescriptor = LD2, - remoteDescriptor = RD2, - statisticsDescriptor = SD2}. - -tr_indAudLocalControlDescriptor(Val, State) - when is_record(Val, 'IndAudLocalControlDescriptor') -> - #'IndAudLocalControlDescriptor'{streamMode = M, - reserveValue = V, - reserveGroup = G, - propertyParms = P} = Val, - M2 = tr_opt_null(M, State), - V2 = tr_opt_null(V, State), - G2 = tr_opt_null(G, State), - P2 = tr_indAudLocalControlDescriptor_propertyParms(P, State), - #'IndAudLocalControlDescriptor'{streamMode = M2, - reserveValue = V2, - reserveGroup = G2, - propertyParms = P2}. - -tr_indAudLocalControlDescriptor_propertyParms(Parms, State) - when is_list(Parms) andalso (length(Parms) > 0) -> - [tr_indAudPropertyParm(Parm, State) || Parm <- Parms]; -tr_indAudLocalControlDescriptor_propertyParms(asn1_NOVALUE, _State) -> - asn1_NOVALUE. - -tr_indAudLocalRemoteDescriptor(#'IndAudLocalRemoteDescriptor'{propGroupID = ID, - propGrps = Grps}, - State) -> - #'IndAudLocalRemoteDescriptor'{propGroupID = tr_opt_UINT16(ID, State), - propGrps = tr_indAudPropertyGroup(Grps, - State)}. - -tr_indAudPropertyGroup(Grps, State) when is_list(Grps) -> - [tr_indAudPropertyParm(Parm, State) || Parm <- Grps]. - -tr_indAudPropertyParm(#'IndAudPropertyParm'{name = Name0}, State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - Name = resolve(property, Name0, State, Constraint), - #'IndAudPropertyParm'{name = Name}. - - -tr_indAudStreamDescriptor(#'IndAudStreamDescriptor'{streamID = ID, - streamParms = Parms}, - State) -> - #'IndAudStreamDescriptor'{streamID = tr_StreamID(ID, State), - streamParms = tr_indAudStreamParms(Parms, - State)}. - - -%% - - -tr_indAudEventsDescriptor(#'IndAudEventsDescriptor'{requestID = RID, - pkgdName = Name0, - streamID = SID}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - Name = resolve(event, Name0, State, Constraint), - #'IndAudEventsDescriptor'{requestID = tr_opt_RequestID(RID, State), - pkgdName = Name, - streamID = tr_opt_StreamID(SID, State)}. - - -%% - - -tr_indAudSignalsDescriptor({Tag, Val}, State) -> - case Tag of - signal -> - {signal, tr_indAudSignal(Val, State)}; - seqSigList -> - {seqSigList, tr_indAudSeqSigList(Val, State)} - end. - -tr_opt_indAudSignal(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_indAudSignal(Val, State) -> - tr_indAudSignal(Val, State). - -tr_indAudSignal(#'IndAudSignal'{signalName = Name0, - streamID = SID}, State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - Name = resolve(signal, Name0, State, Constraint), - #'IndAudSignal'{signalName = Name, - streamID = tr_opt_StreamID(SID, State)}. - -tr_indAudSeqSigList(#'IndAudSeqSigList'{id = ID, - signalList = SigList}, State) -> - #'IndAudSeqSigList'{id = tr_integer(ID, State, 0, 65535), - signalList = tr_opt_indAudSignal(SigList, State)}. - -%% - - -tr_indAudDigitMapDescriptor(#'IndAudDigitMapDescriptor'{digitMapName = Name}, - State) -> - #'IndAudDigitMapDescriptor'{digitMapName = - tr_opt_DigitMapName(Name, State)}. - - -%% - - -tr_indAudEventBufferDescriptor(#'IndAudEventBufferDescriptor'{eventName = N, - streamID = SID}, - State) -> - ?d("tr_indAudEventBufferDescriptor -> entry with" - "~n N: ~p" - "~n SID: ~p", [N, SID]), - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - Name = resolve(event, N, State, Constraint), - ?d("tr_indAudEventBufferDescriptor -> entry with" - "~n Name: ~p", [Name]), - #'IndAudEventBufferDescriptor'{eventName = Name, - streamID = tr_opt_StreamID(SID, State)}. - -%% - - -tr_indAudStatisticsDescriptor(#'IndAudStatisticsDescriptor'{statName = N}, - State) -> - ?d("tr_indAudEventBufferDescriptor -> entry with" - "~n N: ~p", [N]), - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - Name = resolve(statistics, N, State, Constraint), - #'IndAudStatisticsDescriptor'{statName = Name}. - - -%% - - -tr_indAudPackagesDescriptor(#'IndAudPackagesDescriptor'{packageName = N, - packageVersion = V}, - State) -> - ?d("tr_indAudPackagesDescriptor -> entry with" - "~n N: ~p" - "~n V: ~p", [N, V]), - Constraint = fun(Item) -> tr_Name(Item, State) end, - Name = resolve(package, N, State, Constraint), - ?d("tr_indAudPackagesDescriptor -> entry with" - "~n Name: ~p", [Name]), - #'IndAudPackagesDescriptor'{packageName = Name, - packageVersion = tr_integer(V, State, 0, 99)}. - -%% -- v2 end -- - - -tr_TerminationAudit(ParmList, State) when is_list(ParmList) -> - do_tr_TerminationAudit(ParmList, [], State). - -do_tr_TerminationAudit([], Acc, _State) -> - lists:reverse(Acc); -do_tr_TerminationAudit([Parm|ParmList], Acc, State) -> - case tr_AuditReturnParameter(Parm, State) of - {_, deprecated} when State#state.mode =:= encode -> - error({deprecated, Parm}); - {_, deprecated} when State#state.mode =:= decode -> - %% SKIP - do_tr_TerminationAudit(ParmList, Acc, State); - {_, deprecated} -> - %% SKIP - do_tr_TerminationAudit(ParmList, Acc, State); - NewParm -> - do_tr_TerminationAudit(ParmList, [NewParm|Acc], State) - end. - -tr_AuditReturnParameter({Tag, Val}, State) -> - Val2 = - case Tag of - errorDescriptor -> - tr_ErrorDescriptor(Val, State); - mediaDescriptor -> - tr_MediaDescriptor(Val, State); - modemDescriptor -> - tr_ModemDescriptor(Val, State); - muxDescriptor -> - tr_MuxDescriptor(Val, State); - eventsDescriptor -> - tr_EventsDescriptor(Val, State); - eventBufferDescriptor -> - tr_EventBufferDescriptor(Val, State); - signalsDescriptor -> - tr_SignalsDescriptor(Val, State); - digitMapDescriptor -> - tr_DigitMapDescriptor(Val, State); - observedEventsDescriptor -> - tr_ObservedEventsDescriptor(Val, State); - statisticsDescriptor -> - tr_StatisticsDescriptor(Val, State); - packagesDescriptor -> - tr_PackagesDescriptor(Val, State); - emptyDescriptors -> - tr_EmptyDescriptors(Val, State) - end, - {Tag, Val2}. - -tr_EmptyDescriptors(#'AuditDescriptor'{auditToken = Tokens}, - State) -> - case Tokens of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> [tr_auditItem(Token, State) || Token <- Tokens] - end. - -tr_NotifyRequest(#'NotifyRequest'{terminationID = IdList, - observedEventsDescriptor = ObsDesc, - errorDescriptor = ErrDesc}, - State) -> - %% BUGBUG: Mismatch between ASN.1 and ABNF - %% BUGBUG: The following ought to be a 'choice' - #'NotifyRequest'{terminationID = [tr_TerminationID(Id, State) || - Id <- IdList], - observedEventsDescriptor = tr_ObservedEventsDescriptor(ObsDesc, State), - errorDescriptor = tr_opt_ErrorDescriptor(ErrDesc, State)}. - -tr_NotifyReply(#'NotifyReply'{terminationID = IdList, - errorDescriptor = ErrDesc}, - State) -> - #'NotifyReply'{terminationID = [tr_TerminationID(Id, State) || Id <- IdList], - errorDescriptor = tr_opt_ErrorDescriptor(ErrDesc, State)}. - -tr_ObservedEventsDescriptor(#'ObservedEventsDescriptor'{requestId = Id, - observedEventLst = Events}, - State) when is_list(Events) -> - #'ObservedEventsDescriptor'{requestId = tr_RequestID(Id, State), - observedEventLst = [tr_ObservedEvent(E, State) || E <- Events]}. - -%% ;time per event, because it might be buffered -%% observedEvent = [ TimeStamp LWSP COLON] LWSP -%% pkgdName [ LBRKT observedEventParameter -%% *(COMMA observedEventParameter) RBRKT ] -%% -%% ;at-most-once eventStream, every eventParameterName at most once -%% observedEventParameter = eventStream / eventOther - -tr_ObservedEvent(#'ObservedEvent'{eventName = Name, - streamID = Id, - eventParList = Parms, - timeNotation = Time}, - State) -> - #'ObservedEvent'{eventName = tr_EventName(Name, State), - streamID = tr_opt_StreamID(Id, State), - eventParList = [tr_EventParameter(P, Name, State) || P <- Parms], - timeNotation = tr_opt_TimeNotation(Time, State)}. - -tr_EventName(Name, State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - resolve(event, Name, State, Constraint). - -tr_EventParameter(#'EventParameter'{eventParameterName = ParName, - value = Value, - extraInfo = Extra}, - EventName, - State) -> - %% BUGBUG: event parameter name - Constraint = fun(Item) -> tr_Name(Item, State) end, - N = resolve({event_parameter, EventName}, ParName, State, Constraint), - #'EventParameter'{eventParameterName = N, - value = tr_Value(Value, State), - extraInfo = tr_opt_extraInfo(Extra, State)}. - -tr_ServiceChangeRequest(#'ServiceChangeRequest'{terminationID = IdList, - serviceChangeParms = Parms}, - State) -> - #'ServiceChangeRequest'{terminationID = [tr_TerminationID(Id, State) || Id <- IdList], - serviceChangeParms = tr_ServiceChangeParm(Parms, State)}. - -%% serviceChangeReply = ServiceChangeToken EQUAL TerminationID -%% [LBRKT (errorDescriptor / -%% serviceChangeReplyDescriptor) RBRKT] -%% serviceChangeReplyDescriptor = ServicesToken LBRKT -%% servChgReplyParm *(COMMA servChgReplyParm) RBRKT -%% -%% ;at-most-once. Version is REQUIRED on first ServiceChange response -%% servChgReplyParm = (serviceChangeAddress / serviceChangeMgcId / -%% serviceChangeProfile / serviceChangeVersion ) -tr_ServiceChangeReply(#'ServiceChangeReply'{terminationID = IdList, - serviceChangeResult = Res}, - State) -> - #'ServiceChangeReply'{terminationID = [tr_TerminationID(Id, State) || Id <- IdList], - serviceChangeResult = tr_ServiceChangeResult(Res, State)}. - -tr_ServiceChangeResult({Tag, Val}, State) -> - Val2 = - case Tag of - errorDescriptor -> tr_ErrorDescriptor(Val, State); - serviceChangeResParms -> tr_ServiceChangeResParm(Val, State) - end, - {Tag, Val2}. - -%% TerminationID = "ROOT" / pathNAME / "$" / "*" -%% ; Total length of pathNAME must not exceed 64 chars. -%% pathNAME = ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" ) -%% ["@" pathDomainName ] - -tr_TerminationID(TermId, State) when State#state.mode =/= verify -> - resolve(term_id, TermId, State, valid); -tr_TerminationID(#'TerminationID'{wildcard = Wild, - id = Id}, - _State) -> - #'TerminationID'{wildcard = Wild, - id = Id}; -tr_TerminationID(#megaco_term_id{contains_wildcards = IsWild, - id = Id}, - State) -> - #megaco_term_id{contains_wildcards = tr_bool(IsWild, State), - id = [tr_term_id_component(Sub, State) || Sub <- Id]}. - -tr_opt_bool(asn1_NOVALUE, _State) -> asn1_NOVALUE; -tr_opt_bool(Bool, State) -> tr_bool(Bool, State). - -tr_bool(true, _State) -> true; -tr_bool(false, _State) -> false. - -tr_term_id_component(Sub, _State) -> - case Sub of - all -> all; - choose -> choose; - Char when is_integer(Char) -> Char - end. - -%% mediaDescriptor = MediaToken LBRKT mediaParm *(COMMA mediaParm) RBRKT -%% ; at-most-once per item -%% ; and either streamParm or streamDescriptor but not both -%% mediaParm = (streamParm / streamDescriptor / -%% terminationStateDescriptor) -%% ; at-most-once -%% streamParm = ( localDescriptor / remoteDescriptor / -%% localControlDescriptor ) -%% streamDescriptor = StreamToken EQUAL StreamID LBRKT streamParm -%% *(COMMA streamParm) RBRKT -tr_MediaDescriptor(#'MediaDescriptor'{termStateDescr = TermState, - streams = Streams}, - State) -> - #'MediaDescriptor'{termStateDescr = tr_opt_TerminationStateDescriptor(TermState, State), - streams = tr_opt_streams(Streams, State)}. - -tr_opt_streams(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_streams({Tag, Val}, State) -> - Val2 = - case Tag of - oneStream -> tr_StreamParms(Val, State); - multiStream -> [tr_StreamDescriptor(SD, State) || SD <- Val] - end, - {Tag, Val2}. - -tr_StreamParms(#'StreamParms'{localControlDescriptor = LCD, - localDescriptor = LD, - remoteDescriptor = RD, - statisticsDescriptor = SD}, - State) -> - LCD2 = tr_opt_LocalControlDescriptor(LCD, State), - LD2 = tr_opt_LocalRemoteDescriptor(LD, State), - RD2 = tr_opt_LocalRemoteDescriptor(RD, State), - SD2 = tr_opt_StatisticsDescriptor(SD, State), - #'StreamParms'{localControlDescriptor = LCD2, - localDescriptor = LD2, - remoteDescriptor = RD2, - statisticsDescriptor = SD2}. - -tr_StreamDescriptor(#'StreamDescriptor'{streamID = Id, - streamParms = Parms}, - State) -> - #'StreamDescriptor'{streamID = tr_StreamID(Id, State), - streamParms = tr_StreamParms(Parms, State)}. - -%% localControlDescriptor = LocalControlToken LBRKT localParm -%% *(COMMA localParm) RBRKT -%% -%% ; at-most-once per item -%% localParm = ( streamMode / propertyParm / -%% reservedValueMode / reservedGroupMode ) -%% reservedValueMode = ReservedValueToken EQUAL ( "ON" / "OFF" ) -%% reservedGroupMode = ReservedGroupToken EQUAL ( "ON" / "OFF" ) -%% -%% reservedMode = ReservedToken EQUAL ( "ON" / "OFF" ) -%% -%% streamMode = ModeToken EQUAL streamModes -tr_opt_LocalControlDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_LocalControlDescriptor(#'LocalControlDescriptor'{streamMode = Mode, - reserveGroup = Group, - reserveValue = Value, - propertyParms = Props}, - State) -> - #'LocalControlDescriptor'{streamMode = tr_opt_StreamMode(Mode, State), - reserveGroup = tr_opt_bool(Group, State), - reserveValue = tr_opt_bool(Value, State), - propertyParms = [tr_PropertyParm(P, State) || P <- Props]}. - -tr_opt_StreamMode(Mode, _State) -> - case Mode of - asn1_NOVALUE -> asn1_NOVALUE; - sendOnly -> sendOnly; - recvOnly -> recvOnly; - sendRecv -> sendRecv; - inactive -> inactive; - loopBack -> loopBack - end. - -tr_Name(Name, State) -> - %% BUGBUG: transform - %% BUGBUG: NAME = ALPHA *63(ALPHA / DIGIT / "_" ) - tr_STRING(Name, State, 2, 2). - -tr_PkgdName(Name, State) -> - %% BUGBUG: transform - %% BUGBUG: pkgdName = (NAME / "*") SLASH (ItemID / "*" ) - tr_OCTET_STRING(Name, State, 4, 4). - -%% When text encoding the protocol, the descriptors consist of session -%% descriptions as defined in SDP (RFC2327), except that the "s=", "t=" -%% and "o=" lines are optional. When multiple session descriptions are -%% provided in one descriptor, the "v=" lines are required as delimiters; -%% otherwise they are optional. Implementations shall accept session -%% descriptions that are fully conformant to RFC2327. When binary -%% encoding the protocol the descriptor consists of groups of properties -%% (tag-value pairs) as specified in Annex C. Each such group may -%% contain the parameters of a session description. -tr_opt_LocalRemoteDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_LocalRemoteDescriptor(#'LocalRemoteDescriptor'{propGrps = Groups}, - State) -> - #'LocalRemoteDescriptor'{propGrps = [tr_PropertyGroup(G, State) || G <- Groups]}. - -tr_PropertyGroup(Props, State) -> - [tr_PropertyGroupParm(P, State) || P <- Props]. - -tr_PropertyGroupParm(#'PropertyParm'{name = Name, - value = Value}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - #'PropertyParm'{name = resolve(property, Name, State, Constraint), - value = tr_OCTET_STRING(Value, State, 0, infinity)}. - -tr_PropertyParm(#'PropertyParm'{name = Name, - value = Value, - extraInfo = Extra}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - #'PropertyParm'{name = resolve(property, Name, State, Constraint), - value = tr_Value(Value, State), - extraInfo = tr_opt_extraInfo(Extra, State)}. - -tr_opt_extraInfo(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_extraInfo({relation, Rel}, _State) -> - Rel2 = - case Rel of - greaterThan -> greaterThan; - smallerThan -> smallerThan; - unequalTo -> unequalTo - end, - {relation, Rel2}; -tr_opt_extraInfo({range, Range}, State) -> - Range2 = tr_bool(Range, State), - {range, Range2}; -tr_opt_extraInfo({sublist, Sub}, State) -> - Sub2 = tr_bool(Sub, State), - {sublist, Sub2}. - -tr_opt_TerminationStateDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_TerminationStateDescriptor(#'TerminationStateDescriptor'{propertyParms = Props, - eventBufferControl = Control, - serviceState = Service}, - State) -> - #'TerminationStateDescriptor'{propertyParms = [tr_PropertyParm(P, State) || P <- Props], - eventBufferControl = tr_opt_EventBufferControl(Control, State), - serviceState = tr_opt_ServiceState(Service, State)}. - -tr_opt_EventBufferControl(Control, _State) -> - case Control of - asn1_NOVALUE -> asn1_NOVALUE; - off -> off; - lockStep -> lockStep - end. - -tr_opt_ServiceState(Service, _State) -> - case Service of - asn1_NOVALUE -> asn1_NOVALUE; - test -> test; - outOfSvc -> outOfSvc; - inSvc -> inSvc - end. - -tr_MuxDescriptor(#'MuxDescriptor'{muxType = Type, - termList = IdList}, - State) -> - #'MuxDescriptor'{muxType = tr_MuxType(Type, State), - termList = [tr_TerminationID(Id, State) || Id <- IdList]}. - -tr_MuxType(Type, _State) -> - case Type of - h221 -> h221; - h223 -> h223; - h226 -> h226; - v76 -> v76 - end. - -tr_opt_StreamID(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_StreamID(Id, State) -> - tr_StreamID(Id, State). - -tr_StreamID(Id, State) -> - tr_UINT16(Id, State). - -tr_EventsDescriptor(#'EventsDescriptor'{requestID = Id, - eventList = Events}, - State) -> - #'EventsDescriptor'{requestID = tr_opt_RequestID(Id, State), - eventList = [tr_RequestedEvent(E, State) || E <- Events]}. - -tr_RequestedEvent(#'RequestedEvent'{pkgdName = Name, - streamID = Id, - evParList = Parms, - eventAction = Actions}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - #'RequestedEvent'{pkgdName = resolve(event, Name, State, Constraint), - streamID = tr_opt_StreamID(Id, State), - eventAction = tr_opt_RequestedActions(Actions, State), - evParList = [tr_EventParameter(P, Name, State) || P <- Parms]}. - -tr_opt_RequestedActions(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_RequestedActions(#'RequestedActions'{keepActive = Keep, - eventDM = DM, - secondEvent = Event, - signalsDescriptor = SigDesc}, - State) -> - #'RequestedActions'{keepActive = tr_opt_keepActive(Keep, State), - eventDM = tr_opt_EventDM(DM, State), - secondEvent = tr_opt_SecondEventsDescriptor(Event, State), - signalsDescriptor = tr_opt_SignalsDescriptor(SigDesc, State)}. - -tr_opt_keepActive(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_keepActive(Keep, State) -> - tr_bool(Keep, State). - -tr_opt_EventDM(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_EventDM({Tag, Val}, State) -> - Val2 = - case Tag of - digitMapName -> tr_DigitMapName(Val, State); - digitMapValue -> tr_DigitMapValue(Val, State) - end, - {Tag, Val2}. - -tr_opt_SecondEventsDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_SecondEventsDescriptor(#'SecondEventsDescriptor'{requestID = Id, - eventList = Events}, - State) -> - #'SecondEventsDescriptor'{requestID = tr_RequestID(Id, State), %% IG v6 6.8 withdrawn - eventList = [tr_SecondRequestedEvent(E, State) || E <- Events]}. - -tr_SecondRequestedEvent(#'SecondRequestedEvent'{pkgdName = Name, - streamID = Id, - evParList = Parms, - eventAction = Actions}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - #'SecondRequestedEvent'{pkgdName = resolve(event, Name, State, Constraint), - streamID = tr_opt_StreamID(Id, State), - eventAction = tr_opt_SecondRequestedActions(Actions, State), - evParList = [tr_EventParameter(P, Name, State) || P <- Parms]}. - - -tr_opt_SecondRequestedActions(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_SecondRequestedActions(#'SecondRequestedActions'{keepActive = Keep, - eventDM = DM, - signalsDescriptor = SigDesc}, - State) -> - #'SecondRequestedActions'{keepActive = tr_opt_keepActive(Keep, State), - eventDM = tr_opt_EventDM(DM, State), - signalsDescriptor = tr_opt_SignalsDescriptor(SigDesc, State)}. - -tr_EventBufferDescriptor(EventSpecs, State) -> - [tr_EventSpec(ES, State) || ES <- EventSpecs]. - -tr_EventSpec(#'EventSpec'{eventName = Name, - streamID = Id, - eventParList = Parms}, - State) -> - #'EventSpec'{eventName = tr_EventName(Name, State), - streamID = tr_opt_StreamID(Id, State), - eventParList = [tr_EventParameter(P, Name, State) || P <- Parms]}. - -tr_opt_SignalsDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_SignalsDescriptor(SigDesc, State) -> - tr_SignalsDescriptor(SigDesc, State). - -tr_SignalsDescriptor(SigDesc, State) when is_list(SigDesc) -> - [tr_SignalRequest(SigReq, State) || SigReq <- SigDesc]. - -tr_SignalRequest({Tag, Val}, State) -> - Val2 = - case Tag of - signal -> tr_Signal(Val, State); - seqSigList -> tr_SeqSigList(Val, State) - end, - {Tag, Val2}. - - -tr_SeqSigList(#'SeqSigList'{id = Id, - signalList = SigList}, - State) when is_list(SigList) -> - #'SeqSigList'{id = tr_UINT16(Id, State), - signalList = [tr_Signal(Sig, State) || Sig <- SigList]}. - -tr_Signal(#'Signal'{signalName = Name, - streamID = SID, - sigType = Type, - duration = Dur, - notifyCompletion = Compl, - keepActive = Keep, - sigParList = Parms, - direction = Dir, - requestID = RID}, - State) -> - Name2 = tr_SignalName(Name, State), - SID2 = tr_opt_StreamID(SID, State), - Type2 = tr_opt_SignalType(Type, State), - Dur2 = tr_opt_duration(Dur, State), - Compl2 = tr_opt_NotifyCompletion(Compl, State), - Keep2 = tr_opt_keepActive(Keep, State), - Parms2 = [tr_SigParameter(P, Name, State) || P <- Parms], - Dir2 = tr_opt_SignalDirection(Dir, State), - RID2 = tr_opt_RequestID(RID, State), - #'Signal'{signalName = Name2, - streamID = SID2, - sigType = Type2, - duration = Dur2, - notifyCompletion = Compl2, - keepActive = Keep2, - sigParList = Parms2, - direction = Dir2, - requestID = RID2}. - -tr_opt_duration(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_duration(Dur, State) -> - tr_UINT16(Dur, State). - -tr_opt_NotifyCompletion(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_NotifyCompletion(Items, State) when is_list(Items) -> - [tr_notifyCompletionItem(I, State) || I <- Items]. - -tr_notifyCompletionItem(Item, _State) -> - case Item of - onTimeOut -> onTimeOut; - onInterruptByEvent -> onInterruptByEvent; - onInterruptByNewSignalDescr -> onInterruptByNewSignalDescr; - otherReason -> otherReason - end. - -tr_opt_SignalType(asn1_NOVALUE = Type, _State) -> - Type; -tr_opt_SignalType(Type, _State) -> - case Type of - brief -> brief; - onOff -> onOff; - timeOut -> timeOut - end. - -tr_opt_SignalDirection(asn1_NOVALUE = SD, _State) -> - SD; -tr_opt_SignalDirection(SD, _State) -> - case SD of - internal -> internal; - external -> external; - both -> both - end. - -tr_SignalName(Name, State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - resolve(signal, Name, State, Constraint). - -tr_SigParameter(#'SigParameter'{sigParameterName = ParName, - value = Value, - extraInfo = Extra}, - SigName, - State) -> - Constraint = fun(Item) -> tr_Name(Item, State) end, - N = resolve({signal_parameter, SigName}, ParName, State, Constraint), - #'SigParameter'{sigParameterName = N, - value = tr_Value(Value, State), - extraInfo = tr_opt_extraInfo(Extra, State)}. - -tr_opt_RequestID(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_RequestID(Id, State) -> - tr_RequestID(Id, State). - -tr_RequestID(Id, _State) when Id =:= ?megaco_all_request_id -> - ?megaco_all_request_id; -tr_RequestID(Id, State) -> - tr_UINT32(Id, State). - -tr_ModemDescriptor(_MD, _State) -> - deprecated. - -tr_DigitMapDescriptor(#'DigitMapDescriptor'{digitMapName = Name, - digitMapValue = Value}, - State) -> - #'DigitMapDescriptor'{digitMapName = tr_opt_DigitMapName(Name, State), - digitMapValue = tr_opt_DigitMapValue(Value, State)}. - -tr_opt_DigitMapName(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_DigitMapName(Name, State) -> - tr_DigitMapName(Name, State). - -tr_DigitMapName(Name, State) -> - Constraint = fun(Item) -> tr_Name(Item, State) end, - resolve(dialplan, Name, State, Constraint). - -tr_opt_DigitMapValue(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_DigitMapValue(Value, State) -> - tr_DigitMapValue(Value, State). - -tr_DigitMapValue(#'DigitMapValue'{digitMapBody = Body, - startTimer = Start, - shortTimer = Short, - longTimer = Long}, - State) -> - #'DigitMapValue'{startTimer = tr_opt_timer(Start, State), - shortTimer = tr_opt_timer(Short, State), - longTimer = tr_opt_timer(Long, State), - digitMapBody = tr_STRING(Body, State)}. %% BUGBUG: digitMapBody not handled at all - -tr_opt_timer(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_timer(Timer, State) -> - tr_DIGIT(Timer, State, 0, 99). - -tr_ServiceChangeParm( - #'ServiceChangeParm'{serviceChangeMethod = Method, - serviceChangeAddress = Addr, - serviceChangeVersion = Version, - serviceChangeProfile = Profile, - serviceChangeReason = Reason, - serviceChangeDelay = Delay, - serviceChangeMgcId = MgcId, - timeStamp = Time, - serviceChangeInfo = Info, - serviceChangeIncompleteFlag = Incomplete}, - State) -> - Method2 = tr_ServiceChangeMethod(Method, State), - Addr2 = tr_opt_ServiceChangeAddress(Addr, State), - Version2 = tr_opt_serviceChangeVersion(Version, State), - Profile2 = tr_opt_ServiceChangeProfile(Profile, State), - Reason2 = tr_serviceChangeReason(Reason, State), - Delay2 = tr_opt_serviceChangeDelay(Delay, State), - MgcId2 = tr_opt_serviceChangeMgcId(MgcId, State), - Time2 = tr_opt_TimeNotation(Time, State), - Info2 = tr_opt_AuditDescriptor(Info, State), - Incomplete2 = tr_opt_null(Incomplete, State), - #'ServiceChangeParm'{serviceChangeMethod = Method2, - serviceChangeAddress = Addr2, - serviceChangeVersion = Version2, - serviceChangeProfile = Profile2, - serviceChangeReason = Reason2, - serviceChangeDelay = Delay2, - serviceChangeMgcId = MgcId2, - timeStamp = Time2, - serviceChangeInfo = Info2, - serviceChangeIncompleteFlag = Incomplete2}. - -tr_ServiceChangeMethod(Method, _State) -> - case Method of - failover -> failover; - forced -> forced; - graceful -> graceful; - restart -> restart; - disconnected -> disconnected; - handOff -> handOff - end. %% BUGBUG: extension - -tr_opt_ServiceChangeAddress(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_ServiceChangeAddress({Tag, Val}, State) -> - Val2 = - case Tag of - portNumber -> tr_portNumber(Val, State); - ip4Address -> tr_IP4Address(Val, State); - ip6Address -> tr_IP6Address(Val, State); - domainName -> tr_DomainName(Val, State); - deviceName -> tr_PathName(Val, State); - mtpAddress -> tr_mtpAddress(Val, State) - end, - {Tag, Val2}. - -tr_opt_serviceChangeVersion(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_serviceChangeVersion(Version, State) -> - tr_version(Version, State). - -tr_opt_ServiceChangeProfile(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -%% Decode -tr_opt_ServiceChangeProfile({'ServiceChangeProfile', ProfileName}, State) -> - case string:tokens(ProfileName, "/") of - [Name0, Version0] -> - Name = tr_STRING(Name0, State, 1, 64), - Version = tr_version(list_to_integer(Version0), State), - #'ServiceChangeProfile'{profileName = Name, - version = Version} - end; -%% Encode -tr_opt_ServiceChangeProfile(#'ServiceChangeProfile'{profileName = Name0, - version = Version0}, - State) -> - Name = tr_STRING(Name0, State, 1, 64), - Version = tr_version(Version0, State), - ProfileName = lists:flatten(io_lib:format("~s/~w", [Name, Version])), - {'ServiceChangeProfile', ProfileName}. - -tr_serviceChangeReason([_] = Reason, State) -> - tr_Value(Reason, State). - -tr_opt_serviceChangeDelay(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_serviceChangeDelay(Delay, State) -> - tr_UINT32(Delay, State). - -tr_opt_serviceChangeMgcId(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_serviceChangeMgcId(MgcId, State) -> - tr_MId(MgcId, State). - -tr_opt_portNumber(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_portNumber(Port, State) -> - tr_portNumber(Port, State). - -tr_portNumber(Port, State) when is_integer(Port) andalso (Port >= 0) -> - tr_UINT16(Port, State). - -tr_ServiceChangeResParm(#'ServiceChangeResParm'{serviceChangeMgcId = MgcId, - serviceChangeAddress = Addr, - serviceChangeVersion = Version, - serviceChangeProfile = Profile, - timeStamp = Time}, - State) -> - #'ServiceChangeResParm'{serviceChangeMgcId = tr_opt_serviceChangeMgcId(MgcId, State), - serviceChangeAddress = tr_opt_ServiceChangeAddress(Addr, State), - serviceChangeVersion = tr_opt_serviceChangeVersion(Version, State), - serviceChangeProfile = tr_opt_ServiceChangeProfile(Profile, State), - timeStamp = tr_opt_TimeNotation(Time, State)}. - -tr_PackagesDescriptor(Items, State) when is_list(Items) -> - [tr_PackagesItem(I, State) || I <- Items]. - -tr_PackagesItem(#'PackagesItem'{packageName = Name, - packageVersion = Version}, - State) -> - Constraint = fun(Item) -> tr_Name(Item, State) end, - #'PackagesItem'{packageName = resolve(package, Name, State, Constraint), - packageVersion = tr_UINT16(Version, State)}. - -tr_opt_StatisticsDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_StatisticsDescriptor(Parms, State) -> - tr_StatisticsDescriptor(Parms, State). - -tr_StatisticsDescriptor(Parms, State) when is_list(Parms) -> - [tr_StatisticsParameter(P, State) || P <- Parms]. - -tr_StatisticsParameter(#'StatisticsParameter'{statName = Name, - statValue = Value}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - #'StatisticsParameter'{statName = resolve(statistics, Name, State, Constraint), - statValue = tr_opt_Value(Value, State)}. - -tr_opt_TimeNotation(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_TimeNotation(#'TimeNotation'{date = Date, - time = Time}, - State) -> - #'TimeNotation'{date = tr_STRING(Date, State, 8, 8), % "yyyymmdd" - time = tr_STRING(Time, State, 8, 8)}.% "hhmmssss" - -%% BUGBUG: Does not verify that string must contain at least one char -%% BUGBUG: This violation of the is required in order to comply with -%% BUGBUG: the dd/ce ds parameter that may possibly be empty. - -tr_opt_Value(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_Value(Value, State) -> - tr_Value(Value, State). - -tr_Value(Strings, _State) when is_list(Strings) -> - [[Char || Char <- String] || String <- Strings]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%% Encode an octet string, escape } by \ if necessary -tr_OCTET_STRING(String, _State, Min, Max) when is_list(String) -> - verify_count(length(String), Min, Max), - String. - -tr_QUOTED_STRING(String, _State) when is_list(String) -> - verify_count(length(String), 1, infinity), - String. - -%% The internal format of hex digits is a list of octets -%% Min and Max means #hexDigits -%% Leading zeros are prepended in order to fulfill Min -tr_HEXDIG(Octets, _State, Min, Max) when is_list(Octets) -> - verify_count(length(Octets), Min, Max), - Octets. - -tr_DIGIT(Val, State, Min, Max) -> - tr_integer(Val, State, Min, Max). - -tr_STRING(String, _State) when is_list(String) -> - String. - -tr_STRING(String, _State, Min, Max) when is_list(String) -> - verify_count(length(String), Min, Max), - String. - -tr_opt_UINT16(Val, State) -> - tr_opt_integer(Val, State, 0, 65535). - -tr_UINT16(Val, State) -> - tr_integer(Val, State, 0, 65535). - -tr_UINT32(Val, State) -> - tr_integer(Val, State, 0, 4294967295). - -tr_opt_integer(asn1_NOVALUE, _State, _Min, _Max) -> - asn1_NOVALUE; -tr_opt_integer(Int, State, Min, Max) -> - tr_integer(Int, State, Min, Max). - -tr_integer(Int, _State, Min, Max) -> - verify_count(Int, Min, Max), - Int. - -%% Verify that Count is within the range of Min and Max -verify_count(Count, Min, Max) -> - if - is_integer(Count) -> - if - is_integer(Min) andalso (Count >= Min) -> - if - is_integer(Max) andalso (Count =< Max) -> - Count; - Max =:= infinity -> - Count; - true -> - error({count_too_large, Count, Max}) - end; - true -> - error({count_too_small, Count, Min}) - end; - true -> - error({count_not_an_integer, Count}) - end. diff --git a/lib/megaco/src/binary/megaco_binary_transformer_prev3b.erl b/lib/megaco/src/binary/megaco_binary_transformer_prev3b.erl deleted file mode 100644 index 8b1cf91159..0000000000 --- a/lib/megaco/src/binary/megaco_binary_transformer_prev3b.erl +++ /dev/null @@ -1,1628 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2005-2020. All Rights Reserved. -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. -%% -%% %CopyrightEnd% -%% - -%% -%%---------------------------------------------------------------------- -%% Purpose: Transform internal form of Megaco/H.248 messages -%% -%% DEPRECATED -%% DEPRECATED -%% DEPRECATED -%% -%%---------------------------------------------------------------------- - --module(megaco_binary_transformer_prev3b). - --include_lib("megaco/include/megaco.hrl"). -%% -include_lib("megaco/include/megaco_message.hrl"). --include_lib("megaco/include/megaco_message_prev3b.hrl"). --include_lib("megaco/src/app/megaco_internal.hrl"). - --export([tr_message/3, tr_transaction/3]). - - --define(DEFAULT_NAME_RESOLVER, megaco_binary_name_resolver_prev3b). - --record(state, {mode, % verify | encode | decode - resolver_module, % - resolver_options}). - -resolve(Type, Item, State, Constraint) -> - case State#state.mode of - verify -> - Item; - encode -> - ?d("resolve(encode) -> encode: ~p",[Item]), - Mod = State#state.resolver_module, - Opt = State#state.resolver_options, - EncodedItem = Mod:encode_name(Opt, Type, Item), - ?d("resolve -> verify contraint for ~p",[EncodedItem]), - verify_constraint(EncodedItem, Constraint); - decode -> - ?d("resolve(decode) -> verify contraint for ~p",[Item]), - DecodedItem = verify_constraint(Item, Constraint), - Mod = State#state.resolver_module, - Opt = State#state.resolver_options, - ?d("resolve(decode) -> decode: ~p",[DecodedItem]), - Mod:decode_name(Opt, Type, DecodedItem) - end. - -verify_constraint(Item, valid) -> - Item; -verify_constraint(Item, Constraint) when is_function(Constraint) -> - Constraint(Item). - -tr_message(MegaMsg, Mode, Config) -> - case Config of - [native] -> - MegaMsg; - [verify] -> - State = #state{mode = verify}, - tr_MegacoMessage(MegaMsg, State); - [] -> - State = #state{mode = Mode, - resolver_module = ?DEFAULT_NAME_RESOLVER, - resolver_options = [8, 8, 8]}, - tr_MegacoMessage(MegaMsg, State); - [{binary_name_resolver, {Module, Options}}] when is_atom(Module) -> - State = #state{mode = Mode, - resolver_module = Module, - resolver_options = Options}, - tr_MegacoMessage(MegaMsg, State) - end. - -tr_transaction(Trans, Mode, Config) -> - case Config of - [native] -> - Trans; - [verify] -> - State = #state{mode = verify}, - tr_Transaction(Trans, State); - [] -> - State = #state{mode = Mode, - resolver_module = ?DEFAULT_NAME_RESOLVER, - resolver_options = [8, 8, 8]}, - tr_Transaction(Trans, State); - [{binary_name_resolver, {Module, Options}}] when is_atom(Module) -> - State = #state{mode = Mode, - resolver_module = Module, - resolver_options = Options}, - tr_Transaction(Trans, State) - end. - -tr_MegacoMessage(#'MegacoMessage'{authHeader = Auth, - mess = Mess}, - State) -> - ?d("tr_MegacoMessage -> entry with" - "~n Auth: ~p" - "~n Mess: ~p" - "~n State: ~p", [Auth, Mess, State]), - #'MegacoMessage'{authHeader = tr_opt_AuthenticationHeader(Auth, State), - mess = tr_Message(Mess, State)}. - -tr_opt_AuthenticationHeader(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_AuthenticationHeader(#'AuthenticationHeader'{secParmIndex = SPI, - seqNum = SN, - ad = AuthData}, - State) -> - #'AuthenticationHeader'{secParmIndex = tr_SecurityParmIndex(SPI, State), - seqNum = tr_SequenceNum(SN, State), - ad = tr_AuthData(AuthData, State)}. - -tr_SecurityParmIndex(SPI, State) -> - tr_HEXDIG(SPI, State, 4, 4). % BUGBUG: Mismatch between ASN.1 and ABNF - -tr_SequenceNum(SN, State) -> - tr_HEXDIG(SN, State, 4, 4). % BUGBUG: Mismatch between ASN.1 and ABNF - -tr_AuthData(AuthData, State) -> - tr_HEXDIG(AuthData, State, 12, 32). % BUGBUG: Mismatch between ASN.1 and ABNF - -tr_Message(#'Message'{version = Version, - mId = MID, - messageBody = Body}, - State) -> - #'Message'{version = tr_version(Version, State), - mId = tr_MId(MID, State), - messageBody = tr_Message_messageBody(Body, State)}. - -tr_version(Version, State) -> - tr_DIGIT(Version, State, 0, 99). - -tr_Message_messageBody({Tag, Val}, State) -> - Val2 = - case Tag of - messageError -> tr_ErrorDescriptor(Val, State); - transactions when is_list(Val) -> [tr_Transaction(T, State) || T <- Val] - end, - {Tag, Val2}. - -tr_MId({Tag, Val}, State) -> - Val2 = - case Tag of - ip4Address -> tr_IP4Address(Val, State); - ip6Address -> tr_IP6Address(Val, State); - domainName -> tr_DomainName(Val, State); - deviceName -> tr_PathName(Val, State); - mtpAddress -> tr_mtpAddress(Val, State) - end, - {Tag, Val2}. - -tr_mtpAddress(MtpAddr, State) -> - tr_OCTET_STRING(MtpAddr, State, 2, 4). % BUGBUG: Mismatch between ASN.1 and ABNF - -tr_DomainName(#'DomainName'{name = Name, - portNumber = Port}, - State) -> - Domain = #'DomainName'{name = tr_STRING(Name, State), % BUGBUG: Mismatch between ASN.1 and ABNF - portNumber = tr_opt_portNumber(Port, State)}, - {domainName, Domain2} = resolve(mid, {domainName, Domain}, State, valid), - Domain2. - -tr_IP4Address(#'IP4Address'{address = [A1, A2, A3, A4], - portNumber = Port}, - State) -> - #'IP4Address'{address = [tr_V4hex(A1, State), - tr_V4hex(A2, State), - tr_V4hex(A3, State), - tr_V4hex(A4, State)], - portNumber = tr_opt_portNumber(Port, State)}. - -tr_V4hex(Val, State) -> - tr_DIGIT(Val, State, 0, 255). - -tr_IP6Address(_Val, _State) -> - error(ipv6_not_supported). %% BUGBUG: nyi - -tr_PathName(Path, State) -> - %% BUGBUG: ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" ) - %% BUGBUG: ["@" pathDomainName ] - Constraint = fun({deviceName, Item}) -> tr_STRING(Item, State, 1, 64) end, - resolve(mid, {deviceName, Path}, State, Constraint). - -tr_Transaction({Tag, Val}, State) -> - Val2 = - case Tag of - transactionRequest -> tr_TransactionRequest(Val, State); - transactionPending -> tr_TransactionPending(Val, State); - transactionReply -> tr_TransactionReply(Val, State); - transactionResponseAck -> [tr_TransactionAck(T, State) || T <- Val] - end, - {Tag, Val2}. - -tr_TransactionAck(#'TransactionAck'{firstAck = First, - lastAck = Last}, - State) -> - #'TransactionAck'{firstAck = tr_TransactionId(First, State), - lastAck = tr_opt_TransactionId(Last, State)}. - -tr_opt_TransactionId(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_TransactionId(Id, State) -> - tr_TransactionId(Id, State). - -tr_TransactionId(Id, State) -> - tr_UINT32(Id, State). - -tr_TransactionRequest(#'TransactionRequest'{transactionId = Id, - actions = Actions}, - State) when is_list(Actions) -> - - #'TransactionRequest'{transactionId = tr_TransactionId(Id, State), - actions = [tr_ActionRequest(ActReq, State) || ActReq <- Actions]}. - -tr_TransactionPending(#'TransactionPending'{transactionId = Id}, - State) -> - #'TransactionPending'{transactionId = tr_TransactionId(Id, State)}. - -tr_TransactionReply(#'TransactionReply'{transactionId = Id, - immAckRequired = ImmAck, - transactionResult = TransRes, - %% These fields are actually not - %% supported in this implementation, - %% but because the messanger module - %% cannot see any diff between the - %% various v3 implementations... - segmentNumber = asn1_NOVALUE, - segmentationComplete = asn1_NOVALUE}, - State) -> - #'TransactionReply'{transactionId = tr_TransactionId(Id, State), - immAckRequired = tr_opt_null(ImmAck, State), - transactionResult = tr_TransactionReply_transactionResult(TransRes, State), - segmentNumber = asn1_NOVALUE, - segmentationComplete = asn1_NOVALUE}; -tr_TransactionReply(TR, _State) -> - error({unsupported_TransactionReply, TR}). - -tr_opt_null(asn1_NOVALUE, _State) -> asn1_NOVALUE; -tr_opt_null('NULL', _State) -> 'NULL'. - -tr_TransactionReply_transactionResult({Tag, Val}, State) -> - Val2 = - case Tag of - transactionError -> - tr_ErrorDescriptor(Val, State); - actionReplies when is_list(Val) andalso (Val =/= []) -> - [tr_ActionReply(ActRep, State) || ActRep <- Val] - end, - {Tag, Val2}. - -tr_opt_ErrorDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_ErrorDescriptor(ErrDesc, State) -> - tr_ErrorDescriptor(ErrDesc, State). - -tr_ErrorDescriptor(#'ErrorDescriptor'{errorCode = Code, - errorText = Text}, - State) -> - #'ErrorDescriptor'{errorCode = tr_ErrorCode(Code, State), - errorText = tr_opt_ErrorText(Text, State)}. - -tr_ErrorCode(Code, State) -> - tr_DIGIT(Code, State, 0, 999). - -tr_opt_ErrorText(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_ErrorText(Text, State) -> - tr_QUOTED_STRING(Text, State). - -tr_ContextID(CtxId, State) -> - case CtxId of - ?megaco_all_context_id -> ?megaco_all_context_id; - ?megaco_null_context_id -> ?megaco_null_context_id; - ?megaco_choose_context_id -> ?megaco_choose_context_id; - Int when is_integer(Int) -> tr_UINT32(Int, State) - end. - -tr_ActionRequest(#'ActionRequest'{contextId = CtxId, - contextRequest = CtxReq, - contextAttrAuditReq = CtxAuditReq, - commandRequests = CmdReqList}, - State) -> - #'ActionRequest'{contextId = tr_ContextID(CtxId, State), - contextRequest = tr_opt_ContextRequest(CtxReq, State), - contextAttrAuditReq = tr_opt_ContextAttrAuditRequest(CtxAuditReq, State), - commandRequests = [tr_CommandRequest(CmdReq, State) || CmdReq <- CmdReqList]}. - -tr_ActionReply(#'ActionReply'{contextId = CtxId, - errorDescriptor = ErrDesc, - contextReply = CtxRep, - commandReply = CmdRepList}, - State) -> - CmdRepList2 = [tr_CommandReply(CmdRep, State) || CmdRep <- CmdRepList], - #'ActionReply'{contextId = tr_ContextID(CtxId, State), - errorDescriptor = tr_opt_ErrorDescriptor(ErrDesc, State), - contextReply = tr_opt_ContextRequest(CtxRep, State), - commandReply = CmdRepList2}. - -tr_opt_ContextRequest(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_ContextRequest(CR, State) -> - tr_ContextRequest(CR, State). - -tr_ContextRequest(#'ContextRequest'{priority = Prio, - emergency = Em, - topologyReq = TopReqList, - iepscallind = Ind, - contextProp = Props}, - State) -> - Prio2 = - case Prio of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> tr_integer(Prio, State, 0, 15) - end, - Em2 = - case Em of - asn1_NOVALUE -> asn1_NOVALUE; - false -> false; - true -> true - end, - TopReqList2 = - case TopReqList of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> [tr_TopologyRequest(TopReq, State) || - TopReq <- TopReqList] - end, - Ind2 = - case Ind of - asn1_NOVALUE -> asn1_NOVALUE; - false -> false; - true -> true - end, - Props2 = - case Props of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> [tr_PropertyParm(Prop, State) || Prop <- Props] - end, - #'ContextRequest'{priority = Prio2, - emergency = Em2, - topologyReq = TopReqList2, - iepscallind = Ind2, - contextProp = Props2}. - -tr_opt_ContextAttrAuditRequest(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_ContextAttrAuditRequest(CAAR, State) -> - tr_ContextAttrAuditRequest(CAAR, State). - -tr_ContextAttrAuditRequest(#'ContextAttrAuditRequest'{topology = Top, - emergency = Em, - priority = Prio, - iepscallind = Ind, - contextPropAud = Props}, - State) -> - Top2 = tr_opt_null(Top, State), - Em2 = tr_opt_null(Em, State), - Prio2 = tr_opt_null(Prio, State), - Ind2 = tr_opt_null(Ind, State), - Props2 = - case Props of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - [tr_indAudPropertyParm(Prop, State) || Prop <- Props] - end, - #'ContextAttrAuditRequest'{topology = Top2, - emergency = Em2, - priority = Prio2, - iepscallind = Ind2, - contextPropAud = Props2}. - -tr_CommandRequest(#'CommandRequest'{command = Cmd, - optional = Opt, - wildcardReturn = Wild}, - State) -> - #'CommandRequest'{optional = tr_opt_null(Opt, State), - wildcardReturn = tr_opt_null(Wild, State), - command = tr_Command(Cmd, State)}. - -tr_Command({Tag, Val}, State) -> - Val2 = - case Tag of - addReq -> tr_AmmRequest(Val, State); - moveReq -> tr_AmmRequest(Val, State); - modReq -> tr_AmmRequest(Val, State); - subtractReq -> tr_SubtractRequest(Val, State); - auditCapRequest -> tr_AuditRequest(Val, State); - auditValueRequest -> tr_AuditRequest(Val, State); - notifyReq -> tr_NotifyRequest(Val, State); - serviceChangeReq -> tr_ServiceChangeRequest(Val, State) - end, - {Tag, Val2}. - -tr_CommandReply({Tag, Val}, State) -> - Val2 = - case Tag of - addReply -> tr_AmmsReply(Val, State); - moveReply -> tr_AmmsReply(Val, State); - modReply -> tr_AmmsReply(Val, State); - subtractReply -> tr_AmmsReply(Val, State); - auditCapReply -> tr_AuditReply(Val, State); - auditValueReply -> tr_AuditReply(Val, State); - notifyReply -> tr_NotifyReply(Val, State); - serviceChangeReply -> tr_ServiceChangeReply(Val, State) - end, - {Tag, Val2}. - -tr_TopologyRequest(#'TopologyRequest'{terminationFrom = From, - terminationTo = To, - topologyDirection = Dir}, - State) -> - Dir2 = - case Dir of - bothway -> bothway; - isolate -> isolate; - oneway -> oneway - end, - #'TopologyRequest'{terminationFrom = tr_TerminationID(From, State), - terminationTo = tr_TerminationID(To, State), - topologyDirection = Dir2}. - -tr_AmmRequest(#'AmmRequest'{terminationID = IdList, - descriptors = DescList}, - State) -> - #'AmmRequest'{terminationID = [tr_TerminationID(Id, State) || - Id <- IdList], - descriptors = tr_ammDescriptors(DescList, [], State)}. - -tr_ammDescriptors([], Acc, _State) -> - lists:reverse(Acc); -tr_ammDescriptors([Desc|Descs], Acc, State) -> - case tr_ammDescriptor(Desc, State) of - {_, deprecated} when State#state.mode =:= encode -> - error({deprecated, Desc}); - {_, deprecated} when State#state.mode =:= decode -> - %% SKIP - tr_ammDescriptors(Descs, Acc, State); - {_, deprecated} -> - %% SKIP - tr_ammDescriptors(Descs, Acc, State); - NewDesc -> - tr_ammDescriptors(Descs, [NewDesc|Acc], State) - end. - -tr_ammDescriptor({Tag, Desc}, State) -> - Desc2 = - case Tag of - mediaDescriptor -> tr_MediaDescriptor(Desc, State); - modemDescriptor -> tr_ModemDescriptor(Desc, State); - muxDescriptor -> tr_MuxDescriptor(Desc, State); - eventsDescriptor -> tr_EventsDescriptor(Desc, State); - eventBufferDescriptor -> tr_EventBufferDescriptor(Desc, State); - signalsDescriptor -> tr_SignalsDescriptor(Desc, State); - digitMapDescriptor -> tr_DigitMapDescriptor(Desc, State); - auditDescriptor -> tr_AuditDescriptor(Desc, State); - statisticsDescriptor -> tr_StatisticsDescriptor(Desc, State) - end, - {Tag, Desc2}. - -tr_AmmsReply(#'AmmsReply'{terminationID = IdList, - terminationAudit = TermAudit}, - State) -> - TermAudit2 = - case TermAudit of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> tr_TerminationAudit(TermAudit, State) - end, - #'AmmsReply'{terminationID = [tr_TerminationID(Id, State) || - Id <- IdList], - terminationAudit = TermAudit2}. - -tr_SubtractRequest(#'SubtractRequest'{terminationID = IdList, - auditDescriptor = Desc}, - State) -> - #'SubtractRequest'{terminationID = [tr_TerminationID(Id, State) || - Id <- IdList], - auditDescriptor = tr_opt_AuditDescriptor(Desc, State)}. - -tr_AuditRequest(#'AuditRequest'{terminationID = Id, - auditDescriptor = Desc}, - State) -> - #'AuditRequest'{terminationID = tr_TerminationID(Id, State), - auditDescriptor = tr_AuditDescriptor(Desc, State)}. - -%% auditReply = (AuditValueToken / AuditCapToken ) -%% ( contextTerminationAudit / auditOther) -%% auditOther = EQUAL TerminationID LBRKT -%% terminationAudit RBRKT -%% terminationAudit = auditReturnParameter *(COMMA auditReturnParameter) -%% -%% contextTerminationAudit = EQUAL CtxToken ( terminationIDList / -%% LBRKT errorDescriptor RBRKT ) - -tr_AuditReply({Tag, Val}, State) -> - Val2 = - case Tag of - contextAuditResult -> - [tr_TerminationID(Id, State) || Id <- Val]; - error -> - tr_ErrorDescriptor(Val, State); - auditResult -> - tr_AuditResult(Val, State) - end, - {Tag, Val2}. - -tr_AuditResult(#'AuditResult'{terminationID = Id, - terminationAuditResult = AuditRes}, - State) -> - #'AuditResult'{terminationID = tr_TerminationID(Id, State), - terminationAuditResult = tr_TerminationAudit(AuditRes, State)}. - -tr_opt_AuditDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_AuditDescriptor(Desc, State) -> - tr_AuditDescriptor(Desc, State). - -%% BUGBUG BUGBUG BUGBUG -%% With this construction it is possible to have both auditToken -%% and auditPropertyToken, but it is actually valid? -tr_AuditDescriptor(#'AuditDescriptor'{auditToken = Tokens, - auditPropertyToken = APTs}, - State) -> - Tokens2 = - case Tokens of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> [tr_auditItem(Token, State) || Token <- Tokens] - end, - %% v2 - APTs2 = - case APTs of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - [tr_indAuditParameter(APT, State) || APT <- APTs] - end, - #'AuditDescriptor'{auditToken = Tokens2, - auditPropertyToken = APTs2}. - -tr_auditItem(Token, _State) -> - case Token of - muxToken -> muxToken; - modemToken -> modemToken; - mediaToken -> mediaToken; - eventsToken -> eventsToken; - signalsToken -> signalsToken; - digitMapToken -> digitMapToken; - statsToken -> statsToken; - observedEventsToken -> observedEventsToken; - packagesToken -> packagesToken; - eventBufferToken -> eventBufferToken - end. - -%% --- v2 begin --- - -tr_indAuditParameter({Tag, Val}, State) -> - Val2 = - case Tag of - indAudMediaDescriptor -> - tr_indAudMediaDescriptor(Val, State); - indAudEventsDescriptor -> - tr_indAudEventsDescriptor(Val, State); - indAudSignalsDescriptor -> - tr_indAudSignalsDescriptor(Val, State); - indAudDigitMapDescriptor -> - tr_indAudDigitMapDescriptor(Val, State); - indAudEventBufferDescriptor -> - tr_indAudEventBufferDescriptor(Val, State); - indAudStatisticsDescriptor -> - tr_indAudStatisticsDescriptor(Val, State); - indAudPackagesDescriptor -> - tr_indAudPackagesDescriptor(Val, State) - end, - {Tag, Val2}. - - -%% - - -tr_indAudMediaDescriptor(#'IndAudMediaDescriptor'{termStateDescr = TSD, - streams = S}, - State) -> - TSD2 = - case TSD of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - tr_indAudTerminationStateDescriptor(TSD, State) - end, - S2 = - case S of - asn1_NOVALUE -> - asn1_NOVALUE; - {oneStream, OS} -> - {oneStream, tr_indAudStreamParms(OS, State)}; - {multiStream, MS} -> - MS2 = [tr_indAudStreamDescriptor(MS1, State) || MS1 <- MS], - {multiStream, MS2} - end, - #'IndAudMediaDescriptor'{termStateDescr = TSD2, - streams = S2}. - -tr_indAudTerminationStateDescriptor(Val, State) - when is_record(Val, 'IndAudTerminationStateDescriptor') -> - #'IndAudTerminationStateDescriptor'{propertyParms = Parms, - eventBufferControl = EBC, - serviceState = SS} = Val, - Parms2 = [tr_indAudPropertyParm(Parm, State) || Parm <- Parms], - EBC2 = tr_opt_null(EBC, State), - SS2 = tr_opt_null(SS, State), - #'IndAudTerminationStateDescriptor'{propertyParms = Parms2, - eventBufferControl = EBC2, - serviceState = SS2}. - - -tr_indAudStreamParms(#'IndAudStreamParms'{localControlDescriptor = LCD, - localDescriptor = LD, - remoteDescriptor = RD, - statisticsDescriptor = SD}, - State) -> - LCD2 = - case LCD of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - tr_indAudLocalControlDescriptor(LCD, State) - end, - LD2 = - case LD of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - tr_indAudLocalRemoteDescriptor(LD, State) - end, - RD2 = - case RD of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - tr_indAudLocalRemoteDescriptor(RD, State) - end, - SD2 = - case SD of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - tr_indAudStatisticsDescriptor(SD, State) - end, - #'IndAudStreamParms'{localControlDescriptor = LCD2, - localDescriptor = LD2, - remoteDescriptor = RD2, - statisticsDescriptor = SD2}. - -tr_indAudLocalControlDescriptor(Val, State) - when is_record(Val, 'IndAudLocalControlDescriptor') -> - #'IndAudLocalControlDescriptor'{streamMode = M, - reserveValue = V, - reserveGroup = G, - propertyParms = P} = Val, - M2 = tr_opt_null(M, State), - V2 = tr_opt_null(V, State), - G2 = tr_opt_null(G, State), - P2 = tr_indAudLocalControlDescriptor_propertyParms(P, State), - #'IndAudLocalControlDescriptor'{streamMode = M2, - reserveValue = V2, - reserveGroup = G2, - propertyParms = P2}. - -tr_indAudLocalControlDescriptor_propertyParms(Parms, State) - when is_list(Parms) andalso (length(Parms) > 0) -> - [tr_indAudPropertyParm(Parm, State) || Parm <- Parms]; -tr_indAudLocalControlDescriptor_propertyParms(asn1_NOVALUE, _State) -> - asn1_NOVALUE. - -tr_indAudLocalRemoteDescriptor(#'IndAudLocalRemoteDescriptor'{propGroupID = ID, - propGrps = Grps}, - State) -> - #'IndAudLocalRemoteDescriptor'{propGroupID = tr_opt_UINT16(ID, State), - propGrps = tr_indAudPropertyGroup(Grps, - State)}. - -tr_indAudPropertyGroup(Grps, State) when is_list(Grps) -> - [tr_indAudPropertyParm(Parm, State) || Parm <- Grps]. - -tr_indAudPropertyParm(#'IndAudPropertyParm'{name = Name0}, State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - Name = resolve(property, Name0, State, Constraint), - #'IndAudPropertyParm'{name = Name}. - - -tr_indAudStreamDescriptor(#'IndAudStreamDescriptor'{streamID = ID, - streamParms = Parms}, - State) -> - #'IndAudStreamDescriptor'{streamID = tr_StreamID(ID, State), - streamParms = tr_indAudStreamParms(Parms, - State)}. - - -%% - - -tr_indAudEventsDescriptor(#'IndAudEventsDescriptor'{requestID = RID, - pkgdName = Name0, - streamID = SID}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - Name = resolve(event, Name0, State, Constraint), - #'IndAudEventsDescriptor'{requestID = tr_opt_RequestID(RID, State), - pkgdName = Name, - streamID = tr_opt_StreamID(SID, State)}. - - -%% - - -tr_indAudSignalsDescriptor({Tag, Val}, State) -> - case Tag of - signal -> - {signal, tr_indAudSignal(Val, State)}; - seqSigList -> - {seqSigList, tr_indAudSeqSigList(Val, State)} - end. - -tr_opt_indAudSignal(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_indAudSignal(Val, State) -> - tr_indAudSignal(Val, State). - -tr_indAudSignal(#'IndAudSignal'{signalName = Name0, - streamID = SID}, State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - Name = resolve(signal, Name0, State, Constraint), - #'IndAudSignal'{signalName = Name, - streamID = tr_opt_StreamID(SID, State)}. - -tr_indAudSeqSigList(#'IndAudSeqSigList'{id = ID, - signalList = SigList}, State) -> - #'IndAudSeqSigList'{id = tr_integer(ID, State, 0, 65535), - signalList = tr_opt_indAudSignal(SigList, State)}. - -%% - - -tr_indAudDigitMapDescriptor(#'IndAudDigitMapDescriptor'{digitMapName = Name}, - State) -> - #'IndAudDigitMapDescriptor'{digitMapName = - tr_opt_DigitMapName(Name, State)}. - - -%% - - -tr_indAudEventBufferDescriptor(#'IndAudEventBufferDescriptor'{eventName = N, - streamID = SID}, - State) -> - ?d("tr_indAudEventBufferDescriptor -> entry with" - "~n N: ~p" - "~n SID: ~p", [N, SID]), - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - Name = resolve(event, N, State, Constraint), - ?d("tr_indAudEventBufferDescriptor -> entry with" - "~n Name: ~p", [Name]), - #'IndAudEventBufferDescriptor'{eventName = Name, - streamID = tr_opt_StreamID(SID, State)}. - -%% - - -tr_indAudStatisticsDescriptor(#'IndAudStatisticsDescriptor'{statName = N}, - State) -> - ?d("tr_indAudEventBufferDescriptor -> entry with" - "~n N: ~p", [N]), - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - Name = resolve(statistics, N, State, Constraint), - #'IndAudStatisticsDescriptor'{statName = Name}. - - -%% - - -tr_indAudPackagesDescriptor(#'IndAudPackagesDescriptor'{packageName = N, - packageVersion = V}, - State) -> - ?d("tr_indAudPackagesDescriptor -> entry with" - "~n N: ~p" - "~n V: ~p", [N, V]), - Constraint = fun(Item) -> tr_Name(Item, State) end, - Name = resolve(package, N, State, Constraint), - ?d("tr_indAudPackagesDescriptor -> entry with" - "~n Name: ~p", [Name]), - #'IndAudPackagesDescriptor'{packageName = Name, - packageVersion = tr_integer(V, State, 0, 99)}. - -%% -- v2 end -- - - -tr_TerminationAudit(ParmList, State) when is_list(ParmList) -> - do_tr_TerminationAudit(ParmList, [], State). - -do_tr_TerminationAudit([], Acc, _State) -> - lists:reverse(Acc); -do_tr_TerminationAudit([Parm|ParmList], Acc, State) -> - case tr_AuditReturnParameter(Parm, State) of - {_, deprecated} when State#state.mode =:= encode -> - error({deprecated, Parm}); - {_, deprecated} when State#state.mode =:= decode -> - %% SKIP - do_tr_TerminationAudit(ParmList, Acc, State); - {_, deprecated} -> - %% SKIP - do_tr_TerminationAudit(ParmList, Acc, State); - NewParm -> - do_tr_TerminationAudit(ParmList, [NewParm|Acc], State) - end. - -tr_AuditReturnParameter({Tag, Val}, State) -> - Val2 = - case Tag of - errorDescriptor -> - tr_ErrorDescriptor(Val, State); - mediaDescriptor -> - tr_MediaDescriptor(Val, State); - modemDescriptor -> - tr_ModemDescriptor(Val, State); - muxDescriptor -> - tr_MuxDescriptor(Val, State); - eventsDescriptor -> - tr_EventsDescriptor(Val, State); - eventBufferDescriptor -> - tr_EventBufferDescriptor(Val, State); - signalsDescriptor -> - tr_SignalsDescriptor(Val, State); - digitMapDescriptor -> - tr_DigitMapDescriptor(Val, State); - observedEventsDescriptor -> - tr_ObservedEventsDescriptor(Val, State); - statisticsDescriptor -> - tr_StatisticsDescriptor(Val, State); - packagesDescriptor -> - tr_PackagesDescriptor(Val, State); - emptyDescriptors -> - tr_EmptyDescriptors(Val, State) - end, - {Tag, Val2}. - -tr_EmptyDescriptors(#'AuditDescriptor'{auditToken = Tokens}, - State) -> - case Tokens of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> [tr_auditItem(Token, State) || Token <- Tokens] - end. - -tr_NotifyRequest(#'NotifyRequest'{terminationID = IdList, - observedEventsDescriptor = ObsDesc, - errorDescriptor = ErrDesc}, - State) -> - %% BUGBUG: Mismatch between ASN.1 and ABNF - %% BUGBUG: The following ought to be a 'choice' - #'NotifyRequest'{terminationID = [tr_TerminationID(Id, State) || - Id <- IdList], - observedEventsDescriptor = tr_ObservedEventsDescriptor(ObsDesc, State), - errorDescriptor = tr_opt_ErrorDescriptor(ErrDesc, State)}. - -tr_NotifyReply(#'NotifyReply'{terminationID = IdList, - errorDescriptor = ErrDesc}, - State) -> - #'NotifyReply'{terminationID = [tr_TerminationID(Id, State) || Id <- IdList], - errorDescriptor = tr_opt_ErrorDescriptor(ErrDesc, State)}. - -tr_ObservedEventsDescriptor(#'ObservedEventsDescriptor'{requestId = Id, - observedEventLst = Events}, - State) when is_list(Events) -> - #'ObservedEventsDescriptor'{requestId = tr_RequestID(Id, State), - observedEventLst = [tr_ObservedEvent(E, State) || E <- Events]}. - -%% ;time per event, because it might be buffered -%% observedEvent = [ TimeStamp LWSP COLON] LWSP -%% pkgdName [ LBRKT observedEventParameter -%% *(COMMA observedEventParameter) RBRKT ] -%% -%% ;at-most-once eventStream, every eventParameterName at most once -%% observedEventParameter = eventStream / eventOther - -tr_ObservedEvent(#'ObservedEvent'{eventName = Name, - streamID = Id, - eventParList = Parms, - timeNotation = Time}, - State) -> - #'ObservedEvent'{eventName = tr_EventName(Name, State), - streamID = tr_opt_StreamID(Id, State), - eventParList = [tr_EventParameter(P, Name, State) || P <- Parms], - timeNotation = tr_opt_TimeNotation(Time, State)}. - -tr_EventName(Name, State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - resolve(event, Name, State, Constraint). - -tr_EventParameter(#'EventParameter'{eventParameterName = ParName, - value = Value, - extraInfo = Extra}, - EventName, - State) -> - %% BUGBUG: event parameter name - Constraint = fun(Item) -> tr_Name(Item, State) end, - N = resolve({event_parameter, EventName}, ParName, State, Constraint), - #'EventParameter'{eventParameterName = N, - value = tr_Value(Value, State), - extraInfo = tr_opt_extraInfo(Extra, State)}. - -tr_ServiceChangeRequest(#'ServiceChangeRequest'{terminationID = IdList, - serviceChangeParms = Parms}, - State) -> - #'ServiceChangeRequest'{terminationID = [tr_TerminationID(Id, State) || Id <- IdList], - serviceChangeParms = tr_ServiceChangeParm(Parms, State)}. - -%% serviceChangeReply = ServiceChangeToken EQUAL TerminationID -%% [LBRKT (errorDescriptor / -%% serviceChangeReplyDescriptor) RBRKT] -%% serviceChangeReplyDescriptor = ServicesToken LBRKT -%% servChgReplyParm *(COMMA servChgReplyParm) RBRKT -%% -%% ;at-most-once. Version is REQUIRED on first ServiceChange response -%% servChgReplyParm = (serviceChangeAddress / serviceChangeMgcId / -%% serviceChangeProfile / serviceChangeVersion ) -tr_ServiceChangeReply(#'ServiceChangeReply'{terminationID = IdList, - serviceChangeResult = Res}, - State) -> - #'ServiceChangeReply'{terminationID = [tr_TerminationID(Id, State) || Id <- IdList], - serviceChangeResult = tr_ServiceChangeResult(Res, State)}. - -tr_ServiceChangeResult({Tag, Val}, State) -> - Val2 = - case Tag of - errorDescriptor -> tr_ErrorDescriptor(Val, State); - serviceChangeResParms -> tr_ServiceChangeResParm(Val, State) - end, - {Tag, Val2}. - -%% TerminationID = "ROOT" / pathNAME / "$" / "*" -%% ; Total length of pathNAME must not exceed 64 chars. -%% pathNAME = ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" ) -%% ["@" pathDomainName ] - -tr_TerminationID(TermId, State) when State#state.mode =/= verify -> - resolve(term_id, TermId, State, valid); -tr_TerminationID(#'TerminationID'{wildcard = Wild, - id = Id}, - _State) -> - #'TerminationID'{wildcard = Wild, - id = Id}; -tr_TerminationID(#megaco_term_id{contains_wildcards = IsWild, - id = Id}, - State) -> - #megaco_term_id{contains_wildcards = tr_bool(IsWild, State), - id = [tr_term_id_component(Sub, State) || Sub <- Id]}. - -tr_opt_bool(asn1_NOVALUE, _State) -> asn1_NOVALUE; -tr_opt_bool(Bool, State) -> tr_bool(Bool, State). - -tr_bool(true, _State) -> true; -tr_bool(false, _State) -> false. - -tr_term_id_component(Sub, _State) -> - case Sub of - all -> all; - choose -> choose; - Char when is_integer(Char) -> Char - end. - -%% mediaDescriptor = MediaToken LBRKT mediaParm *(COMMA mediaParm) RBRKT -%% ; at-most-once per item -%% ; and either streamParm or streamDescriptor but not both -%% mediaParm = (streamParm / streamDescriptor / -%% terminationStateDescriptor) -%% ; at-most-once -%% streamParm = ( localDescriptor / remoteDescriptor / -%% localControlDescriptor ) -%% streamDescriptor = StreamToken EQUAL StreamID LBRKT streamParm -%% *(COMMA streamParm) RBRKT -tr_MediaDescriptor(#'MediaDescriptor'{termStateDescr = TermState, - streams = Streams}, - State) -> - #'MediaDescriptor'{termStateDescr = tr_opt_TerminationStateDescriptor(TermState, State), - streams = tr_opt_streams(Streams, State)}. - -tr_opt_streams(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_streams({Tag, Val}, State) -> - Val2 = - case Tag of - oneStream -> tr_StreamParms(Val, State); - multiStream -> [tr_StreamDescriptor(SD, State) || SD <- Val] - end, - {Tag, Val2}. - -tr_StreamParms(#'StreamParms'{localControlDescriptor = LCD, - localDescriptor = LD, - remoteDescriptor = RD, - statisticsDescriptor = SD}, - State) -> - LCD2 = tr_opt_LocalControlDescriptor(LCD, State), - LD2 = tr_opt_LocalRemoteDescriptor(LD, State), - RD2 = tr_opt_LocalRemoteDescriptor(RD, State), - SD2 = tr_opt_StatisticsDescriptor(SD, State), - #'StreamParms'{localControlDescriptor = LCD2, - localDescriptor = LD2, - remoteDescriptor = RD2, - statisticsDescriptor = SD2}. - -tr_StreamDescriptor(#'StreamDescriptor'{streamID = Id, - streamParms = Parms}, - State) -> - #'StreamDescriptor'{streamID = tr_StreamID(Id, State), - streamParms = tr_StreamParms(Parms, State)}. - -%% localControlDescriptor = LocalControlToken LBRKT localParm -%% *(COMMA localParm) RBRKT -%% -%% ; at-most-once per item -%% localParm = ( streamMode / propertyParm / -%% reservedValueMode / reservedGroupMode ) -%% reservedValueMode = ReservedValueToken EQUAL ( "ON" / "OFF" ) -%% reservedGroupMode = ReservedGroupToken EQUAL ( "ON" / "OFF" ) -%% -%% reservedMode = ReservedToken EQUAL ( "ON" / "OFF" ) -%% -%% streamMode = ModeToken EQUAL streamModes -tr_opt_LocalControlDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_LocalControlDescriptor(#'LocalControlDescriptor'{streamMode = Mode, - reserveGroup = Group, - reserveValue = Value, - propertyParms = Props}, - State) -> - #'LocalControlDescriptor'{streamMode = tr_opt_StreamMode(Mode, State), - reserveGroup = tr_opt_bool(Group, State), - reserveValue = tr_opt_bool(Value, State), - propertyParms = [tr_PropertyParm(P, State) || P <- Props]}. - -tr_opt_StreamMode(Mode, _State) -> - case Mode of - asn1_NOVALUE -> asn1_NOVALUE; - sendOnly -> sendOnly; - recvOnly -> recvOnly; - sendRecv -> sendRecv; - inactive -> inactive; - loopBack -> loopBack - end. - -tr_Name(Name, State) -> - %% BUGBUG: transform - %% BUGBUG: NAME = ALPHA *63(ALPHA / DIGIT / "_" ) - tr_STRING(Name, State, 2, 2). - -tr_PkgdName(Name, State) -> - %% BUGBUG: transform - %% BUGBUG: pkgdName = (NAME / "*") SLASH (ItemID / "*" ) - tr_OCTET_STRING(Name, State, 4, 4). - -%% When text encoding the protocol, the descriptors consist of session -%% descriptions as defined in SDP (RFC2327), except that the "s=", "t=" -%% and "o=" lines are optional. When multiple session descriptions are -%% provided in one descriptor, the "v=" lines are required as delimiters; -%% otherwise they are optional. Implementations shall accept session -%% descriptions that are fully conformant to RFC2327. When binary -%% encoding the protocol the descriptor consists of groups of properties -%% (tag-value pairs) as specified in Annex C. Each such group may -%% contain the parameters of a session description. -tr_opt_LocalRemoteDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_LocalRemoteDescriptor(#'LocalRemoteDescriptor'{propGrps = Groups}, - State) -> - #'LocalRemoteDescriptor'{propGrps = [tr_PropertyGroup(G, State) || G <- Groups]}. - -tr_PropertyGroup(Props, State) -> - [tr_PropertyGroupParm(P, State) || P <- Props]. - -tr_PropertyGroupParm(#'PropertyParm'{name = Name, - value = Value}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - #'PropertyParm'{name = resolve(property, Name, State, Constraint), - value = tr_OCTET_STRING(Value, State, 0, infinity)}. - -tr_PropertyParm(#'PropertyParm'{name = Name, - value = Value, - extraInfo = Extra}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - #'PropertyParm'{name = resolve(property, Name, State, Constraint), - value = tr_Value(Value, State), - extraInfo = tr_opt_extraInfo(Extra, State)}. - -tr_opt_extraInfo(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_extraInfo({relation, Rel}, _State) -> - Rel2 = - case Rel of - greaterThan -> greaterThan; - smallerThan -> smallerThan; - unequalTo -> unequalTo - end, - {relation, Rel2}; -tr_opt_extraInfo({range, Range}, State) -> - Range2 = tr_bool(Range, State), - {range, Range2}; -tr_opt_extraInfo({sublist, Sub}, State) -> - Sub2 = tr_bool(Sub, State), - {sublist, Sub2}. - -tr_opt_TerminationStateDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_TerminationStateDescriptor(#'TerminationStateDescriptor'{propertyParms = Props, - eventBufferControl = Control, - serviceState = Service}, - State) -> - #'TerminationStateDescriptor'{propertyParms = [tr_PropertyParm(P, State) || P <- Props], - eventBufferControl = tr_opt_EventBufferControl(Control, State), - serviceState = tr_opt_ServiceState(Service, State)}. - -tr_opt_EventBufferControl(Control, _State) -> - case Control of - asn1_NOVALUE -> asn1_NOVALUE; - off -> off; - lockStep -> lockStep - end. - -tr_opt_ServiceState(Service, _State) -> - case Service of - asn1_NOVALUE -> asn1_NOVALUE; - test -> test; - outOfSvc -> outOfSvc; - inSvc -> inSvc - end. - -tr_MuxDescriptor(#'MuxDescriptor'{muxType = Type, - termList = IdList}, - State) -> - #'MuxDescriptor'{muxType = tr_MuxType(Type, State), - termList = [tr_TerminationID(Id, State) || Id <- IdList]}. - -tr_MuxType(Type, _State) -> - case Type of - h221 -> h221; - h223 -> h223; - h226 -> h226; - v76 -> v76 - end. - -tr_opt_StreamID(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_StreamID(Id, State) -> - tr_StreamID(Id, State). - -tr_StreamID(Id, State) -> - tr_UINT16(Id, State). - -tr_EventsDescriptor(#'EventsDescriptor'{requestID = Id, - eventList = Events}, - State) -> - #'EventsDescriptor'{requestID = tr_opt_RequestID(Id, State), - eventList = [tr_RequestedEvent(E, State) || E <- Events]}. - -tr_RequestedEvent(#'RequestedEvent'{pkgdName = Name, - streamID = Id, - evParList = Parms, - eventAction = Actions}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - #'RequestedEvent'{pkgdName = resolve(event, Name, State, Constraint), - streamID = tr_opt_StreamID(Id, State), - eventAction = tr_opt_RequestedActions(Actions, State), - evParList = [tr_EventParameter(P, Name, State) || P <- Parms]}. - -tr_opt_RequestedActions(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_RequestedActions(#'RequestedActions'{keepActive = Keep, - eventDM = DM, - secondEvent = Event, - signalsDescriptor = SigDesc}, - State) -> - #'RequestedActions'{keepActive = tr_opt_keepActive(Keep, State), - eventDM = tr_opt_EventDM(DM, State), - secondEvent = tr_opt_SecondEventsDescriptor(Event, State), - signalsDescriptor = tr_opt_SignalsDescriptor(SigDesc, State)}. - -tr_opt_keepActive(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_keepActive(Keep, State) -> - tr_bool(Keep, State). - -tr_opt_EventDM(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_EventDM({Tag, Val}, State) -> - Val2 = - case Tag of - digitMapName -> tr_DigitMapName(Val, State); - digitMapValue -> tr_DigitMapValue(Val, State) - end, - {Tag, Val2}. - -tr_opt_SecondEventsDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_SecondEventsDescriptor(#'SecondEventsDescriptor'{requestID = Id, - eventList = Events}, - State) -> - #'SecondEventsDescriptor'{requestID = tr_RequestID(Id, State), %% IG v6 6.8 withdrawn - eventList = [tr_SecondRequestedEvent(E, State) || E <- Events]}. - -tr_SecondRequestedEvent(#'SecondRequestedEvent'{pkgdName = Name, - streamID = Id, - evParList = Parms, - eventAction = Actions}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - #'SecondRequestedEvent'{pkgdName = resolve(event, Name, State, Constraint), - streamID = tr_opt_StreamID(Id, State), - eventAction = tr_opt_SecondRequestedActions(Actions, State), - evParList = [tr_EventParameter(P, Name, State) || P <- Parms]}. - - -tr_opt_SecondRequestedActions(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_SecondRequestedActions(#'SecondRequestedActions'{keepActive = Keep, - eventDM = DM, - signalsDescriptor = SigDesc}, - State) -> - #'SecondRequestedActions'{keepActive = tr_opt_keepActive(Keep, State), - eventDM = tr_opt_EventDM(DM, State), - signalsDescriptor = tr_opt_SignalsDescriptor(SigDesc, State)}. - -tr_EventBufferDescriptor(EventSpecs, State) -> - [tr_EventSpec(ES, State) || ES <- EventSpecs]. - -tr_EventSpec(#'EventSpec'{eventName = Name, - streamID = Id, - eventParList = Parms}, - State) -> - #'EventSpec'{eventName = tr_EventName(Name, State), - streamID = tr_opt_StreamID(Id, State), - eventParList = [tr_EventParameter(P, Name, State) || P <- Parms]}. - -tr_opt_SignalsDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_SignalsDescriptor(SigDesc, State) -> - tr_SignalsDescriptor(SigDesc, State). - -tr_SignalsDescriptor(SigDesc, State) when is_list(SigDesc) -> - [tr_SignalRequest(SigReq, State) || SigReq <- SigDesc]. - -tr_SignalRequest({Tag, Val}, State) -> - Val2 = - case Tag of - signal -> tr_Signal(Val, State); - seqSigList -> tr_SeqSigList(Val, State) - end, - {Tag, Val2}. - - -tr_SeqSigList(#'SeqSigList'{id = Id, - signalList = SigList}, - State) when is_list(SigList) -> - #'SeqSigList'{id = tr_UINT16(Id, State), - signalList = [tr_Signal(Sig, State) || Sig <- SigList]}. - -tr_Signal(#'Signal'{signalName = Name, - streamID = SID, - sigType = Type, - duration = Dur, - notifyCompletion = Compl, - keepActive = Keep, - sigParList = Parms, - direction = Dir, - requestID = RID}, - State) -> - Name2 = tr_SignalName(Name, State), - SID2 = tr_opt_StreamID(SID, State), - Type2 = tr_opt_SignalType(Type, State), - Dur2 = tr_opt_duration(Dur, State), - Compl2 = tr_opt_NotifyCompletion(Compl, State), - Keep2 = tr_opt_keepActive(Keep, State), - Parms2 = [tr_SigParameter(P, Name, State) || P <- Parms], - Dir2 = tr_opt_SignalDirection(Dir, State), - RID2 = tr_opt_RequestID(RID, State), - #'Signal'{signalName = Name2, - streamID = SID2, - sigType = Type2, - duration = Dur2, - notifyCompletion = Compl2, - keepActive = Keep2, - sigParList = Parms2, - direction = Dir2, - requestID = RID2}. - -tr_opt_duration(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_duration(Dur, State) -> - tr_UINT16(Dur, State). - -tr_opt_NotifyCompletion(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_NotifyCompletion(Items, State) when is_list(Items) -> - [tr_notifyCompletionItem(I, State) || I <- Items]. - -tr_notifyCompletionItem(Item, _State) -> - case Item of - onTimeOut -> onTimeOut; - onInterruptByEvent -> onInterruptByEvent; - onInterruptByNewSignalDescr -> onInterruptByNewSignalDescr; - otherReason -> otherReason - end. - -tr_opt_SignalType(asn1_NOVALUE = Type, _State) -> - Type; -tr_opt_SignalType(Type, _State) -> - case Type of - brief -> brief; - onOff -> onOff; - timeOut -> timeOut - end. - -tr_opt_SignalDirection(asn1_NOVALUE = SD, _State) -> - SD; -tr_opt_SignalDirection(SD, _State) -> - case SD of - internal -> internal; - external -> external; - both -> both - end. - -tr_SignalName(Name, State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - resolve(signal, Name, State, Constraint). - -tr_SigParameter(#'SigParameter'{sigParameterName = ParName, - value = Value, - extraInfo = Extra}, - SigName, - State) -> - Constraint = fun(Item) -> tr_Name(Item, State) end, - N = resolve({signal_parameter, SigName}, ParName, State, Constraint), - #'SigParameter'{sigParameterName = N, - value = tr_Value(Value, State), - extraInfo = tr_opt_extraInfo(Extra, State)}. - -tr_opt_RequestID(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_RequestID(Id, State) -> - tr_RequestID(Id, State). - -tr_RequestID(Id, _State) when Id =:= ?megaco_all_request_id -> - ?megaco_all_request_id; -tr_RequestID(Id, State) -> - tr_UINT32(Id, State). - -tr_ModemDescriptor(_MD, _State) -> - deprecated. - -tr_DigitMapDescriptor(#'DigitMapDescriptor'{digitMapName = Name, - digitMapValue = Value}, - State) -> - #'DigitMapDescriptor'{digitMapName = tr_opt_DigitMapName(Name, State), - digitMapValue = tr_opt_DigitMapValue(Value, State)}. - -tr_opt_DigitMapName(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_DigitMapName(Name, State) -> - tr_DigitMapName(Name, State). - -tr_DigitMapName(Name, State) -> - Constraint = fun(Item) -> tr_Name(Item, State) end, - resolve(dialplan, Name, State, Constraint). - -tr_opt_DigitMapValue(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_DigitMapValue(Value, State) -> - tr_DigitMapValue(Value, State). - -tr_DigitMapValue(#'DigitMapValue'{digitMapBody = Body, - startTimer = Start, - shortTimer = Short, - longTimer = Long}, - State) -> - #'DigitMapValue'{startTimer = tr_opt_timer(Start, State), - shortTimer = tr_opt_timer(Short, State), - longTimer = tr_opt_timer(Long, State), - digitMapBody = tr_STRING(Body, State)}. %% BUGBUG: digitMapBody not handled at all - -tr_opt_timer(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_timer(Timer, State) -> - tr_DIGIT(Timer, State, 0, 99). - -tr_ServiceChangeParm( - #'ServiceChangeParm'{serviceChangeMethod = Method, - serviceChangeAddress = Addr, - serviceChangeVersion = Version, - serviceChangeProfile = Profile, - serviceChangeReason = Reason, - serviceChangeDelay = Delay, - serviceChangeMgcId = MgcId, - timeStamp = Time, - serviceChangeInfo = Info, - serviceChangeIncompleteFlag = Incomplete}, - State) -> - Method2 = tr_ServiceChangeMethod(Method, State), - Addr2 = tr_opt_ServiceChangeAddress(Addr, State), - Version2 = tr_opt_serviceChangeVersion(Version, State), - Profile2 = tr_opt_ServiceChangeProfile(Profile, State), - Reason2 = tr_serviceChangeReason(Reason, State), - Delay2 = tr_opt_serviceChangeDelay(Delay, State), - MgcId2 = tr_opt_serviceChangeMgcId(MgcId, State), - Time2 = tr_opt_TimeNotation(Time, State), - Info2 = tr_opt_AuditDescriptor(Info, State), - Incomplete2 = tr_opt_null(Incomplete, State), - #'ServiceChangeParm'{serviceChangeMethod = Method2, - serviceChangeAddress = Addr2, - serviceChangeVersion = Version2, - serviceChangeProfile = Profile2, - serviceChangeReason = Reason2, - serviceChangeDelay = Delay2, - serviceChangeMgcId = MgcId2, - timeStamp = Time2, - serviceChangeInfo = Info2, - serviceChangeIncompleteFlag = Incomplete2}. - -tr_ServiceChangeMethod(Method, _State) -> - case Method of - failover -> failover; - forced -> forced; - graceful -> graceful; - restart -> restart; - disconnected -> disconnected; - handOff -> handOff - end. %% BUGBUG: extension - -tr_opt_ServiceChangeAddress(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_ServiceChangeAddress({Tag, Val}, State) -> - Val2 = - case Tag of - portNumber -> tr_portNumber(Val, State); - ip4Address -> tr_IP4Address(Val, State); - ip6Address -> tr_IP6Address(Val, State); - domainName -> tr_DomainName(Val, State); - deviceName -> tr_PathName(Val, State); - mtpAddress -> tr_mtpAddress(Val, State) - end, - {Tag, Val2}. - -tr_opt_serviceChangeVersion(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_serviceChangeVersion(Version, State) -> - tr_version(Version, State). - -tr_opt_ServiceChangeProfile(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -%% Decode -tr_opt_ServiceChangeProfile({'ServiceChangeProfile', ProfileName}, State) -> - case string:tokens(ProfileName, "/") of - [Name0, Version0] -> - Name = tr_STRING(Name0, State, 1, 64), - Version = tr_version(list_to_integer(Version0), State), - #'ServiceChangeProfile'{profileName = Name, - version = Version} - end; -%% Encode -tr_opt_ServiceChangeProfile(#'ServiceChangeProfile'{profileName = Name0, - version = Version0}, - State) -> - Name = tr_STRING(Name0, State, 1, 64), - Version = tr_version(Version0, State), - ProfileName = lists:flatten(io_lib:format("~s/~w", [Name, Version])), - {'ServiceChangeProfile', ProfileName}. - -tr_serviceChangeReason([_] = Reason, State) -> - tr_Value(Reason, State). - -tr_opt_serviceChangeDelay(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_serviceChangeDelay(Delay, State) -> - tr_UINT32(Delay, State). - -tr_opt_serviceChangeMgcId(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_serviceChangeMgcId(MgcId, State) -> - tr_MId(MgcId, State). - -tr_opt_portNumber(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_portNumber(Port, State) -> - tr_portNumber(Port, State). - -tr_portNumber(Port, State) when is_integer(Port) andalso (Port >= 0) -> - tr_UINT16(Port, State). - -tr_ServiceChangeResParm(#'ServiceChangeResParm'{serviceChangeMgcId = MgcId, - serviceChangeAddress = Addr, - serviceChangeVersion = Version, - serviceChangeProfile = Profile, - timeStamp = Time}, - State) -> - #'ServiceChangeResParm'{serviceChangeMgcId = tr_opt_serviceChangeMgcId(MgcId, State), - serviceChangeAddress = tr_opt_ServiceChangeAddress(Addr, State), - serviceChangeVersion = tr_opt_serviceChangeVersion(Version, State), - serviceChangeProfile = tr_opt_ServiceChangeProfile(Profile, State), - timeStamp = tr_opt_TimeNotation(Time, State)}. - -tr_PackagesDescriptor(Items, State) when is_list(Items) -> - [tr_PackagesItem(I, State) || I <- Items]. - -tr_PackagesItem(#'PackagesItem'{packageName = Name, - packageVersion = Version}, - State) -> - Constraint = fun(Item) -> tr_Name(Item, State) end, - #'PackagesItem'{packageName = resolve(package, Name, State, Constraint), - packageVersion = tr_UINT16(Version, State)}. - -tr_opt_StatisticsDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_StatisticsDescriptor(Parms, State) -> - tr_StatisticsDescriptor(Parms, State). - -tr_StatisticsDescriptor(Parms, State) when is_list(Parms) -> - [tr_StatisticsParameter(P, State) || P <- Parms]. - -tr_StatisticsParameter(#'StatisticsParameter'{statName = Name, - statValue = Value}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - #'StatisticsParameter'{statName = resolve(statistics, Name, State, Constraint), - statValue = tr_opt_Value(Value, State)}. - -tr_opt_TimeNotation(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_TimeNotation(#'TimeNotation'{date = Date, - time = Time}, - State) -> - #'TimeNotation'{date = tr_STRING(Date, State, 8, 8), % "yyyymmdd" - time = tr_STRING(Time, State, 8, 8)}.% "hhmmssss" - -%% BUGBUG: Does not verify that string must contain at least one char -%% BUGBUG: This violation of the is required in order to comply with -%% BUGBUG: the dd/ce ds parameter that may possibly be empty. - -tr_opt_Value(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_Value(Value, State) -> - tr_Value(Value, State). - -tr_Value(Strings, _State) when is_list(Strings) -> - [[Char || Char <- String] || String <- Strings]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%% Encode an octet string, escape } by \ if necessary -tr_OCTET_STRING(String, _State, Min, Max) when is_list(String) -> - verify_count(length(String), Min, Max), - String. - -tr_QUOTED_STRING(String, _State) when is_list(String) -> - verify_count(length(String), 1, infinity), - String. - -%% The internal format of hex digits is a list of octets -%% Min and Max means #hexDigits -%% Leading zeros are prepended in order to fulfill Min -tr_HEXDIG(Octets, _State, Min, Max) when is_list(Octets) -> - verify_count(length(Octets), Min, Max), - Octets. - -tr_DIGIT(Val, State, Min, Max) -> - tr_integer(Val, State, Min, Max). - -tr_STRING(String, _State) when is_list(String) -> - String. - -tr_STRING(String, _State, Min, Max) when is_list(String) -> - verify_count(length(String), Min, Max), - String. - -tr_opt_UINT16(Val, State) -> - tr_opt_integer(Val, State, 0, 65535). - -tr_UINT16(Val, State) -> - tr_integer(Val, State, 0, 65535). - -tr_UINT32(Val, State) -> - tr_integer(Val, State, 0, 4294967295). - -tr_opt_integer(asn1_NOVALUE, _State, _Min, _Max) -> - asn1_NOVALUE; -tr_opt_integer(Int, State, Min, Max) -> - tr_integer(Int, State, Min, Max). - -tr_integer(Int, _State, Min, Max) -> - verify_count(Int, Min, Max), - Int. - -%% Verify that Count is within the range of Min and Max -verify_count(Count, Min, Max) -> - if - is_integer(Count) -> - if - is_integer(Min) andalso (Count >= Min) -> - if - is_integer(Max) andalso (Count =< Max) -> - Count; - Max =:= infinity -> - Count; - true -> - error({count_too_large, Count, Max}) - end; - true -> - error({count_too_small, Count, Min}) - end; - true -> - error({count_not_an_integer, Count}) - end. diff --git a/lib/megaco/src/binary/megaco_binary_transformer_prev3c.erl b/lib/megaco/src/binary/megaco_binary_transformer_prev3c.erl deleted file mode 100644 index da6ea877ba..0000000000 --- a/lib/megaco/src/binary/megaco_binary_transformer_prev3c.erl +++ /dev/null @@ -1,1755 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2005-2020. All Rights Reserved. -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. -%% -%% %CopyrightEnd% -%% - -%% -%%---------------------------------------------------------------------- -%% Purpose: Transform internal form of Megaco/H.248 messages -%% -%% DEPRECATED -%% DEPRECATED -%% DEPRECATED -%% -%%---------------------------------------------------------------------- - --module(megaco_binary_transformer_prev3c). - --include_lib("megaco/include/megaco.hrl"). -%% -include_lib("megaco/include/megaco_message.hrl"). --include_lib("megaco/include/megaco_message_prev3c.hrl"). --include_lib("megaco/src/app/megaco_internal.hrl"). - --export([tr_message/3, tr_transaction/3]). - - --define(DEFAULT_NAME_RESOLVER, megaco_binary_name_resolver_prev3c). - --record(state, {mode, % verify | encode | decode - resolver_module, % - resolver_options}). - -resolve(Type, Item, State, Constraint) -> - case State#state.mode of - verify -> - Item; - encode -> - ?d("resolve(encode) -> encode: ~p",[Item]), - Mod = State#state.resolver_module, - Opt = State#state.resolver_options, - EncodedItem = Mod:encode_name(Opt, Type, Item), - ?d("resolve -> verify contraint for ~p",[EncodedItem]), - verify_constraint(EncodedItem, Constraint); - decode -> - ?d("resolve(decode) -> verify contraint for ~p",[Item]), - DecodedItem = verify_constraint(Item, Constraint), - Mod = State#state.resolver_module, - Opt = State#state.resolver_options, - ?d("resolve(decode) -> decode: ~p",[DecodedItem]), - Mod:decode_name(Opt, Type, DecodedItem) - end. - -verify_constraint(Item, valid) -> - Item; -verify_constraint(Item, Constraint) when is_function(Constraint) -> - Constraint(Item). - -tr_message(MegaMsg, Mode, Config) -> - case Config of - [native] -> - MegaMsg; - [verify] -> - State = #state{mode = verify}, - tr_MegacoMessage(MegaMsg, State); - [] -> - State = #state{mode = Mode, - resolver_module = ?DEFAULT_NAME_RESOLVER, - resolver_options = [8, 8, 8]}, - tr_MegacoMessage(MegaMsg, State); - [{binary_name_resolver, {Module, Options}}] when is_atom(Module) -> - State = #state{mode = Mode, - resolver_module = Module, - resolver_options = Options}, - tr_MegacoMessage(MegaMsg, State) - end. - -tr_transaction(Trans, Mode, Config) -> - case Config of - [native] -> - Trans; - [verify] -> - State = #state{mode = verify}, - tr_Transaction(Trans, State); - [] -> - State = #state{mode = Mode, - resolver_module = ?DEFAULT_NAME_RESOLVER, - resolver_options = [8, 8, 8]}, - tr_Transaction(Trans, State); - [{binary_name_resolver, {Module, Options}}] when is_atom(Module) -> - State = #state{mode = Mode, - resolver_module = Module, - resolver_options = Options}, - tr_Transaction(Trans, State) - end. - -tr_MegacoMessage(#'MegacoMessage'{authHeader = Auth, - mess = Mess}, - State) -> - ?d("tr_MegacoMessage -> entry with" - "~n Auth: ~p" - "~n Mess: ~p" - "~n State: ~p", [Auth, Mess, State]), - #'MegacoMessage'{authHeader = tr_opt_AuthenticationHeader(Auth, State), - mess = tr_Message(Mess, State)}. - -tr_opt_AuthenticationHeader(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_AuthenticationHeader(#'AuthenticationHeader'{secParmIndex = SPI, - seqNum = SN, - ad = AuthData}, - State) -> - #'AuthenticationHeader'{secParmIndex = tr_SecurityParmIndex(SPI, State), - seqNum = tr_SequenceNum(SN, State), - ad = tr_AuthData(AuthData, State)}. - -tr_SecurityParmIndex(SPI, State) -> - tr_HEXDIG(SPI, State, 4, 4). % BUGBUG: Mismatch between ASN.1 and ABNF - -tr_SequenceNum(SN, State) -> - tr_HEXDIG(SN, State, 4, 4). % BUGBUG: Mismatch between ASN.1 and ABNF - -tr_AuthData(AuthData, State) -> - tr_HEXDIG(AuthData, State, 12, 32). % BUGBUG: Mismatch between ASN.1 and ABNF - -tr_Message(#'Message'{version = Version, - mId = MID, - messageBody = Body}, - State) -> - #'Message'{version = tr_version(Version, State), - mId = tr_MId(MID, State), - messageBody = tr_Message_messageBody(Body, State)}. - -tr_version(Version, State) -> - tr_DIGIT(Version, State, 0, 99). - -tr_Message_messageBody({Tag, Val}, State) -> - Val2 = - case Tag of - messageError -> tr_ErrorDescriptor(Val, State); - transactions when is_list(Val) -> [tr_Transaction(T, State) || T <- Val] - end, - {Tag, Val2}. - -tr_MId({Tag, Val}, State) -> - Val2 = - case Tag of - ip4Address -> tr_IP4Address(Val, State); - ip6Address -> tr_IP6Address(Val, State); - domainName -> tr_DomainName(Val, State); - deviceName -> tr_PathName(Val, State); - mtpAddress -> tr_mtpAddress(Val, State) - end, - {Tag, Val2}. - -tr_mtpAddress(MtpAddr, State) -> - tr_OCTET_STRING(MtpAddr, State, 2, 4). % BUGBUG: Mismatch between ASN.1 and ABNF - -tr_DomainName(#'DomainName'{name = Name, - portNumber = Port}, - State) -> - Domain = #'DomainName'{name = tr_STRING(Name, State), % BUGBUG: Mismatch between ASN.1 and ABNF - portNumber = tr_opt_portNumber(Port, State)}, - {domainName, Domain2} = resolve(mid, {domainName, Domain}, State, valid), - Domain2. - -tr_IP4Address(#'IP4Address'{address = [A1, A2, A3, A4], - portNumber = Port}, - State) -> - #'IP4Address'{address = [tr_V4hex(A1, State), - tr_V4hex(A2, State), - tr_V4hex(A3, State), - tr_V4hex(A4, State)], - portNumber = tr_opt_portNumber(Port, State)}. - -tr_V4hex(Val, State) -> - tr_DIGIT(Val, State, 0, 255). - -tr_IP6Address(_Val, _State) -> - error(ipv6_not_supported). %% BUGBUG: nyi - -tr_PathName(Path, State) -> - %% BUGBUG: ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" ) - %% BUGBUG: ["@" pathDomainName ] - Constraint = fun({deviceName, Item}) -> tr_STRING(Item, State, 1, 64) end, - resolve(mid, {deviceName, Path}, State, Constraint). - -tr_Transaction({Tag, Val}, State) -> - Val2 = - case Tag of - transactionRequest -> tr_TransactionRequest(Val, State); - transactionPending -> tr_TransactionPending(Val, State); - transactionReply -> tr_TransactionReply(Val, State); - transactionResponseAck -> [tr_TransactionAck(T, State) || T <- Val] - end, - {Tag, Val2}. - -tr_TransactionAck(#'TransactionAck'{firstAck = First, - lastAck = Last}, - State) -> - #'TransactionAck'{firstAck = tr_TransactionId(First, State), - lastAck = tr_opt_TransactionId(Last, State)}. - -tr_opt_TransactionId(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_TransactionId(Id, State) -> - tr_TransactionId(Id, State). - -tr_TransactionId(Id, State) -> - tr_UINT32(Id, State). - -tr_TransactionRequest(#'TransactionRequest'{transactionId = Id, - actions = Actions}, - State) when is_list(Actions) -> - - #'TransactionRequest'{transactionId = tr_TransactionId(Id, State), - actions = [tr_ActionRequest(ActReq, State) || ActReq <- Actions]}. - -tr_TransactionPending(#'TransactionPending'{transactionId = Id}, - State) -> - #'TransactionPending'{transactionId = tr_TransactionId(Id, State)}. - -tr_TransactionReply(#'TransactionReply'{transactionId = Id, - immAckRequired = ImmAck, - transactionResult = TransRes, - %% These fields are actually not - %% supported in this implementation, - %% but because the messanger module - %% cannot see any diff between the - %% various v3 implementations... - segmentNumber = asn1_NOVALUE, - segmentationComplete = asn1_NOVALUE}, - State) -> - #'TransactionReply'{transactionId = tr_TransactionId(Id, State), - immAckRequired = tr_opt_null(ImmAck, State), - transactionResult = tr_TransactionReply_transactionResult(TransRes, State), - segmentNumber = asn1_NOVALUE, - segmentationComplete = asn1_NOVALUE}; -tr_TransactionReply(TR, _State) -> - error({unsupported_TransactionReply, TR}). - -tr_opt_null(asn1_NOVALUE, _State) -> asn1_NOVALUE; -tr_opt_null('NULL', _State) -> 'NULL'. - -tr_TransactionReply_transactionResult({Tag, Val}, State) -> - Val2 = - case Tag of - transactionError -> - tr_ErrorDescriptor(Val, State); - actionReplies when is_list(Val) andalso (Val =/= []) -> - [tr_ActionReply(ActRep, State) || ActRep <- Val] - end, - {Tag, Val2}. - -tr_opt_ErrorDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_ErrorDescriptor(ErrDesc, State) -> - tr_ErrorDescriptor(ErrDesc, State). - -tr_ErrorDescriptor(#'ErrorDescriptor'{errorCode = Code, - errorText = Text}, - State) -> - #'ErrorDescriptor'{errorCode = tr_ErrorCode(Code, State), - errorText = tr_opt_ErrorText(Text, State)}. - -tr_ErrorCode(Code, State) -> - tr_DIGIT(Code, State, 0, 999). - -tr_opt_ErrorText(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_ErrorText(Text, State) -> - tr_QUOTED_STRING(Text, State). - -tr_ContextID(CtxId, State) -> - case CtxId of - ?megaco_all_context_id -> ?megaco_all_context_id; - ?megaco_null_context_id -> ?megaco_null_context_id; - ?megaco_choose_context_id -> ?megaco_choose_context_id; - Int when is_integer(Int) -> tr_UINT32(Int, State) - end. - -tr_ActionRequest(#'ActionRequest'{contextId = CtxId, - contextRequest = CtxReq, - contextAttrAuditReq = CtxAuditReq, - commandRequests = CmdReqList}, - State) -> - #'ActionRequest'{contextId = tr_ContextID(CtxId, State), - contextRequest = tr_opt_ContextRequest(CtxReq, State), - contextAttrAuditReq = tr_opt_ContextAttrAuditRequest(CtxAuditReq, State), - commandRequests = [tr_CommandRequest(CmdReq, State) || CmdReq <- CmdReqList]}. - -tr_ActionReply(#'ActionReply'{contextId = CtxId, - errorDescriptor = ErrDesc, - contextReply = CtxRep, - commandReply = CmdRepList}, - State) -> - CmdRepList2 = [tr_CommandReply(CmdRep, State) || CmdRep <- CmdRepList], - #'ActionReply'{contextId = tr_ContextID(CtxId, State), - errorDescriptor = tr_opt_ErrorDescriptor(ErrDesc, State), - contextReply = tr_opt_ContextRequest(CtxRep, State), - commandReply = CmdRepList2}. - -tr_opt_ContextRequest(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_ContextRequest(CR, State) -> - tr_ContextRequest(CR, State). - -tr_ContextRequest(#'ContextRequest'{priority = Prio, - emergency = Em, - topologyReq = TopReqList, - iepscallind = Ind, - contextProp = CtxProps, - contextList = CtxList}, - State) -> - Prio2 = - case Prio of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> tr_integer(Prio, State, 0, 15) - end, - Em2 = - case Em of - asn1_NOVALUE -> asn1_NOVALUE; - false -> false; - true -> true - end, - TopReqList2 = - case TopReqList of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> [tr_TopologyRequest(TopReq, State) || - TopReq <- TopReqList] - end, - Ind2 = - case Ind of - asn1_NOVALUE -> asn1_NOVALUE; - false -> false; - true -> true - end, - CtxProps2 = - case CtxProps of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> [tr_PropertyParm(Prop, State) || Prop <- CtxProps] - end, - CtxList2 = - case CtxList of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> [tr_ContextID(Id, State) || Id <- CtxList] - end, - #'ContextRequest'{priority = Prio2, - emergency = Em2, - topologyReq = TopReqList2, - iepscallind = Ind2, - contextProp = CtxProps2, - contextList = CtxList2}. - -tr_opt_ContextAttrAuditRequest(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_ContextAttrAuditRequest(CAAR, State) -> - tr_ContextAttrAuditRequest(CAAR, State). - -tr_ContextAttrAuditRequest(#'ContextAttrAuditRequest'{topology = Top, - emergency = Em, - priority = Prio, - iepscallind = Ind, - contextPropAud = Props, - selectpriority = SPrio, - selectemergency = SEm, - selectiepscallind = SInd, - selectLogic = SLog}, - State) -> - Top2 = tr_opt_null(Top, State), - Em2 = tr_opt_null(Em, State), - Prio2 = tr_opt_null(Prio, State), - Ind2 = tr_opt_null(Ind, State), - Props2 = - case Props of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - [tr_indAudPropertyParm(Prop, State) || Prop <- Props] - end, - SPrio2 = - case SPrio of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> tr_integer(SPrio, State, 0, 15) - end, - SEm2 = - case SEm of - asn1_NOVALUE -> asn1_NOVALUE; - false -> false; - true -> true - end, - SInd2 = - case SInd of - asn1_NOVALUE -> asn1_NOVALUE; - false -> false; - true -> true - end, - SLog2 = - case SLog of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> tr_SelectLogic(SLog, State) - end, - #'ContextAttrAuditRequest'{topology = Top2, - emergency = Em2, - priority = Prio2, - iepscallind = Ind2, - contextPropAud = Props2, - selectpriority = SPrio2, - selectemergency = SEm2, - selectiepscallind = SInd2, - selectLogic = SLog2}. - -tr_SelectLogic({andAUDITSelect, 'NULL'} = Val, _State) -> - Val; -tr_SelectLogic({orAUDITSelect, 'NULL'} = Val, _State) -> - Val. - -tr_CommandRequest(#'CommandRequest'{command = Cmd, - optional = Opt, - wildcardReturn = Wild}, - State) -> - #'CommandRequest'{optional = tr_opt_null(Opt, State), - wildcardReturn = tr_opt_null(Wild, State), - command = tr_Command(Cmd, State)}. - -tr_Command({Tag, Val}, State) -> - Val2 = - case Tag of - addReq -> tr_AmmRequest(Val, State); - moveReq -> tr_AmmRequest(Val, State); - modReq -> tr_AmmRequest(Val, State); - subtractReq -> tr_SubtractRequest(Val, State); - auditCapRequest -> tr_AuditRequest(Val, State); - auditValueRequest -> tr_AuditRequest(Val, State); - notifyReq -> tr_NotifyRequest(Val, State); - serviceChangeReq -> tr_ServiceChangeRequest(Val, State) - end, - {Tag, Val2}. - -tr_CommandReply({Tag, Val}, State) -> - Val2 = - case Tag of - addReply -> tr_AmmsReply(Val, State); - moveReply -> tr_AmmsReply(Val, State); - modReply -> tr_AmmsReply(Val, State); - subtractReply -> tr_AmmsReply(Val, State); - auditCapReply -> tr_AuditReply(Val, State); - auditValueReply -> tr_AuditReply(Val, State); - notifyReply -> tr_NotifyReply(Val, State); - serviceChangeReply -> tr_ServiceChangeReply(Val, State) - end, - {Tag, Val2}. - -tr_TopologyRequest(#'TopologyRequest'{terminationFrom = From, - terminationTo = To, - topologyDirection = Dir, - streamID = SID, - topologyDirectionExtension = TDE}, - State) -> - Dir2 = - case Dir of - bothway -> bothway; - isolate -> isolate; - oneway -> oneway - end, - TDE2 = - case TDE of - onewayexternal -> onewayexternal; - onewayboth -> onewayboth; - asn1_NOVALUE -> asn1_NOVALUE - end, - #'TopologyRequest'{terminationFrom = tr_TerminationID(From, State), - terminationTo = tr_TerminationID(To, State), - topologyDirection = Dir2, - streamID = tr_opt_StreamID(SID, State), - topologyDirectionExtension = TDE2}. - -tr_AmmRequest(#'AmmRequest'{terminationID = IdList, - descriptors = DescList}, - State) -> - #'AmmRequest'{terminationID = [tr_TerminationID(Id, State) || - Id <- IdList], - descriptors = tr_ammDescriptors(DescList, [], State)}. - -tr_ammDescriptors([], Acc, _State) -> - lists:reverse(Acc); -tr_ammDescriptors([Desc|Descs], Acc, State) -> - case tr_ammDescriptor(Desc, State) of - {_, deprecated} when State#state.mode =:= encode -> - error({deprecated, Desc}); - {_, deprecated} when State#state.mode =:= decode -> - %% SKIP - tr_ammDescriptors(Descs, Acc, State); - {_, deprecated} -> - %% SKIP - tr_ammDescriptors(Descs, Acc, State); - NewDesc -> - tr_ammDescriptors(Descs, [NewDesc|Acc], State) - end. - -tr_ammDescriptor({Tag, Desc}, State) -> - Desc2 = - case Tag of - mediaDescriptor -> tr_MediaDescriptor(Desc, State); - modemDescriptor -> tr_ModemDescriptor(Desc, State); - muxDescriptor -> tr_MuxDescriptor(Desc, State); - eventsDescriptor -> tr_EventsDescriptor(Desc, State); - eventBufferDescriptor -> tr_EventBufferDescriptor(Desc, State); - signalsDescriptor -> tr_SignalsDescriptor(Desc, State); - digitMapDescriptor -> tr_DigitMapDescriptor(Desc, State); - auditDescriptor -> tr_AuditDescriptor(Desc, State); - statisticsDescriptor -> tr_StatisticsDescriptor(Desc, State) - end, - {Tag, Desc2}. - -tr_AmmsReply(#'AmmsReply'{terminationID = IdList, - terminationAudit = TermAudit}, - State) -> - TermAudit2 = - case TermAudit of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> tr_TerminationAudit(TermAudit, State) - end, - #'AmmsReply'{terminationID = [tr_TerminationID(Id, State) || - Id <- IdList], - terminationAudit = TermAudit2}. - -tr_SubtractRequest(#'SubtractRequest'{terminationID = IdList, - auditDescriptor = Desc}, - State) -> - #'SubtractRequest'{terminationID = [tr_TerminationID(Id, State) || - Id <- IdList], - auditDescriptor = tr_opt_AuditDescriptor(Desc, State)}. - -tr_AuditRequest(#'AuditRequest'{terminationID = Id, - auditDescriptor = Desc, - terminationIDList = TIDList}, - State) -> - TIDList2 = - case TIDList of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> [tr_TerminationID(TID, State) || TID <- TIDList] - end, - #'AuditRequest'{terminationID = tr_TerminationID(Id, State), - auditDescriptor = tr_AuditDescriptor(Desc, State), - terminationIDList = TIDList2}. - -%% auditReply = (AuditValueToken / AuditCapToken ) -%% ( contextTerminationAudit / auditOther) -%% auditOther = EQUAL TerminationID LBRKT -%% terminationAudit RBRKT -%% terminationAudit = auditReturnParameter *(COMMA auditReturnParameter) -%% -%% contextTerminationAudit = EQUAL CtxToken ( terminationIDList / -%% LBRKT errorDescriptor RBRKT ) - -tr_AuditReply({Tag, Val}, State) -> - Val2 = - case Tag of - contextAuditResult -> - [tr_TerminationID(Id, State) || Id <- Val]; - error -> - tr_ErrorDescriptor(Val, State); - auditResult -> - tr_AuditResult(Val, State); - auditResultTermList -> - tr_TermListAuditResult(Val, State) - end, - {Tag, Val2}. - -tr_AuditResult(#'AuditResult'{terminationID = Id, - terminationAuditResult = AuditRes}, - State) -> - #'AuditResult'{terminationID = tr_TerminationID(Id, State), - terminationAuditResult = tr_TerminationAudit(AuditRes, State)}. - -tr_TermListAuditResult( - #'TermListAuditResult'{terminationIDList = TIDList, - terminationAuditResult = TAR}, - State) -> - TIDList2 = [tr_TerminationID(TID, State) || TID <- TIDList], - TAR2 = tr_TerminationAudit(TAR, State), - #'TermListAuditResult'{terminationIDList = TIDList2, - terminationAuditResult = TAR2}. - - -tr_opt_AuditDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_AuditDescriptor(Desc, State) -> - tr_AuditDescriptor(Desc, State). - -%% BUGBUG BUGBUG BUGBUG -%% With this construction it is possible to have both auditToken -%% and auditPropertyToken, but it is actually valid? -tr_AuditDescriptor(#'AuditDescriptor'{auditToken = Tokens, - auditPropertyToken = APTs}, - State) -> - Tokens2 = - case Tokens of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> [tr_auditItem(Token, State) || Token <- Tokens] - end, - %% v2 - APTs2 = - case APTs of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - [tr_indAuditParameter(APT, State) || APT <- APTs] - end, - #'AuditDescriptor'{auditToken = Tokens2, - auditPropertyToken = APTs2}. - -tr_auditItem(Token, _State) -> - case Token of - muxToken -> muxToken; - modemToken -> modemToken; - mediaToken -> mediaToken; - eventsToken -> eventsToken; - signalsToken -> signalsToken; - digitMapToken -> digitMapToken; - statsToken -> statsToken; - observedEventsToken -> observedEventsToken; - packagesToken -> packagesToken; - eventBufferToken -> eventBufferToken - end. - -%% --- v2 begin --- - -tr_indAuditParameter({Tag, Val}, State) -> - Val2 = - case Tag of - indAudMediaDescriptor -> - tr_indAudMediaDescriptor(Val, State); - indAudEventsDescriptor -> - tr_indAudEventsDescriptor(Val, State); - indAudSignalsDescriptor -> - tr_indAudSignalsDescriptor(Val, State); - indAudDigitMapDescriptor -> - tr_indAudDigitMapDescriptor(Val, State); - indAudEventBufferDescriptor -> - tr_indAudEventBufferDescriptor(Val, State); - indAudStatisticsDescriptor -> - tr_indAudStatisticsDescriptor(Val, State); - indAudPackagesDescriptor -> - tr_indAudPackagesDescriptor(Val, State) - end, - {Tag, Val2}. - - -%% - - -tr_indAudMediaDescriptor(#'IndAudMediaDescriptor'{termStateDescr = TSD, - streams = S}, - State) -> - TSD2 = - case TSD of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - tr_indAudTerminationStateDescriptor(TSD, State) - end, - S2 = - case S of - asn1_NOVALUE -> - asn1_NOVALUE; - {oneStream, OS} -> - {oneStream, tr_indAudStreamParms(OS, State)}; - {multiStream, MS} -> - MS2 = [tr_indAudStreamDescriptor(MS1, State) || MS1 <- MS], - {multiStream, MS2} - end, - #'IndAudMediaDescriptor'{termStateDescr = TSD2, - streams = S2}. - -tr_indAudTerminationStateDescriptor(Val, State) - when is_record(Val, 'IndAudTerminationStateDescriptor') -> - #'IndAudTerminationStateDescriptor'{propertyParms = Parms, - eventBufferControl = EBC, - serviceState = SS, - serviceStateSel = SSS} = Val, - Parms2 = [tr_indAudPropertyParm(Parm, State) || Parm <- Parms], - EBC2 = tr_opt_null(EBC, State), - SS2 = tr_opt_null(SS, State), - SSS2 = tr_opt_ServiceState(SSS, State), - #'IndAudTerminationStateDescriptor'{propertyParms = Parms2, - eventBufferControl = EBC2, - serviceState = SS2, - serviceStateSel = SSS2}. - - -tr_indAudStreamParms(#'IndAudStreamParms'{localControlDescriptor = LCD, - localDescriptor = LD, - remoteDescriptor = RD, - statisticsDescriptor = SD}, - State) -> - LCD2 = - case LCD of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - tr_indAudLocalControlDescriptor(LCD, State) - end, - LD2 = - case LD of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - tr_indAudLocalRemoteDescriptor(LD, State) - end, - RD2 = - case RD of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - tr_indAudLocalRemoteDescriptor(RD, State) - end, - SD2 = - case SD of - asn1_NOVALUE -> - asn1_NOVALUE; - _ -> - tr_indAudStatisticsDescriptor(SD, State) - end, - #'IndAudStreamParms'{localControlDescriptor = LCD2, - localDescriptor = LD2, - remoteDescriptor = RD2, - statisticsDescriptor = SD2}. - -tr_indAudLocalControlDescriptor(Val, State) - when is_record(Val, 'IndAudLocalControlDescriptor') -> - #'IndAudLocalControlDescriptor'{streamMode = M, - reserveValue = V, - reserveGroup = G, - propertyParms = P, - streamModeSel = SMS} = Val, - M2 = tr_opt_null(M, State), - V2 = tr_opt_null(V, State), - G2 = tr_opt_null(G, State), - P2 = tr_indAudLocalControlDescriptor_propertyParms(P, State), - SMS2 = tr_opt_StreamMode(SMS, State), - #'IndAudLocalControlDescriptor'{streamMode = M2, - reserveValue = V2, - reserveGroup = G2, - propertyParms = P2, - streamModeSel = SMS2}. - -tr_indAudLocalControlDescriptor_propertyParms(Parms, State) - when is_list(Parms) andalso (length(Parms) > 0) -> - [tr_indAudPropertyParm(Parm, State) || Parm <- Parms]; -tr_indAudLocalControlDescriptor_propertyParms(asn1_NOVALUE, _State) -> - asn1_NOVALUE. - -tr_indAudLocalRemoteDescriptor(#'IndAudLocalRemoteDescriptor'{propGroupID = ID, - propGrps = Grps}, - State) -> - #'IndAudLocalRemoteDescriptor'{propGroupID = tr_opt_UINT16(ID, State), - propGrps = tr_indAudPropertyGroup(Grps, - State)}. - -tr_indAudPropertyGroup(Grps, State) when is_list(Grps) -> - [tr_indAudPropertyParm(Parm, State) || Parm <- Grps]. - -tr_indAudPropertyParm(#'IndAudPropertyParm'{name = Name0, - propertyParms = Prop0}, State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - Name = resolve(property, Name0, State, Constraint), - Prop = - case Prop0 of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> tr_PropertyParm(Prop0, State) - end, - #'IndAudPropertyParm'{name = Name, - propertyParms = Prop}. - - -tr_indAudStreamDescriptor(#'IndAudStreamDescriptor'{streamID = ID, - streamParms = Parms}, - State) -> - #'IndAudStreamDescriptor'{streamID = tr_StreamID(ID, State), - streamParms = tr_indAudStreamParms(Parms, - State)}. - - -%% - - -tr_indAudEventsDescriptor(#'IndAudEventsDescriptor'{requestID = RID, - pkgdName = Name0, - streamID = SID}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - Name = resolve(event, Name0, State, Constraint), - #'IndAudEventsDescriptor'{requestID = tr_opt_RequestID(RID, State), - pkgdName = Name, - streamID = tr_opt_StreamID(SID, State)}. - - -%% - - -tr_indAudSignalsDescriptor({Tag, Val}, State) -> - case Tag of - signal -> - {signal, tr_indAudSignal(Val, State)}; - seqSigList -> - {seqSigList, tr_indAudSeqSigList(Val, State)} - end. - -tr_opt_indAudSignal(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_indAudSignal(Val, State) -> - tr_indAudSignal(Val, State). - -tr_indAudSignal(#'IndAudSignal'{signalName = Name0, - streamID = SID, - signalRequestID = RID}, State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - Name = resolve(signal, Name0, State, Constraint), - #'IndAudSignal'{signalName = Name, - streamID = tr_opt_StreamID(SID, State), - signalRequestID = tr_opt_RequestID(RID, State)}. - -tr_indAudSeqSigList(#'IndAudSeqSigList'{id = ID, - signalList = SigList}, State) -> - #'IndAudSeqSigList'{id = tr_integer(ID, State, 0, 65535), - signalList = tr_opt_indAudSignal(SigList, State)}. - -%% - - -tr_indAudDigitMapDescriptor(#'IndAudDigitMapDescriptor'{digitMapName = Name}, - State) -> - #'IndAudDigitMapDescriptor'{digitMapName = - tr_opt_DigitMapName(Name, State)}. - - -%% - - -tr_indAudEventBufferDescriptor(#'IndAudEventBufferDescriptor'{eventName = N, - streamID = SID}, - State) -> - ?d("tr_indAudEventBufferDescriptor -> entry with" - "~n N: ~p" - "~n SID: ~p", [N, SID]), - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - Name = resolve(event, N, State, Constraint), - ?d("tr_indAudEventBufferDescriptor -> entry with" - "~n Name: ~p", [Name]), - #'IndAudEventBufferDescriptor'{eventName = Name, - streamID = tr_opt_StreamID(SID, State)}. - -%% - - -tr_indAudStatisticsDescriptor(#'IndAudStatisticsDescriptor'{statName = N}, - State) -> - ?d("tr_indAudEventBufferDescriptor -> entry with" - "~n N: ~p", [N]), - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - Name = resolve(statistics, N, State, Constraint), - #'IndAudStatisticsDescriptor'{statName = Name}. - - -%% - - -tr_indAudPackagesDescriptor(#'IndAudPackagesDescriptor'{packageName = N, - packageVersion = V}, - State) -> - ?d("tr_indAudPackagesDescriptor -> entry with" - "~n N: ~p" - "~n V: ~p", [N, V]), - Constraint = fun(Item) -> tr_Name(Item, State) end, - Name = resolve(package, N, State, Constraint), - ?d("tr_indAudPackagesDescriptor -> entry with" - "~n Name: ~p", [Name]), - #'IndAudPackagesDescriptor'{packageName = Name, - packageVersion = tr_integer(V, State, 0, 99)}. - -%% -- v2 end -- - - -tr_TerminationAudit(ParmList, State) when is_list(ParmList) -> - do_tr_TerminationAudit(ParmList, [], State). - -do_tr_TerminationAudit([], Acc, _State) -> - lists:reverse(Acc); -do_tr_TerminationAudit([Parm|ParmList], Acc, State) -> - case tr_AuditReturnParameter(Parm, State) of - {_, deprecated} when State#state.mode =:= encode -> - error({deprecated, Parm}); - {_, deprecated} when State#state.mode =:= decode -> - %% SKIP - do_tr_TerminationAudit(ParmList, Acc, State); - {_, deprecated} -> - %% SKIP - do_tr_TerminationAudit(ParmList, Acc, State); - NewParm -> - do_tr_TerminationAudit(ParmList, [NewParm|Acc], State) - end. - -tr_AuditReturnParameter({Tag, Val}, State) -> - Val2 = - case Tag of - errorDescriptor -> - tr_ErrorDescriptor(Val, State); - mediaDescriptor -> - tr_MediaDescriptor(Val, State); - modemDescriptor -> - tr_ModemDescriptor(Val, State); - muxDescriptor -> - tr_MuxDescriptor(Val, State); - eventsDescriptor -> - tr_EventsDescriptor(Val, State); - eventBufferDescriptor -> - tr_EventBufferDescriptor(Val, State); - signalsDescriptor -> - tr_SignalsDescriptor(Val, State); - digitMapDescriptor -> - tr_DigitMapDescriptor(Val, State); - observedEventsDescriptor -> - tr_ObservedEventsDescriptor(Val, State); - statisticsDescriptor -> - tr_StatisticsDescriptor(Val, State); - packagesDescriptor -> - tr_PackagesDescriptor(Val, State); - emptyDescriptors -> - tr_EmptyDescriptors(Val, State) - end, - {Tag, Val2}. - -tr_EmptyDescriptors(#'AuditDescriptor'{auditToken = Tokens}, - State) -> - Tokens2 = - case Tokens of - asn1_NOVALUE -> asn1_NOVALUE; - _ -> [tr_auditItem(Token, State) || Token <- Tokens] - end, - #'AuditDescriptor'{auditToken = Tokens2}. - -tr_NotifyRequest(#'NotifyRequest'{terminationID = IdList, - observedEventsDescriptor = ObsDesc, - errorDescriptor = ErrDesc}, - State) -> - %% BUGBUG: Mismatch between ASN.1 and ABNF - %% BUGBUG: The following ought to be a 'choice' - #'NotifyRequest'{terminationID = [tr_TerminationID(Id, State) || - Id <- IdList], - observedEventsDescriptor = tr_ObservedEventsDescriptor(ObsDesc, State), - errorDescriptor = tr_opt_ErrorDescriptor(ErrDesc, State)}. - -tr_NotifyReply(#'NotifyReply'{terminationID = IdList, - errorDescriptor = ErrDesc}, - State) -> - #'NotifyReply'{terminationID = [tr_TerminationID(Id, State) || Id <- IdList], - errorDescriptor = tr_opt_ErrorDescriptor(ErrDesc, State)}. - -tr_ObservedEventsDescriptor(#'ObservedEventsDescriptor'{requestId = Id, - observedEventLst = Events}, - State) when is_list(Events) -> - #'ObservedEventsDescriptor'{requestId = tr_RequestID(Id, State), - observedEventLst = [tr_ObservedEvent(E, State) || E <- Events]}. - -%% ;time per event, because it might be buffered -%% observedEvent = [ TimeStamp LWSP COLON] LWSP -%% pkgdName [ LBRKT observedEventParameter -%% *(COMMA observedEventParameter) RBRKT ] -%% -%% ;at-most-once eventStream, every eventParameterName at most once -%% observedEventParameter = eventStream / eventOther - -tr_ObservedEvent(#'ObservedEvent'{eventName = Name, - streamID = Id, - eventParList = Parms, - timeNotation = Time}, - State) -> - #'ObservedEvent'{eventName = tr_EventName(Name, State), - streamID = tr_opt_StreamID(Id, State), - eventParList = [tr_EventParameter(P, Name, State) || P <- Parms], - timeNotation = tr_opt_TimeNotation(Time, State)}. - -tr_EventName(Name, State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - resolve(event, Name, State, Constraint). - -tr_EventParameter(#'EventParameter'{eventParameterName = ParName, - value = Value, - extraInfo = Extra}, - EventName, - State) -> - %% BUGBUG: event parameter name - Constraint = fun(Item) -> tr_Name(Item, State) end, - N = resolve({event_parameter, EventName}, ParName, State, Constraint), - #'EventParameter'{eventParameterName = N, - value = tr_Value(Value, State), - extraInfo = tr_opt_extraInfo(Extra, State)}. - -tr_ServiceChangeRequest(#'ServiceChangeRequest'{terminationID = IdList, - serviceChangeParms = Parms}, - State) -> - #'ServiceChangeRequest'{terminationID = [tr_TerminationID(Id, State) || Id <- IdList], - serviceChangeParms = tr_ServiceChangeParm(Parms, State)}. - -%% serviceChangeReply = ServiceChangeToken EQUAL TerminationID -%% [LBRKT (errorDescriptor / -%% serviceChangeReplyDescriptor) RBRKT] -%% serviceChangeReplyDescriptor = ServicesToken LBRKT -%% servChgReplyParm *(COMMA servChgReplyParm) RBRKT -%% -%% ;at-most-once. Version is REQUIRED on first ServiceChange response -%% servChgReplyParm = (serviceChangeAddress / serviceChangeMgcId / -%% serviceChangeProfile / serviceChangeVersion ) -tr_ServiceChangeReply(#'ServiceChangeReply'{terminationID = IdList, - serviceChangeResult = Res}, - State) -> - #'ServiceChangeReply'{terminationID = [tr_TerminationID(Id, State) || Id <- IdList], - serviceChangeResult = tr_ServiceChangeResult(Res, State)}. - -tr_ServiceChangeResult({Tag, Val}, State) -> - Val2 = - case Tag of - errorDescriptor -> tr_ErrorDescriptor(Val, State); - serviceChangeResParms -> tr_ServiceChangeResParm(Val, State) - end, - {Tag, Val2}. - -%% TerminationID = "ROOT" / pathNAME / "$" / "*" -%% ; Total length of pathNAME must not exceed 64 chars. -%% pathNAME = ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" ) -%% ["@" pathDomainName ] - -tr_TerminationID(TermId, State) when State#state.mode =/= verify -> - resolve(term_id, TermId, State, valid); -tr_TerminationID(#'TerminationID'{wildcard = Wild, - id = Id}, - _State) -> - #'TerminationID'{wildcard = Wild, - id = Id}; -tr_TerminationID(#megaco_term_id{contains_wildcards = IsWild, - id = Id}, - State) -> - #megaco_term_id{contains_wildcards = tr_bool(IsWild, State), - id = [tr_term_id_component(Sub, State) || Sub <- Id]}. - -tr_opt_bool(asn1_NOVALUE, _State) -> asn1_NOVALUE; -tr_opt_bool(Bool, State) -> tr_bool(Bool, State). - -tr_bool(true, _State) -> true; -tr_bool(false, _State) -> false. - -tr_term_id_component(Sub, _State) -> - case Sub of - all -> all; - choose -> choose; - Char when is_integer(Char) -> Char - end. - -%% mediaDescriptor = MediaToken LBRKT mediaParm *(COMMA mediaParm) RBRKT -%% ; at-most-once per item -%% ; and either streamParm or streamDescriptor but not both -%% mediaParm = (streamParm / streamDescriptor / -%% terminationStateDescriptor) -%% ; at-most-once -%% streamParm = ( localDescriptor / remoteDescriptor / -%% localControlDescriptor ) -%% streamDescriptor = StreamToken EQUAL StreamID LBRKT streamParm -%% *(COMMA streamParm) RBRKT -tr_MediaDescriptor(#'MediaDescriptor'{termStateDescr = TermState, - streams = Streams}, - State) -> - #'MediaDescriptor'{termStateDescr = tr_opt_TerminationStateDescriptor(TermState, State), - streams = tr_opt_streams(Streams, State)}. - -tr_opt_streams(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_streams({Tag, Val}, State) -> - Val2 = - case Tag of - oneStream -> tr_StreamParms(Val, State); - multiStream -> [tr_StreamDescriptor(SD, State) || SD <- Val] - end, - {Tag, Val2}. - -tr_StreamParms(#'StreamParms'{localControlDescriptor = LCD, - localDescriptor = LD, - remoteDescriptor = RD, - statisticsDescriptor = SD}, - State) -> - LCD2 = tr_opt_LocalControlDescriptor(LCD, State), - LD2 = tr_opt_LocalRemoteDescriptor(LD, State), - RD2 = tr_opt_LocalRemoteDescriptor(RD, State), - SD2 = tr_opt_StatisticsDescriptor(SD, State), - #'StreamParms'{localControlDescriptor = LCD2, - localDescriptor = LD2, - remoteDescriptor = RD2, - statisticsDescriptor = SD2}. - -tr_StreamDescriptor(#'StreamDescriptor'{streamID = Id, - streamParms = Parms}, - State) -> - #'StreamDescriptor'{streamID = tr_StreamID(Id, State), - streamParms = tr_StreamParms(Parms, State)}. - -%% localControlDescriptor = LocalControlToken LBRKT localParm -%% *(COMMA localParm) RBRKT -%% -%% ; at-most-once per item -%% localParm = ( streamMode / propertyParm / -%% reservedValueMode / reservedGroupMode ) -%% reservedValueMode = ReservedValueToken EQUAL ( "ON" / "OFF" ) -%% reservedGroupMode = ReservedGroupToken EQUAL ( "ON" / "OFF" ) -%% -%% reservedMode = ReservedToken EQUAL ( "ON" / "OFF" ) -%% -%% streamMode = ModeToken EQUAL streamModes -tr_opt_LocalControlDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_LocalControlDescriptor(#'LocalControlDescriptor'{streamMode = Mode, - reserveGroup = Group, - reserveValue = Value, - propertyParms = Props}, - State) -> - #'LocalControlDescriptor'{streamMode = tr_opt_StreamMode(Mode, State), - reserveGroup = tr_opt_bool(Group, State), - reserveValue = tr_opt_bool(Value, State), - propertyParms = [tr_PropertyParm(P, State) || P <- Props]}. - -tr_opt_StreamMode(Mode, _State) -> - case Mode of - asn1_NOVALUE -> asn1_NOVALUE; - sendOnly -> sendOnly; - recvOnly -> recvOnly; - sendRecv -> sendRecv; - inactive -> inactive; - loopBack -> loopBack - end. - -tr_Name(Name, State) -> - %% BUGBUG: transform - %% BUGBUG: NAME = ALPHA *63(ALPHA / DIGIT / "_" ) - tr_STRING(Name, State, 2, 2). - -tr_PkgdName(Name, State) -> - %% BUGBUG: transform - %% BUGBUG: pkgdName = (NAME / "*") SLASH (ItemID / "*" ) - tr_OCTET_STRING(Name, State, 4, 4). - -%% When text encoding the protocol, the descriptors consist of session -%% descriptions as defined in SDP (RFC2327), except that the "s=", "t=" -%% and "o=" lines are optional. When multiple session descriptions are -%% provided in one descriptor, the "v=" lines are required as delimiters; -%% otherwise they are optional. Implementations shall accept session -%% descriptions that are fully conformant to RFC2327. When binary -%% encoding the protocol the descriptor consists of groups of properties -%% (tag-value pairs) as specified in Annex C. Each such group may -%% contain the parameters of a session description. -tr_opt_LocalRemoteDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_LocalRemoteDescriptor(#'LocalRemoteDescriptor'{propGrps = Groups}, - State) -> - #'LocalRemoteDescriptor'{propGrps = [tr_PropertyGroup(G, State) || G <- Groups]}. - -tr_PropertyGroup(Props, State) -> - [tr_PropertyGroupParm(P, State) || P <- Props]. - -tr_PropertyGroupParm(#'PropertyParm'{name = Name, - value = Value}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - #'PropertyParm'{name = resolve(property, Name, State, Constraint), - value = tr_OCTET_STRING(Value, State, 0, infinity)}. - -tr_PropertyParm(#'PropertyParm'{name = Name, - value = Value, - extraInfo = Extra}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - #'PropertyParm'{name = resolve(property, Name, State, Constraint), - value = tr_Value(Value, State), - extraInfo = tr_opt_extraInfo(Extra, State)}. - -tr_opt_extraInfo(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_extraInfo({relation, Rel}, _State) -> - Rel2 = - case Rel of - greaterThan -> greaterThan; - smallerThan -> smallerThan; - unequalTo -> unequalTo - end, - {relation, Rel2}; -tr_opt_extraInfo({range, Range}, State) -> - Range2 = tr_bool(Range, State), - {range, Range2}; -tr_opt_extraInfo({sublist, Sub}, State) -> - Sub2 = tr_bool(Sub, State), - {sublist, Sub2}. - -tr_opt_TerminationStateDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_TerminationStateDescriptor(#'TerminationStateDescriptor'{propertyParms = Props, - eventBufferControl = Control, - serviceState = Service}, - State) -> - #'TerminationStateDescriptor'{propertyParms = [tr_PropertyParm(P, State) || P <- Props], - eventBufferControl = tr_opt_EventBufferControl(Control, State), - serviceState = tr_opt_ServiceState(Service, State)}. - -tr_opt_EventBufferControl(Control, _State) -> - case Control of - asn1_NOVALUE -> asn1_NOVALUE; - off -> off; - lockStep -> lockStep - end. - -tr_opt_ServiceState(Service, _State) -> - case Service of - asn1_NOVALUE -> asn1_NOVALUE; - test -> test; - outOfSvc -> outOfSvc; - inSvc -> inSvc - end. - -tr_MuxDescriptor(#'MuxDescriptor'{muxType = Type, - termList = IdList}, - State) -> - #'MuxDescriptor'{muxType = tr_MuxType(Type, State), - termList = [tr_TerminationID(Id, State) || Id <- IdList]}. - -tr_MuxType(Type, _State) -> - case Type of - h221 -> h221; - h223 -> h223; - h226 -> h226; - v76 -> v76 - end. - -tr_opt_StreamID(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_StreamID(Id, State) -> - tr_StreamID(Id, State). - -tr_StreamID(Id, State) -> - tr_UINT16(Id, State). - -tr_EventsDescriptor(#'EventsDescriptor'{requestID = Id, - eventList = Events}, - State) -> - #'EventsDescriptor'{requestID = tr_opt_RequestID(Id, State), - eventList = [tr_RequestedEvent(E, State) || E <- Events]}. - -tr_RequestedEvent(#'RequestedEvent'{pkgdName = Name, - streamID = Id, - evParList = Parms, - eventAction = Actions}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - #'RequestedEvent'{pkgdName = resolve(event, Name, State, Constraint), - streamID = tr_opt_StreamID(Id, State), - eventAction = tr_opt_RequestedActions(Actions, State), - evParList = [tr_EventParameter(P, Name, State) || P <- Parms]}. - -tr_RegulatedEmbeddedDescriptor( - #'RegulatedEmbeddedDescriptor'{secondEvent = SE, - signalsDescriptor = SD}, State) -> - SE2 = tr_opt_SecondEventsDescriptor(SE, State), - SD2 = tr_opt_SignalsDescriptor(SD, State), - #'RegulatedEmbeddedDescriptor'{secondEvent = SE2, - signalsDescriptor = SD2}. - -tr_opt_NotifyBehaviour(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_NotifyBehaviour(NB, State) -> - tr_NotifyBehaviour(NB, State). - -tr_NotifyBehaviour({notifyImmediate, 'NULL'} = NB, _State) -> - NB; -tr_NotifyBehaviour({notifyRegulated = Tag, Val}, State) -> - {Tag, tr_RegulatedEmbeddedDescriptor(Val, State)}; -tr_NotifyBehaviour({neverNotify, 'NULL'} = NB, _State) -> - NB. - -tr_opt_RequestedActions(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_RequestedActions(#'RequestedActions'{keepActive = KA, - eventDM = DM, - secondEvent = SE, - signalsDescriptor = SD, - notifyBehaviour = NB, - resetEventsDescriptor = RSD}, - State) -> - KA2 = tr_opt_keepActive(KA, State), - DM2 = tr_opt_EventDM(DM, State), - SE2 = tr_opt_SecondEventsDescriptor(SE, State), - SD2 = tr_opt_SignalsDescriptor(SD, State), - NB2 = tr_opt_NotifyBehaviour(NB, State), - RSD2 = tr_opt_null(RSD, State), - #'RequestedActions'{keepActive = KA2, - eventDM = DM2, - secondEvent = SE2, - signalsDescriptor = SD2, - notifyBehaviour = NB2, - resetEventsDescriptor = RSD2}. - -tr_opt_keepActive(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_keepActive(Keep, State) -> - tr_bool(Keep, State). - -tr_opt_EventDM(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_EventDM({Tag, Val}, State) -> - Val2 = - case Tag of - digitMapName -> tr_DigitMapName(Val, State); - digitMapValue -> tr_DigitMapValue(Val, State) - end, - {Tag, Val2}. - -tr_opt_SecondEventsDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_SecondEventsDescriptor(#'SecondEventsDescriptor'{requestID = Id, - eventList = Events}, - State) -> - #'SecondEventsDescriptor'{requestID = tr_RequestID(Id, State), %% IG v6 6.8 withdrawn - eventList = [tr_SecondRequestedEvent(E, State) || E <- Events]}. - -tr_SecondRequestedEvent(#'SecondRequestedEvent'{pkgdName = Name, - streamID = Id, - evParList = Parms, - eventAction = Actions}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - #'SecondRequestedEvent'{pkgdName = resolve(event, Name, State, Constraint), - streamID = tr_opt_StreamID(Id, State), - eventAction = tr_opt_SecondRequestedActions(Actions, State), - evParList = [tr_EventParameter(P, Name, State) || P <- Parms]}. - - -tr_opt_SecondRequestedActions(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_SecondRequestedActions( - #'SecondRequestedActions'{keepActive = KA, - eventDM = DM, - signalsDescriptor = SD, - notifyBehaviour = NB, - resetEventsDescriptor = RSD}, - State) -> - KA2 = tr_opt_keepActive(KA, State), - DM2 = tr_opt_EventDM(DM, State), - SD2 = tr_opt_SignalsDescriptor(SD, State), - NB2 = tr_opt_NotifyBehaviour(NB, State), - RSD2 = tr_opt_null(RSD, State), - #'SecondRequestedActions'{keepActive = KA2, - eventDM = DM2, - signalsDescriptor = SD2, - notifyBehaviour = NB2, - resetEventsDescriptor = RSD2}. - -tr_EventBufferDescriptor(EventSpecs, State) -> - [tr_EventSpec(ES, State) || ES <- EventSpecs]. - -tr_EventSpec(#'EventSpec'{eventName = Name, - streamID = Id, - eventParList = Parms}, - State) -> - #'EventSpec'{eventName = tr_EventName(Name, State), - streamID = tr_opt_StreamID(Id, State), - eventParList = [tr_EventParameter(P, Name, State) || P <- Parms]}. - -tr_opt_SignalsDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_SignalsDescriptor(SigDesc, State) -> - tr_SignalsDescriptor(SigDesc, State). - -tr_SignalsDescriptor(SigDesc, State) when is_list(SigDesc) -> - [tr_SignalRequest(SigReq, State) || SigReq <- SigDesc]. - -tr_SignalRequest({Tag, Val}, State) -> - Val2 = - case Tag of - signal -> tr_Signal(Val, State); - seqSigList -> tr_SeqSigList(Val, State) - end, - {Tag, Val2}. - - -tr_SeqSigList(#'SeqSigList'{id = Id, - signalList = SigList}, - State) when is_list(SigList) -> - #'SeqSigList'{id = tr_UINT16(Id, State), - signalList = [tr_Signal(Sig, State) || Sig <- SigList]}. - -tr_Signal(#'Signal'{signalName = Name, - streamID = SID, - sigType = Type, - duration = Dur, - notifyCompletion = Compl, - keepActive = Keep, - sigParList = Parms, - direction = Dir, - requestID = RID, - intersigDelay = ID}, - State) -> - Name2 = tr_SignalName(Name, State), - SID2 = tr_opt_StreamID(SID, State), - Type2 = tr_opt_SignalType(Type, State), - Dur2 = tr_opt_UINT16(Dur, State), - Compl2 = tr_opt_NotifyCompletion(Compl, State), - Keep2 = tr_opt_keepActive(Keep, State), - Parms2 = [tr_SigParameter(P, Name, State) || P <- Parms], - Dir2 = tr_opt_SignalDirection(Dir, State), - RID2 = tr_opt_RequestID(RID, State), - ID2 = tr_opt_UINT16(ID, State), - #'Signal'{signalName = Name2, - streamID = SID2, - sigType = Type2, - duration = Dur2, - notifyCompletion = Compl2, - keepActive = Keep2, - sigParList = Parms2, - direction = Dir2, - requestID = RID2, - intersigDelay = ID2}. - -tr_opt_NotifyCompletion(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_NotifyCompletion(Items, State) when is_list(Items) -> - [tr_notifyCompletionItem(I, State) || I <- Items]. - -tr_notifyCompletionItem(Item, _State) -> - case Item of - onTimeOut -> onTimeOut; - onInterruptByEvent -> onInterruptByEvent; - onInterruptByNewSignalDescr -> onInterruptByNewSignalDescr; - otherReason -> otherReason; - onIteration -> onIteration - end. - -tr_opt_SignalType(asn1_NOVALUE = Type, _State) -> - Type; -tr_opt_SignalType(Type, _State) -> - case Type of - brief -> brief; - onOff -> onOff; - timeOut -> timeOut - end. - -tr_opt_SignalDirection(asn1_NOVALUE = SD, _State) -> - SD; -tr_opt_SignalDirection(SD, _State) -> - case SD of - internal -> internal; - external -> external; - both -> both - end. - -tr_SignalName(Name, State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - resolve(signal, Name, State, Constraint). - -tr_SigParameter(#'SigParameter'{sigParameterName = ParName, - value = Value, - extraInfo = Extra}, - SigName, - State) -> - Constraint = fun(Item) -> tr_Name(Item, State) end, - N = resolve({signal_parameter, SigName}, ParName, State, Constraint), - #'SigParameter'{sigParameterName = N, - value = tr_Value(Value, State), - extraInfo = tr_opt_extraInfo(Extra, State)}. - -tr_opt_RequestID(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_RequestID(Id, State) -> - tr_RequestID(Id, State). - -tr_RequestID(Id, _State) when Id =:= ?megaco_all_request_id -> - ?megaco_all_request_id; -tr_RequestID(Id, State) -> - tr_UINT32(Id, State). - -tr_ModemDescriptor(_MD, _State) -> - deprecated. - -tr_DigitMapDescriptor(#'DigitMapDescriptor'{digitMapName = Name, - digitMapValue = Value}, - State) -> - #'DigitMapDescriptor'{digitMapName = tr_opt_DigitMapName(Name, State), - digitMapValue = tr_opt_DigitMapValue(Value, State)}. - -tr_opt_DigitMapName(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_DigitMapName(Name, State) -> - tr_DigitMapName(Name, State). - -tr_DigitMapName(Name, State) -> - Constraint = fun(Item) -> tr_Name(Item, State) end, - resolve(dialplan, Name, State, Constraint). - -tr_opt_DigitMapValue(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_DigitMapValue(Value, State) -> - tr_DigitMapValue(Value, State). - -tr_DigitMapValue(#'DigitMapValue'{digitMapBody = Body, - startTimer = Start, - shortTimer = Short, - longTimer = Long}, - State) -> - #'DigitMapValue'{startTimer = tr_opt_timer(Start, State), - shortTimer = tr_opt_timer(Short, State), - longTimer = tr_opt_timer(Long, State), - digitMapBody = tr_STRING(Body, State)}. %% BUGBUG: digitMapBody not handled at all - -tr_opt_timer(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_timer(Timer, State) -> - tr_DIGIT(Timer, State, 0, 99). - -tr_ServiceChangeParm( - #'ServiceChangeParm'{serviceChangeMethod = Method, - serviceChangeAddress = Addr, - serviceChangeVersion = Version, - serviceChangeProfile = Profile, - serviceChangeReason = Reason, - serviceChangeDelay = Delay, - serviceChangeMgcId = MgcId, - timeStamp = Time, - serviceChangeInfo = Info, - serviceChangeIncompleteFlag = Incomplete}, - State) -> - Method2 = tr_ServiceChangeMethod(Method, State), - Addr2 = tr_opt_ServiceChangeAddress(Addr, State), - Version2 = tr_opt_serviceChangeVersion(Version, State), - Profile2 = tr_opt_ServiceChangeProfile(Profile, State), - Reason2 = tr_serviceChangeReason(Reason, State), - Delay2 = tr_opt_serviceChangeDelay(Delay, State), - MgcId2 = tr_opt_serviceChangeMgcId(MgcId, State), - Time2 = tr_opt_TimeNotation(Time, State), - Info2 = tr_opt_AuditDescriptor(Info, State), - Incomplete2 = tr_opt_null(Incomplete, State), - #'ServiceChangeParm'{serviceChangeMethod = Method2, - serviceChangeAddress = Addr2, - serviceChangeVersion = Version2, - serviceChangeProfile = Profile2, - serviceChangeReason = Reason2, - serviceChangeDelay = Delay2, - serviceChangeMgcId = MgcId2, - timeStamp = Time2, - serviceChangeInfo = Info2, - serviceChangeIncompleteFlag = Incomplete2}. - -tr_ServiceChangeMethod(Method, _State) -> - case Method of - failover -> failover; - forced -> forced; - graceful -> graceful; - restart -> restart; - disconnected -> disconnected; - handOff -> handOff - end. %% BUGBUG: extension - -tr_opt_ServiceChangeAddress(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_ServiceChangeAddress({Tag, Val}, State) -> - Val2 = - case Tag of - portNumber -> tr_portNumber(Val, State); - ip4Address -> tr_IP4Address(Val, State); - ip6Address -> tr_IP6Address(Val, State); - domainName -> tr_DomainName(Val, State); - deviceName -> tr_PathName(Val, State); - mtpAddress -> tr_mtpAddress(Val, State) - end, - {Tag, Val2}. - -tr_opt_serviceChangeVersion(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_serviceChangeVersion(Version, State) -> - tr_version(Version, State). - -tr_opt_ServiceChangeProfile(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -%% Decode -tr_opt_ServiceChangeProfile({'ServiceChangeProfile', ProfileName}, State) -> - case string:tokens(ProfileName, "/") of - [Name0, Version0] -> - Name = tr_STRING(Name0, State, 1, 64), - Version = tr_version(list_to_integer(Version0), State), - #'ServiceChangeProfile'{profileName = Name, - version = Version} - end; -%% Encode -tr_opt_ServiceChangeProfile(#'ServiceChangeProfile'{profileName = Name0, - version = Version0}, - State) -> - Name = tr_STRING(Name0, State, 1, 64), - Version = tr_version(Version0, State), - ProfileName = lists:flatten(io_lib:format("~s/~w", [Name, Version])), - {'ServiceChangeProfile', ProfileName}. - -tr_serviceChangeReason([_] = Reason, State) -> - tr_Value(Reason, State). - -tr_opt_serviceChangeDelay(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_serviceChangeDelay(Delay, State) -> - tr_UINT32(Delay, State). - -tr_opt_serviceChangeMgcId(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_serviceChangeMgcId(MgcId, State) -> - tr_MId(MgcId, State). - -tr_opt_portNumber(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_portNumber(Port, State) -> - tr_portNumber(Port, State). - -tr_portNumber(Port, State) when is_integer(Port) andalso (Port >= 0) -> - tr_UINT16(Port, State). - -tr_ServiceChangeResParm(#'ServiceChangeResParm'{serviceChangeMgcId = MgcId, - serviceChangeAddress = Addr, - serviceChangeVersion = Version, - serviceChangeProfile = Profile, - timeStamp = Time}, - State) -> - #'ServiceChangeResParm'{serviceChangeMgcId = tr_opt_serviceChangeMgcId(MgcId, State), - serviceChangeAddress = tr_opt_ServiceChangeAddress(Addr, State), - serviceChangeVersion = tr_opt_serviceChangeVersion(Version, State), - serviceChangeProfile = tr_opt_ServiceChangeProfile(Profile, State), - timeStamp = tr_opt_TimeNotation(Time, State)}. - -tr_PackagesDescriptor(Items, State) when is_list(Items) -> - [tr_PackagesItem(I, State) || I <- Items]. - -tr_PackagesItem(#'PackagesItem'{packageName = Name, - packageVersion = Version}, - State) -> - Constraint = fun(Item) -> tr_Name(Item, State) end, - #'PackagesItem'{packageName = resolve(package, Name, State, Constraint), - packageVersion = tr_UINT16(Version, State)}. - -tr_opt_StatisticsDescriptor(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_StatisticsDescriptor(Parms, State) -> - tr_StatisticsDescriptor(Parms, State). - -tr_StatisticsDescriptor(Parms, State) when is_list(Parms) -> - [tr_StatisticsParameter(P, State) || P <- Parms]. - -tr_StatisticsParameter(#'StatisticsParameter'{statName = Name, - statValue = Value}, - State) -> - Constraint = fun(Item) -> tr_PkgdName(Item, State) end, - #'StatisticsParameter'{statName = resolve(statistics, Name, State, Constraint), - statValue = tr_opt_Value(Value, State)}. - -tr_opt_TimeNotation(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_TimeNotation(#'TimeNotation'{date = Date, - time = Time}, - State) -> - #'TimeNotation'{date = tr_STRING(Date, State, 8, 8), % "yyyymmdd" - time = tr_STRING(Time, State, 8, 8)}.% "hhmmssss" - -%% BUGBUG: Does not verify that string must contain at least one char -%% BUGBUG: This violation of the is required in order to comply with -%% BUGBUG: the dd/ce ds parameter that may possibly be empty. - -tr_opt_Value(asn1_NOVALUE, _State) -> - asn1_NOVALUE; -tr_opt_Value(Value, State) -> - tr_Value(Value, State). - -tr_Value(Strings, _State) when is_list(Strings) -> - [[Char || Char <- String] || String <- Strings]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%% Encode an octet string, escape } by \ if necessary -tr_OCTET_STRING(String, _State, Min, Max) when is_list(String) -> - verify_count(length(String), Min, Max), - String. - -tr_QUOTED_STRING(String, _State) when is_list(String) -> - verify_count(length(String), 1, infinity), - String. - -%% The internal format of hex digits is a list of octets -%% Min and Max means #hexDigits -%% Leading zeros are prepended in order to fulfill Min -tr_HEXDIG(Octets, _State, Min, Max) when is_list(Octets) -> - verify_count(length(Octets), Min, Max), - Octets. - -tr_DIGIT(Val, State, Min, Max) -> - tr_integer(Val, State, Min, Max). - -tr_STRING(String, _State) when is_list(String) -> - String. - -tr_STRING(String, _State, Min, Max) when is_list(String) -> - verify_count(length(String), Min, Max), - String. - -tr_opt_UINT16(Val, State) -> - tr_opt_integer(Val, State, 0, 65535). - -tr_UINT16(Val, State) -> - tr_integer(Val, State, 0, 65535). - -tr_UINT32(Val, State) -> - tr_integer(Val, State, 0, 4294967295). - -tr_opt_integer(asn1_NOVALUE, _State, _Min, _Max) -> - asn1_NOVALUE; -tr_opt_integer(Int, State, Min, Max) -> - tr_integer(Int, State, Min, Max). - -tr_integer(Int, _State, Min, Max) -> - verify_count(Int, Min, Max), - Int. - -%% Verify that Count is within the range of Min and Max -verify_count(Count, Min, Max) -> - if - is_integer(Count) -> - if - is_integer(Min) andalso (Count >= Min) -> - if - is_integer(Max) andalso (Count =< Max) -> - Count; - Max =:= infinity -> - Count; - true -> - error({count_too_large, Count, Max}) - end; - true -> - error({count_too_small, Count, Min}) - end; - true -> - error({count_not_an_integer, Count}) - end. diff --git a/lib/megaco/src/binary/megaco_per_encoder.erl b/lib/megaco/src/binary/megaco_per_encoder.erl index 187e37d21b..7a3653468c 100644 --- a/lib/megaco/src/binary/megaco_per_encoder.erl +++ b/lib/megaco/src/binary/megaco_per_encoder.erl @@ -45,16 +45,10 @@ -define(V1_ASN1_MOD, megaco_per_media_gateway_control_v1). -define(V2_ASN1_MOD, megaco_per_media_gateway_control_v2). -define(V3_ASN1_MOD, megaco_per_media_gateway_control_v3). --define(PREV3A_ASN1_MOD, megaco_per_media_gateway_control_prev3a). --define(PREV3B_ASN1_MOD, megaco_per_media_gateway_control_prev3b). --define(PREV3C_ASN1_MOD, megaco_per_media_gateway_control_prev3c). -define(V1_TRANS_MOD, megaco_binary_transformer_v1). -define(V2_TRANS_MOD, megaco_binary_transformer_v2). -define(V3_TRANS_MOD, megaco_binary_transformer_v3). --define(PREV3A_TRANS_MOD, megaco_binary_transformer_prev3a). --define(PREV3B_TRANS_MOD, megaco_binary_transformer_prev3b). --define(PREV3C_TRANS_MOD, megaco_binary_transformer_prev3c). -define(BIN_LIB, megaco_binary_encoder_lib). @@ -64,18 +58,6 @@ %% Return {ok, Version} | {error, Reason} %%---------------------------------------------------------------------- -%% <DEPRECATED> -version_of([{version3,prev3c}|EC], Binary) -> - Decoders = [?V1_ASN1_MOD, ?V2_ASN1_MOD, ?PREV3C_ASN1_MOD], - ?BIN_LIB:version_of(EC, Binary, 1, Decoders); -version_of([{version3,prev3b}|EC], Binary) -> - Decoders = [?V1_ASN1_MOD, ?V2_ASN1_MOD, ?PREV3B_ASN1_MOD], - ?BIN_LIB:version_of(EC, Binary, 1, Decoders); -version_of([{version3,prev3a}|EC], Binary) -> - Decoders = [?V1_ASN1_MOD, ?V2_ASN1_MOD, ?PREV3A_ASN1_MOD], - ?BIN_LIB:version_of(EC, Binary, 1, Decoders); -%% </DEPRECATED> - %% <BACKWARD-COMPAT-CLAUSE> version_of([{version3,v3}|EC], Binary) -> Decoders = [?V1_ASN1_MOD, ?V2_ASN1_MOD, ?V3_ASN1_MOD], @@ -129,21 +111,6 @@ encode_message(EC, 2, MegaMsg) -> %% -- Version 3 -- -%% <DEPRECATED> -encode_message([{version3,prev3c}|EC], 3, MegaMsg) -> - AsnMod = ?PREV3C_ASN1_MOD, - TransMod = ?PREV3C_TRANS_MOD, - ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); -encode_message([{version3,prev3b}|EC], 3, MegaMsg) -> - AsnMod = ?PREV3B_ASN1_MOD, - TransMod = ?PREV3B_TRANS_MOD, - ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); -encode_message([{version3,prev3a}|EC], 3, MegaMsg) -> - AsnMod = ?PREV3A_ASN1_MOD, - TransMod = ?PREV3A_TRANS_MOD, - ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); -%% </DEPRECATED> - %% <BACKWARD-COMPAT-CLAUSE> encode_message([{version3,v3}|EC], 3, MegaMsg) -> AsnMod = ?V3_ASN1_MOD, @@ -291,21 +258,6 @@ decode_message(EC, 2, Binary) -> %% -- Version 3 -- -%% <DEPRECATED> -decode_message([{version3,prev3c}|EC], 3, Binary) -> - AsnMod = ?PREV3C_ASN1_MOD, - TransMod = ?PREV3C_TRANS_MOD, - ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, io_list); -decode_message([{version3,prev3b}|EC], 3, Binary) -> - AsnMod = ?PREV3B_ASN1_MOD, - TransMod = ?PREV3B_TRANS_MOD, - ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, io_list); -decode_message([{version3,prev3a}|EC], 3, Binary) -> - AsnMod = ?PREV3A_ASN1_MOD, - TransMod = ?PREV3A_TRANS_MOD, - ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, io_list); -%% </DEPRECATED> - %% <BACKWARD-COMPAT-CLAUSE> decode_message([{version3,v3}|EC], 3, Binary) -> AsnMod = ?V3_ASN1_MOD, diff --git a/lib/megaco/src/binary/megaco_per_media_gateway_control_prev3a.set.asn b/lib/megaco/src/binary/megaco_per_media_gateway_control_prev3a.set.asn deleted file mode 100644 index b9ba7ffdb4..0000000000 --- a/lib/megaco/src/binary/megaco_per_media_gateway_control_prev3a.set.asn +++ /dev/null @@ -1 +0,0 @@ -MEDIA-GATEWAY-CONTROL-prev3a.asn diff --git a/lib/megaco/src/binary/megaco_per_media_gateway_control_prev3b.set.asn b/lib/megaco/src/binary/megaco_per_media_gateway_control_prev3b.set.asn deleted file mode 100644 index 0437bde310..0000000000 --- a/lib/megaco/src/binary/megaco_per_media_gateway_control_prev3b.set.asn +++ /dev/null @@ -1 +0,0 @@ -MEDIA-GATEWAY-CONTROL-prev3b.asn diff --git a/lib/megaco/src/binary/megaco_per_media_gateway_control_prev3c.set.asn b/lib/megaco/src/binary/megaco_per_media_gateway_control_prev3c.set.asn deleted file mode 100644 index e78055fbad..0000000000 --- a/lib/megaco/src/binary/megaco_per_media_gateway_control_prev3c.set.asn +++ /dev/null @@ -1 +0,0 @@ -MEDIA-GATEWAY-CONTROL-prev3c.asn diff --git a/lib/megaco/src/binary/modules.mk b/lib/megaco/src/binary/modules.mk index 485f0fe610..e6573748d6 100644 --- a/lib/megaco/src/binary/modules.mk +++ b/lib/megaco/src/binary/modules.mk @@ -18,22 +18,6 @@ # # %CopyrightEnd% -# <DEPRECATED> -PREV3_MODULES = \ - megaco_ber_media_gateway_control_prev3a \ - megaco_ber_media_gateway_control_prev3b \ - megaco_ber_media_gateway_control_prev3c \ - megaco_per_media_gateway_control_prev3a \ - megaco_per_media_gateway_control_prev3b \ - megaco_per_media_gateway_control_prev3c \ - megaco_binary_name_resolver_prev3a \ - megaco_binary_name_resolver_prev3b \ - megaco_binary_name_resolver_prev3c \ - megaco_binary_transformer_prev3a \ - megaco_binary_transformer_prev3b \ - megaco_binary_transformer_prev3c -# </DEPRECATED> - MODULES = \ megaco_binary_encoder \ megaco_binary_encoder_lib \ @@ -52,19 +36,13 @@ MODULES = \ megaco_binary_term_id_gen \ megaco_binary_transformer_v1 \ megaco_binary_transformer_v2 \ - megaco_binary_transformer_v3 \ - $(PREV3_MODULES) + megaco_binary_transformer_v3 INTERNAL_HRL_FILES = ASN1_V1_SPEC = MEDIA-GATEWAY-CONTROL-v1 ASN1_V2_SPEC = MEDIA-GATEWAY-CONTROL-v2 ASN1_V3_SPEC = MEDIA-GATEWAY-CONTROL-v3 -# <DEPRECATED> -ASN1_PREV3A_SPEC = MEDIA-GATEWAY-CONTROL-prev3a -ASN1_PREV3B_SPEC = MEDIA-GATEWAY-CONTROL-prev3b -ASN1_PREV3C_SPEC = MEDIA-GATEWAY-CONTROL-prev3c -# </DEPRECATED> BER_ASN1_V1_SPEC = megaco_ber_media_gateway_control_v1 PER_ASN1_V1_SPEC = megaco_per_media_gateway_control_v1 @@ -75,14 +53,3 @@ PER_ASN1_V2_SPEC = megaco_per_media_gateway_control_v2 BER_ASN1_V3_SPEC = megaco_ber_media_gateway_control_v3 PER_ASN1_V3_SPEC = megaco_per_media_gateway_control_v3 -# <DEPRECATED> -BER_ASN1_PREV3A_SPEC = megaco_ber_media_gateway_control_prev3a -PER_ASN1_PREV3A_SPEC = megaco_per_media_gateway_control_prev3a - -BER_ASN1_PREV3B_SPEC = megaco_ber_media_gateway_control_prev3b -PER_ASN1_PREV3B_SPEC = megaco_per_media_gateway_control_prev3b - -BER_ASN1_PREV3C_SPEC = megaco_ber_media_gateway_control_prev3c -PER_ASN1_PREV3C_SPEC = megaco_per_media_gateway_control_prev3c -# </DEPRECATED> - -- 2.26.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor