00001
00002
00003
00004
00005
00006
00007
00008 #include "fileClosedir.h"
00009 #include "miscServerFunct.h"
00010 #include "rsGlobalExtern.h"
00011
00012
00013
00014 #include "eirods_log.h"
00015 #include "eirods_collection_object.h"
00016
00017 int
00018 rsFileClosedir (rsComm_t *rsComm, fileClosedirInp_t *fileClosedirInp)
00019 {
00020 rodsServerHost_t *rodsServerHost;
00021 int remoteFlag;
00022 int retVal;
00023
00024 remoteFlag = getServerHostByFileInx (fileClosedirInp->fileInx,
00025 &rodsServerHost);
00026
00027 if (remoteFlag == LOCAL_HOST) {
00028 retVal = _rsFileClosedir (rsComm, fileClosedirInp);
00029 } else if (remoteFlag == REMOTE_HOST) {
00030 retVal = remoteFileClosedir (rsComm, fileClosedirInp, rodsServerHost);
00031 } else {
00032 if (remoteFlag < 0) {
00033 return (remoteFlag);
00034 } else {
00035 rodsLog (LOG_NOTICE,
00036 "rsFileClosedir: resolveHost returned unrecognized value %d",
00037 remoteFlag);
00038 return (SYS_UNRECOGNIZED_REMOTE_FLAG);
00039 }
00040 }
00041
00042
00043
00044 freeFileDesc (fileClosedirInp->fileInx);
00045
00046 return (retVal);
00047 }
00048
00049 int
00050 remoteFileClosedir (rsComm_t *rsComm, fileClosedirInp_t *fileClosedirInp,
00051 rodsServerHost_t *rodsServerHost)
00052 {
00053 int status;
00054
00055 if (rodsServerHost == NULL) {
00056 rodsLog (LOG_NOTICE,
00057 "remoteFileClosedir: Invalid rodsServerHost");
00058 return SYS_INVALID_SERVER_HOST;
00059 }
00060
00061 if ((status = svrToSvrConnect (rsComm, rodsServerHost)) < 0) {
00062 return status;
00063 }
00064
00065
00066 status = rcFileClosedir (rodsServerHost->conn, fileClosedirInp);
00067
00068 if (status < 0) {
00069 rodsLog (LOG_NOTICE,
00070 "remoteFileClosedir: rcFileClosedir failed for %d, status = %d",
00071 fileClosedirInp->fileInx, status);
00072 }
00073
00074 return status;
00075 }
00076
00077
00078
00079 int _rsFileClosedir(
00080 rsComm_t* _comm,
00081 fileClosedirInp_t* _closedir_inp ) {
00082
00083
00084 eirods::collection_object_ptr coll_obj(
00085 new eirods::collection_object(
00086 FileDesc[_closedir_inp->fileInx].fileName,
00087 FileDesc[_closedir_inp->fileInx].rescHier,
00088 0, 0 ) );
00089 coll_obj->directory_pointer( reinterpret_cast< DIR* >( FileDesc[_closedir_inp->fileInx].driverDep ) );
00090 eirods::error closedir_err = fileClosedir( _comm, coll_obj );
00091
00092 if( !closedir_err.ok() ) {
00093 std::stringstream msg;
00094 msg << "fileClosedir failed for [";
00095 msg << FileDesc[_closedir_inp->fileInx].fileName;
00096 msg << "]";
00097 eirods::error log_err = PASSMSG( msg.str(), closedir_err );
00098 eirods::log( log_err );
00099 }
00100
00101 return closedir_err.code();
00102
00103 }