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( rsComm_t *rsComm, fileClosedirInp_t *fileClosedirInp ) {
00080
00081
00082 eirods::collection_object coll_obj( FileDesc[fileClosedirInp->fileInx].fileName, FileDesc[fileClosedirInp->fileInx].rescHier, 0, 0 );
00083 coll_obj.directory_pointer( reinterpret_cast< DIR* >( FileDesc[fileClosedirInp->fileInx].driverDep ) );
00084 eirods::error closedir_err = fileClosedir( rsComm, coll_obj );
00085
00086 if( !closedir_err.ok() ) {
00087 std::stringstream msg;
00088 msg << "fileClosedir failed for [";
00089 msg << FileDesc[fileClosedirInp->fileInx].fileName;
00090 msg << "]";
00091 eirods::error log_err = PASSMSG( msg.str(), closedir_err );
00092 eirods::log( log_err );
00093 }
00094
00095 return closedir_err.code();
00096
00097 }