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

📄 megaco_sdp.erl

📁 OTP是开放电信平台的简称
💻 ERL
📖 第 1 页 / 共 3 页
字号:
encode_rtimes_repeat(Repeat) when is_list(Repeat) ->    Repeat;encode_rtimes_repeat(BadRepeat) ->    error({invalid_rtimes_repeat, BadRepeat}).encode_rtimes_duration(Duration) when is_list(Duration) ->    Duration;encode_rtimes_duration(BadDuration) ->    error({invalid_rtimes_duration, BadDuration}).encode_rtimes_list_of_offsets(LOO) when is_list(LOO) ->    F = fun(Off, Acc) when is_list(Off) -> 		Acc ++ " " ++ Off;	   (BadOff, Acc) -> 		error({invalid_rtimes_list_of_offsets, {BadOff, Acc}})	end,    lists:foldl(F, [], LOO);encode_rtimes_list_of_offsets(BadLoo) ->    error({invalid_rtimes_list_of_offsets, BadLoo}).    	    decode_pp_tzones(Value) ->    ?d("decode_pp_ztimes -> entry with"       "~n   Value: ~p", [Value]),    List = string:tokens(Value, " \t"),    {ok, #megaco_sdp_z{list_of_adjustments = List}}.encode_pp_tzones(LOA) ->    ?d("encode_pp_ztimes -> entry with"       "~n   LOA: ~p", [LOA]),    Val = encode_tzones_list_of_adjustments(LOA),    #'PropertyParm'{name  = "z", 		    value = [Val]}.encode_tzones_list_of_adjustments([H|T]) when is_list(H) ->    F = fun(Adjustment, Acc) when is_list(Adjustment) -> 		Acc ++ " " ++ Adjustment;	   (BadAdjustment, Acc) ->		error({invalid_tzones_list_of_adjustments, 		       {BadAdjustment, Acc}})	end,     lists:foldl(F, H, T);encode_tzones_list_of_adjustments(LOA) ->    error({invalid_tzones_list_of_adjustments, LOA}).%% ===== Encryption Keys =====%% decode_pp_encryption_keys(Value) ->    ?d("decode_pp_encryption_keys -> entry with"       "~n   Value: ~p", [Value]),    {M, E} = 	case string:tokens(Value, ":") of	    [Method, EncryptionKey] -> 		?d("decode_pp_encryption_keys -> "		   "~n   Method:        ~p"		   "~n   EncryptionKey: ~p", [Method, EncryptionKey]),		{Method, EncryptionKey};	    [Method] -> 		?d("decode_pp_encryption_keys -> "		   "~n   Method: ~p", [Method]),		{Method, undefined};	    Err ->		invalid_pp(encryption_key, Value, Err)	end,    M2 = 	case tolower(M) of	    "prompt" ->		prompt;	    "clear" ->		clear;	    "base64" ->		base64;	    "uri" ->		uri;	    _ ->		M	end,    ?d("decode_pp_encryption_keys -> "       "~n   M2: ~p", [M2]),    SDP = #megaco_sdp_k{method         = M2, 			encryption_key = E},    {ok, SDP}.    encode_pp_encryption_keys(prompt = _Method, undefined) ->    ?d("encode_pp_encryption_keys(prompt) -> entry", []),    #'PropertyParm'{name  = "k", 		    value = ["prompt"]};encode_pp_encryption_keys(clear = _Method, EncryptionKey)   when is_list(EncryptionKey) ->    ?d("encode_pp_encryption_keys(clear) -> entry with"       "~n   EncryptionKey: ~p", [EncryptionKey]),    #'PropertyParm'{name  = "k", 		    value = ["clear:" ++ EncryptionKey]};encode_pp_encryption_keys(base64 = _Method, EncryptionKey)   when is_list(EncryptionKey) ->    ?d("encode_pp_encryption_keys(base64) -> entry with"       "~n   EncryptionKey: ~p", [EncryptionKey]),    #'PropertyParm'{name  = "k", 		    value = ["base64:" ++ EncryptionKey]};encode_pp_encryption_keys(uri = _Method, EncryptionKey)   when is_list(EncryptionKey) ->    ?d("encode_pp_encryption_keys(uri) -> entry with"       "~n   EncryptionKey: ~p", [EncryptionKey]),    #'PropertyParm'{name  = "k", 		    value = ["uri:" ++ EncryptionKey]};encode_pp_encryption_keys(Method, EncryptionKey)   when is_list(Method) and is_list(EncryptionKey) ->    ?d("encode_pp_encryption_keys -> entry with"       "~n   Method:        ~p"       "~n   EncryptionKey: ~p", [Method, EncryptionKey]),    #'PropertyParm'{name  = "k", 		    value = [Method ++ ":" ++ EncryptionKey]};encode_pp_encryption_keys(BadMethod, BadEK) ->    error({invalid_encryption_keys, {BadMethod, BadEK}}).    %% ===== Attributes =====%% decode_pp_attribute(Value) ->    ?d("decode_pp_attribute -> entry with"       "~n   Value: ~p", [Value]),    case string:tokens(Value, ":") of	["rtpmap", AttrValue] ->	    ?d("decode_pp_attribute -> rtpmap: "	       "~n   AttrValue: ~p", [AttrValue]),	    case string:tokens(AttrValue, "\/ \t") of		[PayloadStr, EncName, ClockRateStr | EncPar] ->		    ?d("decode_pp_attribute -> "		       "~n   PayloadStr:   ~p"		       "~n   EncName:      ~p"		       "~n   ClockRateStr: ~p"		       "~n   EncPar:       ~p", 		       [PayloadStr, EncName, ClockRateStr, EncPar]),		    Payload   = s2i(PayloadStr, invalid_rtpmap_payload),		    ?d("decode_pp_attribute -> Payload: ~w", [Payload]),		    ClockRate = s2i(ClockRateStr, invalid_rtpmap_payload), 		    ?d("decode_pp_attribute -> ClockRate: ~w", [ClockRate]),		    SDP = #megaco_sdp_a_rtpmap{payload_type   = Payload, 					       encoding_name  = EncName,					       clock_rate     = ClockRate, 					       encoding_parms = EncPar},		    {ok, SDP};		_ ->		    error({invalid_rtpmap, AttrValue})	    end;	["ptime", PacketTimeStr] ->	    ?d("decode_pp_attribute -> ptime: "	       "~n   PacketTimeStr: ~p", [PacketTimeStr]),	    PacketTime = s2i(PacketTimeStr, invalid_ptime_packet_time), 	    ?d("decode_pp_attribute -> PacketTime: ~w", [PacketTime]),	    SDP = #megaco_sdp_a_ptime{packet_time = PacketTime}, 	    {ok, SDP};	["quality", QualityStr] ->	    ?d("decode_pp_attribute -> quality: "	       "~n   QualityStr: ~p", [QualityStr]),	    Quality = s2i(QualityStr, invalid_quality_quality), 	    ?d("decode_pp_attribute -> Quality: ~w", [Quality]),	    SDP = #megaco_sdp_a_quality{quality = Quality}, 	    {ok, SDP};	["fmtp", FMTP] ->	    ?d("decode_pp_attribute -> fmtp: "	       "~n   FMTP: ~p", [FMTP]),	    case string:tokens(FMTP, " \t") of		[Fmt, Param] ->		    ?d("decode_pp_attribute -> "		       "~n   Fmt:   ~p"		       "~n   Param: ~p", [Fmt, Param]),		    SDP = #megaco_sdp_a_fmtp{format = Fmt,					     param  = Param}, 		    {ok, SDP};		_ ->		    error({invalid_fmtp, FMTP})	    end;	[Attr, AttrValue] ->	    ?d("decode_pp_attribute -> "	       "~n   Attr:      ~p"	       "~n   AttrValue: ~p", [Attr, AttrValue]),	    {ok, #megaco_sdp_a{attribute = Attr, value = AttrValue}};	[Attr] ->	    ?d("decode_pp_attribute -> "	       "~n   Attr: ~p", [Attr]),	    {ok, #megaco_sdp_a{attribute = Attr}};	Err ->	    invalid_pp(invalid_attribute, Value, Err)    end.    encode_pp_attribute_rtpmap(Payload0, EncName0, ClockRate0, EncPar0) ->    ?d("encode_pp_attribute_rtpmap -> entry with"       "~n   Payload0:   ~p"       "~n   EncName0:   ~p"       "~n   ClockRate0: ~p"       "~n   EncPar0:    ~p", [Payload0, EncName0, ClockRate0, EncPar0]),    Payload   = encode_rtpmap_payload(Payload0),     EncName   = encode_rtpmap_encoding_name(EncName0),     ClockRate = encode_rtpmap_clockrate(ClockRate0),     EncPar    = encode_rtpmap_encoding_parms(EncPar0),     Val = "rtpmap:" ++ Payload ++ " " ++ 	EncName ++ "/" ++ ClockRate ++ EncPar,     #'PropertyParm'{name  = "a", 		    value = [Val]}.encode_rtpmap_payload(Payload) when is_integer(Payload) ->    integer_to_list(Payload);encode_rtpmap_payload(BadPayload) ->    error({invalid_rtpmap_payload, BadPayload}).encode_rtpmap_encoding_name(EncName) when is_list(EncName) ->    EncName;encode_rtpmap_encoding_name(BadEncName) ->    error({invalid_rtpmap_encoding_name, BadEncName}).encode_rtpmap_clockrate(ClockRate) when is_integer(ClockRate) ->    integer_to_list(ClockRate);encode_rtpmap_clockrate(BadClockRate) ->    error({invalid_rtpmap_clockrate, BadClockRate}).encode_rtpmap_encoding_parms(EncPar) when is_list(EncPar) ->    F = fun(EP, Acc) when is_list(EP) -> 		Acc ++ "/" ++ EP;	   (BadEP, Acc) ->		error({invalid_rtpmap_encoding_parms, {BadEP, Acc}})	end,    lists:foldl(F, [], EncPar);encode_rtpmap_encoding_parms(BadEncPar) ->    error({invalid_rtpmap_encoding_parms, BadEncPar}).		encode_pp_attribute_ptime(PacketTime) when is_integer(PacketTime) ->    ?d("encode_pp_attribute_ptime -> entry with"       "~n   PacketTime: ~w", [PacketTime]),    #'PropertyParm'{name  = "a", 		    value = ["ptime:" ++ integer_to_list(PacketTime)]};encode_pp_attribute_ptime(BadPT) ->    error({invalid_ptime_packet_time, BadPT}).encode_pp_attribute_quality(Quality) when is_integer(Quality) ->    ?d("encode_pp_attribute_quality -> entry with"       "~n   Quality: ~w", [Quality]),    #'PropertyParm'{name  = "a", 		    value = ["quality:" ++ integer_to_list(Quality)]};encode_pp_attribute_quality(BadQ) ->    error({invalid_quality_quality, BadQ}).encode_pp_attribute_fmtp(Fmt0, Param0) ->    ?d("encode_pp_attribute_rtpmap -> entry with"       "~n   Fmt0:   ~p"       "~n   Param0: ~p", [Fmt0, Param0]),    Fmt   = encode_fmtp_format(Fmt0),    Param = encode_fmtp_param(Param0),    Val   = "fmtp:" ++ Fmt ++ " " ++ Param,     #'PropertyParm'{name  = "a", 		    value = [Val]}.encode_fmtp_format(Fmt) when is_list(Fmt) ->    Fmt;encode_fmtp_format(BadFmt) ->    error({invalid_fmtp_format, BadFmt}).encode_fmtp_param(Param) when is_list(Param) ->    Param;encode_fmtp_param(BadParam) ->    error({invalid_fmtp_param, BadParam}).encode_pp_attribute(Attr, undefined) when is_list(Attr) ->    ?d("encode_pp_attribute_rtpmap -> entry with"       "~n   Attr: ~p", [Attr]),    #'PropertyParm'{name  = "a", 		    value = [Attr]};encode_pp_attribute(Attr, Value) when is_list(Attr) and is_list(Value) ->    ?d("encode_pp_attribute_rtpmap -> entry with"       "~n   Attr:  ~p"       "~n   Value: ~p", [Attr, Value]),    #'PropertyParm'{name  = "a", 		    value = [Attr ++ ":" ++ Value]};encode_pp_attribute(BadAttr, BadAttrValue) ->    error({invalid_attribute, {BadAttr, BadAttrValue}}).%% ===== Media Announcements =====%% decode_pp_media_announcement(Value) ->    case string:tokens(Value, " \t") of	[Media0, PortInfo, Transport | FMT] ->	    Media = 		case tolower(Media0) of		    "audio"       -> audio;		    "video"       -> video;		    "application" -> application;		    "data"        -> data;		    "control"     -> control;		    _             -> Media0		end,	    {Port, NoOfPorts} = 		case string:tokens(PortInfo, "/") of		    [P1, NP] ->			{s2i(P1, invalid_media_announcement_port),			 s2i(NP, invalid_media_announcement_nof_ports)};		    [P2] ->			{s2i(P2, invalid_media_announcement_port),			 undefined};		    Err ->			invalid_pp(mnta_port_info, Value, Err)		end,	    SDP = #megaco_sdp_m{media     = Media,				port      = Port,				num_ports = NoOfPorts,				transport = Transport,				fmt_list  = FMT},	    {ok, SDP};	Err ->	    invalid_pp(media_name_transp_addr, Value, Err)    end.encode_pp_media_announcement(Media0, Port0, undefined, Transport0, FMT0) ->    ?d("encode_pp_media_announcement -> entry with"       "~n   Media0:     ~p"       "~n   Port0:      ~p"       "~n   Transport0: ~p"       "~n   FMT0:       ~p", [Media0, Port0, Transport0, FMT0]),    Media     = encode_media_announcement_media(Media0),    Port      = encode_media_announcement_port(Port0),    Transport = encode_media_announcement_transport(Transport0),    FMT       = encode_media_announcement_fmt_list(FMT0),    do_encode_pp_media_announcement(Media, Port, "", Transport, FMT);encode_pp_media_announcement(Media0, Port0, NumPorts0, Transport0, FMT0) ->    ?d("encode_pp_media_announcement -> entry with"       "~n   Media0:     ~p"       "~n   Port0:      ~p"       "~n   NumPorts0:  ~p"       "~n   Transport0: ~p"       "~n   FMT0:       ~p", [Media0, Port0, NumPorts0, Transport0, FMT0]),    Media     = encode_media_announcement_media(Media0),    Port      = encode_media_announcement_port(Port0),    NumPorts  = encode_media_announcement_num_port(NumPorts0),     Transport = encode_media_announcement_transport(Transport0),    FMT       = encode_media_announcement_fmt_list(FMT0),    do_encode_pp_media_announcement(Media, Port, NumPorts, Transport, FMT).do_encode_pp_media_announcement(Media, Port, NumOfPorts, Transport, FMT) ->    Val = Media ++ " " ++ Port ++ NumOfPorts ++ " " ++ Transport ++ FMT,    #'PropertyParm'{name  = "m", 		    value = [Val]}.encode_media_announcement_media(Media) when is_atom(Media) ->    MaMedia = [audio, video, application, data, control],     case lists:member(Media, MaMedia) of	true ->	    atom_to_list(Media);	false ->	    error({invalid_media_announcement_media, Media})    end;encode_media_announcement_media(Media) when is_list(Media) ->    Media;encode_media_announcement_media(BadMedia) ->    error({invalid_media_announcement_media, BadMedia}).encode_media_announcement_port(Port) when is_integer(Port) ->    integer_to_list(Port);encode_media_announcement_port(BadPort) ->    error({invalid_media_announcement_port, BadPort}).encode_media_announcement_num_port(NumPort) when is_integer(NumPort) ->    "/" ++ integer_to_list(NumPort);encode_media_announcement_num_port(BadNumPort) ->    error({invalid_media_announcement_num_port, BadNumPort}).encode_media_announcement_transport(Transport) when is_list(Transport) ->    Transport;encode_media_announcement_transport(BadTransport) ->    error({invalid_media_announcement_transport, BadTransport}).encode_media_announcement_fmt_list(FmtList) when is_list(FmtList) ->    F = fun(FMT, Acc) when is_list(FMT) -> 		Acc ++ " " ++ FMT;	   (BadFMT, Acc) ->		error({invalid_media_announcement_fmt_list, {BadFMT, Acc}})	end,    lists:foldl(F, [], FmtList);encode_media_announcement_fmt_list(BadFmtList) ->    error({invalid_media_announcement_fmt_list, BadFmtList}).decode_network_type(NT) when is_list(NT) ->    case tolower(NT) of	"in" -> in;	_    -> NT    end.encode_network_type(in)                  -> "IN";encode_network_type(NT) when is_list(NT) -> NT;encode_network_type(Bad) ->    {error, {invalid_network_type, Bad}}.decode_address_type(AT) when is_list(AT) ->    case tolower(AT) of	"ip4" -> ip4;	"ip6" -> ip6;	_     -> AT    end.	     encode_address_type(ip4)                 -> "IP4";encode_address_type(ip6)                 -> "IP6";encode_address_type(AT) when is_list(AT) ->     case toupper(AT) of	"IP4" -> "IP4";	"IP6" -> "IP6";	_     -> AT    end;encode_address_type(Crap) ->    {error, {invalid_address_type, Crap}}.    s2i(S, E) ->    case (catch list_to_integer(S)) of	I when is_integer(I) ->	    I;	_ ->	    error({E, S})    end.-define(LOWER(Char),        if            Char >= $A, Char =< $Z ->                Char - ($A - $a);            true ->                Char        end).tolower(Chars) ->    [?LOWER(Char) || Char <- Chars].-define(UPPER(Char),        if            Char >= $a, Char =< $z ->                Char + ($A - $a);            true ->                Char        end).toupper(Chars) ->    [?UPPER(Char) || Char <- Chars].    invalid_pp(What, Value, Error) ->    {error, {invalid_PropertyParm, {What, Value, Error}}}.error(Reason) ->    throw({error, Reason}).

⌨️ 快捷键说明

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