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