Changeset 280 for trunk/zoo-kernel/service_internal.c
- Timestamp:
- Jul 26, 2011, 5:37:58 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/zoo-kernel/service_internal.c
r279 r280 371 371 #endif 372 372 int currId=-1; 373 int currNode=-1; 373 374 if(nbNs==0){ 374 375 nbNs++; … … 403 404 } 404 405 nbNs=0; 406 } 407 408 xmlNodePtr soapEnvelope(maps* conf,xmlNodePtr n){ 409 map* soap=getMapFromMaps(conf,"main","isSoap"); 410 if(soap!=NULL && strcasecmp(soap->value,"true")==0){ 411 int lNbNs=nbNs; 412 nsName[lNbNs]=strdup("soap"); 413 usedNs[lNbNs]=xmlNewNs(NULL,BAD_CAST "http://www.w3.org/2003/05/soap-envelope",BAD_CAST "soap"); 414 nbNs++; 415 xmlNodePtr nr = xmlNewNode(usedNs[lNbNs], BAD_CAST "Envelope"); 416 nsName[nbNs]=strdup("soap"); 417 usedNs[nbNs]=xmlNewNs(nr,BAD_CAST "http://www.w3.org/2003/05/soap-envelope",BAD_CAST "soap"); 418 nbNs++; 419 nsName[nbNs]=strdup("xsi"); 420 usedNs[nbNs]=xmlNewNs(nr,BAD_CAST "http://www.w3.org/2001/XMLSchema-instance",BAD_CAST "xsi"); 421 nbNs++; 422 xmlNsPtr ns_xsi=usedNs[nbNs-1]; 423 xmlNewNsProp(nr,ns_xsi,BAD_CAST "schemaLocation",BAD_CAST "http://www.w3.org/2003/05/soap-envelope http://www.w3.org/2003/05/soap-envelope"); 424 xmlNodePtr nr1 = xmlNewNode(usedNs[lNbNs], BAD_CAST "Body"); 425 xmlAddChild(nr1,n); 426 xmlAddChild(nr,nr1); 427 return nr; 428 }else 429 return n; 405 430 } 406 431 … … 719 744 xmlAddChild(n,nc1); 720 745 721 xmlDocSetRootElement(doc, n); 746 xmlNodePtr fn=soapEnvelope(m,n); 747 xmlDocSetRootElement(doc, fn); 722 748 //xmlFreeNs(ns); 723 749 free(SERVICE_URL); … … 779 805 addLangAttr(n,m); 780 806 781 xmlDocSetRootElement(doc, n); 807 xmlNodePtr fn=soapEnvelope(m,n); 808 xmlDocSetRootElement(doc, fn); 782 809 783 810 return n; … … 1007 1034 } 1008 1035 } 1036 1009 1037 _tmp=e->supported; 1038 if(_tmp==NULL && datatype==0) 1039 _tmp=e->defaults; 1040 1010 1041 int hasSupported=-1; 1011 1042 while(_tmp!=NULL){ … … 1097 1128 1098 1129 void printProcessResponse(maps* m,map* request, int pid,service* serv,const char* service,int status,maps* inputs,maps* outputs){ 1099 xmlNsPtr ns,ns _ows,ns_xlink,ns_xsi;1130 xmlNsPtr ns,ns1,ns_ows,ns_xlink,ns_xsi; 1100 1131 xmlNodePtr nr,n,nc,nc1,nc2,nc3,pseudor; 1101 1132 xmlDocPtr doc; … … 1104 1135 time_t time1; 1105 1136 time(&time1); 1137 nr=NULL; 1106 1138 /** 1107 1139 * Create the document and its temporary root. … … 1110 1142 int wpsId=zooXmlAddNs(NULL,"http://www.opengis.net/wps/1.0.0","wps"); 1111 1143 ns=usedNs[wpsId]; 1112 1144 1113 1145 n = xmlNewNode(ns, BAD_CAST "ExecuteResponse"); 1146 xmlNewNs(n,BAD_CAST "http://www.opengis.net/wps/1.0.0",BAD_CAST "wps"); 1114 1147 int owsId=zooXmlAddNs(n,"http://www.opengis.net/ows/1.1","ows"); 1115 1148 ns_ows=usedNs[owsId]; … … 1118 1151 int xsiId=zooXmlAddNs(n,"http://www.w3.org/2001/XMLSchema-instance","xsi"); 1119 1152 ns_xsi=usedNs[xsiId]; 1120 xmlNewNs(n,BAD_CAST "http://www.opengis.net/wps/1.0.0",BAD_CAST "wps"); 1121 1153 1122 1154 xmlNewNsProp(n,ns_xsi,BAD_CAST "schemaLocation",BAD_CAST "http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsExecute_response.xsd"); 1123 1155 … … 1163 1195 sprintf(currentSid,"%s",tmp_lenv->value); 1164 1196 if(tmpm==NULL || strcasecmp(tmpm->value,"false")==0){ 1165 sprintf(url,"%s /?request=Execute&service=WPS&version=1.0.0&Identifier=GetStatus&DataInputs=sid=%s&RawDataOutput=Result",tmpm1->value,currentSid);1197 sprintf(url,"%s?request=Execute&service=WPS&version=1.0.0&Identifier=GetStatus&DataInputs=sid=%s&RawDataOutput=Result",tmpm1->value,currentSid); 1166 1198 }else{ 1167 1199 if(strlen(tmpm->value)>0) … … 1180 1212 } 1181 1213 if(tmpm1!=NULL) 1182 sprintf(tmp,"%s /",tmpm1->value);1214 sprintf(tmp,"%s",tmpm1->value); 1183 1215 tmpm1=getMapFromMaps(m,"main","TmpPath"); 1184 1216 sprintf(stored_path,"%s/%s_%i.xml",tmpm1->value,service,pid); … … 1316 1348 while(mcursor!=NULL){ 1317 1349 scursor=getElements(serv->outputs,mcursor->name); 1318 printIOType(doc,nc,ns,ns_ows,ns_xlink,scursor,mcursor,"Output"); 1350 if(scursor!=NULL){ 1351 printIOType(doc,nc,ns,ns_ows,ns_xlink,scursor,mcursor,"Output"); 1352 } 1319 1353 mcursor=mcursor->next; 1320 1354 } … … 1324 1358 fprintf(stderr,"printProcessResponse 1 202\n"); 1325 1359 #endif 1326 xmlDocSetRootElement(doc, n); 1360 nr=soapEnvelope(m,n); 1361 xmlDocSetRootElement(doc, nr); 1362 1327 1363 if(hasStoredExecuteResponse==true){ 1328 1364 /* We need to write the ExecuteResponse Document somewhere */ … … 1537 1573 char tmp1[1024]; 1538 1574 sprintf(tmp1,"%d",strlen(toto->value)); 1539 rs=createMap(" z",tmp1);1575 rs=createMap("size",tmp1); 1540 1576 isSized=false; 1541 1577 } … … 1547 1583 } 1548 1584 } 1549 else if(tmp !=NULL){1550 if(strncmp(tmp ->value,"text/js",4)==0 ||1551 strncmp(tmp ->value,"application/js",14)==0)1585 else if(tmp2!=NULL){ 1586 if(strncmp(tmp2->value,"text/js",7)==0 || 1587 strncmp(tmp2->value,"application/json",16)==0) 1552 1588 xmlAddChild(nc3,xmlNewCDataBlock(doc,BAD_CAST toto->value,strlen(toto->value))); 1553 else 1554 xmlAddChild(nc3,xmlNewText(BAD_CAST toto->value)); 1589 else{ 1590 if(strncmp(tmp2->value,"text/xml",8)==0 || 1591 strncmp(tmp2->value,"application/vnd.google-earth.kml",32)!=0){ 1592 xmlDocPtr doc = 1593 xmlParseMemory(BAD_CAST toto->value,strlen(BAD_CAST toto->value)); 1594 xmlNodePtr ir = xmlDocGetRootElement(doc); 1595 xmlAddChild(nc3,ir); 1596 } 1597 else 1598 xmlAddChild(nc3,xmlNewText(BAD_CAST toto->value)); 1599 } 1555 1600 xmlAddChild(nc2,nc3); 1556 1601 } … … 1961 2006 elements* tmpInputs=in; 1962 2007 maps* out1=*out; 2008 if(type==1){ 2009 while(out1!=NULL){ 2010 if(getElements(in,out1->name)==NULL) 2011 return out1->name; 2012 out1=out1->next; 2013 } 2014 out1=*out; 2015 } 1963 2016 while(tmpInputs!=NULL){ 1964 2017 maps *tmpMaps=getMaps(out1,tmpInputs->name); … … 2090 2143 else 2091 2144 addToMap(tmpMaps->content,"inRequest","true"); 2145 2092 2146 } 2093 2147 tmpInputs=tmpInputs->next; … … 2244 2298 2245 2299 } 2300 2301 /** 2302 * Cache a file for a given request 2303 */ 2304 void addToCache(maps* conf,char* request,char* content,int length){ 2305 map* tmp=getMapFromMaps(conf,"main","cacheDir"); 2306 if(tmp!=NULL){ 2307 char* fname=(char*)malloc(sizeof(char)*(strlen(tmp->value)+6)); 2308 sprintf(fname,"%s/list",tmp->value); 2309 fprintf(stderr,"Cache list : %s\n",fname); 2310 fflush(stderr); 2311 struct stat f_status; 2312 int s=stat(fname, &f_status); 2313 /** 2314 * If the file does not exist, create it 2315 */ 2316 if(s<0){ 2317 FILE* f=fopen(fname,"w+"); 2318 if(f) 2319 fclose(f); 2320 s=stat(fname, &f_status); 2321 } 2322 if(f_status.st_size>=0){ 2323 FILE* f=fopen(fname,"a+"); 2324 char* foname=(char*)malloc(sizeof(char)*(strlen(tmp->value)+64)); 2325 sprintf(foname,"%s/%d.zca",tmp->value,f_status.st_size); 2326 fprintf(stderr,"Cache file : %s\n",foname); 2327 fflush(stderr); 2328 FILE* fo=fopen(foname,"w+"); 2329 char *fcontent=(char*)malloc(sizeof(char)*(strlen(foname)+strlen(request)+3)); 2330 sprintf(fcontent,"%s|%s\n",request,foname); 2331 2332 fwrite(fcontent,sizeof(char),strlen(fcontent),f); 2333 fwrite(content,sizeof(char),length,fo); 2334 fclose(f); 2335 fclose(fo); 2336 } 2337 } 2338 } 2339 2340 char* isInCache(maps* conf,char* request){ 2341 map* tmp=getMapFromMaps(conf,"main","cacheDir"); 2342 if(tmp!=NULL){ 2343 char* fname=(char*)malloc(sizeof(char)*(strlen(tmp->value)+6)); 2344 sprintf(fname,"%s/list",tmp->value); 2345 struct stat f_status; 2346 int s=stat(fname, &f_status); 2347 if(s==0){ 2348 char* fcontent=(char*)malloc(sizeof(char)*(f_status.st_size+1)); 2349 FILE* f=fopen(fname,"r"); 2350 fread(fcontent,sizeof(char),f_status.st_size,f); 2351 char *tmp,*svt; 2352 tmp=strtok_r(fcontent,"\n",&svt); 2353 int lin=0; 2354 while(tmp!=NULL){ 2355 char *tmp1,*svt1; 2356 tmp1=strtok_r(tmp,"|",&svt1); 2357 int hv=-1; 2358 while(tmp1!=NULL){ 2359 fprintf(stderr,"%s %s\n",tmp1,request); 2360 if(hv>0) 2361 return tmp1; 2362 if(strcasecmp(tmp1,request)==0) 2363 hv=1; 2364 tmp1=strtok_r(NULL,"|",&svt1); 2365 } 2366 lin++; 2367 tmp = strtok_r(NULL,"\n",&svt); 2368 } 2369 fclose(f); 2370 } 2371 } 2372 return NULL; 2373 }
Note: See TracChangeset
for help on using the changeset viewer.