aboutsummaryrefslogtreecommitdiffstats
path: root/lib/orber/src/orber_web_server.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/orber/src/orber_web_server.erl')
-rw-r--r--lib/orber/src/orber_web_server.erl191
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
+%%----------------------------------------------------------------------