megaco_sdp_test.erl

来自「OTP是开放电信平台的简称」· ERL 代码 · 共 974 行 · 第 1/3 页

ERL
974
字号
exec([], []) ->    ok;exec([], Acc) ->    {error, lists:reverse(Acc)};exec([Instr|Instructions], Acc) ->    case exec_instruction(Instr) of	ok ->	    exec(Instructions, Acc);	Error ->	    exec(Instructions, [Error|Acc])    end.    exec_instruction({Desc, Cmd, Data, Verify}) ->    io:format("~n"	      "*** Test ~s ***"	      "~n", [Desc]),    Res = (catch Cmd(Data)),     case (catch Verify(Res)) of	ok ->	    ok;	error ->	    {error, {instruction_failed, {Desc, Data, Res}}};	{error, Expected} ->	    {error, {instruction_failed, {Desc, Data, Res, Expected}}};	Else ->	    {error, {verification_error, {Desc, Data, Res, Else}}}    end.%% ===============================================================%% %% Utility functions to generate PropertyParm records%% cre_PropertyParm_p(Num) when is_list(Num) ->    cre_PropertyParm("p", Num).cre_sdp_p(PN) ->    #megaco_sdp_p{phone_number = PN}.cre_PropertyParm_e(Email) when is_list(Email) ->    cre_PropertyParm("e", Email).cre_sdp_e(E) ->    #megaco_sdp_e{email = E}.cre_PropertyParm_u(URI) when is_list(URI) ->    cre_PropertyParm("u", URI).cre_sdp_u(U) ->    #megaco_sdp_u{uri = U}.cre_PropertyParm_i(SessionDescr) when is_list(SessionDescr) ->    cre_PropertyParm("i", SessionDescr).cre_sdp_i(SD) ->    #megaco_sdp_i{session_descriptor = SD}.cre_PropertyParm_s(Name) when is_list(Name) ->    cre_PropertyParm("s", Name).cre_sdp_s(N) ->    #megaco_sdp_s{name = N}.cre_PropertyParm_k(prompt, _) ->    cre_PropertyParm("k", "prompt");cre_PropertyParm_k(clear, EncryptionKey) when is_list(EncryptionKey) ->    cre_PropertyParm("k", "clear:" ++ EncryptionKey);cre_PropertyParm_k(base64, EncryptionKey) when is_list(EncryptionKey) ->    cre_PropertyParm("k", "base64:" ++ EncryptionKey);cre_PropertyParm_k(uri, EncryptionKey) when is_list(EncryptionKey) ->    cre_PropertyParm("k", "uri:" ++ EncryptionKey);cre_PropertyParm_k(Method, EncryptionKey)   when is_list(Method) and is_list(EncryptionKey) ->    cre_PropertyParm("k", Method ++ ":" ++ EncryptionKey).cre_sdp_k(M) ->    #megaco_sdp_k{method = M}.cre_sdp_k(M, EK) ->    #megaco_sdp_k{method = M, encryption_key = EK}.cre_PropertyParm_z([H | T]) when is_list(H) ->    F = fun(Elem, Str) -> Str ++ " " ++ Elem end,     cre_PropertyParm("z", lists:foldl(F, H, T)).cre_sdp_z(LOA) ->    #megaco_sdp_z{list_of_adjustments = LOA}.cre_PropertyParm_r(Repeat, Duration, ListOfOffsets)   when is_list(Repeat) and is_list(Duration) and is_list(ListOfOffsets) ->    F = fun(Elem, Str) -> Str ++ " " ++ Elem end,     Val = Repeat ++ " " ++ Duration ++  lists:foldl(F, [], ListOfOffsets),    cre_PropertyParm("r", Val).cre_sdp_r(Repeat, Duration, ListOfOffsets) ->    #megaco_sdp_r{repeat_interval = Repeat, 		  active_duration = Duration, 		  list_of_offsets = ListOfOffsets}.cre_PropertyParm_t(Start, Stop)   when is_list(Start) and is_list(Stop) ->    cre_PropertyParm("t", Start ++ " " ++ Stop);cre_PropertyParm_t(Start, Stop) ->    cre_PropertyParm_t(i2s(Start), i2s(Stop)).cre_sdp_t(Start, Stop) ->    #megaco_sdp_t{start = Start, stop = Stop}.cre_PropertyParm_b(Modifier, Bandwidth)   when is_list(Modifier) and is_integer(Bandwidth) ->    cre_PropertyParm_b(Modifier, i2s(Bandwidth));cre_PropertyParm_b(Modifier, Bandwidth)   when is_list(Modifier) and is_list(Bandwidth) ->    cre_PropertyParm("b", Modifier ++ ":" ++ Bandwidth).cre_sdp_b(Mod, BW) ->    #megaco_sdp_b{modifier = Mod, bandwidth = BW}.%% cre_PropertyParm_fmtp(Format, Param) %%   when is_list(Format) and is_list(Param) ->%%     cre_PropertyParm_a("fmtp", Format ++ " " ++ Param).%% cre_sdp_a_fmtp(Fmt, Parm) ->%%     #megaco_sdp_a_fmtp{format = Fmt, param = Parm}.cre_PropertyParm_quality(Quality) when is_integer(Quality) ->    cre_PropertyParm_quality(i2s(Quality));cre_PropertyParm_quality(Quality) when is_list(Quality) ->    cre_PropertyParm_a("quality", Quality).cre_sdp_a_quality(Qa) ->    #megaco_sdp_a_quality{quality = Qa}.cre_PropertyParm_ptime(PacketTime) when is_integer(PacketTime) ->    cre_PropertyParm_ptime(i2s(PacketTime));cre_PropertyParm_ptime(PacketTime) when is_list(PacketTime) ->    cre_PropertyParm_a("ptime", PacketTime).cre_sdp_a_ptime(PT) ->    #megaco_sdp_a_ptime{packet_time = PT}.cre_PropertyParm_rtpmap(Payload, EncName, ClockRate) ->    cre_PropertyParm_rtpmap(Payload, EncName, ClockRate, []).cre_PropertyParm_rtpmap(Payload, EncName, ClockRate, EncPar)  when is_integer(Payload) and       is_list(EncName) and       is_integer(ClockRate) and       is_list(EncPar) ->    F = fun(Elem, Str) -> Str ++ "/" ++ Elem end,     Val = 	integer_to_list(Payload) ++ " " ++	EncName ++ "/" ++ integer_to_list(ClockRate) ++ 	lists:foldl(F, [], EncPar),    cre_PropertyParm_a("rtpmap", Val).cre_sdp_a_rtpmap(Payload, EncName, ClockRate) ->    #megaco_sdp_a_rtpmap{payload_type  = Payload, 			 encoding_name = EncName,			 clock_rate    = ClockRate}.cre_sdp_a_rtpmap(Payload, EncName, ClockRate, EncParms) ->    #megaco_sdp_a_rtpmap{payload_type   = Payload, 			 encoding_name  = EncName,			 clock_rate     = ClockRate,			 encoding_parms = EncParms}.cre_PropertyParm_a(Attr, AttrValue)   when is_list(Attr) and is_list(AttrValue) ->    cre_PropertyParm("a", Attr ++ ":" ++ AttrValue).cre_PropertyParm_a(Attr) when is_list(Attr) ->    cre_PropertyParm("a", Attr).cre_sdp_a(Attr) ->    #megaco_sdp_a{attribute = Attr}.cre_sdp_a(Attr, Val) ->    #megaco_sdp_a{attribute = Attr,		  value     = Val}.cre_PropertyParm_o(User, SID, Version, AddrType, Addr) ->    cre_PropertyParm_o(User, SID, Version, in, AddrType, Addr).cre_PropertyParm_o(User, SID, Version, NetType, AddrType, Addr)   when is_list(User) and       is_integer(SID) and       is_integer(Version) and       is_list(NetType) or (NetType == in) and       is_list(AddrType) or ((AddrType == ip4) or (AddrType == ip6)) and       is_list(Addr) ->    NT = case NetType of	     in -> "IN";	     _  -> NetType	 end,    AT = case AddrType of	     ip4 -> "IP4";	     ip6 -> "IP6";	     _   -> AddrType	 end,    Val = 	User         ++ " " ++	i2s(SID)     ++ " " ++	i2s(Version) ++ " " ++	NT           ++ " " ++	AT           ++ " " ++	Addr,     cre_PropertyParm("o", Val).cre_sdp_o(Name, SID, V, AddrType, Addr) ->    cre_sdp_o(Name, SID, V, in, AddrType, Addr).cre_sdp_o(Name, SID, V, NetType, AddrType, Addr) ->    #megaco_sdp_o{user_name    = Name,		  session_id   = SID,		  version      = V,		  network_type = NetType,		  address_type = AddrType, 		  address      = Addr}.cre_PropertyParm_m(Media, Port, Transport, FmtList)   when is_atom(Media) ->    cre_PropertyParm_m(atom_to_list(Media), 		       Port, Transport, FmtList);cre_PropertyParm_m(Media, Port0, Transport, FmtList)   when is_list(Media) and is_list(Transport) and is_list(FmtList) ->    Port = i2s(Port0),    Val = 	Media ++ " " ++ Port ++ " " ++ Transport ++ " " ++ val(FmtList),    cre_PropertyParm("m", Val).cre_PropertyParm_m(Media, Port, NumPorts, Transport, FmtList)   when is_atom(Media) ->    cre_PropertyParm_m(atom_to_list(Media), 		       Port, NumPorts, Transport, FmtList);cre_PropertyParm_m(Media, Port0, NumPorts0, Transport, FmtList)   when is_list(Media) and is_list(Transport) and is_list(FmtList) ->    Port     = i2s(Port0),    NumPorts = i2s(NumPorts0),    Val = 	Media ++ " " ++ Port ++ "/" ++ NumPorts ++ " " ++ Transport ++ 	" " ++ val(FmtList),    cre_PropertyParm("m", Val).cre_sdp_m(Media, Port, Transport, FmtList) ->    #megaco_sdp_m{media     = Media,		  port      = Port,		  transport = Transport,		  fmt_list  = FmtList}.cre_sdp_m(Media, Port, NumPorts, Transport, FmtList) ->    #megaco_sdp_m{media     = Media,		  port      = Port,		  num_ports = NumPorts, 		  transport = Transport,		  fmt_list  = FmtList}.cre_PropertyParm_c(ip4, ConnAddr) ->    cre_PropertyParm_c("IP4", ConnAddr);cre_PropertyParm_c(ip6, ConnAddr) ->    cre_PropertyParm_c("IP6", ConnAddr);cre_PropertyParm_c(AddrType, ConnAddr)   when is_list(AddrType) and is_list(ConnAddr) ->    Val = "IN " ++ AddrType ++ " " ++ ConnAddr,     cre_PropertyParm("c", Val).cre_PropertyParm_c(ip4, Base, TTL) ->    cre_PropertyParm_c("IP4", Base, i2s(TTL));cre_PropertyParm_c(AddrType, Base, TTL)   when is_list(AddrType) and        is_list(Base)     and        is_list(TTL) ->    Val = "IN " ++ AddrType ++ " " ++ Base ++ "/" ++ TTL,     cre_PropertyParm("c", Val).cre_PropertyParm_c(ip4, Base, TTL, NumOf) ->    cre_PropertyParm_c("IP4", Base, i2s(TTL), i2s(NumOf));cre_PropertyParm_c(AddrType, Base, TTL, NumOf)   when is_list(AddrType) and        is_list(Base)     and        is_list(TTL)      and        is_list(NumOf) ->    Val = 	"IN " ++ AddrType ++ " " ++ Base ++ "/" ++ TTL ++ "/" ++ NumOf,    cre_PropertyParm("c", Val).cre_sdp_c(AddrType, ConnAddr) ->    cre_sdp_c(in, AddrType, ConnAddr).cre_sdp_c(NetType, AddrType, ConnAddr) ->    #megaco_sdp_c{network_type    = NetType,		  address_type    = AddrType, 		  connection_addr = ConnAddr}.cre_PropertyParm_v(Version) when is_integer(Version) ->    cre_PropertyParm_v(integer_to_list(Version));cre_PropertyParm_v(Version) when is_list(Version) ->    cre_PropertyParm("v", Version).cre_sdp_v(Version) ->    #megaco_sdp_v{version = Version}.	cre_PropertyParm(Name, Val) when is_list(Name) and is_list(Val) ->    #'PropertyParm'{name = Name, value = [Val]}.val(Vals) ->    val(Vals, " ").val([Head|Tail], Sep) ->    lists:foldl(fun(E, S) -> S ++ Sep ++ E end, Head, Tail).i2s(I) when is_integer(I) ->    integer_to_list(I);i2s(S) when is_list(S) ->    S.%% error(Reason) ->%%     throw({error, Reason}).

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?