00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include "rsApiHandler.h"
00015 #include "msoDriversMS.h"
00016 #include "dboHighLevelRoutines.h"
00017
00018
00019 #define LOCAL_BUFFER_SIZE 1000000
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060 int
00061 msiobjget_dbo(msParam_t* inRequestPath, msParam_t* inFileMode,
00062 msParam_t* inFileFlags, msParam_t* inCacheFilename,
00063 ruleExecInfo_t* rei )
00064 {
00065 #if defined(DBR)
00066 char *locStr, *fileStr;
00067 int mode, flags;
00068 char *cacheFilename;
00069 char *str, *t, *outBuf;
00070 int status, bytesWritten, objLen;
00071 int destFd, i;
00072 rsComm_t *rsComm;
00073 char *args[10];
00074
00075 RE_TEST_MACRO( " Calling msiobjget_dbo" );
00076
00077
00078 if (inRequestPath == NULL ||
00079 strcmp(inRequestPath->type , STR_MS_T) != 0 ||
00080 inRequestPath->inOutStruct == NULL)
00081 return(USER_PARAM_TYPE_ERR);
00082
00083 if (inFileMode == NULL ||
00084 strcmp(inFileMode->type , STR_MS_T) != 0 ||
00085 inFileMode->inOutStruct == NULL)
00086 return(USER_PARAM_TYPE_ERR);
00087
00088 if (inFileFlags == NULL ||
00089 strcmp(inFileFlags->type , STR_MS_T) != 0 ||
00090 inFileFlags->inOutStruct == NULL)
00091 return(USER_PARAM_TYPE_ERR);
00092
00093 if (inCacheFilename == NULL ||
00094 strcmp(inCacheFilename->type , STR_MS_T) != 0 ||
00095 inCacheFilename->inOutStruct == NULL)
00096 return(USER_PARAM_TYPE_ERR);
00097
00098
00099 str = strdup((char *) inRequestPath->inOutStruct);
00100 if ((t = strstr(str, ":")) != NULL)
00101 locStr = t+1;
00102 else {
00103 free(str);
00104 return(USER_INPUT_FORMAT_ERR);
00105 }
00106
00107
00108 cacheFilename = (char *) inCacheFilename->inOutStruct;
00109 mode = atoi((char *) inFileMode->inOutStruct);
00110 flags = atoi((char *) inFileFlags->inOutStruct);
00111 rsComm = rei->rsComm;
00112
00113
00114 if ((t = strstr(locStr, ":")) == NULL) {
00115 free(str);
00116 return(USER_INPUT_FORMAT_ERR);
00117 }
00118 *t = '\0';
00119 fileStr = t+1;
00120 outBuf = (char *) malloc(LOCAL_BUFFER_SIZE);
00121 for (i = 0;i<10;i++) {
00122 args[i] = NULL;
00123 }
00124
00125 i = dboExecute(rsComm, locStr, fileStr, (char *) NULL, 0, outBuf, LOCAL_BUFFER_SIZE,
00126 args);
00127 if (i < 0) {
00128 free(outBuf);
00129 free(str);
00130 return(i);
00131 }
00132 objLen = strlen(outBuf);
00133
00134
00135 destFd = open (cacheFilename, O_WRONLY | O_CREAT | O_TRUNC, mode);
00136 if (destFd < 0) {
00137 status = UNIX_FILE_OPEN_ERR - errno;
00138 printf (
00139 "msigetobj_dbo: open error for cacheFilename %s, status = %d",
00140 cacheFilename, status);
00141 free(outBuf);
00142 free(str);
00143 return status;
00144 }
00145 bytesWritten = write (destFd, outBuf, objLen);
00146 close (destFd);
00147 if (bytesWritten != objLen) {
00148 printf(
00149 "msigetobj_dbo: In Cache File %s bytesWritten %d != returned objLen %i\n",
00150 cacheFilename, bytesWritten, objLen);
00151 free(outBuf);
00152 free(str);
00153 return SYS_COPY_LEN_ERR;
00154 }
00155
00156
00157 free(outBuf);
00158 free(str);
00159
00160 return(0);
00161 #else
00162 return(DBR_NOT_COMPILED_IN);
00163 #endif
00164 }
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206 int
00207 msiobjput_dbo(msParam_t* inMSOPath, msParam_t* inCacheFilename,
00208 msParam_t* inFileSize, ruleExecInfo_t* rei )
00209 {
00210 #if defined(DBR)
00211 char *reqStr;
00212 char *cacheFilename;
00213 rodsLong_t dataSize;
00214 int status;
00215 int srcFd;
00216 char *myBuf;
00217 int bytesRead;
00218
00219
00220 RE_TEST_MACRO( " Calling msiobjput_dbo" );
00221
00222
00223 if (inMSOPath == NULL ||
00224 strcmp(inMSOPath->type , STR_MS_T) != 0 ||
00225 inMSOPath->inOutStruct == NULL)
00226 return(USER_PARAM_TYPE_ERR);
00227
00228 if (inCacheFilename == NULL ||
00229 strcmp(inCacheFilename->type , STR_MS_T) != 0 ||
00230 inCacheFilename->inOutStruct == NULL)
00231 return(USER_PARAM_TYPE_ERR);
00232
00233 if (inFileSize == NULL ||
00234 strcmp(inFileSize->type , STR_MS_T) != 0 ||
00235 inFileSize->inOutStruct == NULL)
00236 return(USER_PARAM_TYPE_ERR);
00237
00238
00239
00240 reqStr = (char *) inMSOPath->inOutStruct;
00241 cacheFilename = (char *) inCacheFilename->inOutStruct;
00242 dataSize = atol((char *) inFileSize->inOutStruct);
00243
00244
00245
00246
00247 srcFd = open (cacheFilename, O_RDONLY, 0);
00248 if (srcFd < 0) {
00249 status = UNIX_FILE_OPEN_ERR - errno;
00250 printf ("msiputobj_dbo: open error for %s, status = %d\n",
00251 cacheFilename, status);
00252 return status;
00253 }
00254 myBuf = (char *) malloc (dataSize);
00255 bytesRead = read (srcFd, (void *) myBuf, dataSize);
00256 close (srcFd);
00257 myBuf[dataSize-1] = '\0';
00258 if (bytesRead > 0 && bytesRead != dataSize) {
00259 printf ("msiputobj_dbo: bytesRead %d != dataSize %lld\n",
00260 bytesRead, dataSize);
00261 free(myBuf);
00262 return SYS_COPY_LEN_ERR;
00263 }
00264
00265 rodsLog(LOG_NOTICE,"MSO_DBO file contains: %s\n",myBuf);
00266 free(myBuf);
00267 return(0);
00268 #else
00269 return(DBR_NOT_COMPILED_IN);
00270 #endif
00271
00272 }
00273