📄 rvsdpprs.syn
字号:
sdp_key
-> key_type:t = rvSdpParserAuxSetKeyN(PRS_STATE,t,empty_str,0);
-> key_type:t,colon = rvSdpParserAuxSetKeyN(PRS_STATE,t,empty_str,0);
-> key_type:t,colon,key_data:d = rvSdpParserAuxSetKeyN(PRS_STATE,t,d.buf,d.len);
//(short) key_type
// -> "prompt" = RV_SDPENCRMTHD_PROMPT;
// -> "clear" ,colon, [key_data] = RV_SDPENCRMTHD_CLEAR;
// -> "base64",colon, [key_data] = RV_SDPENCRMTHD_BASE64;
// -> "uri" ,colon, [uri] = RV_SDPENCRMTHD_URI;
(RvpStrPtrN) key_type
-> { ALPHA_NUMERIC + '_'}... = CUR_STRING();
(RvpStrPtrN) key_data // email_safe | "~" | " // Note: What is this ??? | "
-> {EMAIL_SAFE | "~"}... = CUR_STRING();
attribute // *("a=" attribute eol)
-> 'a',equal,att_field:f, colon, att_value: v, eol = rvSdpCommonFieldsAddAttrN(PRS_STATE->cur_sdp_fields,f.buf,f.len,v.buf,v.len,PRS_ALLOC);
-> 'a',equal,att_field:f, eol = rvSdpCommonFieldsAddAttrN(PRS_STATE->cur_sdp_fields,f.buf,f.len,"",0,PRS_ALLOC);
-> rtpmap
-> sendmode
rtpmap
-> 'a',equal,"rtpmap",colon,payload_type:p,space,encoding_name:n,fwdslash,clock_rate:r,eol =
rvSdpCommonFieldsAddRtpMapN(PRS_STATE->cur_sdp_fields,p,n.buf,n.len,r,PRS_ALLOC);
-> 'a',equal,"rtpmap",colon,payload_type:p,space,encoding_name:n,fwdslash,clock_rate:r,fwdslash,enc_params:pr,eol = {
RvSdpRtpMap * m = rvSdpCommonFieldsAddRtpMapN(PRS_STATE->cur_sdp_fields,p,n.buf,n.len,r,PRS_ALLOC);
/* Note: this could be conditional to media=AUDIO */
rvSdpRtpMapSetEncodingParametersN(m,pr.buf,pr.len);
}
sendmode
-> 'a',equal,"sendrecv",eol = rvSdpCommonFieldsSetConnectionMode(PRS_STATE->cur_sdp_fields,RV_SDPCONNECTMODE_SENDRECV);
-> 'a',equal,"sendonly",eol = rvSdpCommonFieldsSetConnectionMode(PRS_STATE->cur_sdp_fields,RV_SDPCONNECTMODE_SENDONLY);
-> 'a',equal,"recvonly",eol = rvSdpCommonFieldsSetConnectionMode(PRS_STATE->cur_sdp_fields,RV_SDPCONNECTMODE_RECVONLY);
(int)payload_type
-> integer = CUR_INT();
(RvpStrPtrN)encoding_name
-> {ANY_BYTE - '/' }... = CUR_STRING();
(int)clock_rate
-> integer = CUR_INT();
(RvpStrPtrN)enc_params
-> ALPHA_NUMERIC... = CUR_STRING();
// Note: check if connection_field should be [] or []...
media_description // *( media_field information_field *(connection_field) bandwidth_fields key_field attribute_fields )
-> media_field,[information_field],[connection_field],[bandwidth_field]...,[key_field],[attribute]...
media_field // "m=" media space port ["/" pos_integer] space proto 1*(space fmt) eol
-> 'm',equal, media_data, format_list,eol
-> 'm',equal, media_data_nas,eol
// -> 'm',equal, media:m, space, ex_port:p, transport_aal2, eol = {
// }
media_data
-> media:m, space, port:p, fwdslash, subport:sp, space, proto:pt = { rvSdpParseAuxAddSdpMedia(PRS_STATE,m,p,sp,pt); }
-> media:m, space, ex_port:p, space, proto:pt = { rvSdpParseAuxAddSdpMedia(PRS_STATE,m,p,RV_SDPFIELD_NOTSET,pt); }
media_data_nas
-> "nas",fwdslash,nas_access_method:am = rvSdpParseAuxAddSdpMediaNAS(PRS_STATE,RV_SDPPORT_NOTSET,RV_SDPFIELD_NOTSET,am.buf,am.len);
-> "nas",fwdslash,nas_access_method:am, space, port:p = rvSdpParseAuxAddSdpMediaNAS(PRS_STATE,p,RV_SDPFIELD_NOTSET,am.buf,am.len);
-> "nas",fwdslash,nas_access_method:am, space, port:p, fwdslash, subport:sp = rvSdpParseAuxAddSdpMediaNAS(PRS_STATE,p,sp,am.buf,am.len);
format_list
-> {space, fmt}...
(RvpStrPtrN)media
-> {ALPHA_NUMERIC+'_'+'/'}... = CUR_STRING();
(RvpStrPtrN)nas_access_method
-> {ALPHA_NUMERIC+'_'}... = CUR_STRING();
// should in the range "1024" to "65535" inclusive for UDP based media
(int)port
-> integer = CUR_INT16();
-> '$' = RV_SDPPORT_ANY;
-> '-' = RV_SDPPORT_IGNORE;
(int)ex_port
-> port
-> vcId = RV_SDPPORT_ATM;
(int)subport
// -> pos_integer = CUR_INT();
-> integer = CUR_INT();
// typically an RTP payload type for audio and video media
fmt
-> ALPHA_NUMERIC_ATM... = rvSdpParseAuxAddMediaDescrFormatN(PRS_STATE,TOKEN_START,TOKEN_LENGTH);
ALPHA_NUMERIC_ATM = ALPHA_NUMERIC + '-' + '/'
(RvpStrPtrN)proto
-> {ALPHA_NUMERIC+'_'+'/'+'-'}... = CUR_STRING();
-> known_transport_proto = CUR_STRING(); // ATM
(RvpStrPtrN)att_field // 1*(ALPHA_DIGIT)
-> {ALPHA_NUMERIC + '+' + '-' }... = CUR_STRING();
(RvpStrPtrN)att_value
-> byte_string = CUR_STRING();
// should be unique for this originating username/host
(RvpStrPtrN) sess_id // 1*(DIGIT)
// -> integer = CUR_STRING();
-> hexstring = CUR_STRING();
hexstring
-> HEX...
// 0 is a new session
(RvpStrPtrN) sess_version // 1*(DIGIT)
-> integerstring = CUR_STRING();
integerstring // 1*DIGIT
-> DIGIT...
(RvpStrPtrN)connection_address
// Note: for multicast, may be desirable to parse ttl and [integer]
-> multicast_address:a = a;
-> addr = CUR_STRING();
// Used for MEGACO
-> "$" = CUR_STRING();
// multicast addresses may be in the range
// 224.0.0.0 to 239.255.255.255
// Note : Check the slashes???
// Note: Currently multicast_address is the same as IP4 address
(RvpStrPtrN)multicast_address // 3*(decimal_uchar ".") decimal_uchar "/" ttl [ "/" integer ]
-> multi_addr:a,fwdslash,ttl,[fwdslash,num_of_addr ] = a;
(RvpStrPtrN)multi_addr
-> decimal_uchar,'.',decimal_uchar,'.',decimal_uchar,'.',decimal_uchar = CUR_STRING();
ttl
-> decimal_uchar = PRS_STATE->ttl = CUR_INT();
num_of_addr
-> integer = PRS_STATE->num_addr = CUR_INT();
(unsigned int)start_time // time | "0"
-> time:t = t;
-> "0" = 0;
(unsigned int)stop_time // time | "0"
-> time:t = t;
-> "0" = 0;
// sufficient for 2 more centuries
(unsigned int)time // POS_DIGIT 9*(DIGIT)
-> POS_DIGIT, DIGIT9 = CUR_INT();
// AT least 9 digits
DIGIT9
-> DIGIT,DIGIT,DIGIT,DIGIT,DIGIT,DIGIT,DIGIT,DIGIT,DIGIT,DIGIT?...
(unsigned int)number
-> integer = CUR_INT();
(RvSdpTypedTime)typed_time // 1*(DIGIT) [fixed-len_time-unit]
-> number:t = {
RvSdpTypedTime ttime;
ttime.time = t;
ttime.type = RV_SDPTIMETYPE_SECOND;
return ttime;
}
-> number:t, fixed_len_time_unit:type = {
RvSdpTypedTime ttime;
ttime.time = t;
ttime.type = (RvSdpTimeUnit)type;
return ttime;
}
(short)fixed_len_time_unit
-> "d" = RV_SDPTIMETYPE_DAY;
-> "h" = RV_SDPTIMETYPE_HOUR;
-> "m" = RV_SDPTIMETYPE_MONTH;
-> "s" = RV_SDPTIMETYPE_SECOND;
(RvpStrPtrN)bwtype // 1*(ALPHA_NUMERIC)
-> {ALPHA_NUMERIC + '+' + '-' }... = CUR_STRING();
(int)bandwidth // 1*(DIGIT)
-> integer= CUR_INT();
// pretty wide definition, but doesn't include SPACE
(RvpStrPtrN) username
-> SAFE... = CUR_STRING();
email_address // email | email "(" EMAIL_SAFE ")" | EMAIL_SAFE "<" email ">"
-> email:e = rvSdpMsgAddEmailN(SDP_MSG,e.buf,e.len,"",0);
-> email:e,opar,email_safe_string:s,clpar = rvSdpMsgAddEmailN(SDP_MSG,e.buf,e.len,s.buf,s.len);
-> email_safe_string:s,obrkt,email:e,clbrkt = rvSdpMsgAddEmailN(SDP_MSG,e.buf,e.len,s.buf,s.len);
//-----Email definitions--------------------------------------
// Note: defined in RFC822
// Note: I interpret email as "addr-spec" , no group is allowed
(RvpStrPtrN)email // local_part "@" domain ; global address
-> local_part,"@",domain = CUR_STRING();
local_part // word *("." word) ; uninterpreted ; case-preserved
-> word, [".", word]...
domain // sub-domain *("." sub-domain)
-> sub_domain ,[".",sub_domain]...
sub_domain // domain-ref / domain-literal
-> domain_ref | domain_literal
domain_ref = atom // symbolic reference
word // atom / quoted-string
-> atom | quoted_string
atom // 1*<any CHAR except specials, SPACE and CTLs>
// -> EMAIL_ATOM...
-> EMAIL_ATOM_ONLY,[EMAIL_ATOM_ONLY | EMAIL_ATOM_N_SAFE]...
-> EMAIL_ATOM_N_SAFE...
-> EMAIL_ATOM_N_SAFE...,EMAIL_ATOM_ONLY,[EMAIL_ATOM_ONLY | EMAIL_ATOM_N_SAFE]...
domain_literal // "[" *(dtext / quoted-pair) "]"
-> "[",[dtext | quoted_pair]...,"]"
// <any CHAR excluding "[", "]", "\" & CR, & including linear-white-SPACE>
dtext = { 0x01..0xff - '[' - ']' - CR - LF - '\\' }
quoted_pair // "\" CHAR ; may quote any char
-> "\\" , CHAR
quoted_string // <"> *(qtext/quoted-pair) <"> ; Regular qtext or quoted chars.
-> "\"", [qtext | quoted_pair], "\""
qtext // any CHAR excepting <">, "\" & CR, and including linear-white-SPACE
-> { CHAR - '"'- '\\' - CR - LF }
//---------------------------------------------------------
//-------------Uri definitions -----------------------------
// Note: defined in RFC1630
(RvpStrPtrN) uri
-> scheme, ":", path, [ "?", search ] = CUR_STRING();
scheme
-> ialpha
path
-> void
-> void, "/", path
-> xpalphas
-> xpalphas, "/", path
search
-> xalpha..., [ "+", search ]
xalpha
-> ALPHA_NUMERIC | URI_SAFE | URI_EXTRA | uri_escape
ialpha
-> ALPHA, xalpha?...
uri_escape
-> "%", HEX, HEX
xpalphas // xpalpha [ xpalpha ]
-> {xalpha | "+" }...
void
->
//----------------------------------------------------------
phone_number // phone | phone "(" EMAIL_SAFE ")" | EMAIL_SAFE "<" phone ">"
-> phone :p = rvSdpMsgAddPhoneN(SDP_MSG,p.buf,p.len,"",0);
-> phone :p,opar, email_safe_string :s, clpar = rvSdpMsgAddPhoneN(SDP_MSG,p.buf,p.len,s.buf,s.len);
-> email_safe_string :s, obrkt, phone :p, clbrkt = rvSdpMsgAddPhoneN(SDP_MSG,p.buf,p.len,s.buf,s.len);
// There must be a SPACE or hyphen between the
// international code and the rest of the number.
(RvpStrPtrN)phone // "+" POS_DIGIT 1*(SPACE | "-" | DIGIT)
-> "+", POS_DIGIT, [SPACE | "-" | DIGIT]... = CUR_STRING();
/*
(RvpStrPtrN) nettype
-> { ALPHA_NUMERIC+'_' }... = CUR_STRING();
(RvpStrPtrN) addrtype
-> { ALPHA_NUMERIC+'_' }... = CUR_STRING();
*/
(RvpStrPtrN) addr // FQDN | unicast_address
-> FQDN = CUR_STRING();
-> unicast_address = CUR_STRING();
// fully qualified domain name as specified in RFC1035
FQDN // 4*(ALPHA_NUMERIC|"-"|".")
-> subdomain
subdomain
-> label | subdomain,".",label
label
-> ALPHA
-> ALPHA, ALPHA_NUMERIC
-> ALPHA, lhd_str , ALPHA_NUMERIC
lhd_str
-> '_'
-> '.'
-> LET_DIG_HYP
-> lhd_str, { LET_DIG_HYP | '.' | '_' }
unicast_address
-> IP4_address
IP4_address // b1 "." decimal_uchar "." decimal_uchar "." b4
-> decimal_uchar, '.', decimal_uchar, '.', decimal_uchar, '.', decimal_uchar
// -> b1, '.', decimal_uchar, '.', decimal_uchar, '.', b4
// less than "224"; not "0" or "127"
b1 = decimal_uchar
// not "0"
b4 = decimal_uchar
hex2
-> HEX,HEX
hex4
-> hex2,HEX,HEX
(RvpStrPtrN) nsap_str
-> hex2,'.',hex4,'.',hex4,'.',hex4,'.',hex4,'.',hex4,'.',hex4,'.',hex4,'.',hex4,'.',hex4,'.',hex2 = CUR_STRING();
(RvpStrPtrN) e164_str
-> DIGIT... = CUR_STRING();
(RvpStrPtrN) alias_str
-> aliasstr... = CUR_STRING();
(RvpStrPtrN) other_str
-> otherstr... = CUR_STRING();
(RvpStrPtrN) ip4_str
-> connection_address
(RvpStrPtrN) ip6_str
-> ip6hexstr... = CUR_STRING();
(RvpStrPtrN) tn_str
-> global_tnaddr = CUR_STRING();
-> local_tnaddr = CUR_STRING();
otherstr
-> HEX + '.'
aliasstr
-> ALPHA_NUMERIC + '-' + '.' + '_'
ip6hexstr
-> HEX + ':' + '.'
global_tnaddr
-> '+', POS_DIGIT, local_tnaddr
local_tnaddr
-> DIGIT,['-',DIGIT | DIGIT]...
tnothertype
-> 'X',[ALPHA_NUMERIC + '!'+'#'+'$'+'%'+'^'+'&'+'*'+'+'+'-'+'_'+'.'+'{'+'}'+'|'+'~'+'`']...
//----- atm_media_field
vcId
-> ex_vcci
-> ex_vcci,fwdslash,ex_cid
-> ex_bcg,fwdslash,ex_vcci
-> ex_bcg,fwdslash,ex_vcci,fwdslash,ex_cid
-> ex_portid,fwdslash,ex_vpi,fwdslash,ex_vci
-> ex_portid,fwdslash,ex_vpi,fwdslash,ex_vci,fwdslash,ex_cid
-> ex_bcg,fwdslash,ex_vpi,fwdslash,ex_vci
-> ex_bcg,fwdslash,ex_vpi,fwdslash,ex_vci,fwdslash,ex_cid
-> ex_vpci,fwdslash,ex_vci
-> ex_vpci,fwdslash,ex_vci,fwdslash,ex_cid
-> atm_type_addr_m,fwdslash,ex_vcci
-> atm_type_addr_m,fwdslash,ex_vcci,fwdslash,ex_cid
-> atm_type_addr_m,fwdslash,ex_vpci,fwdslash,ex_vci
-> atm_type_addr_m,fwdslash,ex_vpci,fwdslash,ex_vci,fwdslash,ex_cid
ex_vcci
-> "VCCI",minus,genericU16:g = rvSdpParserAuxSaveVcId(PRS_STATE, RV_SDPVCID_VCCI, g.buf, g.len);
ex_cid
-> "CID",minus,genericU8:g = rvSdpParserAuxSaveVcId(PRS_STATE, RV_SDPVCID_CID, g.buf, g.len);
ex_bcg
-> "BCG",minus,genericU8:g = rvSdpParserAuxSaveVcId(PRS_STATE, RV_SDPVCID_BCG, g.buf, g.len);
ex_portid
-> "PORT",minus,genericU32:g = rvSdpParserAuxSaveVcId(PRS_STATE, RV_SDPVCID_PORT, g.buf, g.len);
ex_vpi
-> "VPI",minus,genericU12:g = rvSdpParserAuxSaveVcId(PRS_STATE, RV_SDPVCID_VPI, g.buf, g.len);
ex_vci
-> "VCI",minus,genericU16:g = rvSdpParserAuxSaveVcId(PRS_STATE, RV_SDPVCID_VCI, g.buf, g.len);
ex_vpci
-> "VPCI",minus,genericU16:g = rvSdpParserAuxSaveVcId(PRS_STATE, RV_SDPVCID_VPCI, g.buf, g.len);
atm_type_addr_m
-> "NSAP",minus,nsap_str:g = rvSdpParserAuxSaveVcId(PRS_STATE, RV_SDPVCID_NSAP, g.buf, g.len);
-> "NSAP-$" = rvSdpParserAuxSaveVcId(PRS_STATE, RV_SDPVCID_NSAP, "$", 1);
-> "E164",minus, e164_str:g = rvSdpParserAuxSaveVcId(PRS_STATE, RV_SDPVCID_E164, g.buf, g.len);
-> "E164-$" = rvSdpParserAuxSaveVcId(PRS_STATE, RV_SDPVCID_E164, "$", 1);
-> "GWID",minus, alias_str:g = rvSdpParserAuxSaveVcId(PRS_STATE, RV_SDPVCID_GWID, g.buf, g.len);
-> "GWID-$" = rvSdpParserAuxSaveVcId(PRS_STATE, RV_SDPVCID_GWID, "$", 1);
-> "ALIAS",minus, alias_str:g = rvSdpParserAuxSaveVcId(PRS_STATE, RV_SDPVCID_ALIAS, g.buf, g.len);
-> "ALIAS-$" = rvSdpParserAuxSaveVcId(PRS_STATE, RV_SDPVCID_ALIAS, "$", 1);
(RvpStrPtrN)genericU8
-> "0x",HEX,[HEX] = CUR_STRING();
-> decimal_uchar = CUR_STRING();
-> '$' = CUR_STRING();
(RvpStrPtrN)genericU12
-> "0x",HEX,[HEX,[HEX]] = CUR_STRING();
-> DIGIT,[DIGIT,[DIGIT,[DIGIT]]] = CUR_STRING();
-> '$' = CUR_STRING();
(RvpStrPtrN)genericU16
-> "0x",HEX,[HEX,[HEX,[HEX]]] = CUR_STRING();
-> DIGIT,[DIGIT,[DIGIT,[DIGIT,[DIGIT]]]] = CUR_STRING();
-> '$' = CUR_STRING();
(RvpStrPtrN)genericU32
-> "0x",HEX,[HEX,[HEX,[HEX,[HEX,[HEX,[HEX,[HEX]]]]]]] = CUR_STRING();
-> DIGIT,[DIGIT,[DIGIT,[DIGIT,[DIGIT,[DIGIT,[DIGIT,[DIGIT,[DIGIT,[DIGIT]]]]]]]]] = CUR_STRING();
-> '$' = CUR_STRING();
//----- transport_fmts
(RvpStrPtrN)known_transport_proto
-> "AAL1/",transport_list = CUR_STRING();
-> "AAL2/",transport_list = CUR_STRING();
-> "AAL5/",transport_list = CUR_STRING();
-> "RTP/AVP" = CUR_STRING();
// -> tn-proto = CUR_STRING(); // rfc2848
-> "H323c-" = CUR_STRING();
transport_list
-> "ATMF"
-> "ITU"
-> "custom"
-> "IEEE:","-", HEX... // oui
-> SAFE... // corporate_name
/*
known_transport_fmt
-> decimal_uchar
-> "-"
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -