00001
00002
00003
00004
00005
00006 #include "getRemoteZoneResc.h"
00007 #include "rodsLog.h"
00008 #include "objMetaOpr.h"
00009 #include "dataObjOpr.h"
00010 #include "physPath.h"
00011 #include "regDataObj.h"
00012 #include "rcGlobalExtern.h"
00013 #include "reGlobalsExtern.h"
00014 #include "reDefines.h"
00015 #include "dataObjCreate.h"
00016 #include "dataObjOpen.h"
00017
00018 int
00019 rsGetRemoteZoneResc (rsComm_t *rsComm, dataObjInp_t *dataObjInp,
00020 rodsHostAddr_t **rescAddr)
00021 {
00022 char *remoteOprType;
00023 int status;
00024 rescInfo_t *rescInfo = NULL;
00025 rescGrpInfo_t *myRescGrpInfo = NULL;
00026 dataObjInfo_t *dataObjInfoHead = NULL;
00027
00028 *rescAddr = NULL;
00029 if ((remoteOprType =
00030 getValByKey (&dataObjInp->condInput, REMOTE_ZONE_OPR_KW)) == NULL) {
00031 rodsLog (LOG_ERROR,
00032 "rsGetRemoteZoneResc: EMOTE_ZONE_OPR_KW not defined for %s",
00033 dataObjInp->objPath);
00034 return (USER_BAD_KEYWORD_ERR);
00035 }
00036
00037 if (strcmp (remoteOprType, REMOTE_CREATE) == 0) {
00038 status = getRescGrpForCreate (rsComm, dataObjInp, &myRescGrpInfo);
00039 if (status < 0 || NULL == myRescGrpInfo ) return status;
00040 rescInfo = myRescGrpInfo->rescInfo;
00041 } else if (strcmp (remoteOprType, REMOTE_OPEN) == 0) {
00042 status = getDataObjInfoIncSpecColl (rsComm, dataObjInp,
00043 &dataObjInfoHead);
00044 if (status < 0) {
00045
00046 status = getRescGrpForCreate (rsComm, dataObjInp, &myRescGrpInfo);
00047 if (status < 0 || NULL == myRescGrpInfo ) return status;
00048 rescInfo = myRescGrpInfo->rescInfo;
00049 } else {
00050 int writeFlag;
00051
00052 writeFlag = getWriteFlag (dataObjInp->openFlags);
00053 status = sortObjInfoForOpen (rsComm, &dataObjInfoHead,
00054 &dataObjInp->condInput, writeFlag);
00055 if (status < 0) return status;
00056 status = applyPreprocRuleForOpen (rsComm, dataObjInp,
00057 &dataObjInfoHead);
00058 if (status < 0 || NULL == dataObjInfoHead ) {
00059 freeAllDataObjInfo (dataObjInfoHead);
00060 return status;
00061 } else {
00062 rescInfo = dataObjInfoHead->rescInfo;
00063 freeAllDataObjInfo (dataObjInfoHead);
00064 }
00065 }
00066 } else {
00067 rodsLog (LOG_ERROR,
00068 "rsGetRemoteZoneResc: bad EMOTE_ZONE_OPR_KW %s for %s",
00069 remoteOprType, dataObjInp->objPath);
00070 return (USER_BAD_KEYWORD_ERR);
00071 }
00072 *rescAddr = (rodsHostAddr_t*)malloc (sizeof (rodsHostAddr_t));
00073 bzero (*rescAddr, sizeof (rodsHostAddr_t));
00074 rstrcpy ((*rescAddr)->hostAddr, rescInfo->rescLoc, NAME_LEN);
00075 rstrcpy ((*rescAddr)->zoneName, ZoneInfoHead->zoneName, NAME_LEN);
00076 if (myRescGrpInfo != NULL) freeAllRescGrpInfo (myRescGrpInfo);
00077
00078 return (0);
00079 }
00080