cosfiletransfer_virtualfilesystem_impl.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 215 行
ERL
215 行
%%----------------------------------------------------------------------%% ``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 : CosFileTransfer_VirtualFileSystem_impl.erl%% Description : %%%% Created : 12 Sept 2000%%-----------------------------------------------------------------------module('CosFileTransfer_VirtualFileSystem_impl').%%----------------------------------------------------------------------%% Include files%%-----------------------------------------------------------------------include_lib("orber/include/corba.hrl").-include_lib("orber/src/orber_iiop.hrl").-include_lib("cosFileTransfer/include/CosFileTransfer.hrl").-include("cosFileTransferApp.hrl").%%----------------------------------------------------------------------%% External exports%%-----------------------------------------------------------------------export([init/1, terminate/2, code_change/3, handle_info/2]).%% Interface functions-export(['_get_file_system_type'/2, '_get_supported_content_types'/2, login/5]).%%----------------------------------------------------------------------%% Internal exports%%-----------------------------------------------------------------------export([]).%%----------------------------------------------------------------------%% Records%%-----------------------------------------------------------------------record(state, {type, content, host, port, protocol, timeout, module}).%%----------------------------------------------------------------------%% Macros%%-----------------------------------------------------------------------define(create_InitState(T, C, H, P, Pr, TO), #state{type=T, content=C, host=H, port=P, protocol=Pr, timeout=TO}).-define(create_NativeInitState(T, C, H, P, Pr, TO, M), #state{type=T, content=C, host=H, port=P, protocol=Pr, timeout=TO, module=M}).-define(get_Type(S), S#state.type).-define(get_Content(S), S#state.content).-define(get_Host(S), S#state.host).-define(get_Port(S), S#state.port).-define(get_StartDir(S), S#state.startdir).-define(get_Module(S), S#state.module).-define(get_Protocol(S), S#state.protocol).-define(get_Timeout(S), S#state.timeout).-define(is_FTP(S), S#state.type == 'FTP').-define(is_FTAM(S), S#state.type == 'FTAM').-define(is_NATIVE(S), S#state.type == 'NATIVE').%%======================================================================%% External functions%%======================================================================%%----------------------------------------------------------------------%% Function : init/1%% Returns : {ok, State} |%% {ok, State, Timeout} |%% ignore |%% {stop, Reason}%% Description: Initiates the server%%----------------------------------------------------------------------init([{Type, Mod}, Content, Host, Port, Options]) -> Prot = cosFileTransferApp:get_option(protocol, Options, ?DEFAULT_CONFIG), Time = timer:seconds(cosFileTransferApp:get_option(connect_timeout, Options, ?DEFAULT_CONFIG)), {ok, ?create_NativeInitState(Type, Content, Host, Port, Prot, Time, Mod)};init([Type, Content, Host, Port, Options]) -> Prot = cosFileTransferApp:get_option(protocol, Options, ?DEFAULT_CONFIG), Time = timer:seconds(cosFileTransferApp:get_option(connect_timeout, Options, ?DEFAULT_CONFIG)), {ok, ?create_InitState(Type, Content, Host, Port, Prot, Time)}.%%----------------------------------------------------------------------%% Function : terminate/2%% Returns : any (ignored by gen_server)%% Description: Shutdown the server%%----------------------------------------------------------------------terminate(_Reason, _State) -> ok.%%----------------------------------------------------------------------%% Function : code_change/3%% Returns : {ok, NewState}%% Description: Convert process state when code is changed%%----------------------------------------------------------------------code_change(_OldVsn, State, _Extra) -> {ok, State}.%%---------------------------------------------------------------------%%% function : handle_info/2%% Arguments: %% Returns : %% Effect : %%----------------------------------------------------------------------handle_info(_Info, State) -> {noreply, State}.%%======================================================================%% CosFileTransfer::VirtualFileSystem%%======================================================================%%---------------------------------------------------------------------%%% Function : '_get_file_system_type'%% Arguments : -%% Returns : CosFileTransfer::NativeFileSystemType, i.e., 'FTP', 'FTAM',%% or 'NATIVE'. Currently only 'FTP' is allowed.%% Description: %%----------------------------------------------------------------------'_get_file_system_type'(_OE_This, State) -> {reply, ?get_Type(State), State}.%%---------------------------------------------------------------------%%% Function : '_get_supported_content_types'%% Arguments : %% Returns : %% Description: %%----------------------------------------------------------------------'_get_supported_content_types'(_OE_This, State) -> {reply, ?get_Content(State), State}.%%----------------------------------------------------------------------%% Function : login%% Arguments : User - string()%% Password - string()%% Account - string()%% Returns : FileTransferSession object and Directory object (out-type).%% Description: %%----------------------------------------------------------------------login(_OE_This, State, User, Password, Account) when ?is_FTP(State) -> case catch 'CosFileTransfer_FileTransferSession': oe_create(['FTP', ?get_Host(State), ?get_Port(State), User, Password, Account, ?get_Protocol(State), ?get_Timeout(State)], [{sup_child, true}]) of {ok, _Pid, FTS} -> Dir = 'CosFileTransfer_FileTransferSession': oe_orber_create_directory_current(FTS), {reply, {FTS, Dir}, State}; What -> orber:debug_level_print("[~p] CosFileTransfer_VirtualFileSystem:login(~p ~p ~p ~p);Unable to create a FileTransferSession: ~p", [?LINE, ?get_Host(State), ?get_Port(State), User, ?get_Protocol(State), What], ?DEBUG_LEVEL), corba:raise(#'CosFileTransfer_SessionException'{reason="Failed creating a FTS"}) end;login(_OE_This, State, User, Password, Account) when ?is_NATIVE(State) -> case catch 'CosFileTransfer_FileTransferSession': oe_create([{'NATIVE', ?get_Module(State)}, ?get_Host(State), ?get_Port(State), User, Password, Account, ?get_Protocol(State), ?get_Timeout(State)], [{sup_child, true}]) of {ok, _Pid, FTS} -> Dir = 'CosFileTransfer_FileTransferSession': oe_orber_create_directory_current(FTS), {reply, {FTS, Dir}, State}; What -> orber:debug_level_print("[~p] CosFileTransfer_VirtualFileSystem:login(~p ~p ~p ~p);Unable to create a FileTransferSession: ~p", [?LINE, ?get_Host(State), ?get_Port(State), User, ?get_Protocol(State), What], ?DEBUG_LEVEL), corba:raise(#'CosFileTransfer_SessionException'{reason="Failed creating a FTS"}) end.%%======================================================================%% Internal functions%%====================================================================== %%======================================================================%% END OF MODULE%%======================================================================
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?