orber_web.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 863 行 · 第 1/3 页
ERL
863 行
nameservice(_Env, [{"node",NodeStr}, {"context", Ref}, {"object", Obj}]) -> case catch create_object_data(NodeStr, Ref, Obj) of {ok, Data} -> Data; Why -> orber:dbg("[~p] orber_web:nameservice(~p, ~p, ~p); Unable to create data for object: ~p", [?LINE, NodeStr, Ref, Obj, Why], ?DEBUG_LEVEL), throw({error, ["<BODY BGCOLOR=\"#FFFFFF\">Unable to look up the Object stored as: ", Ref, "<BR><BR>If You just unbound it, use the 'Go Back' button next time."]}) end.create_context_list(Node, NodeStr, Prefix, Object, Ref) -> case check(rpc:call(Node, 'CosNaming_NamingContext', list, [Object, 100])) of {ok, [], BI} when Ref == "root" -> catch rpc:call(Node, 'CosNaming_BindingIterator', destroy, [BI]), {ok, "<TR><TD ALIGN=\"center\" COLSPAN=2><FONT SIZE=3><B>EMPTY<B></FONT></TD></TR>"}; {ok, [], BI} -> catch rpc:call(Node, 'CosNaming_BindingIterator', destroy, [BI]), {ok, "<TR><TD ALIGN=\"center\"><FONT SIZE=3><B>EMPTY<B></FONT></TD> <TD ALIGN=\"center\"><FORM Name=deletectx METHOD=\"POST\" ACTION=\"./delete_ctx\"> <INPUT TYPE=\"HIDDEN\" NAME=\"node\" VALUE=\"" ++ NodeStr ++ "\"> <INPUT TYPE=\"HIDDEN\" NAME=\"context\" VALUE=\"" ++ Ref ++ "\"> <INPUT TYPE=\"SUBMIT\" VALUE=\"Delete Context\"></FORM></TD></TR>"}; {ok, BL, BI} when length(BL) < 100 -> catch rpc:call(Node, 'CosNaming_BindingIterator', destroy, [BI]), {ok, convert_contexts(BL, [], Prefix, Object, Node)}; {ok, BL, BI} -> Data = convert_contexts(BL, [], Prefix, Object, Node), {ok, create_context_list_helper(Node, BI, Data, Object, Prefix)} end.create_context_list_helper(Node, BI, Acc, Ctx, Prefix) -> case check(rpc:call(Node, 'CosNaming_BindingIterator', next_n, [BI, 100])) of {true, BL} -> NewAcc = convert_contexts(BL, Acc, Prefix, Ctx, Node), create_context_list_helper(Node, BI, NewAcc, Ctx, Prefix); {false, BL} -> catch rpc:call(Node, 'CosNaming_BindingIterator', destroy, [BI]), convert_contexts(BL, Acc, Prefix, Ctx, Node) end.convert_contexts([], Acc, _Prefix, _Ctx, _Node) -> Acc;convert_contexts([#'CosNaming_Binding'{binding_name = Name, binding_type = ncontext}|T], Acc, Prefix, Ctx, Node) -> NameStr = check(rpc:call(Node, 'CosNaming_NamingContextExt', to_string, [Ctx, Name])), convert_contexts(T, [Prefix, NameStr, "\" TARGET=main><B>", NameStr, "</B></A></TD><TD><B>ncontext</B></TD></TR>"|Acc], Prefix, Ctx, Node);convert_contexts([#'CosNaming_Binding'{binding_name = Name, binding_type = nobject}|T], Acc, Prefix, Ctx, Node) -> NameStr = check(rpc:call(Node, 'CosNaming_NamingContextExt', to_string, [Ctx, Name])), convert_contexts(T, [Prefix, NameStr, "&object=o \" TARGET=main><B>", NameStr, "</B></A></TD><TD><B>nobject</B></A></TD></TR>"|Acc], Prefix, Ctx, Node).create_object_data(NodeStr, Ref, _Obj) -> Node = list_to_atom(NodeStr), {Object, _NS} = remote_resolve(Node, Ref), LongIORStr = check(rpc:call(Node, corba, object_to_string, [Object])), IFRId = check(rpc:call(Node, iop_ior, get_typeID, [Object])), Exists = check(rpc:call(Node, corba_object, non_existent, [Object])), IORStr = split_IOR(1, LongIORStr, []), {Data, External} = case rpc:call(Node, iop_ior, get_key, [Object]) of {external, {Host, Port, _OK, _, _, #host_data{version = {Ma, Mi}}}} -> {[{"IFR Id", IFRId}, {"Stored As", Ref}, {"External Object", "true"}, {"Non Existent", atom_to_list(Exists)}, {"Host", Host}, {"Port", integer_to_list(Port)}, {"IIOP Version", integer_to_list(Ma) ++"."++ integer_to_list(Mi)}, {"IOR String", IORStr}], true}; {'internal', _Key, _, _, _} -> Pid = check(rpc:call(Node, corba, get_pid, [Object])), Interface = check(rpc:call(Node, corba, request_from_iiop, [Object, oe_get_interface, false, false, false, []])), InterfaceData = parse_interface(Interface, []), {[{"IFR Id", IFRId}, {"Stored As", Ref}, {"External Object", "false"}, {"Non Existent", atom_to_list(Exists)}, {"Pid", pid_to_list(Pid)}, {"IOR String", IORStr}|InterfaceData], false}; {'internal_registered', {pseudo, Key}, _, _, _} -> Interface = check(rpc:call(Node, corba, request_from_iiop, [Object, oe_get_interface, false, false, false, []])), InterfaceData = parse_interface(Interface, []), {[{"IFR Id", IFRId}, {"Stored As", Ref}, {"External Object", "false"}, {"Non Existent", atom_to_list(Exists)}, {"Pseudo Object", atom_to_list(Key)}, {"IOR", IORStr}|InterfaceData], false}; {'internal_registered', Key, _, _, _} -> Pid = check(rpc:call(Node, corba, get_pid, [Object])), Interface = check(rpc:call(Node, corba, request_from_iiop, [Object, oe_get_interface, false, false, false, []])), InterfaceData = parse_interface(Interface, []), {[{"IFR Id", IFRId}, {"Stored As", Ref}, {"External Object", "false"}, {"Non Existent", atom_to_list(Exists)}, {"Locally Registered", atom_to_list(Key)}, {"Pid", pid_to_list(Pid)}, {"IOR String", IORStr}|InterfaceData], false} end, Buttons = case {Exists, External} of {false, false} -> ["<TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\"> <TD><FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-1) VALUE=\"Go Back\"></FORM></TD> <TD ALIGN=\"center\"><FORM Name=unbindobj METHOD=\"POST\" ACTION=\"./delete_obj\"> <INPUT TYPE=\"HIDDEN\" NAME=\"node\" VALUE=\"", NodeStr, "\"> <INPUT TYPE=\"HIDDEN\" NAME=\"context\" VALUE=\"", Ref, "\"> <INPUT TYPE=\"HIDDEN\" NAME=\"action\" VALUE=\"unbind\"> <INPUT TYPE=\"SUBMIT\" VALUE=\"Unbind\"></FORM></TD> <TD ALIGN=\"center\"><FORM Name=unbinddeletobj METHOD=\"POST\" ACTION=\"./delete_obj\"> <INPUT TYPE=\"HIDDEN\" NAME=\"node\" VALUE=\"", NodeStr, "\"> <INPUT TYPE=\"HIDDEN\" NAME=\"context\" VALUE=\"", Ref, "\"> <INPUT TYPE=\"HIDDEN\" NAME=\"action\" VALUE=\"both\"> <INPUT TYPE=\"SUBMIT\" VALUE=\"Unbind & Dispose\"></FORM></TD></TR></TABLE>"]; _ -> ["<TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\"> <TD><FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-1) VALUE=\"Go Back\"></FORM></TD> <TD ALIGN=\"center\"><FORM Name=unbindobj METHOD=\"POST\" ACTION=\"./delete_obj\"> <INPUT TYPE=\"HIDDEN\" NAME=\"node\" VALUE=\"", NodeStr, "\"> <INPUT TYPE=\"HIDDEN\" NAME=\"context\" VALUE=\"", Ref, "\"> <INPUT TYPE=\"HIDDEN\" NAME=\"action\" VALUE=\"unbind\"> <INPUT TYPE=\"SUBMIT\" VALUE=\"Unbind\"></FORM></TD></TR></TABLE>"] end, {ok, ["<BODY BGCOLOR=\"#FFFFFF\">", simple_table("2", "NameService", [{"Key", "Value"}|Data]), Buttons]}.parse_interface([], [{_, Op}|Acc]) -> [{"Operations", Op}|Acc];parse_interface([], []) -> [{"Operations", "-"}];parse_interface([{Operation,{_,Args,_}}|T], Acc) -> parse_interface(T, [{"", Operation ++ "/" ++ integer_to_list(length(Args))}|Acc]).split_IOR(_, [], Acc) -> lists:reverse(Acc);split_IOR(50, Str, Acc) -> split_IOR(1, Str, ["<BR>"|Acc]);split_IOR(N, [H|T], Acc) -> split_IOR(N+1, T, [H|Acc]).%%----------------------------------------------------------------------%% Function : configure%% Returns : %% Description: %%----------------------------------------------------------------------configure(_Env, [{"node",NodeStr}, {"data", DataStr}]) -> Node = list_to_atom(NodeStr), Data = parse_data(DataStr), case catch rpc:call(Node, orber, multi_configure, [Data]) of ok -> "<BODY BGCOLOR=\"#FFFFFF\">Configuration successfull."; Why -> orber:dbg("[~p] orber_web:configure(~p, ~p); Unable to change configuration due to: ~p", [?LINE, NodeStr, DataStr, Why], ?DEBUG_LEVEL), "<BODY BGCOLOR=\"#FFFFFF\">Unable to change the configuration.<BR> Check the spelling and/or if it is possible to update all the keys if Orber is started." end.%%----------------------------------------------------------------------%% Function : ifr_select%% Returns : %% Description: %%----------------------------------------------------------------------ifr_select(_Env, [{"node",NodeStr}]) -> Node = list_to_atom(NodeStr), is_running(Node, NodeStr), ["<BODY BGCOLOR=\"#FFFFFF\"> <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=1> <FONT SIZE=6>Interface Repository</FONT> </TD></TR>", create_ifr_table(?IFR_DATA, NodeStr, []), "</TABLE>"].%%----------------------------------------------------------------------%% Function : ifr_data%% Returns : %% Description: %%----------------------------------------------------------------------ifr_data(_Env, [{"node",NodeStr}, {"table", TableStr}]) -> Node = list_to_atom(NodeStr), Table = list_to_atom(TableStr), WildPattern = get_wild_pattern(Table, Node), Records = check(rpc:call(Node, mnesia, dirty_match_object, [WildPattern])), Data = extract_ids(Records, []), ["<BODY BGCOLOR=\"#FFFFFF\">", simple_table("1", "Interface Repository", [TableStr|Data]), "<FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-1) VALUE=\"Go Back\"></FORM>"].extract_ids([], Acc) -> lists:sort(Acc);extract_ids([#ir_ModuleDef{id=Id}|T], Acc) -> extract_ids(T, [Id|Acc]);extract_ids([#ir_InterfaceDef{id=Id}|T], Acc) -> extract_ids(T, [Id|Acc]);extract_ids([#ir_StructDef{id=Id}|T], Acc) -> extract_ids(T, [Id|Acc]);extract_ids([#ir_UnionDef{id=Id}|T], Acc) -> extract_ids(T, [Id|Acc]);extract_ids([#ir_ExceptionDef{id=Id}|T], Acc) -> extract_ids(T, [Id|Acc]);extract_ids([#ir_ConstantDef{id=Id}|T], Acc) -> extract_ids(T, [Id|Acc]);extract_ids([#ir_EnumDef{id=Id}|T], Acc) -> extract_ids(T, [Id|Acc]);extract_ids([#ir_AliasDef{id=Id}|T], Acc) -> extract_ids(T, [Id|Acc]);extract_ids([#ir_AttributeDef{id=Id}|T], Acc) -> extract_ids(T, [Id|Acc]);extract_ids([#ir_OperationDef{id=Id}|T], Acc) -> extract_ids(T, [Id|Acc]);extract_ids([#ir_Contained{id=Id}|T], Acc) -> extract_ids(T, [Id|Acc]);extract_ids([#ir_TypedefDef{id=Id}|T], Acc) -> extract_ids(T, [Id|Acc]).get_wild_pattern(ir_ModuleDef, Node) -> P = check(rpc:call(Node, mnesia, table_info, [ir_ModuleDef, wild_pattern])), P#ir_ModuleDef{id='$1'};get_wild_pattern(ir_InterfaceDef, Node) -> P = check(rpc:call(Node, mnesia, table_info, [ir_InterfaceDef, wild_pattern])), P#ir_InterfaceDef{id='$1'};get_wild_pattern(ir_StructDef, Node) -> P = check(rpc:call(Node, mnesia, table_info, [ir_StructDef, wild_pattern])), P#ir_StructDef{id='$1'};get_wild_pattern(ir_UnionDef, Node) -> P = check(rpc:call(Node, mnesia, table_info, [ir_UnionDef, wild_pattern])), P#ir_UnionDef{id='$1'};get_wild_pattern(ir_ExceptionDef, Node) -> P = check(rpc:call(Node, mnesia, table_info, [ir_ExceptionDef, wild_pattern])), P#ir_ExceptionDef{id='$1'};get_wild_pattern(ir_ConstantDef, Node) -> P = check(rpc:call(Node, mnesia, table_info, [ir_ConstantDef, wild_pattern])), P#ir_ConstantDef{id='$1'};get_wild_pattern(ir_EnumDef, Node) -> P = check(rpc:call(Node, mnesia, table_info, [ir_EnumDef, wild_pattern])), P#ir_EnumDef{id='$1'};get_wild_pattern(ir_AliasDef, Node) -> P = check(rpc:call(Node, mnesia, table_info, [ir_AliasDef, wild_pattern])), P#ir_AliasDef{id='$1'};get_wild_pattern(ir_AttributeDef, Node) -> P = check(rpc:call(Node, mnesia, table_info, [ir_AttributeDef, wild_pattern])), P#ir_AttributeDef{id='$1'};get_wild_pattern(ir_OperationDef, Node) -> P = check(rpc:call(Node, mnesia, table_info, [ir_OperationDef, wild_pattern])), P#ir_OperationDef{id='$1'};get_wild_pattern(ir_Contained, Node) -> P = check(rpc:call(Node, mnesia, table_info, [ir_Contained, wild_pattern])), P#ir_Contained{id='$1'};get_wild_pattern(ir_TypedefDef, Node) -> P = check(rpc:call(Node, mnesia, table_info, [ir_TypedefDef, wild_pattern])), P#ir_TypedefDef{id='$1'}.create_ifr_table([], _Node, Result) -> lists:append(lists:reverse(Result));create_ifr_table([{Table,Desc}|Rest], Node, Result) -> create_ifr_table(Rest, Node, ["<TR><TD><A HREF=\"./ifr_data?node=" ++ Node ++ "&table="++Table++"\" TARGET=main><B>" ++ Desc ++"</B></A></TD></TR>"|Result]).%%----------------------------------------------------------------------%% Function : info%% Returns : %% Description: %%----------------------------------------------------------------------info(_Env, [{"node",NodeStr}]) -> Node = list_to_atom(NodeStr), is_running(Node, NodeStr), Data = create_info_data(?INFO_DATA, Node, []), ["<BODY BGCOLOR=\"#FFFFFF\">", simple_table("2", "Configuration", [{"Key", "Value"}|Data], ["<TR><TD><FORM METHOD=\"POST\" ACTION=\"./configure\"> <INPUT TYPE=\"HIDDEN\" NAME=\"node\" VALUE=\"", NodeStr, "\"> <INPUT TYPE=\"TEXT\" SIZE=\"35\" NAME=\"data\" VALUE=\"[{Key, Value}]\"> </TD><TD><INPUT TYPE=\"SUBMIT\" VALUE=\"Change it\"></TD></FORM></TR>"])].
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?