00001
00002
00003
00004
00005
00006 #include "fileClose.h"
00007 #include "miscServerFunct.h"
00008 #include "rsGlobalExtern.h"
00009
00010 int
00011 rsFileClose (rsComm_t *rsComm, fileCloseInp_t *fileCloseInp)
00012 {
00013 rodsServerHost_t *rodsServerHost;
00014 int remoteFlag;
00015 int retVal;
00016
00017 remoteFlag = getServerHostByFileInx (fileCloseInp->fileInx,
00018 &rodsServerHost);
00019
00020 if (remoteFlag == LOCAL_HOST) {
00021 retVal = _rsFileClose (rsComm, fileCloseInp);
00022 } else if (remoteFlag == REMOTE_HOST) {
00023 retVal = remoteFileClose (rsComm, fileCloseInp, rodsServerHost);
00024 } else {
00025 if (remoteFlag < 0) {
00026 return (remoteFlag);
00027 } else {
00028 rodsLog (LOG_NOTICE,
00029 "rsFileClose: resolveHost returned unrecognized value %d",
00030 remoteFlag);
00031 return (SYS_UNRECOGNIZED_REMOTE_FLAG);
00032 }
00033 }
00034
00035
00036
00037 freeFileDesc (fileCloseInp->fileInx);
00038
00039 return (retVal);
00040 }
00041
00042 int
00043 remoteFileClose (rsComm_t *rsComm, fileCloseInp_t *fileCloseInp,
00044 rodsServerHost_t *rodsServerHost)
00045 {
00046 int status;
00047 fileCloseInp_t remFileCloseInp;
00048
00049 if (rodsServerHost == NULL) {
00050 rodsLog (LOG_NOTICE,
00051 "remoteFileClose: Invalid rodsServerHost");
00052 return SYS_INVALID_SERVER_HOST;
00053 }
00054
00055 if ((status = svrToSvrConnect (rsComm, rodsServerHost)) < 0) {
00056 return status;
00057 }
00058
00059 memset (&remFileCloseInp, 0, sizeof (remFileCloseInp));
00060 remFileCloseInp.fileInx = convL3descInx (fileCloseInp->fileInx);
00061 status = rcFileClose (rodsServerHost->conn, &remFileCloseInp);
00062
00063 if (status < 0) {
00064 rodsLog (LOG_NOTICE,
00065 "remoteFileClose: rcFileClose failed for %d, status = %d",
00066 remFileCloseInp.fileInx, status);
00067 }
00068
00069 return status;
00070 }
00071
00072 int
00073 _rsFileClose (rsComm_t *rsComm, fileCloseInp_t *fileCloseInp)
00074 {
00075 int status;
00076
00077 status = fileClose (FileDesc[fileCloseInp->fileInx].fileType,
00078 rsComm, FileDesc[fileCloseInp->fileInx].fd);
00079
00080 if (status < 0) {
00081 rodsLog (LOG_NOTICE,
00082 "_rsFileClose: fileClose failed for %d, status = %d",
00083 fileCloseInp->fileInx, status);
00084 return (status);
00085 }
00086
00087 return (status);
00088 }