diff options
author | Erlang/OTP <[email protected]> | 2009-11-20 14:54:40 +0000 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2009-11-20 14:54:40 +0000 |
commit | 84adefa331c4159d432d22840663c38f155cd4c1 (patch) | |
tree | bff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/orber/src/orber_web_server.erl | |
download | otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2 otp-84adefa331c4159d432d22840663c38f155cd4c1.zip |
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/orber/src/orber_web_server.erl')
-rw-r--r-- | lib/orber/src/orber_web_server.erl | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/lib/orber/src/orber_web_server.erl b/lib/orber/src/orber_web_server.erl new file mode 100644 index 0000000000..9d2a063a69 --- /dev/null +++ b/lib/orber/src/orber_web_server.erl @@ -0,0 +1,191 @@ +%%---------------------------------------------------------------------- +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2001-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% +%% +%%---------------------------------------------------------------------- +%% File : orber_web_server.erl +%% Purpose : +%%---------------------------------------------------------------------- + +-module(orber_web_server). + +-behaviour(gen_server). + +-export([init/1,handle_call/3,handle_cast/2,handle_info/2]). +-export([terminate/2,code_change/3]). +-export([start/0,stop/0,start_link/0]). + +-export([config_data/0, menu/2, configure/2, info/2, nameservice/2, + default_selection/2, ifr_select/2, ifr_data/2, create/2, + delete_ctx/2, add_ctx/2, delete_obj/2, flash_msg/2]). + +%%---------------------------------------------------------------------- +%%-------------- Defines & Includes ------------------------------------ +%%---------------------------------------------------------------------- +-define(HTML_HEADER, + "Cache-Control:no-cache\r\nPragma:no-cache\r\nExpires:Thu, 01 Dec 1994 16:00:00 GMT\r\nContent-type: text/html\r\n\r\n<HTML BGCOLOR=\"#FFFFFF\">\n<HEAD>\n<TITLE>Orber O&D</TITLE>\n</HEAD>\n"). + + +-define(HTML_END, "</BODY></HTML>"). + +-define(DEBUG_LEVEL, 5). + +-record(state, {ts}). +-include("ifr_objects.hrl"). + +%%---------------------------------------------------------------------- +%%-------------- External API ------------------------------------------ +%%---------------------------------------------------------------------- +%% Function : start/start_link/stop +%% Returns : +%% Description: +%%---------------------------------------------------------------------- +start_link()-> + gen_server:start_link({local,?MODULE},?MODULE,[],[]). +start()-> + gen_server:start({local,?MODULE},?MODULE,[],[]). +stop()-> + gen_server:call(?MODULE,stop,1000). + +%%---------------------------------------------------------------------- +%% Function : config_data +%% Returns : +%% Description: +%%---------------------------------------------------------------------- +config_data()-> + {orber,[{web_data,{"OrberWeb","/orber/main_frame.html"}}, + {alias,{"/orber", code:priv_dir(orber)}}, + {start,{child,{{local,?MODULE},{?MODULE,start_link,[]}, + permanent,100,worker,[?MODULE]}}}, + {alias,{erl_alias,"/orber_erl",[orber_web_server]}} + ]}. + + +menu(Env,Input) -> + Args = httpd:parse_query(Input), + [?HTML_HEADER, gen_server:call(?MODULE, {menu, Env, Args}), ?HTML_END]. + +configure(Env,Input) -> + Args = httpd:parse_query(Input), + [?HTML_HEADER, gen_server:call(?MODULE, {configure, Env, Args}), ?HTML_END]. + +nameservice(Env,Input) -> + Args = httpd:parse_query(Input), + [?HTML_HEADER, gen_server:call(?MODULE, {nameservice, Env, Args}), ?HTML_END]. + +info(Env,Input) -> + Args = httpd:parse_query(Input), + [?HTML_HEADER, gen_server:call(?MODULE, {info, Env, Args}), ?HTML_END]. + +default_selection(Env,Input) -> + Args = httpd:parse_query(Input), + [?HTML_HEADER, gen_server:call(?MODULE, {default_selection, Env, Args}), ?HTML_END]. + +flash_msg(Env, Input) -> + Args = httpd:parse_query(Input), + [?HTML_HEADER, gen_server:call(?MODULE, {nameservice, Env, Args}), ?HTML_END]. + +ifr_select(Env, Input) -> + Args = httpd:parse_query(Input), + [?HTML_HEADER, gen_server:call(?MODULE, {ifr_select, Env, Args}), ?HTML_END]. + +ifr_data(Env, Input) -> + Args = httpd:parse_query(Input), + [?HTML_HEADER, gen_server:call(?MODULE, {ifr_data, Env, Args}), ?HTML_END]. + +create(Env, Input) -> + Args = httpd:parse_query(Input), + [?HTML_HEADER, gen_server:call(?MODULE, {create, Env, Args}), ?HTML_END]. + +delete_ctx(Env, Input) -> + Args = httpd:parse_query(Input), + [?HTML_HEADER, gen_server:call(?MODULE, {delete_ctx, Env, Args}), ?HTML_END]. + +add_ctx(Env, Input) -> + Args = httpd:parse_query(Input), + [?HTML_HEADER, gen_server:call(?MODULE, {add_ctx, Env, Args}), ?HTML_END]. + +delete_obj(Env, Input) -> + Args = httpd:parse_query(Input), + [?HTML_HEADER, gen_server:call(?MODULE, {delete_obj, Env, Args}), ?HTML_END]. + +%%---------------------------------------------------------------------- +%%-------------- Callback Functions ------------------------------------ +%%---------------------------------------------------------------------- +%% Function : MISC gen_server specific callback functions +%% Returns : +%% Description: +%%---------------------------------------------------------------------- +init(_Arg)-> + {M, S, U} = now(), + TS = M*1000000000000 + S*1000000 + U, + {ok, #state{ts = TS}}. + +terminate(_,_State)-> + ok. + +handle_cast(_,State)-> + {noreply,State}. + +handle_info(_,State)-> + {noreply,State}. + +code_change(_Old_vsn,State,_Extra)-> + {ok,State}. + +%%---------------------------------------------------------------------- +%% Function : handle_call +%% Returns : +%% Description: +%%---------------------------------------------------------------------- +handle_call({Function, Env, Args}, _From, State)-> + case catch orber_web:Function(Env, Args) of + {'EXIT', R} -> + orber:dbg("[~p] orber_web:~p(~p);~nEXIT: ~p", + [?LINE, Function, Args, R], ?DEBUG_LEVEL), + {reply, "<BODY BGCOLOR=\"#FFFFFF\">Internal Error", State}; + {'EXIT', R1, R2} -> + orber:dbg("[~p] orber_web:~p(~p);~nEXIT: ~p~n~p", + [?LINE, Function, Args, R1, R2], ?DEBUG_LEVEL), + {reply, "<BODY BGCOLOR=\"#FFFFFF\">Internal Error", State}; + {badrpc, Why} -> + orber:dbg("[~p] orber_web:~p(~p);~nbadrpc: ~p", + [?LINE, Function, Args, Why], ?DEBUG_LEVEL), + {reply, "<BODY BGCOLOR=\"#FFFFFF\">Internal Error", State}; + {'EXCEPTION', E} -> + orber:dbg("[~p] orber_web:~p(~p);~nEXCEPTION: ~p", + [?LINE, Function, Args, E], ?DEBUG_LEVEL), + {reply, "<BODY BGCOLOR=\"#FFFFFF\">Internal Error", State}; + {error, Data} -> + orber:dbg("[~p] orber_web:~p(~p); ~nReason: ~p", + [?LINE, Function, Args, Data], ?DEBUG_LEVEL), + {reply, Data, State}; + Reply -> + {reply, Reply, State} + end; +handle_call(stop, _From, State)-> + {stop, normal, ok, State}; +handle_call(What, _From, State)-> + orber:dbg("[~p] orber_web_server:handle_call(~p);", + [?LINE, What], ?DEBUG_LEVEL), + {reply, "<BODY BGCOLOR=\"#FFFFFF\"><FONT SIZE=6>Unknown Request</FONT>", State}. + +%%---------------------------------------------------------------------- +%% END OF MODULE +%%---------------------------------------------------------------------- |