Changeset 880 for branches/prototype-v0/zoo-project/zoo-kernel/caching.c
- Timestamp:
- Sep 12, 2018, 4:02:49 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/prototype-v0/zoo-project/zoo-kernel/caching.c
r877 r880 67 67 */ 68 68 char* getMd5f(char* file){ 69 EVP_MD_CTX md5ctx;69 EVP_MD_CTX *md5ctx=EVP_MD_CTX_create(); 70 70 char* fresult=(char*)malloc((EVP_MAX_MD_SIZE+1)*sizeof(char)); 71 71 unsigned char result[EVP_MAX_MD_SIZE]; 72 72 unsigned int len; 73 73 int bytes; 74 unsigned char data[1024]; 74 int dlen=65536; 75 unsigned char data[dlen+1]; 75 76 FILE *inFile = fopen (file, "rb"); 76 EVP_DigestInit(&md5ctx, EVP_md5()); 77 while ((bytes = fread (data, 1, 1024, inFile)) != 0) 78 EVP_DigestUpdate(&md5ctx, data, bytes); 79 EVP_DigestFinal_ex(&md5ctx,result,&len); 80 EVP_MD_CTX_cleanup(&md5ctx); 77 EVP_DigestInit(md5ctx, EVP_md5()); 78 while ((bytes = fread (data, sizeof(unsigned char), dlen, inFile)) != 0) 79 EVP_DigestUpdate(md5ctx, data, bytes); 80 EVP_DigestFinal_ex(md5ctx,result,&len); 81 EVP_MD_CTX_cleanup(md5ctx); 82 EVP_MD_CTX_destroy(md5ctx); 81 83 int i; 82 84 for(i = 0; i < len; i++){ … … 162 164 163 165 /** 166 * Store MD5 of the content of a file 167 * @file char* the full path of the file 168 */ 169 int storeMd5(char* file){ 170 char* storage=zStrdup(file); 171 char* md5fstr=getMd5f(file); 172 storage[strlen(storage)-2]='m'; 173 storage[strlen(storage)-1]='d'; 174 FILE* fo=fopen(storage,"w+"); 175 if(fo==NULL) 176 return 1; 177 fwrite(md5fstr,sizeof(char),strlen(md5fstr),fo); 178 free(md5fstr); 179 fclose(fo); 180 return 0; 181 } 182 183 /** 164 184 * Cache a file for a given request. 165 185 * For each cached file, the are two files stored, a .zca and a .zcm containing … … 177 197 map* tmp=getMapFromMaps(conf,"main","cacheDir"); 178 198 char contentr[4096]; 179 char* md5fstr=NULL;180 199 int cred=0; 181 200 if(tmp!=NULL){ … … 184 203 free(myRequest); 185 204 char* fname=(char*)malloc(sizeof(char)*(strlen(tmp->value)+strlen(md5str)+6)); 205 // Store md5 206 char* md5fstr=getMd5f(filename); 207 sprintf(fname,"%s/%s.zmd",tmp->value,md5str); 208 FILE* fo=fopen(fname,"w+"); 209 #ifdef DEBUG 210 fprintf(stderr,"filename: %s\n",filename); 211 fprintf(stderr,"MD5: %s\n",md5fstr); 212 #endif 213 fwrite(md5fstr,sizeof(char),strlen(md5fstr),fo); 214 free(md5fstr); 215 fclose(fo); 216 186 217 sprintf(fname,"%s/%s.zca",tmp->value,md5str); 187 218 zooLock* lck=lockFile(conf,fname,'w'); … … 192 223 #endif 193 224 FILE* fi=fopen(filename,"rb"); 194 FILE* fo=fopen(fname,"w+"); 225 sprintf(fname,"%s/%s.zca",tmp->value,md5str); 226 fo=fopen(fname,"w+"); 195 227 if(fo==NULL){ 196 228 #ifdef DEBUG … … 236 268 fclose(fo); 237 269 238 // Store md5239 sprintf(fname,"%s/%s.zca",tmp->value,md5str);240 md5fstr=getMd5f(fname);241 sprintf(fname,"%s/%s.zmd",tmp->value,md5str);242 fo=fopen(fname,"w+");243 #ifdef DEBUG244 fprintf(stderr,"MD5: %s\n",md5fstr);245 #endif246 fwrite(md5fstr,sizeof(char),strlen(md5fstr),fo);247 free(md5fstr);248 fclose(fo);249 250 270 free(md5str); 251 free(fname); 252 } 271 272 } 273 free(fname); 253 274 } 254 275 } … … 342 363 } 343 364 else{ 344 345 365 char* myRequest=getFilenameForRequest(conf,request); 346 366 char* md5str=getMd5(myRequest); … … 436 456 437 457 if(getMap(content->content,icname)==NULL) { 438 if(memUse !=NULL &&strcasecmp(memUse->value,"load")==0){458 if(memUse==NULL || strcasecmp(memUse->value,"load")==0){ 439 459 fcontent=(char*)malloc((hInternet->ihandle[*index].nDataLen+1)*sizeof(char)); 440 460 if(fcontent == NULL){ … … 456 476 457 477 map* tmpMap=getMapOrFill(&(*in)->content,vname,""); 458 if(memUse !=NULL &&strcasecmp(memUse->value,"load")==0){478 if(memUse==NULL || strcasecmp(memUse->value,"load")==0){ 459 479 free(tmpMap->value); 460 480 tmpMap->value=(char*)malloc((fsize+1)*sizeof(char)); … … 518 538 addToMap((*in)->content,sname,ltmp1); 519 539 addToMap((*in)->content,mname,mimeType); 520 if(memUse !=NULL &&strcasecmp(memUse->value,"load")==0){540 if(memUse==NULL || strcasecmp(memUse->value,"load")==0){ 521 541 addToCache(*m,request,fcontent,mimeType,fsize, NULL, 0); 522 542 free(fcontent); … … 628 648 return -1; 629 649 fsize=f_status.st_size; 630 if(memUse !=NULL &&strcasecmp(memUse->value,"load")==0){650 if(memUse==NULL || strcasecmp(memUse->value,"load")==0){ 631 651 fcontent=(char*)malloc(sizeof(char)*(f_status.st_size+1)); 632 652 FILE* f=fopen(cached,"rb"); … … 665 685 666 686 map* tmpMap=getMapOrFill(content,"value",""); 667 if(memUse !=NULL &&strcasecmp(memUse->value,"load")==0){687 if(memUse==NULL || strcasecmp(memUse->value,"load")==0){ 668 688 free(tmpMap->value); 669 689 tmpMap->value=(char*)malloc((fsize+1)*sizeof(char)); … … 677 697 addToMap(*content,"size",ltmp1); 678 698 if(cached==NULL){ 679 if(memUse !=NULL &&strcasecmp(memUse->value,"load")==0)699 if(memUse==NULL || strcasecmp(memUse->value,"load")==0) 680 700 addToCache(*m,url,fcontent,mimeType,fsize, NULL, 0); 681 701 else
Note: See TracChangeset
for help on using the changeset viewer.