00001
00002
00003
00004
00005
00006
00007
00008 #include "fileWrite.h"
00009 #include "miscServerFunct.h"
00010 #include "rsGlobalExtern.h"
00011
00012 int
00013 rsFileWrite (rsComm_t *rsComm, fileWriteInp_t *fileWriteInp,
00014 bytesBuf_t *fileWriteInpBBuf)
00015 {
00016 rodsServerHost_t *rodsServerHost;
00017 int remoteFlag;
00018 int retVal;
00019
00020
00021 remoteFlag = getServerHostByFileInx (fileWriteInp->fileInx,
00022 &rodsServerHost);
00023
00024 if (remoteFlag == LOCAL_HOST) {
00025 retVal = _rsFileWrite (rsComm, fileWriteInp, fileWriteInpBBuf);
00026 } else if (remoteFlag == REMOTE_HOST) {
00027 retVal = remoteFileWrite (rsComm, fileWriteInp, fileWriteInpBBuf,
00028 rodsServerHost);
00029 } else {
00030 if (remoteFlag < 0) {
00031 return (remoteFlag);
00032 } else {
00033 rodsLog (LOG_NOTICE,
00034 "rsFileWrite: resolveHost returned unrecognized value %d",
00035 remoteFlag);
00036 return (SYS_UNRECOGNIZED_REMOTE_FLAG);
00037 }
00038 }
00039
00040 if (retVal >= 0) {
00041 FileDesc[fileWriteInp->fileInx].writtenFlag = 1;
00042 }
00043
00044 return (retVal);
00045 }
00046
00047 int
00048 remoteFileWrite (rsComm_t *rsComm, fileWriteInp_t *fileWriteInp,
00049 bytesBuf_t *fileWriteInpBBuf, rodsServerHost_t *rodsServerHost)
00050 {
00051 int retVal;
00052
00053 if (rodsServerHost == NULL) {
00054 rodsLog (LOG_NOTICE,
00055 "remoteFileWrite: Invalid rodsServerHost");
00056 return SYS_INVALID_SERVER_HOST;
00057 }
00058
00059 if ((retVal = svrToSvrConnect (rsComm, rodsServerHost)) < 0) {
00060 return retVal;
00061 }
00062
00063 fileWriteInp->fileInx = convL3descInx (fileWriteInp->fileInx);
00064 retVal = rcFileWrite (rodsServerHost->conn, fileWriteInp,
00065 fileWriteInpBBuf);
00066
00067 if (retVal < 0) {
00068 rodsLog (LOG_NOTICE,
00069 "remoteFileWrite: rcFileWrite failed for %s",
00070 FileDesc[fileWriteInp->fileInx].fileName);
00071 }
00072
00073 return retVal;
00074 }
00075
00076
00077
00078
00079 int
00080 _rsFileWrite (rsComm_t *rsComm, fileWriteInp_t *fileWriteInp,
00081 bytesBuf_t *fileWriteInpBBuf)
00082 {
00083 int retVal;
00084
00085
00086
00087
00088
00089 retVal = fileWrite (FileDesc[fileWriteInp->fileInx].fileType, rsComm,
00090 FileDesc[fileWriteInp->fileInx].fd, fileWriteInpBBuf->buf,
00091 fileWriteInp->len);
00092
00093 if (retVal < 0) {
00094 rodsLog (LOG_NOTICE,
00095 "_rsFileWrite: fileWrite for %s, status = %d",
00096 FileDesc[fileWriteInp->fileInx].fileName, retVal);
00097 return (retVal);
00098 }
00099
00100 return (retVal);
00101 }
00102