From 671b2c35947a08f7edbbd3d919d65244a14e421b Mon Sep 17 00:00:00 2001 From: Max Lapshin Date: Tue, 19 Apr 2011 19:27:24 +0400 Subject: [PATCH] Future of new config --- apps/erlyvideo/src/ems_config.erl | 10 +++++ apps/erlyvideo/src/ems_config_lex.xrl | 27 +++++++++++++ apps/erlyvideo/src/ems_config_parser.yrl | 36 +++++++++++++++++ priv/example.conf | 51 ++++++++++++++++++++++++ 4 files changed, 124 insertions(+) create mode 100644 apps/erlyvideo/src/ems_config.erl create mode 100644 apps/erlyvideo/src/ems_config_lex.xrl create mode 100644 apps/erlyvideo/src/ems_config_parser.yrl create mode 100644 priv/example.conf diff --git a/apps/erlyvideo/src/ems_config.erl b/apps/erlyvideo/src/ems_config.erl new file mode 100644 index 00000000..6a5c8425 --- /dev/null +++ b/apps/erlyvideo/src/ems_config.erl @@ -0,0 +1,10 @@ +-module(ems_config). + +-export([test/0]). + + +test() -> + {ok, Lex, _} = ems_config_lex:string(binary_to_list(element(2,file:read_file("priv/example.conf")))), + io:format("Lex: ~p~n", [Lex]), + ems_config_parser:parse(Lex). + diff --git a/apps/erlyvideo/src/ems_config_lex.xrl b/apps/erlyvideo/src/ems_config_lex.xrl new file mode 100644 index 00000000..b61a1b13 --- /dev/null +++ b/apps/erlyvideo/src/ems_config_lex.xrl @@ -0,0 +1,27 @@ +Definitions. + +D = [0-9] +L = [A-Z0-9a-z_:] +LS = [][A-Z0-9a-z_\s%*$#@().><:/\-\+] +WS = ([\000-\s]|%.*) + +SPACE = [\s\t\r\n]+ +NAME = ([A-Z0-9a-z_]+) + +Rules. + +server : {token,{server_def,TokenLine, server}}. +module : {token,{module_def,TokenLine, module}}. +{D}+ : {token,{integer,TokenLine,list_to_integer(TokenChars)}}. +%%{L}+_appender : {token,{apender,TokenLine,list_to_atom(TokenChars)}}. +{L}+ : {token,{atom,TokenLine,list_to_atom(TokenChars)}}. +'{LS}+' : {token,{val,TokenLine,strip(TokenChars,TokenLen)}}. +"{LS}+" : {token,{val,TokenLine,strip(TokenChars,TokenLen)}}. +[{};] : {token,{list_to_atom(TokenChars),TokenLine}}. +{WS}+ : skip_token. + + +Erlang code. + +strip(TokenChars,TokenLen) -> + lists:sublist(TokenChars, 2, TokenLen - 2). diff --git a/apps/erlyvideo/src/ems_config_parser.yrl b/apps/erlyvideo/src/ems_config_parser.yrl new file mode 100644 index 00000000..d391125b --- /dev/null +++ b/apps/erlyvideo/src/ems_config_parser.yrl @@ -0,0 +1,36 @@ +Nonterminals servers server module section_name key_values value key_value values. + +Terminals '{' '}' 'server_def' 'module_def' 'integer' 'val' 'atom' ';'. + +Rootsymbol servers. + +servers -> server : ['$1']. +servers -> module : ['$1']. +servers -> key_value : ['$1']. +servers -> server servers : ['$1'] ++ '$2'. +servers -> module servers : ['$1'] ++ '$2'. +servers -> key_value servers : ['$1'] ++ '$2'. + + +section_name -> atom : unwrap('$1'). +server -> server_def section_name '{' key_values '}' : {server, '$2', '$4'}. +module -> module_def section_name '{' key_values '}' : {'$2', '$4'}. + + +key_values -> key_value : ['$1']. +key_values -> key_value key_values : ['$1'] ++ '$2'. + + +key_value -> atom values ';' : list_to_tuple([unwrap('$1')] ++ '$2'). + +values -> value : ['$1']. +values -> value values : ['$1'] ++ '$2'. + +value -> val : unwrap('$1'). +value -> integer : unwrap('$1'). +value -> atom : unwrap('$1'). + + +Erlang code. + +unwrap({_,_,V}) -> io:format("Unwrap: ~p~n", [V]), V. diff --git a/priv/example.conf b/priv/example.conf new file mode 100644 index 00000000..4c2abbc5 --- /dev/null +++ b/priv/example.conf @@ -0,0 +1,51 @@ + + +server default { + listen 1935; + server_name erlyvideo.org rtmp.erlyvideo.org; + + secret_key "1234"; + + root "/Users/max/Movies", "/var/lib/erlyvideo/movies"; + + user_limit 100; + + rtmp { + handlers remove_useless_prefix, trusted_login, apps_push, + apps_rewrite_play "http://erlyvideo.org/stream_auth", + apps_registrator, apps_stat_collector, apps_streaming, apps_recording, apps_sip; + } + + http { + location / { + handlers ems_http_rtmpt, ems_http_file registrator, ems_http_file "/Users/max/Sites/registrator/wwwroot"; + } + + location /erlyvideo/api { + handlers ems_http_erlyvideo_api; + } + + location /shoutcast { + handlers ems_http_shoutcast; + } + + location /deskshare { + handlers ems_http_deskshare; + } + } + + play { + location / { + handlers rewrite, http, rtsp, ts_file, file, livestream; + } + + location /playlists { + handlers playlist_adapter "http://erlyvideo.org/playlists"; + } + + rewrite "cam1_view" registrator_playlist '{camera,"cam1"},{public,false},{clients_timeout,0}'; + rewrite "mpeg2" mpegts "http://erlybuild.local:4242/bynumber/1" '{clients_timeout,1}'; + rewrite "pp3" mpegts "http://localhost:9022/" failover="http://localhost:9023",registrator=false; + rewrite "axis" rtsp "rtsp://root:root@axis-00408ca51334.local./axis-media/media.amp" clients_timeout=false,source_timeout=false,retry_limit=false; + } +} \ No newline at end of file