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