00001
00002
00003
00004
00005
00006 #include "dataGet.h"
00007 #include "miscServerFunct.h"
00008 #include "rsGlobalExtern.h"
00009 #include "rcGlobalExtern.h"
00010
00011
00012
00013
00014
00015 int
00016 rsDataGet (rsComm_t *rsComm, dataOprInp_t *dataOprInp,
00017 portalOprOut_t **portalOprOut)
00018 {
00019 int status;
00020 int remoteFlag;
00021 int l3descInx;
00022 rodsServerHost_t *rodsServerHost;
00023
00024 l3descInx = dataOprInp->srcL3descInx;
00025
00026 if (getValByKey (&dataOprInp->condInput, EXEC_LOCALLY_KW) != NULL) {
00027 remoteFlag = LOCAL_HOST;
00028 } else {
00029 rodsServerHost = FileDesc[l3descInx].rodsServerHost;
00030 if (rodsServerHost == NULL) {
00031 rodsLog (LOG_NOTICE, "rsDataGet: NULL rodsServerHost");
00032 return (SYS_INTERNAL_NULL_INPUT_ERR);
00033 }
00034 remoteFlag = rodsServerHost->localFlag;
00035 }
00036
00037 if (remoteFlag == LOCAL_HOST) {
00038 status = _rsDataGet (rsComm, dataOprInp, portalOprOut);
00039 } else {
00040 addKeyVal (&dataOprInp->condInput, EXEC_LOCALLY_KW, "");
00041 status = remoteDataGet (rsComm, dataOprInp, portalOprOut,
00042 rodsServerHost);
00043 clearKeyVal (&dataOprInp->condInput);
00044 }
00045
00046
00047 return (status);
00048 }
00049
00050 int
00051 _rsDataGet (rsComm_t *rsComm, dataOprInp_t *dataOprInp,
00052 portalOprOut_t **portalOprOut)
00053 {
00054 int status;
00055
00056 status = setupSrvPortalForParaOpr (rsComm, dataOprInp, GET_OPR,
00057 portalOprOut);
00058
00059 return status;
00060 #if 0
00061 portalOprOut_t *myDataObjGetOut;
00062 int portalSock;
00063 int proto;
00064
00065 #ifdef RBUDP_TRANSFER
00066 if (getValByKey (&dataOprInp->condInput, RBUDP_TRANSFER_KW) != NULL) {
00067 proto = SOCK_DGRAM;
00068 } else {
00069 proto = SOCK_STREAM;
00070 }
00071 #else
00072 proto = SOCK_STREAM;
00073 #endif
00074
00075 myDataObjGetOut = (portalOprOut_t *) malloc (sizeof (portalOprOut_t));
00076 memset (myDataObjGetOut, 0, sizeof (portalOprOut_t));
00077
00078 *portalOprOut = myDataObjGetOut;
00079
00080 if (getValByKey (&dataOprInp->condInput, STREAMING_KW) != NULL ||
00081 proto == SOCK_DGRAM) {
00082
00083 myDataObjGetOut->numThreads = 1;
00084 } else {
00085 myDataObjGetOut->numThreads =
00086 myDataObjGetOut->numThreads = getNumThreads (rsComm,
00087 dataOprInp->dataSize, dataOprInp->numThreads,
00088 &dataOprInp->condInput);
00089 }
00090
00091
00092 if (myDataObjGetOut->numThreads == 0) {
00093 return 0;
00094 } else {
00095 portalOpr_t *myPortalOpr;
00096
00097
00098 portalSock = createSrvPortal (rsComm, &myDataObjGetOut->portList,
00099 proto);
00100 if (portalSock < 0) {
00101 rodsLog (LOG_NOTICE,
00102 "_rsDataGet: createSrvPortal error, ststus = %d", portalSock);
00103 myDataObjGetOut->status = portalSock;
00104 return portalSock;
00105 }
00106 myPortalOpr = rsComm->portalOpr =
00107 (portalOpr_t *) malloc (sizeof (portalOpr_t));
00108 myPortalOpr->oprType = GET_OPR;
00109 myPortalOpr->portList = myDataObjGetOut->portList;
00110 myPortalOpr->dataOprInp = *dataOprInp;
00111 memset (&dataOprInp->condInput, 0, sizeof (dataOprInp->condInput));
00112 myPortalOpr->dataOprInp.numThreads = myDataObjGetOut->numThreads;
00113 }
00114 return (0);
00115 #endif
00116 }
00117
00118 int
00119 remoteDataGet (rsComm_t *rsComm, dataOprInp_t *dataOprInp,
00120 portalOprOut_t **portalOprOut, rodsServerHost_t *rodsServerHost)
00121 {
00122 int status;
00123
00124 if (rodsServerHost == NULL) {
00125 rodsLog (LOG_NOTICE,
00126 "remoteDataGet: Invalid rodsServerHost");
00127 return SYS_INVALID_SERVER_HOST;
00128 }
00129
00130 if ((status = svrToSvrConnect (rsComm, rodsServerHost)) < 0) {
00131 return status;
00132 }
00133
00134 dataOprInp->srcL3descInx = convL3descInx (dataOprInp->srcL3descInx);
00135 status = rcDataGet (rodsServerHost->conn, dataOprInp, portalOprOut);
00136
00137 return (status);
00138 }
00139