%%---------------------------------------------------------------------- %% %% %CopyrightBegin% %% %% Copyright Ericsson AB 2000-2009. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. %% You may obtain a copy of the License at %% %% http://www.apache.org/licenses/LICENSE-2.0 %% %% Unless required by applicable law or agreed to in writing, software %% distributed under the License is distributed on an "AS IS" BASIS, %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %% See the License for the specific language governing permissions and %% limitations under the License. %% %% %CopyrightEnd% %% %% %%---------------------------------------------------------------------- %% 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 %%======================================================================