00001
00002
00003 #include "structFileDriver.h"
00004 #include "subStructFileRead.h"
00005 #include "miscServerFunct.h"
00006 #include "dataObjOpr.h"
00007
00008 int
00009 rsSubStructFileRead (rsComm_t *rsComm, subStructFileFdOprInp_t *subStructFileReadInp,
00010 bytesBuf_t *subStructFileReadOutBBuf)
00011 {
00012 rodsServerHost_t *rodsServerHost;
00013 int remoteFlag;
00014 int status;
00015
00016 remoteFlag = resolveHost (&subStructFileReadInp->addr, &rodsServerHost);
00017
00018 if (subStructFileReadInp->len > 0) {
00019 if (subStructFileReadOutBBuf->buf == NULL)
00020 subStructFileReadOutBBuf->buf = malloc (subStructFileReadInp->len);
00021 } else {
00022 return (0);
00023 }
00024
00025 if (remoteFlag == LOCAL_HOST) {
00026 status = _rsSubStructFileRead (rsComm, subStructFileReadInp, subStructFileReadOutBBuf);
00027 } else if (remoteFlag == REMOTE_HOST) {
00028 status = remoteSubStructFileRead (rsComm, subStructFileReadInp, subStructFileReadOutBBuf,
00029 rodsServerHost);
00030 } else {
00031 if (remoteFlag < 0) {
00032 return (remoteFlag);
00033 } else {
00034 rodsLog (LOG_NOTICE,
00035 "rsSubStructFileRead: resolveHost returned unrecognized value %d",
00036 remoteFlag);
00037 return (SYS_UNRECOGNIZED_REMOTE_FLAG);
00038 }
00039 }
00040
00041 return (status);
00042 }
00043
00044 int
00045 remoteSubStructFileRead (rsComm_t *rsComm, subStructFileFdOprInp_t *subStructFileReadInp,
00046 bytesBuf_t *subStructFileReadOutBBuf, rodsServerHost_t *rodsServerHost)
00047 {
00048 int status;
00049
00050 if (rodsServerHost == NULL) {
00051 rodsLog (LOG_NOTICE,
00052 "remoteSubStructFileRead: Invalid rodsServerHost");
00053 return SYS_INVALID_SERVER_HOST;
00054 }
00055
00056 if ((status = svrToSvrConnect (rsComm, rodsServerHost)) < 0) {
00057 return status;
00058 }
00059
00060 status = rcSubStructFileRead (rodsServerHost->conn, subStructFileReadInp,
00061 subStructFileReadOutBBuf);
00062
00063 if (status < 0) {
00064 rodsLog (LOG_NOTICE,
00065 "remoteSubStructFileRead: rcFileRead failed for fd %d", subStructFileReadInp->fd);
00066 }
00067
00068 return status;
00069
00070 }
00071
00072 int
00073 _rsSubStructFileRead (rsComm_t *rsComm, subStructFileFdOprInp_t *subStructFileReadInp,
00074 bytesBuf_t *subStructFileReadOutBBuf)
00075 {
00076 int status;
00077
00078 status = subStructFileRead (subStructFileReadInp->type, rsComm,
00079 subStructFileReadInp->fd, subStructFileReadOutBBuf->buf, subStructFileReadInp->len);
00080
00081 if (status > 0) {
00082 subStructFileReadOutBBuf->len = status;
00083 } else {
00084 subStructFileReadOutBBuf->len = 0;
00085 }
00086 return (status);
00087 }
00088