00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "rsGlobalExtern.h"
00010 #include "reGlobalsExtern.h"
00011 #include "msoFileDriver.h"
00012
00013 int
00014 msoFileUnlink (rsComm_t *rsComm, char *filename)
00015 {
00016 return(0);
00017
00018 }
00019
00020 int
00021 msoFileStat (rsComm_t *rsComm, char *filename, struct stat *statbuf)
00022 {
00023
00024
00025
00026 statbuf->st_mode = S_IFREG;
00027 statbuf->st_nlink = 1;
00028 statbuf->st_uid = getuid ();
00029 statbuf->st_gid = getgid ();
00030 statbuf->st_atime = statbuf->st_mtime = statbuf->st_ctime = time(0);
00031 statbuf->st_size = UNKNOWN_FILE_SZ;
00032
00033 return 0;
00034 }
00035
00036
00037 rodsLong_t
00038 msoFileGetFsFreeSpace (rsComm_t *rsComm, char *path, int flag)
00039 {
00040 return(LARGE_SPACE);
00041 }
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 int
00052 msoStageToCache (rsComm_t *rsComm, fileDriverType_t cacheFileType,
00053 int mode, int flags, char *msoObjName,
00054 char *cacheFilename, rodsLong_t dataSize,
00055 keyValPair_t *condInput)
00056 {
00057 char *myMSICall;
00058 char *t;
00059 int i;
00060 ruleExecInfo_t rei2;
00061 msParamArray_t msParamArray;
00062 char callCode[100];
00063
00064 if ((t = strstr(msoObjName, ":")) == NULL) {
00065 return(MICRO_SERVICE_OBJECT_TYPE_UNDEFINED);
00066 }
00067 *t = '\0';
00068 sprintf(callCode, "%s", msoObjName+2);
00069 *t = ':';
00070 myMSICall = (char *) malloc(strlen(msoObjName) + strlen(cacheFilename) + 200);
00071 sprintf(myMSICall, "msiobjget_%s(\"%s\",\"%i\",\"%i\",\"%s\")",callCode,msoObjName+2,mode,flags,cacheFilename);
00072
00073
00074
00075 memset ((char*)&rei2, 0, sizeof (ruleExecInfo_t));
00076 memset ((char*)&msParamArray, 0, sizeof(msParamArray_t));
00077
00078
00079 rei2.rsComm = rsComm;
00080 if (rsComm != NULL) {
00081 rei2.uoic = &rsComm->clientUser;
00082 rei2.uoip = &rsComm->proxyUser;
00083 }
00084
00085 i = applyRule(myMSICall, &msParamArray, &rei2, NO_SAVE_REI);
00086
00087
00088 if (i < 0) {
00089 if (rei2.status < 0) {
00090 i = rei2.status;
00091 }
00092 rodsLog (LOG_ERROR,
00093 "msoStageToCache: Error in rule for %s error=%d",myMSICall,i);
00094
00095 }
00096 free(myMSICall);
00097 clearMsParamArray(&msParamArray,0);
00098 return(i);
00099
00100 }
00101
00102
00103
00104
00105
00106
00107
00108 int
00109 msoSyncToArch (rsComm_t *rsComm, fileDriverType_t cacheFileType,
00110 int mode, int flags, char *msoObjName,
00111 char *cacheFilename, rodsLong_t dataSize, keyValPair_t *condInput)
00112 {
00113 int status;
00114 struct stat statbuf;
00115 char *myMSICall;
00116 char *t;
00117 int i;
00118 ruleExecInfo_t rei2;
00119 msParamArray_t msParamArray;
00120 char callCode[100];
00121
00122 status = stat (cacheFilename, &statbuf);
00123
00124 if (status < 0) {
00125 status = UNIX_FILE_STAT_ERR - errno;
00126 printf ("msoSyncToArch: CacheFile stat of %s error, status = %d\n",
00127 cacheFilename, status);
00128 }
00129
00130 if ((statbuf.st_mode & S_IFREG) == 0) {
00131 status = UNIX_FILE_STAT_ERR - errno;
00132 printf (
00133 "msoSyncToArch: %s is not a file, status = %d\n",
00134 cacheFilename, status);
00135 return status;
00136 }
00137
00138 if (dataSize > 0 && dataSize != statbuf.st_size) {
00139 printf (
00140 "msoSyncToArch: %s inp size %lld does not match actual size %lld\n",
00141 cacheFilename, (long long int) dataSize,
00142 (long long int) statbuf.st_size);
00143 return SYS_COPY_LEN_ERR;
00144 }
00145 dataSize = statbuf.st_size;
00146
00147 if ((t = strstr(msoObjName, ":")) == NULL) {
00148 return(MICRO_SERVICE_OBJECT_TYPE_UNDEFINED);
00149 }
00150 *t = '\0';
00151 sprintf(callCode, "%s", msoObjName+2);
00152 *t = ':';
00153 myMSICall = (char *) malloc(strlen(msoObjName) + strlen(cacheFilename) + 200);
00154 sprintf(myMSICall, "msiobjput_%s(\"%s\",\"%s\",\"%lld\")",callCode,msoObjName+2,cacheFilename,dataSize);
00155
00156
00157
00158 memset ((char*)&rei2, 0, sizeof (ruleExecInfo_t));
00159 memset ((char*)&msParamArray, 0, sizeof(msParamArray_t));
00160
00161 rei2.rsComm = rsComm;
00162 if (rsComm != NULL) {
00163 rei2.uoic = &rsComm->clientUser;
00164 rei2.uoip = &rsComm->proxyUser;
00165 }
00166
00167
00168 i = applyRule(myMSICall, &msParamArray, &rei2, NO_SAVE_REI);
00169 if (i < 0) {
00170 if (rei2.status < 0) {
00171 i = rei2.status;
00172 }
00173 rodsLog (LOG_ERROR,
00174 "msoSyncToArch: Error in rule for %s error=%d",myMSICall,i);
00175 }
00176 free(myMSICall);
00177 clearMsParamArray(&msParamArray,0);
00178 return(i);
00179 }
00180