⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rvsdpprs.syn

📁 h.248协议源码
💻 SYN
📖 第 1 页 / 共 2 页
字号:

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