orber_web.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 863 行 · 第 1/3 页
ERL
863 行
%%--------------------------------------------------------------------%% ``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 via the world wide web 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.%% %% The Initial Developer of the Original Code is Ericsson Utvecklings AB.%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings%% AB. All Rights Reserved.''%% %% $Id$%%%%----------------------------------------------------------------------%% File : orber_web.erl%% Purpose : %% Created : 19 Oct 2001%%-----------------------------------------------------------------------module(orber_web).-export([menu/2, configure/2, info/2, nameservice/2, ifr_select/2, ifr_data/2, create/2, delete_ctx/2, add_ctx/2, delete_obj/2]).%%----------------------------------------------------------------------%%-------------- Defines & Includes ------------------------------------%%-----------------------------------------------------------------------include("ifr_objects.hrl").-include_lib("orber/COSS/CosNaming/CosNaming.hrl").-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").-include_lib("orber/include/corba.hrl").-include_lib("orber/src/orber_iiop.hrl").-define(DEBUG_LEVEL, 5).-define(INFO_DATA, [{iiop_timeout, "IIOP Request Timeout"}, {iiop_connection_timeout, "IIOP Connection Timeout"}, {iiop_setup_connection_timeout, "IIOP Setup Connection Timeout"}, {iiop_port, "IIOP Port"}, {domain, "Orber Domain"}, {orber_nodes, "Nodes in Domain"}, {giop_version, "Default GIOP Version"}, {objectkeys_gc_time, "Objectkeys GC"}, {get_interceptors, "Using Interceptors"}, {get_debug_level, "Debug Level"}, {get_ORBInitRef, "ORBInitRef"}, {get_ORBDefaultInitRef, "ORBDefaultInitRef"}]).-define(IFR_DATA, [{"ir_ModuleDef", "Modules"}, {"ir_InterfaceDef", "Interfaces"}, {"ir_StructDef", "Structs"}, {"ir_UnionDef", "Unions"}, {"ir_ExceptionDef", "Exceptions"}, {"ir_ConstantDef", "Constants"}, {"ir_EnumDef", "Enumerants"}, {"ir_AliasDef", "Aliases"}, {"ir_AttributeDef", "Attributes"}, {"ir_OperationDef", "Operations"}, {"ir_Contained", "Contained"}, {"ir_TypedefDef", "Typedef"}]).%%----------------------------------------------------------------------%%-------------- External API ------------------------------------------%%----------------------------------------------------------------------%% Function : create%% Returns : %% Description: %%----------------------------------------------------------------------create(_Env, [{"node",NodeStr}]) -> Node = list_to_atom(NodeStr), is_running(Node, NodeStr), ["<BODY BGCOLOR=\"#FFFFFF\"> <TABLE border=0 BGCOLOR=\"#FFFFFF\"> <TD ALIGN=\"center\" COLSPAN=2><FONT SIZE=6>Create a New Object</FONT></TD></TR> <TR><TD><FORM METHOD=\"POST\" ACTION=\"./create\"> <TR><TD><INPUT TYPE=\"HIDDEN\" NAME=\"node\" VALUE=\"", NodeStr, "\"> <TR><TD><B>Module</B></TD><TD><INPUT TYPE=\"TEXT\" SIZE=\"50\" NAME=\"module\" VALUE=\"\"></TD></TR> <TR><TD><B>Arguments</B></TD><TD><INPUT TYPE=\"TEXT\" SIZE=\"50\" NAME=\"arguments\"></TD></TR> <TR><TD><B>Options</B></TD><TD><INPUT TYPE=\"TEXT\" SIZE=\"50\" NAME=\"options\"></TD></TR> <TR><TD><B>Name String</B></TD><TD><INPUT TYPE=\"TEXT\" SIZE=\"50\" NAME=\"namestr\"></TD></TR> <TR><TD><B>Operation to use</B></TD> <TD><B> <INPUT type=\"radio\" name=\"bind\" value=\"bind\" CHECKED=\"true\">Bind</B> <B> <INPUT type=\"radio\" name=\"bind\" value=\"rebind\">Rebind</B></TD></TR> <TR><TD ALIGN=\"center\" COLSPAN=2><INPUT TYPE=\"SUBMIT\" VALUE=\"Create it\"></FORM></TD></TR></TABLE>"];create(_Env, [{"node",NodeStr}, {"module", ModStr}, {"arguments",ArgsStr}, {"options",OptionsStr}, {"namestr", Name}, {"bind", How}]) -> Node = list_to_atom(NodeStr), Mod = list_to_atom(ModStr), Args = parse_data(ArgsStr), Options = parse_data(OptionsStr), case catch rpc:call(Node, Mod, oe_create, [Args, [{sup_child, true}|Options]]) of {ok, Pid, Object} -> case catch bind(Node, Object, Name, How) of {ok, IOR} -> ["<BODY BGCOLOR=\"#FFFFFF\"><BR><B>Successfully created the object:</B><BR><BR>", IOR]; {ok, IOR, Path} -> ["<BODY BGCOLOR=\"#FFFFFF\"><BR><B>Successfully created and stored the object as: \"", Path, "\" (", pid_to_list(Pid), ")</B><BR><BR>", IOR]; What -> rpc:call(Node, corba, dispose, [Object]), orber:dbg("[~p] orber_web:create(~p, ~p, ~p, ~p, ~p); Unable to bind object: ~p", [?LINE, Node, Mod, Args, Options, Name, What], ?DEBUG_LEVEL), ["<BODY BGCOLOR=\"#FFFFFF\">Unable to bind object in the NameService using: ", Name] end; Object when element(2, Object) == pseudo -> case catch bind(Node, Object, Name, How) of {ok, IOR} -> ["<BODY BGCOLOR=\"#FFFFFF\"><BR><B>Successfully created the object:</B><BR><BR>", IOR]; {ok, IOR, _} -> ["<BODY BGCOLOR=\"#FFFFFF\"><BR><B>Successfully created and stored the object as :\"", Name, "\"</B><BR><BR>", IOR]; What -> rpc:call(Node, corba, dispose, [Object]), orber:dbg("[~p] orber_web:create(~p, ~p, ~p, ~p, ~p); Unable to bind object: ~p", [?LINE, Node, Mod, Args, Options, Name, What], ?DEBUG_LEVEL), ["<BODY BGCOLOR=\"#FFFFFF\">Unable to bind object in the NameService using: ", Name] end; What-> orber:dbg("[~p] orber_web:create(~p, ~p, ~p, ~p, ~p); Unable to create object: ~p", [?LINE, Node, Mod, Args, Options, Name, What], ?DEBUG_LEVEL), ["<BODY BGCOLOR=\"#FFFFFF\">Unable to create the object."] end.bind(Node, Obj, "", _) -> IOR = rpc:call(Node, corba, object_to_string, [Obj]), {ok, IOR};bind(Node, Obj, NameStr, How) -> NS = check(rpc:call(Node, corba, resolve_initial_references, ["NameService"])), Name = check(rpc:call(Node, 'CosNaming_NamingContextExt', to_name, [NS, NameStr])), case How of "bind" -> check(rpc:call(Node, 'CosNaming_NamingContext', bind, [NS, Name, Obj])), IOR = rpc:call(Node, corba, object_to_string, [Obj]), {ok, IOR, NameStr}; "rebind" -> check(rpc:call(Node, 'CosNaming_NamingContext', rebind, [NS, Name, Obj])), IOR = rpc:call(Node, corba, object_to_string, [Obj]), {ok, IOR, NameStr} end.%%----------------------------------------------------------------------%% Function : delete_ctx%% Returns : %% Description: %%----------------------------------------------------------------------delete_ctx(_Env, [{"node",NodeStr}, {"context", Ref}]) -> Node = list_to_atom(NodeStr), {Ctx, NS} = remote_resolve(Node, Ref), Name = check(rpc:call(Node, 'CosNaming_NamingContextExt', to_name, [NS, Ref])), check(rpc:call(Node, 'CosNaming_NamingContextExt', unbind, [NS, Name])), check(rpc:call(Node, 'CosNaming_NamingContextExt', destroy, [Ctx])), ["<BODY BGCOLOR=\"#FFFFFF\"> <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=1> <FONT SIZE=6>Successfully deleted the Context: ", Ref, "</FONT>\n </TD></TR></TABLE> <FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-2) VALUE=\"Go Back\">\n</FORM>"]. %%----------------------------------------------------------------------%% Function : add_ctx%% Returns : %% Description: %%----------------------------------------------------------------------add_ctx(_Env, [{"node",_NodeStr}, {"context", "root"}, {"id", ""}]) -> ["<BODY BGCOLOR=\"#FFFFFF\"> <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=1> <FONT SIZE=4>You must supply a NameString such as:<BR> See also 'Interoperable Naming Service' in the User's Guide.</FONT>\n </TD></TR></TABLE> <FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-1) VALUE=\"Go Back\">\n</FORM>"];add_ctx(_Env, [{"node",NodeStr}, {"context", "root"}, {"id", Id}]) -> Node = list_to_atom(NodeStr), NS = check(rpc:call(Node, corba, resolve_initial_references, ["NameService"])), Name = check(rpc:call(Node, 'CosNaming_NamingContextExt', to_name, [NS, Id])), check(rpc:call(Node, 'CosNaming_NamingContextExt', bind_new_context, [NS, Name])), ["<BODY BGCOLOR=\"#FFFFFF\"> <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=1> <FONT SIZE=6>Successfully bound the new Context: ", Id, "</FONT>\n </TD></TR></TABLE> <FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-1) VALUE=\"Go Back\">\n</FORM>"];add_ctx(_Env, [{"node",NodeStr}, {"context", Ref}, {"id", Id}]) -> NameStr = Ref ++ "/" ++ Id, Node = list_to_atom(NodeStr), NS = check(rpc:call(Node, corba, resolve_initial_references, ["NameService"])), Name = check(rpc:call(Node, 'CosNaming_NamingContextExt', to_name, [NS, NameStr])), check(rpc:call(Node, 'CosNaming_NamingContextExt', bind_new_context, [NS, Name])), ["<BODY BGCOLOR=\"#FFFFFF\"> <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=1> <FONT SIZE=6>Successfully bound the new Context: ", NameStr, "</FONT>\n </TD></TR></TABLE> <FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-1) VALUE=\"Go Back\">\n</FORM>"]. %%----------------------------------------------------------------------%% Function : delete_obj%% Returns : %% Description: %%----------------------------------------------------------------------delete_obj(_Env, [{"node",NodeStr}, {"context", Ref}, {"action", "unbind"}]) -> Node = list_to_atom(NodeStr), NS = check(rpc:call(Node, corba, resolve_initial_references, ["NameService"])), Name = check(rpc:call(Node, 'CosNaming_NamingContextExt', to_name, [NS, Ref])), check(rpc:call(Node, 'CosNaming_NamingContextExt', unbind, [NS, Name])), ["<BODY BGCOLOR=\"#FFFFFF\"> <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=1> <FONT SIZE=6>Successfully unbound the Object: ", Ref, "</FONT>\n </TD></TR></TABLE> <FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-2) VALUE=\"Go Back\">\n</FORM>"];delete_obj(_Env, [{"node",NodeStr}, {"context", Ref}, {"action", "both"}]) -> Node = list_to_atom(NodeStr), {Obj, NS} = remote_resolve(Node, Ref), check(rpc:call(Node, corba, dispose, [Obj])), Name = check(rpc:call(Node, 'CosNaming_NamingContextExt', to_name, [NS, Ref])), check(rpc:call(Node, 'CosNaming_NamingContextExt', unbind, [NS, Name])), ["<BODY BGCOLOR=\"#FFFFFF\"> <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=1> <FONT SIZE=6>Successfully disposed an unbound the Object: ", Ref, "</FONT>\n </TD></TR></TABLE> <FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-2) VALUE=\"Go Back\">\n</FORM>"]. %%----------------------------------------------------------------------%% Function : nameservice%% Returns : %% Description: %%----------------------------------------------------------------------nameservice(_Env, [{"node",NodeStr}, {"context", "root"}]) -> Node = list_to_atom(NodeStr), is_running(Node, NodeStr), Object = check(rpc:call(Node, corba, resolve_initial_references, ["NameService"])), Prefix = "<TR><TD><A HREF=\"./nameservice?node=" ++ NodeStr ++ "&context=", case catch create_context_list(Node, NodeStr, Prefix, Object, "root") of {ok, Data} -> ["<BODY BGCOLOR=\"#FFFFFF\"> <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=2> <FONT SIZE=6>NameService</FONT>\n </TD></TR><TR BGCOLOR=\"#FFFF00\"><TD ALIGN=\"center\" COLSPAN=2> <FONT SIZE=4>Root Context</FONT>\n </TD></TR>", Data, "<TR><TD><FORM Name=addctx METHOD=\"POST\" ACTION=\"./add_ctx\"> <INPUT TYPE=\"HIDDEN\" NAME=\"node\" VALUE=\"", NodeStr, "\"> <INPUT TYPE=\"HIDDEN\" NAME=\"context\" VALUE=\"root\"> <INPUT TYPE=\"TEXT\" SIZE=\"20\" NAME=\"id\"></TD> <TD><INPUT TYPE=\"SUBMIT\" VALUE=\"New Context\"></TD></FORM></TR></TABLE>"]; Why -> orber:dbg("[~p] orber_web:nameservice(~p, root); Unable to create context list: ~p", [?LINE, NodeStr, Why], ?DEBUG_LEVEL), throw({error, "<BODY BGCOLOR=\"#FFFFFF\">Unable to create a look up the Root Context data"}) end;nameservice(_Env, [{"node",NodeStr}, {"context", Ref}]) -> Node = list_to_atom(NodeStr), {Object, _NS} = remote_resolve(Node, Ref), Prefix = "<TR><TD><A HREF=\"./nameservice?node=" ++ NodeStr ++ "&context="++Ref++"/", case catch create_context_list(Node, NodeStr, Prefix, Object, Ref) of {ok, Data} -> ["<BODY BGCOLOR=\"#FFFFFF\"> <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=2> <FONT SIZE=6>NameService</FONT></TD></TR> <TR BGCOLOR=\"#FFFF00\"><TD ALIGN=\"center\" COLSPAN=2> <FONT SIZE=4>", Ref, "</FONT></TD></TR>", Data, "<TR><TD><FORM Name=addctx METHOD=\"POST\" ACTION=\"./add_ctx\"> <INPUT TYPE=\"HIDDEN\" NAME=\"node\" VALUE=\"", NodeStr, "\"> <INPUT TYPE=\"HIDDEN\" NAME=\"context\" VALUE=\"", Ref, "\"> <INPUT TYPE=\"TEXT\" SIZE=\"20\" NAME=\"id\"></TD> <TD><INPUT TYPE=\"SUBMIT\" VALUE=\"New Context\"></TD></FORM></TR> </TABLE> <FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-1) VALUE=\"Go Back\"></FORM></TD>"]; Why -> orber:dbg("[~p] orber_web:nameservice(~p, ~p); Unable to create context list: ~p", [?LINE, NodeStr, Ref, Why], ?DEBUG_LEVEL), throw({error, ["<BODY BGCOLOR=\"#FFFFFF\">Unable to look up the Context: ", Ref, "<BR><BR>If You just deleted it, use the 'Go Back' button next time."]}) end;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?