H.248网关控制协议的文本编码

时间:2009-01-16 来源:未知 作者:小远 点击:
通配符编码 当协议使用文本方式进行编码时,当终结点是任意的且具有某种选择性的名字时,通配字符*将 非常有效。当通配发生时,将尝试所有具有相同属性的所有终结点。例如,假定有三个终结点R13/3/1、 R13/3/2和R13/3/2,则终结点R13/3/*将匹配所有三个终结点。所有终
  

通配符编码
当协议使用文本方式进行编码时,当终结点是任意的且具有某种选择性的名字时,通配字符“*”将
非常有效。当通配发生时,将尝试所有具有相同属性的所有终结点。例如,假定有三个终结点R13/3/1、
R13/3/2和R13/3/2,则终结点R13/3/*将匹配所有三个终结点。所有终结点应遵循约定的命名规则。终结点
标识符为“*”表示通配值“ALL”。终结点标识符为“$”表示通配值“CHOOSE”,媒体网关控制器
指示媒体网关创建一个临时终结点或选择一个空闲的物理终结点。
ABNF 规范
ABNF规范的具体要求参见RFC 2234。
注1 — 以下句法规范并不强制信息单元和参数值必须遵循所有的限制条件。某些附加的限制条件包含在后面的注释中,或
者其他限制条件包含在本建议书的正文部分。尽管本建议书未强制规定必须实现所有的附加限制条件,然而这些附加的限
制条件仍然是本协议的一个组成部分。

注2 — 句法定义与关联有关。例如,“Add”命令可以是一个Add符号或与关联相关的名称。
采用ABNF方式进行文本编码的任何内容都不分大小写,即对大小写字符不进行区分。这包括
TerminationID、DigitmapID,等。然而,SDP单元将大小写字符进行区分,参见RFC 2327。
; 注 — 本节中所使用的ABNF 句法采用VALUE 结构或VALUE 结构列表对包
; 以及其所定义的特性、信号等参数进行编码。参数值类型可以是不同的,
; 分别在各自相关的包中进行定义。
; 参数值类型的定义参见第12.2 节。
;
; ABNF 规范中定义的VALUE 结构允许使用quotedString 格式或SafeChars 集合。
; 包参数值采用ABNF VALUE 结构进行编码的规则将在本节进行描述。
; 如果某种类型的参数值编码要求使用字符而非SafeChars,
; 即使某个特定的参数值仅包含SafeChars,
; 则该类型的所有参数值都务必使用quotedString 格式。
;
; 字串:字串务必采用quotedString 格式的VALUE 结构进行编码。
; 且字串可以包含quotedString 格式允许的任何字符。
;
; 整数、双精度整数和无符号整数:
; 使用0-9 数字的十进制数。十六进制数务必使用“0x” 前缀进行标识,
; 且每一个十六进制数可以是0-9、a-f 或A-F 之间的任意数值。不允许使用八进制编码方式。
; 负整数务必以字符“-”作为其前缀,且必须是十进制的整数。
; 整数、双精度整数和无符号整数务必使用格式为SafeChars 的VALUE 结构进行编码。
;
; 字符:用单引号字符包围的单个UTF-8 字符。
;
; 枚举:枚举类型务必使用SafeChars 的VALUE 结构,且可以包含SafeChar 允许的任何字符。
;
; 布尔型:“ON”或“OFF”,该类型不分大小写。务必使用格式为SafeChars 的VALUE 结构。
;
; 其他类型:任何自定义的类型参数值务必满足
; ABNF 规范对VALUE 结构定义的要求。
; 如果某种类型参数值的编码要求使用字符而非SafeChars,
; 即使某个特定的参数值仅包含SafeChars,
; 则该类型的所有参数值务必使用quotedString 格式。
;
; 在参数值结构中,不允许使用双引号字符。
;
; SDP 不允许在每一行的开始使用空格字符,H.248.1 协议允许Local 或Remote 描述符中的
; SDP 单元的起始部分使用空格字符。
; 在跟随Local 和Remote 符号后的LBPKT 与SDP 起始部分之间,
; 应该允许使用行分隔。
megacoMessage = LWSP [authenticationHeader SEP] message
authenticationHeader = AuthToken EQUAL SecurityParmIndex COLON
SequenceNum COLON AuthData
SecurityParmIndex = "0x" 8(HEXDIG)
SequenceNum = "0x" 8(HEXDIG)
AuthData = "0x" 24*64(HEXDIG)
Message = MegacopToken SLASH Version SEP mId SEP messageBody
; 此处规定协议版本等于3。
messageBody = (errorDescriptor / transactionList)

transactionList = 1*(transactionRequest / transactionReply /
transactionPending / transactionResponseAck /
segmentReply)
; 应答响应与底层传输协议有关
transactionPending = PendingToken EQUAL TransactionID LBRKT RBRKT
transactionResponseAck = ResponseAckToken LBRKT transactionAck
*(COMMA transactionAck) RBRKT
transactionAck = TransactionID / (TransactionID "-" TransactionID)
transactionRequest = TransToken EQUAL TransactionID LBRKT
actionRequest *(COMMA actionRequest) RBRKT
actionRequest = CtxToken EQUAL ContextID LBRKT ((contextRequest
[COMMA commandRequestList]) /
commandRequestList) RBRKT
contextRequest = ((contextProperties [COMMA contextAudit])
/ contextAudit)
contextProperties = contextProperty *(COMMA contextProperty)
; 最多一次
; EmergencyOff 仅仅在H.248.1 第一版本和第二版本中被使用,由MG 传送至MGC 方向。
; EmergencyToken 或EmergencyOffToken,但不能两者同时使用
contextProperty = (topologyDescriptor / priority / EmergencyToken /
EmergencyOffToken / iepsValue /
contextAttrDescriptor)
contextAudit = ContextAuditToken LBRKT (contextAuditProperties
*(COMMA contextAuditProperties)) /
indAudcontextAttrDescriptor RBRKT
; 除contextAuditSelector 参数之外,最多一次
contextAuditProperties = (TopologyToken / EmergencyToken /
PriorityToken /IEPSToken/ pkgdName /
contextAuditSelector)
; 最多一次
contextAuditSelector = priority / emergencyValue / iepsValue /
contextAttrDescriptor / auditSelectLogic
auditSelectLogic = [ AndAUDITselectToken / OrAUDITselectToken ]
; 如果为空,则假定对选择条件进行“AND”操作。
indAudcontextAttrDescriptor
= ContextAttrToken LBRKT contextAuditProperties
*(COMMA contextAuditProperties) RBRKT
; "O-" 指示为可选命令
; "W-" 只是为一个命令的通配响应
commandRequestList = ["O-"] ["W-"] commandRequest *(COMMA ["O-"]
["W-"]commandRequest)
commandRequest = (ammRequest / subtractRequest / auditRequest /
notifyRequest / serviceChangeRequest)
transactionReply = ReplyToken EQUAL TransactionID [SLASH segmentNumber
[SLASH SegmentationCompleteToken]] LBRKT
[ImmAckRequiredToken COMMA]

(errorDescriptor / actionReplyList) RBRKT
segmentReply = MessageSegmentToken EQUAL TransactionID SLASH
segmentNumber [SLASH SegmentationCompleteToken]
segmentNumber = UINT16
actionReplyList = actionReply *(COMMA actionReply)
actionReply = CtxToken EQUAL ContextID [LBRKT (errorDescriptor /
commandReply /(commandReply COMMA
errorDescriptor)) RBRKT]
commandReply = ((contextProperties [COMMA commandReplyList]) /
commandReplyList)
commandReplyList = commandReplys *(COMMA commandReplys)
commandReplys = (serviceChangeReply / auditReply / ammsReply /
notifyReply)
; Add、Move 和Modify 命令具有相同的请求参数
ammRequest = (AddToken / MoveToken / ModifyToken) EQUAL
termIDList [LBRKT ammParameter *(COMMA
ammParameter) RBRKT]
;最多一次
ammParameter = (mediaDescriptor / modemDescriptor /muxDescriptor /
eventsDescriptor / signalsDescriptor /
digitMapDescriptor / eventBufferDescriptor /
auditDescriptor / statisticsDescriptor)
ammsReply = (AddToken / MoveToken / ModifyToken / SubtractToken)
EQUAL termIDList [LBRKT terminationAudit RBRKT]
subtractRequest = SubtractToken EQUAL termIDList [LBRKT
auditDescriptor RBRKT]
auditRequest = (AuditValueToken / AuditCapToken) EQUAL
termIDList LBRKT auditDescriptor RBRKT
auditReply = (AuditValueToken / AuditCapToken)
(contextTerminationAudit / auditOther)
auditOther = EQUAL termIDList [LBRKT terminationAudit RBRKT]
terminationAudit = auditReturnParameter *(COMMA auditReturnParameter)
contextTerminationAudit = EQUAL CtxToken (terminationIDList / LBRKT
errorDescriptor RBRKT)
auditReturnParameter = (mediaDescriptor / modemDescriptor / muxDescriptor /
eventsDescriptor / signalsDescriptor /
digitMapDescriptor / observedEventsDescriptor /
eventBufferDescriptor / statisticsDescriptor /
packagesDescriptor / errorDescriptor /
auditReturnItem)
auditReturnItem = (MuxToken / ModemToken / MediaToken /
DigitMapToken / StatsToken / ObservedEventsToken /
PackagesToken)
auditDescriptor = AuditToken LBRKT [auditItem *(COMMA auditItem)]

RBRKT
notifyRequest = NotifyToken EQUAL termIDList LBRKT
(observedEventsDescriptor [COMMA errorDescriptor])
RBRKT
notifyReply = NotifyToken EQUAL termIDList [LBRKT errorDescriptor
RBRKT]
serviceChangeRequest = ServiceChangeToken EQUAL termIDList LBRKT
serviceChangeDescriptor RBRKT
serviceChangeReply = ServiceChangeToken EQUAL termIDList [LBRKT
(errorDescriptor / serviceChangeReplyDescriptor)
RBRKT]
errorDescriptor = ErrorToken EQUAL ErrorCode LBRKT [quotedString]
RBRKT
ErrorCode = 1*4(DIGIT) ; could be extended
TransactionID = UINT32
mId = ((domainAddress / domainName) [":" portNumber]) /
mtpAddress / deviceName
; ABNF 句法规则允许使用两个连续的"." 字符,尽管该字符对于域名是毫无意义的。
domainName = "<" (ALPHA / DIGIT) *63(ALPHA / DIGIT / "-" / ".")
">"
deviceName = pathNAME
; 0x0, 0xFFFFFFFE 和0xFFFFFFFF 为预留值.
;'-' 用于标识空关联, '*' 用于标识通配符“ALL”。 '$' 用于标识 通配符“CHOOSE”。
ContextID = (UINT32 / "*" / "-" / "$")
domainAddress = "[" (IPv4address / HTTP://www.cnpaf.net/class/ipv6' target='_blank'>IPv6address) "]"
; HTTP://www.cnpaf.net/class/ipv6' target='_blank'>IPv6 地址定义参见RFC 2373。
HTTP://www.cnpaf.net/class/ipv6' target='_blank'>IPv6address = hexpart [":" IPv4address]
IPv4address = V4hex DOT V4hex DOT V4hex DOT V4hex
V4hex = 1*3(DIGIT) ; "0".."255"
; 该参数虽在RFC 2373 中出现,但没有引用
RFC 2373, is not referenced
; HTTP://www.cnpaf.net/class/ipv6' target='_blank'>IPv6prefix = hexpart SLASH 1*2DIGIT
hexpart = hexseq "::" [hexseq] / "::" [hexseq] / hexseq
hexseq = hex4 *(":" hex4)
hex4 = 1*4HEXDIG
portNumber = UINT16
; mtpAddress 地址结构如下:
; 25 - 15 0
; | PC | NI |
; 24 - 14 bits 2 bits
; 注 — 14 比特为国际用法。
; 当点码为16 位或者24 位时,有两个national 选项存在。为了使mtpAddress 编码成整字符,

; MSB 应该用“0”进行填充。一个字节由两个16 进制的字符表示。
mtpAddress = MTPToken LBRKT 4*8 (HEXDIG) RBRKT
termIDList = (TerminationID / LSBRKT TerminationID 1*(COMMA
TerminationID) RSBRKT)
terminationIDList = LBRKT TerminationID *(COMMA TerminationID) RBRKT
; pathNAM 的长度不允许超过64 字符的长度。
pathNAME = ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$")
["@" pathDomainName]
; ABNF 句法规则允许使用两个连续的"." 字符,尽管该字符对于域名是毫无意义的。
; in a path domain name.
pathDomainName = (ALPHA / DIGIT / "*") *63(ALPHA / DIGIT / "-" /
"*" / ".")
; '*' 表示通配符“ALL”, '$'表示通配符 CHOOSE.
TerminationID = "ROOT" / pathNAME / "$" / "*"
mediaDescriptor = MediaToken LBRKT mediaParm *(COMMA mediaParm) RBRKT
; terminationStateDescriptor 最多出现一次
; 以及streamParm 或streamDescriptor,但不允许同时存在。
mediaParm = (streamParm / streamDescriptor /
terminationStateDescriptor)
; 每个参数最多一次
streamParm = (localDescriptor / remoteDescriptor /
localControlDescriptor / statisticsDescriptor)
streamDescriptor = StreamToken EQUAL StreamID LBRKT streamParm *(COMMA
streamParm) RBRKT
localControlDescriptor = LocalControlToken LBRKT localParm *(COMMA localParm)
RBRKT
; 除propertyParm 之外,其他每个参数最多一次
localParm = (streamMode / propertyParm / reservedValueMode /
reservedGroupMode)
reservedValueMode = ReservedValueToken EQUAL ("ON" / "OFF")
reservedGroupMode = ReservedGroupToken EQUAL ("ON" / "OFF")
streamMode = ModeToken EQUAL streamModes
streamModes = (SendonlyToken / RecvonlyToken / SendrecvToken /
InactiveToken / LoopbackToken)
propertyParm = pkgdName parmValue
; '$'字符为通配符CHOOSE,'*'字符为通配符ALL
;
parmValue = (EQUAL alternativeValue / INEQUAL VALUE)
alternativeValue = (VALUE
/ LSBRKT VALUE *(COMMA VALUE) RSBRKT
; 子列表 (即A 和B 和...)
/ LBRKT VALUE *(COMMA VALUE) RBRKT
; 备选 (即A 或B 或...)
/ LSBRKT VALUE COLON VALUE RSBRKT)

; 范围
INEQUAL = LWSP (">" / "<" / "#") LWSP ; '#' 表示“不等于”
LSBRKT = LWSP "[" LWSP
RSBRKT = LWSP "]" LWSP
; 注 — 字符“0”不允许存在于允许字符之内。该规则仅适用于SDP 定义,
; 字符“0”是SDP 中的非法字符。
localDescriptor = LocalToken LBRKT octetString RBRKT
remoteDescriptor = RemoteToken LBRKT octetString RBRKT
eventBufferDescriptor = EventBufferToken [LBRKT eventSpec*(COMMA eventSpec)
RBRKT]
eventSpec = pkgdName [LBRKT eventSpecParameter *(COMMA
eventSpecParameter) RBRKT]
eventSpecParameter = (eventStream / eventOther)
eventBufferControl = BufferToken EQUAL eventBufferControlValue
eventBufferControlValue = ("OFF" / LockStepToken)
terminationStateDescriptor
= TerminationStateToken LBRKT terminationStateParm
*(COMMA terminationStateParm) RBRKT
; 除propertyParm 之外,其他每个参数最多一次
terminationStateParm = (propertyParm / serviceStates / eventBufferControl)
serviceStates = ServiceStatesToken EQUAL serviceStatesValue
serviceStatesValue = (TestToken / OutOfSvcToken / InSvcToken)
muxDescriptor = MuxToken EQUAL MuxType terminationIDList
MuxType = (H221Token / H223Token / H226Token / V76Token /
extensionParameter / Nx64kToken)
StreamID = UINT16
pkgdName = (PackageName SLASH ItemID) ; 特定参数
/ (PackageName SLASH "*") ; 包中的所有参数
/ ("*" SLASH "*") ; MG 所支持的所有参数
PackageName = NAME
ItemID = NAME
eventsDescriptor = EventsToken [EQUAL RequestID LBRKT requestedEvent
*(COMMA requestedEvent) RBRKT]
requestedEvent = pkgdName [LBRKT eventParameter *(COMMA
eventParameter) RBRKT]
notifyRegulated = NotifyRegulatedToken [LBRKT (embedWithSig/
embedNoSig) RBRKT]
notifyBehaviour = NotifyImmediateToken / notifyRegulated /
NeverNotifyToken

; KeepActiveToken、notifyBehaviour、eventDM、ResetEventsDescriptor 和
; eventStream 最多一次
; embedWithSig 或embedNoSig 最多一次,但不允许同时存在
; KeepActiveToken 和embedWithSig 不允许同时存在
eventParameter = (embedWithSig / embedNoSig / KeepActiveToken /
eventDM / eventStream / eventOther /
notifyBehaviour / ResetEventsDescriptorToken)
embedWithSig = EmbedToken LBRKT signalsDescriptor [COMMA
embedFirst] RBRKT
embedNoSig = EmbedToken LBRKT embedFirst RBRKT
; 每个参数最多一次
embedFirst = EventsToken [EQUAL RequestID LBRKT
secondRequestedEvent *(COMMA secondRequestedEvent)
RBRKT]
secondRequestedEvent = pkgdName [LBRKT secondEventParameter *(COMMA
secondEventParameter) RBRKT]
; embedSig、KeepActiveToken、notifyBehaviour、eventDM、
; ResetEventsDescriptor 或eventStream 最多一次
; KeepActiveToken 和embedSig 不允许同时存在
secondEventParameter = (embedSig / KeepActiveToken / eventDM /
eventStream / eventOther / notifyBehaviour /
ResetEventsDescriptorToken)
embedSig = EmbedToken LBRKT signalsDescriptor RBRKT
eventStream = StreamToken EQUAL StreamID
eventOther = eventParameterName parmValue
eventParameterName = NAME
eventDM = DigitMapToken EQUAL((digitMapName) / (LBRKT
digitMapValue RBRKT))
signalsDescriptor = SignalsToken [LBRKT signalParm *(COMMA signalParm)
RBRKT]
signalParm = signalList / signalRequest
signalRequest = signalName [LBRKT sigParameter *(COMMA sigParameter)
RBRKT]
signalList = SignalListToken EQUAL signalListId LBRKT
signalListParm *(COMMA signalListParm) RBRKT
signalListId = UINT16
; signalType 正好一次,时长和每一个信号参数最多一次
signalListParm = signalRequest
signalName = pkgdName
; sigStream 最多一次, sigSignalType 最多一次,
; sigDuration 最多一次, sigDirection 最多一次,
; sigRequestID 最多一次, sigIntsigDelay 最多一次
; 每个signalParameterName 最多一次
sigParameter = sigStream / sigSignalType / sigDuration / sigOther /

notifyCompletion / KeepActiveToken /
sigDirection / sigRequestID / sigIntsigDelay
sigStream = StreamToken EQUAL StreamID
sigOther = sigParameterName parmValue
sigParameterName = NAME
sigSignalType = SignalTypeToken EQUAL signalType
signalType = (OnOffToken / TimeOutToken / BriefToken)
sigDuration = DurationToken EQUAL UINT16
sigDirection = DirectionToken EQUAL direction
direction = ExternalToken / InternalToken / BothToken
sigRequestID = RequestIDToken EQUAL RequestID
sigIntsigDelay = IntsigDelayToken EQUAL UINT16
notifyCompletion = NotifyCompletionToken EQUAL (LBRKT
notificationReason *(COMMA notificationReason)
RBRKT)
notificationReason = TimeOutToken / InterruptByEventToken /
InterruptByNewSignalsDescrToken / OtherReasonToken /
IterationToken
observedEventsDescriptor
= ObservedEventsToken EQUAL RequestID LBRKT
observedEvent *(COMMA observedEvent) RBRKT
; 每个事件的时间,因为事件可能被缓存
observedEvent = [TimeStamp LWSP COLON] LWSP pkgdName [LBRKT
observedEventParameter *(COMMA
observedEventParameter) RBRKT]
; eventStream 最多一次, 每个eventParameterName 最多一次
observedEventParameter = eventStream / eventOther
; 当AuditCapReply 包含所有事件时, RequestID 参数应当为通配符 “ALL”。
RequestID = UINT32 / "*"
modemDescriptor = ModemToken ((EQUAL modemType) / (LSBRKT modemType
*(COMMA modemType) RSBRKT)) [LBRKT propertyParm
*(COMMA propertyParm) RBRKT]
; 除extensionParameter 之外,其他参数最多一次
modemType = V32bisToken / V22bisToken / V18Token / V22Token /
V32Token / V34Token / V90Token / V91Token /
SynchISDNToken / extensionParameter)
digitMapDescriptor = DigitMapToken EQUAL ((LBRKT digitMapValue RBRKT) /
(digitMapName [LBRKT digitMapValue RBRKT]))
digitMapName = NAME
digitMapValue = ["T" COLON Timer COMMA] ["S" COLON Timer COMMA] ["L"
COLON Timer COMMA] ["Z" COLON Timer COMMA] digitMap

的单位为秒, Z 定时器的单位为100 毫秒。
; 因此,T、S、和L 的范围为1 至99 秒,Z 定时器的范围为100 ms 至9.9 s
digitMap = (digitString / LWSP "(" LWSP digitStringList LWSP
")" LWSP)
digitStringList = digitString *(LWSP "|" LWSP digitString)
digitString = 1*(digitStringElement)
digitStringElement = digitPosition [DOT]
digitPosition = digitMapLetter / digitMapRange
digitMapRange = ("x" / (LWSP "[" LWSP digitLetter LWSP "]" LWSP))
digitLetter = *((DIGIT "-" DIGIT) / digitMapLetter)
digitMapLetter = DIGIT ;Basic event symbols
/ %x41-4B / %x61-6B ; a-k, A-K
/ "L" / "S" / "T" ;Inter-event timers
; (long, short, start)
/ "Z" ;Long duration modifier
; 最多一次, DigitMapToken 和PackagesToken 参数不允许存在于AuditCapabilities 命令中
auditItem = auditReturnItem / SignalsToken / EventBufferToken /
EventsToken / indAudterminationAudit
indAudterminationAudit = indAudauditReturnParameter *(COMMA
indAudauditReturnParameter)
indAudauditReturnParameter
= indAudmediaDescriptor / indAudeventsDescriptor /
indAudsignalsDescriptor /
indAuddigitMapDescriptor /
indAudeventBufferDescriptor /
indAudstatisticsDescriptor /
indAudpackagesDescriptor
indAudmediaDescriptor = MediaToken LBRKT indAudmediaParm *(COMMA
indAudmediaParm) RBRKT
; streamParm 或streamDescriptor,但不允许同时存在
indAudmediaParm = indAudstreamParm / indAudstreamDescriptor /
indAudterminationStateDescriptor
; 最多一次
indAudstreamParm = (indAudlocalControlDescriptor /
indAudstatisticsDescriptor /
indAudremoteDescriptor / indAudlocalDescriptor )
indAudremoteDescriptor = RemoteToken LBRKT octetString RBRKT
indAudlocalDescriptor = LocalToken LBRKT octetString RBRKT
indAudstreamDescriptor = StreamToken EQUAL StreamID LBRKT indAudstreamParm
RBRKT
indAudlocalControlDescriptor
= LocalControlToken LBRKT indAudlocalParm
*(COMMA indAudlocalParm) RBRKT
; 每个参数最多一次

indAudlocalParm = ModeToken [(EQUAL/INEQUAL) streamModes]/ pkgdName /
propertyParm / ReservedValueToken /
ReservedGroupToken
; propertyparm 和streamModes 仅仅在指定审计条件时被使用。AND 或者OR 选择逻辑仅适用于关联。
indAudterminationStateDescriptor
= TerminationStateToken LBRKT
indAudterminationStateParm RBRKT
; 每个参数最多一次
indAudterminationStateParm
= pkgdName / propertyParm / ServiceStatesToken
[(EQUAL/INEQUAL) serviceStatesValue ] / BufferToken
; 当参数值被包含时,隐含为选择操作。AND 或者OR 选择逻辑仅适用于关联。
indAudeventBufferDescriptor
= EventBufferToken LBRKT indAudeventSpec RBRKT
indAudeventSpec = pkgdName [LBRKT indAudeventSpecParameter RBRKT]
indAudeventSpecParameter= eventStream / eventParameterName
indAudeventsDescriptor = EventsToken [EQUAL RequestID] LBRKT
indAudrequestedEvent RBRKT
indAudrequestedEvent = pkgdName
indAudsignalsDescriptor = SignalsToken LBRKT [indAudsignalParm] RBRKT
indAudsignalParm = indAudsignalList / indAudsignalRequest
indAudsignalRequest = signalName [LBRKT indAudsignalRequestParm
*(COMMA indAudsignalRequestParm) RBRKT]
indAudsignalRequestParm = sigStream / sigRequestID
indAudsignalList = SignalListToken EQUAL signalListId [LBRKT
indAudsignalListParm RBRKT]
indAudsignalListParm = indAudsignalRequest
indAuddigitMapDescriptor= DigitMapToken EQUAL (digitMapName)
indAudstatisticsDescriptor
= StatsToken LBRKT pkgdName RBRKT
indAudpackagesDescriptor= PackagesToken LBRKT packagesItem RBRKT
serviceChangeDescriptor = ServicesToken LBRKT serviceChangeParm *(COMMA
serviceChangeParm) RBRKT
; 除auditItem 之外,其他每个参数最多一次
; serviceChangeAddress 或 serviceChangeMgcId 参数最多一次,但不允许同时存在
; serviceChangeMethod 或serviceChangeReason 为必选参数
serviceChangeParm = serviceChangeMethod / serviceChangeReason /
serviceChangeDelay / serviceChangeAddress /
serviceChangeProfile / extension / TimeStamp /
serviceChangeMgcId / serviceChangeVersion /
ServiceChangeIncompleteToken / auditItem)
serviceChangeReplyDescriptor
= ServicesToken LBRKT servChgReplyParm *(COMMA
servChgReplyParm) RBRKT

;最多一次. Version 参数在第一个ServiceChange 响应中为必选参数
; serviceChangeAddress 或 serviceChangeMgcId 参数最多一次,但不允许同时存在
servChgReplyParm = serviceChangeAddress / serviceChangeMgcId /
serviceChangeProfile / serviceChangeVersion /
TimeStamp
serviceChangeMethod = MethodToken EQUAL (FailoverToken / ForcedToken /
GracefulToken / RestartToken / DisconnectedToken /
HandOffToken / extensionParameter)
; serviceChangeReason 参数包含一个原因码和可选的文本描述。
; serviceChangeReason 参数必须采用quotedString 类型的参数值进行编码。
; quotedString 必须包含一个十进制原因码,可选的可以跟随一个空格和文本描述字符。
serviceChangeReason = ReasonToken EQUAL VALUE
serviceChangeDelay = DelayToken EQUAL UINT32
serviceChangeAddress = ServiceChangeAddressToken EQUAL (mId / portNumber)
serviceChangeMgcId = MgcIdToken EQUAL mId
serviceChangeProfile = ProfileToken EQUAL NAME SLASH Version
serviceChangeVersion = VersionToken EQUAL Version
extension = extensionParameter parmValue
packagesDescriptor = PackagesToken LBRKT packagesItem *(COMMA
packagesItem) RBRKT
Version = 1*2(DIGIT)
packagesItem = NAME "-" UINT16
TimeStamp = Date "T" Time ; 按照ISO 8601:2004
; 日期 = yyyymmdd
Date = 8(DIGIT)
; 时间 = hhmmssss
Time = 8(DIGIT)
statisticsDescriptor = StatsToken LBRKT statisticsParameter *(COMMA
statisticsParameter) RBRKT
; 每个参数最多一次
statisticsParameter = pkgdName [EQUAL VALUE /
(LSBRKT VALUE *(COMMA VALUE) RSBRKT)]
topologyDescriptor = TopologyToken LBRKT topologyTriple *(COMMA
topologyTriple) RBRKT
topologyTriple = terminationA COMMA terminationB COMMA
topologyDirection [COMMA eventStream]
terminationA = TerminationID
terminationB = TerminationID
topologyDirection = BothwayToken / IsolateToken / OnewayToken /
OnewayExternalToken / OnewayBothToken

priority = PriorityToken EQUAL UINT16
iepsValue = IEPSToken EQUAL ("ON" / "OFF")
emergencyValue = EmergencyValueToken EQUAL (EmergencyToken /
EmergencyOffToken)
contextAttrDescriptor = ContextAttrToken LBRKT (contextIdList /
propertyParm *(COMMA propertyParm)) RBRKT
; 当使用contextIdList 结构时,actionReply 中所包含的ContextID 应当与相应的
; actionRequest 请求中的ContextID 相同
contextIdList = ContextListToken EQUAL LBRKT ContextID
*(COMMA ContextID) RBRKT
extensionParameter = "X" ("-" / "+") 1*6(ALPHA / DIGIT)
; octetString 用于参照RFC 2327 来定义SDP。
; 如果RFC 2327 中的CRLF 被使用时,应当尤其注意。
; 为了安全起见,本句法规定使用”EOL”。
; 当"}" 出现在SDP 中,该字符由"\"进行隔离,例如,"\}"
octetString = *(nonEscapeChar)
nonEscapeChar = ("\}" / %x01-7C / %x7E-FF)
; 注 – 双引号字符不允许出现在quotedString 字串中。
quotedString = DQUOTE *(SafeChar / EOL / %x80-FF / RestChar / WSP)
DQUOTE
UINT16 = 1*5(DIGIT) ; %x0-FFFF
UINT32 = 1*10(DIGIT) ; %x0-FFFFFFFF
NAME = ALPHA *63(ALPHA / DIGIT / "_")
VALUE = quotedString / 1*(SafeChar / %x80-FF)
SafeChar = DIGIT / ALPHA / "+" / "-" / "&" /
"!" / "_" / "/" / "'" / "?" / "@" /
"^" / "`" / "~" / "*" / "$" / "\" /
"(" / ")" / "%" / "|" / "."
EQUAL = LWSP %x3D LWSP ; "="
COLON = %x3A ; ":"
LBRKT = LWSP %x7B LWSP ; "{"
RBRKT = LWSP %x7D LWSP ; "}"
COMMA = LWSP %x2C LWSP ; ","
DOT = %x2E ; "."
SLASH = %x2F ; "/"
ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
DIGIT = %x30-39 ; 0-9
DQUOTE = %x22 ; " (Double Quote)

HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
SP = %x20 ; space
HTAB = %x09 ; horizontal tab
CR = %x0D ; Carriage return
LF = %x0A ; linefeed
LWSP = *(WSP / COMMENT / EOL)
EOL = (CR [LF] / LF)
WSP = SP / HTAB ; white space
SEP = (WSP / EOL / COMMENT) LWSP
COMMENT = ";" *(SafeChar/ RestChar / WSP / %x22) EOL
RestChar = ";" / "[" / "]" / "{" / "}" / ":" / "," / "#" /
"<" / ">" / "="
; 新增加的sigParameter 参数必须采用”SPA*”格式,”*”可以是任意字符,例如SPAM
; 新增加的eventParameter 参数必须采用”EPA*”格式,”*”可以是任意字符,例如EPAD
AddToken = ("Add" / "A")
AndAUDITSelectToken = ("ANDLgc")
AuditToken = ("Audit" / "AT")
AuditCapToken = ("AuditCapability" / "AC")
AuditValueToken = ("AuditValue" / "AV")
AuthToken = ("Authentication" / "AU")
BothToken = ("Both" / "B")
BothwayToken = ("Bothway" / "BW")
BriefToken = ("Brief" / "BR")
BufferToken = ("Buffer" / "BF")
CtxToken = ("Context" / "C")
ContextAuditToken = ("ContextAudit" / "CA")
ContextAttrToken = ("ContextAttr" / "CT")
ContextListToken = ("ContextList" / "CLT")
DigitMapToken = ("DigitMap" / "DM")
DirectionToken = ("SPADirection" / "SPADI")
DisconnectedToken = ("Disconnected" / "DC")
DelayToken = ("Delay" / "DL")
DurationToken = ("Duration" / "DR")
EmbedToken = ("Embed" / "EM")
EmergencyToken = ("Emergency" / "EG")
EmergencyOffToken = ("EmergencyOff" / "EGO")
EmergencyValueToken = ("EmergencyValue" / "EGV")
ErrorToken = ("Error" / "ER")
EventBufferToken = ("EventBuffer" / "EB")
EventsToken = ("Events" / "E")
ExternalToken = ("External" / "EX")
FailoverToken = ("Failover" / "FL")
ForcedToken = ("Forced" / "FO")
GracefulToken = ("Graceful" / "GR")
H221Token = ("H221")
H223Token = ("H223")
H226Token = ("H226")
HandOffToken = ("HandOff" / "HO")
IEPSToken = ("IEPSCall" / "IEPS")
ImmAckRequiredToken = ("ImmAckRequired" / "IA")
InactiveToken = ("Inactive" / "IN")'

= ("Internal" / "IT")
IntsigDelayToken = ("Intersignal" / "SPAIS")
IsolateToken = ("Isolate" / "IS")
InSvcToken = ("InService" / "IV")
InterruptByEventToken = ("IntByEvent" / "IBE")
InterruptByNewSignalsDescrToken
= ("IntBySigDescr" / "IBS")
IterationToken = ("Iteration" / "IR")
KeepActiveToken = ("KeepActive" / "KA")
LocalToken = ("Local" / "L")
LocalControlToken = ("LocalControl" / "O")
LockStepToken = ("LockStep" / "SP")
LoopbackToken = ("Loopback" / "LB")
MediaToken = ("Media" / "M")
MegacopToken = ("MEGACO" / "!")
MessageSegmentToken = ("Segment" / "SM")
MethodToken = ("Method" / "MT")
MgcIdToken = ("MgcIdToTry" / "MG")
ModeToken = ("Mode" / "MO")
ModifyToken = ("Modify" / "MF")
ModemToken = ("Modem" / "MD")
MoveToken = ("Move" / "MV")
MTPToken = ("MTP")
MuxToken = ("Mux" / "MX")
NeverNotifyToken = ("NeverNotify" / "NBNN")
NotifyToken = ("Notify" / "N")
NotifyCompletionToken = ("NotifyCompletion" / "NC")
NotifyImmediateToken = ("ImmediateNotify" / "NBIN")
NotifyRegulatedToken = ("RegulatedNotify" / "NBRN")
Nx64kToken = ("Nx64Kservice" / "N64")
ObservedEventsToken = ("ObservedEvents" / "OE")
OnewayToken = ("Oneway" / "OW")
OnewayBothToken = ("OnewayBoth" / "OWB")
OnewayExternalToken = ("OnewayExternal" / "OWE")
OnOffToken = ("OnOff" / "OO")
OrAUDITselectToken = ("ORLgc")
OtherReasonToken = ("OtherReason" / "OR")
OutOfSvcToken = ("OutOfService" / "OS")
PackagesToken = ("Packages" / "PG")
PendingToken = ("Pending" / "PN")
PriorityToken = ("Priority" / "PR")
ProfileToken = ("Profile" / "PF")
ReasonToken = ("Reason" / "RE")
RecvonlyToken = ("ReceiveOnly" / "RC")
ReplyToken = ("Reply" / "P")
ResetEventsDescriptorToken
= ("ResetEventsDescriptor" / "RSE")
RestartToken = ("Restart" / "RS")
RemoteToken = ("Remote" / "R")
RequestIDToken = ("SPARequestID" / "SPARQ")
ReservedGroupToken = ("ReservedGroup" / "RG")
ReservedValueToken = ("ReservedValue" / "RV")
SegmentationCompleteToken
= ("END" / "&")
SendonlyToken = ("SendOnly" / "SO")
SendrecvToken = ("SendReceive" / "SR")
ServicesToken = ("Services" / "SV")
ServiceStatesToken = ("ServiceStates" / "SI")
ServiceChangeIncompleteToken
= ("ServiceChangeInc" / "SIC")
ServiceChangeToken = ("ServiceChange" / "SC")
ServiceChangeAddressToken
= ("ServiceChangeAddress" / "AD")
SignalListToken = ("SignalList" / "SL")

= ("Signals" / "SG")
SignalTypeToken = ("SignalType" / "SY")
StatsToken = ("Statistics" / "SA")
StreamToken = ("Stream" / "ST")
SubtractToken = ("Subtract" / "S")
SynchISDNToken = ("SynchISDN" / "SN")
TerminationStateToken = ("TerminationState" / "TS")
TestToken = ("Test" / "TE")
TimeOutToken = ("TimeOut" / "TO")
TopologyToken = ("Topology" / "TP")
TransToken = ("Transaction" / "T")
ResponseAckToken = ("TransactionResponseAck" / "K")
V18Token = ("V18")
V22Token = ("V22")
V22bisToken = ("V22b")
V32Token = ("V32")
V32bisToken = ("V32b")
V34Token = ("V34")
V76Token = ("V76")
V90Token = ("V90")
V91Token = ("V91")
VersionToken = ("Version" / "V")

十六进制字节编码
十六进制编码是使用16进制数表示一个字节字串的方法,且一个字节由两个16进制数组成。当协议
使用文本编码方式时,字节应该使用十六进制编码方式。
每个字节将8个比特编码成两个16进制的数。比特0应最先发送,比特7应最后发送。
比特7-4编码成第一个十六进制数,且比特7作为MSB,比特4作为LSB。比特3-0编码成第二个十六进
制数,且比特3作为MSB,比特0作为LSB。
例如:

字节位模式                                                                                          十六进制编码
00011011                                                                                                     D8
11100100                                                                                                     27
10000011 10100010 11001000 00001001                                  C1451390

十六进制字节序列
十六进制字节序列由偶数个十六进制数组成,且以<CR>字符结束。

 

------分隔线----------------------------
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容