- Timestamp:
- Sep 24, 2010, 5:11:43 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 7 added
- 2 deleted
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/zoo-api/js/ZOO-api.js
r1 r26 74 74 75 75 return Class; 76 }, 77 UpdateStatus: function(env,value) { 78 return ZOOUpdateStatus(env,value); 76 79 } 80 }; 81 77 82 }; 78 83 -
trunk/zoo-kernel/Makefile.in
r23 r26 55 55 56 56 service_internal.o: service_internal.c service.h 57 g ++${XML2CFLAGS} ${CFLAGS} -c service_internal.c57 gcc ${JS_ENABLED} ${JSCFLAGS} ${XML2CFLAGS} ${CFLAGS} -c service_internal.c 58 58 59 59 service_internal_python.o: service_internal_python.c service.h … … 78 78 79 79 zoo_service_loader.o: zoo_service_loader.c service.h 80 g++ -g -O2 -Wall ${XML2CFLAGS} ${CFLAGS} ${PYTHONCFLAGS} ${JAVACFLAGS} ${JSCFLAGS} ${PHPCFLAGS} ${JS_ENABLED} ${P ERL_ENABLED} ${JAVA_ENABLED} -c zoo_service_loader.c -fno-common -DPIC -o zoo_service_loader.o80 g++ -g -O2 -Wall ${XML2CFLAGS} ${CFLAGS} ${PYTHONCFLAGS} ${JAVACFLAGS} ${JSCFLAGS} ${PHPCFLAGS} ${JS_ENABLED} ${PHP_ENABLED} ${PERL_ENABLED} ${JAVA_ENABLED} -c zoo_service_loader.c -fno-common -DPIC -o zoo_service_loader.o 81 81 82 82 zoo_loader.cgi: zoo_loader.c zoo_service_loader.o ulinet.o service.h lex.sr.o service_conf.tab.o service_conf.y service_internal_python.o ulinet.o main_conf_read.tab.o lex.cr.o service_internal.o ${PHP_FILE} ${JAVA_FILE} ${JS_FILE} ${PERL_FILE} -
trunk/zoo-kernel/service.h
r9 r26 53 53 #define SERVICE_SIZE (ELEMENTS_SIZE*2)+(MAP_SIZE*2)+sizeof(char*) 54 54 55 56 /* static char* mtoupper(char* str){ 57 char* tmp=strdup(str); 58 if(tmp){ 59 int cnt=strlen(tmp); 60 int i; 61 for(i=0;i<cnt;i++){ 62 tmp[i]=toupper(str[i]); 63 tmp[i+1]=0; 64 } 65 } 66 else 67 tmp[0]=0; 68 return tmp; 69 }*/ 55 #define SHMSZ 27 70 56 71 57 /** … … 437 423 } 438 424 tmp=tmp->next; 425 } 426 } 427 428 429 static void* setMapInMaps(maps* m,char* key,char* subkey,char *value){ 430 maps* _tmpm=getMaps(m,key); 431 if(_tmpm!=NULL){ 432 map* _ztmpm=getMap(_tmpm->content,subkey); 433 if(_ztmpm!=NULL){ 434 free(_ztmpm->value); 435 _ztmpm->value=strdup(value); 436 dumpMap(_ztmpm); 437 }else{ 438 addToMap(_tmpm->content,subkey,value); 439 } 439 440 } 440 441 } -
trunk/zoo-kernel/service_internal.c
r9 r26 35 35 return hex[code & 15]; 36 36 } 37 38 void* unhandleStatus(maps *conf){ 39 int shmid,i; 40 key_t key; 41 void *shm; 42 struct shmid_ds shmids; 43 char *s,*s1; 44 map *tmpMap=getMapFromMaps(conf,"lenv","sid"); 45 if(tmpMap!=NULL){ 46 key=atoi(tmpMap->value); 47 if ((shmid = shmget(key, SHMSZ, IPC_CREAT | 0666)) < 0) { 48 #ifdef DEBUG 49 fprintf(stderr,"shmget failed to update value\n"); 50 #endif 51 }else{ 52 if ((shm = shmat(shmid, NULL, 0)) == (char *) -1) { 53 #ifdef DEBUG 54 fprintf(stderr,"shmat failed to update value\n"); 55 #endif 56 }else{ 57 shmdt(shm); 58 shmctl(shmid,IPC_RMID,&shmids); 59 } 60 } 61 } 62 } 63 64 #ifdef USE_JS 65 66 JSBool 67 JSUpdateStatus(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) 68 { 69 JS_MaybeGC(cx); 70 char *sid; 71 int istatus=0; 72 char *status=NULL; 73 maps *conf; 74 int i=0; 75 if(argc>2){ 76 #ifdef JS_DEBUG 77 fprintf(stderr,"Number of arguments used to call the function : %i",argc); 78 #endif 79 return JS_FALSE; 80 } 81 conf=mapsFromJSObject(cx,argv[0]); 82 dumpMaps(conf); 83 if(JS_ValueToInt32(cx,argv[1],&istatus)==JS_TRUE){ 84 char tmpStatus[4]; 85 sprintf(tmpStatus,"%i",istatus); 86 tmpStatus[3]=0; 87 status=strdup(tmpStatus); 88 } 89 if(getMapFromMaps(conf,"lenv","status")!=NULL){ 90 if(status!=NULL) 91 setMapInMaps(conf,"lenv","status",status); 92 else 93 setMapInMaps(conf,"lenv","status","15"); 94 updateStatus(conf); 95 } 96 freeMaps(&conf); 97 free(conf); 98 JS_MaybeGC(cx); 99 return JS_TRUE; 100 } 101 102 #endif 103 104 void* updateStatus(maps *conf){ 105 int shmid,i; 106 key_t key; 107 char *shm,*s,*s1; 108 map *tmpMap=NULL; 109 tmpMap=getMapFromMaps(conf,"lenv","sid"); 110 if(tmpMap!=NULL){ 111 key=atoi(tmpMap->value); 112 if ((shmid = shmget(key, SHMSZ, IPC_CREAT | 0666)) < 0) { 113 #ifdef DEBUG 114 fprintf(stderr,"shmget failed to update value\n"); 115 #endif 116 }else{ 117 if ((shm = (char*) shmat(shmid, NULL, 0)) == (char *) -1) { 118 #ifdef DEBUG 119 fprintf(stderr,"shmat failed to update value\n"); 120 #endif 121 } 122 else{ 123 tmpMap=getMapFromMaps(conf,"lenv","status"); 124 s1=shm; 125 for(s=tmpMap->value;*s!=NULL;s++) 126 *s1++=*s; 127 shmdt((void *)shm); 128 } 129 } 130 } 131 } 132 133 char* getStatus(int pid){ 134 int shmid,i; 135 key_t key; 136 void *shm; 137 char *s; 138 key=pid; 139 if ((shmid = shmget(key, SHMSZ, 0666)) < 0) { 140 #ifdef DEBUG 141 fprintf(stderr,"shmget failed in getStatus\n"); 142 #endif 143 }else{ 144 if ((shm = shmat(shmid, NULL, 0)) == (char *) -1) { 145 #ifdef DEBUG 146 fprintf(stderr,"shmat failed in getStatus\n"); 147 #endif 148 }else{ 149 return (char*)shm; 150 } 151 } 152 return "-1"; 153 } 154 37 155 38 156 /* Returns a url-encoded version of str */ … … 729 847 char tmp[1024]; 730 848 sprintf(tmp,"http://www.w3.org/TR/xmlschema-2/#%s",tmp1->value); 731 xmlNewNsProp(nc6,ns_ xlink,BAD_CAST "reference",BAD_CAST tmp);849 xmlNewNsProp(nc6,ns_ows,BAD_CAST "reference",BAD_CAST tmp); 732 850 xmlAddChild(nc3,nc6); 733 851 tmp1=tmp1->next; … … 841 959 xmlNewProp(n,BAD_CAST "xml:lang",BAD_CAST "en"); 842 960 char tmp[256]; 843 char url[ 256];961 char url[1024]; 844 962 memset(tmp,0,256); 845 963 memset(url,0,256); 846 964 maps* tmp_maps=getMaps(m,"main"); 847 965 if(tmp_maps!=NULL){ 848 map* tmpm=getMap(tmp_maps->content,"serverAddress"); 849 map* tmpm1=getMap(tmp_maps->content,"tmpUrl"); 850 if(tmpm!=NULL && tmpm1!=NULL){ 851 sprintf(url,"%s/%s/%s_%i.xml",tmpm->value,tmpm1->value,service,pid); 852 } 853 if(tmpm!=NULL) 854 sprintf(tmp,"%s/",tmpm->value); 966 dumpMaps(getMaps(m,"lenv")); 967 map* tmpm1=getMap(tmp_maps->content,"serverAddress"); 968 /** 969 * Check if the ZOO Service GetStatus is available in the local directory. 970 * If yes, then it uses a reference to an URL which the client can access 971 * to get information on the status of a running Service (using the 972 * percentCompleted attribute). 973 * Else fallback to the initial method using the xml file to write in ... 974 */ 975 char ntmp[1024]; 976 #ifndef WIN32 977 getcwd(ntmp,1024); 978 #else 979 _getcwd(ntmp,1024); 980 #endif 981 struct stat myFileInfo; 982 int statRes; 983 char file_path[1024]; 984 sprintf(file_path,"%s/GetStatus.zcfg",ntmp); 985 statRes=stat(file_path,&myFileInfo); 986 if(statRes==0){ 987 char currentSid[128]; 988 map* tmpm=getMap(tmp_maps->content,"rewriteUrl"); 989 map *tmp_lenv=NULL; 990 tmp_lenv=getMapFromMaps(m,"lenv","sid"); 991 if(tmp_lenv==NULL) 992 sprintf(currentSid,"%i",pid); 993 else 994 sprintf(currentSid,"%s",tmp_lenv->value); 995 if(tmpm==NULL || strcasecmp(tmpm->value,"false")==0){ 996 sprintf(url,"%s/?request=Execute&service=WPS&version=1.0.0&Identifier=GetStatus&DataInputs=sid=%s&RawDataOutput=Result",tmpm1->value,currentSid); 997 }else{ 998 if(strlen(tmpm->value)>0) 999 if(strcasecmp(tmpm->value,"true")!=0) 1000 sprintf(url,"%s/%s/GetStatus/%s",tmpm1->value,tmpm->value,currentSid); 1001 else 1002 sprintf(url,"%s/GetStatus/%s",tmpm1->value,currentSid); 1003 else 1004 sprintf(url,"%s/?request=Execute&service=WPS&version=1.0.0&Identifier=GetStatus&DataInputs=sid=%s&RawDataOutput=Result",tmpm1->value,currentSid); 1005 } 1006 }else{ 1007 map* tmpm2=getMap(tmp_maps->content,"tmpUrl"); 1008 if(tmpm1!=NULL && tmpm2!=NULL){ 1009 sprintf(url,"%s/%s/%s_%i.xml",tmpm1->value,tmpm2->value,service,pid); 1010 } 1011 } 1012 if(tmpm1!=NULL) 1013 sprintf(tmp,"%s/",tmpm1->value); 855 1014 } 856 1015 857 1016 xmlNewProp(n,BAD_CAST "serviceInstance",BAD_CAST tmp); 858 if(status!=SERVICE_SUCCEEDED ){1017 if(status!=SERVICE_SUCCEEDED && status!=SERVICE_FAILED){ 859 1018 xmlNewProp(n,BAD_CAST "statusLocation",BAD_CAST url); 860 1019 } … … 876 1035 time_t now; 877 1036 char *tmp1; 1037 map *tmpStatus; 878 1038 879 1039 now = time ( NULL ); … … 884 1044 len = strftime ( tmp1, TIME_SIZE, "%Y-%m-%dT%I:%M:%SZ", tm ); 885 1045 1046 xmlNewProp(nc,BAD_CAST "creationTime",BAD_CAST tmp1); 1047 1048 char sMsg[2048]; 886 1049 switch(status){ 887 1050 case SERVICE_SUCCEEDED: 888 xmlNewProp(nc,BAD_CAST "creationTime",BAD_CAST tmp1);889 1051 nc1 = xmlNewNode(ns, BAD_CAST "ProcessSucceeded"); 1052 sprintf(sMsg,"Service \"%s\" run successfully.",serv->name); 1053 nc3=xmlNewText(BAD_CAST sMsg); 1054 xmlAddChild(nc1,nc3); 890 1055 break; 891 1056 case SERVICE_STARTED: 892 xmlNewProp(nc,BAD_CAST "creationTime",BAD_CAST tmp1);893 1057 nc1 = xmlNewNode(ns, BAD_CAST "ProcessStarted"); 894 xmlNewProp(nc1,BAD_CAST "percentCompleted",BAD_CAST "NEED_SERVICE_ACCESS"); 1058 tmpStatus=getMapFromMaps(m,"lenv","status"); 1059 xmlNewProp(nc1,BAD_CAST "percentCompleted",BAD_CAST tmpStatus->value); 1060 sprintf(sMsg,"ZOO Service \"%s\" is currently running. Please, reload this document to get the up-to-date status of the Service.",serv->name); 1061 nc3=xmlNewText(BAD_CAST sMsg); 1062 xmlAddChild(nc1,nc3); 895 1063 break; 896 1064 case SERVICE_ACCEPTED: 897 xmlNewProp(nc,BAD_CAST "creationTime",BAD_CAST tmp1);898 1065 nc1 = xmlNewNode(ns, BAD_CAST "ProcessAccepted"); 1066 sprintf(sMsg,"Service \"%s\" was accepted by the ZOO Kernel and it run as a background task. Please consult the statusLocation attribtue providen in this document to get the up-to-date document.",serv->name); 1067 nc3=xmlNewText(BAD_CAST sMsg); 1068 xmlAddChild(nc1,nc3); 899 1069 break; 900 1070 case SERVICE_FAILED: 901 1071 nc1 = xmlNewNode(ns, BAD_CAST "ProcessFailed"); 1072 map *errorMap; 1073 map *te; 1074 te=getMapFromMaps(m,"lenv","code"); 1075 if(te!=NULL) 1076 errorMap=createMap("code",te->value); 1077 else 1078 errorMap=createMap("code","NoApplicableCode"); 1079 te=getMapFromMaps(m,"lenv","message"); 1080 if(te!=NULL) 1081 addToMap(errorMap,"text",te->value); 1082 else 1083 addToMap(errorMap,"text","No more information available"); 1084 nc3=createExceptionReportNode(m,errorMap,0); 1085 xmlAddChild(nc1,nc3); 902 1086 break; 903 1087 default : 904 1088 printf("error code not know : %i\n",status); 905 exit(1);1089 //exit(1); 906 1090 break; 907 1091 } … … 1059 1243 nc1=xmlNewNode(ns_wps, BAD_CAST type); 1060 1244 map *tmp=e->content; 1061 //#ifdef DEBUG1245 #ifdef DEBUG 1062 1246 dumpMap(tmp); 1063 1247 dumpElements(e); 1064 //#endif1248 #endif 1065 1249 nc2=xmlNewNode(ns_ows, BAD_CAST "Identifier"); 1066 1250 nc3=xmlNewText(BAD_CAST e->name); … … 1085 1269 * IO type Reference or full Data ? 1086 1270 */ 1087 //#ifdef DEBUG1271 #ifdef DEBUG 1088 1272 fprintf(stderr,"FORMAT %s %s\n",e->format,e->format); 1089 //#endif1273 #endif 1090 1274 map *tmpMap=getMap(m->content,"Reference"); 1091 1275 if(tmpMap==NULL){ … … 1210 1394 maps* tmpMap=getMaps(m,"main"); 1211 1395 char *encoding=getEncoding(tmpMap); 1212 printf("Content-Type: text/xml; charset=%s\r\nStatus: 200 OK\r\n\r\n",encoding); 1396 map *tmpSid=getMapFromMaps(m,"lenv","sid"); 1397 if(tmpSid==NULL) 1398 printf("Content-Type: text/xml; charset=%s\r\nStatus: 200 OK\r\n\r\n",encoding); 1213 1399 1214 1400 ns=xmlNewNs(NULL,BAD_CAST "http://www.opengis.net/ows/1.1",BAD_CAST "ows"); … … 1217 1403 ns_xlink=xmlNewNs(n,BAD_CAST "http://www.w3.org/1999/xlink",BAD_CAST "xlink"); 1218 1404 ns_xsi=xmlNewNs(n,BAD_CAST "http://www.w3.org/2001/XMLSchema-instance",BAD_CAST "xsi"); 1219 xmlNewProp(n,BAD_CAST "xsi:schemaLocation",BAD_CAST "http://www.opengis.net/ows/1.1 http://schemas.opengis.net/ows/1.1 /owsExceptionReport.xsd");1405 xmlNewProp(n,BAD_CAST "xsi:schemaLocation",BAD_CAST "http://www.opengis.net/ows/1.1 http://schemas.opengis.net/ows/1.1.0/owsExceptionReport.xsd"); 1220 1406 xmlNewProp(n,BAD_CAST "xml:lang",BAD_CAST "en"); 1221 xmlNewProp(n,BAD_CAST "service",BAD_CAST "WPS"); 1222 1223 xmlNewProp(n,BAD_CAST "version",BAD_CAST getVersion(tmpMap)); 1407 xmlNewProp(n,BAD_CAST "version",BAD_CAST "1.1.0"); 1224 1408 1225 1409 nc = xmlNewNode(ns, BAD_CAST "Exception"); … … 1251 1435 xmlFreeNs(ns); 1252 1436 xmlCleanupParser(); 1437 } 1438 1439 xmlNodePtr createExceptionReportNode(maps* m,map* s,int use_ns){ 1440 1441 int buffersize; 1442 xmlChar *xmlbuff; 1443 xmlNsPtr ns,ns_ows,ns_xlink,ns_xsi; 1444 xmlNodePtr n,nc,nc1,nc2; 1445 1446 maps* tmpMap=getMaps(m,"main"); 1447 1448 ns=xmlNewNs(NULL,BAD_CAST "http://www.opengis.net/ows/1.1",BAD_CAST "ows"); 1449 n = xmlNewNode(ns, BAD_CAST "ExceptionReport"); 1450 1451 if(use_ns==1){ 1452 ns_ows=xmlNewNs(n,BAD_CAST "http://www.opengis.net/ows/1.1",BAD_CAST "ows"); 1453 int xsiId=zooXmlAddNs(n,"http://www.w3.org/2001/XMLSchema-instance","xsi"); 1454 ns_xsi=usedNs[xsiId]; 1455 int xlinkId=zooXmlAddNs(n,"http://www.w3.org/1999/xlink","xlink"); 1456 ns_xlink=usedNs[xlinkId]; 1457 xmlNewNsProp(n,ns_xsi,BAD_CAST "schemaLocation",BAD_CAST "http://www.opengis.net/ows/1.1 http://schemas.opengis.net/ows/1.1.0/owsExceptionReport.xsd"); 1458 } 1459 xmlNewProp(n,BAD_CAST "xml:lang",BAD_CAST "en"); 1460 xmlNewProp(n,BAD_CAST "version",BAD_CAST "1.1.0"); 1461 1462 nc = xmlNewNode(ns, BAD_CAST "Exception"); 1463 1464 map* tmp=getMap(s,"code"); 1465 if(tmp!=NULL) 1466 xmlNewProp(nc,BAD_CAST "exceptionCode",BAD_CAST tmp->value); 1467 else 1468 xmlNewProp(nc,BAD_CAST "exceptionCode",BAD_CAST "NoApplicableCode"); 1469 1470 tmp=getMap(s,"text"); 1471 nc1 = xmlNewNode(ns, BAD_CAST "ExceptionText"); 1472 nc2=NULL; 1473 if(tmp!=NULL){ 1474 xmlNodeSetContent(nc1, BAD_CAST tmp->value); 1475 } 1476 else{ 1477 xmlNodeSetContent(nc1, BAD_CAST "No debug message available"); 1478 } 1479 xmlAddChild(nc,nc1); 1480 xmlAddChild(n,nc); 1481 return n; 1253 1482 } 1254 1483 … … 1296 1525 #endif 1297 1526 printProcessResponse(m,request_inputs1,cpid, 1298 s,r_inputs->value,res, 1299 request_inputs, 1300 request_outputs); 1301 } 1302 else{ 1303 /** 1304 * We get the first output only !! 1305 */ 1306 char mime[1024]; 1307 map* mi=getMap(request_outputs->content,"mimeType"); 1308 #ifdef DEBUG 1309 fprintf(stderr,"SERVICE OUTPUTS\n"); 1310 dumpMaps(request_outputs); 1311 fprintf(stderr,"SERVICE OUTPUTS\n"); 1312 #endif 1313 map* en=getMap(request_outputs->content,"encoding"); 1314 if(mi!=NULL && en!=NULL) 1315 sprintf(mime, 1316 "Content-Type: %s; charset=%s\r\nStatus: 200 OK\r\n\r\n", 1317 mi->value,en->value); 1318 else 1319 if(mi!=NULL) 1527 s,r_inputs->value,res, 1528 request_inputs, 1529 request_outputs); 1530 } 1531 else 1532 if(res!=SERVICE_FAILED){ 1533 /** 1534 * We get the first output only !! 1535 */ 1536 char mime[1024]; 1537 map* mi=getMap(request_outputs->content,"mimeType"); 1538 #ifdef DEBUG 1539 fprintf(stderr,"SERVICE OUTPUTS\n"); 1540 dumpMaps(request_outputs); 1541 fprintf(stderr,"SERVICE OUTPUTS\n"); 1542 #endif 1543 map* en=getMap(request_outputs->content,"encoding"); 1544 if(mi!=NULL && en!=NULL) 1320 1545 sprintf(mime, 1321 "Content-Type: %s; charset= UTF-8\r\nStatus: 200 OK\r\n\r\n",1322 mi->value );1546 "Content-Type: %s; charset=%s\r\nStatus: 200 OK\r\n\r\n", 1547 mi->value,en->value); 1323 1548 else 1324 sprintf(mime,"Content-Type: text/plain; charset=utf-8\r\nStatus: 200 OK\r\n\r\n"); 1325 printf("%s",mime); 1326 toto=getMap(request_outputs->content,"value"); 1327 if(mi!=NULL && strncmp(mi->value,"image",5)==0){ 1328 map* rs=getMapFromMaps(request_outputs,request_outputs->name,"size"); 1329 fwrite(toto->value,atoi(rs->value),1,stdout); 1330 } 1331 else 1332 printf("%s",toto->value); 1333 #ifdef DEBUG 1334 dumpMap(toto); 1335 #endif 1336 } 1549 if(mi!=NULL) 1550 sprintf(mime, 1551 "Content-Type: %s; charset=UTF-8\r\nStatus: 200 OK\r\n\r\n", 1552 mi->value); 1553 else 1554 sprintf(mime,"Content-Type: text/plain; charset=utf-8\r\nStatus: 200 OK\r\n\r\n"); 1555 printf("%s",mime); 1556 toto=getMap(request_outputs->content,"value"); 1557 if(mi!=NULL && strncmp(mi->value,"image",5)==0){ 1558 map* rs=getMapFromMaps(request_outputs,request_outputs->name,"size"); 1559 fwrite(toto->value,atoi(rs->value),1,stdout); 1560 } 1561 else 1562 printf("%s",toto->value); 1563 #ifdef DEBUG 1564 dumpMap(toto); 1565 #endif 1566 }else{ 1567 char tmp[1024]; 1568 map * errormap; 1569 map *lenv; 1570 lenv=getMapFromMaps(m,"lenv","message"); 1571 if(lenv!=NULL) 1572 sprintf(tmp,"Unable to run the Service. The message returned back by the Service was the following : %s",lenv->value); 1573 else 1574 sprintf(tmp,"Unable to run the Service. No more information was returned back by the Service."); 1575 errormap = createMap("text",tmp); 1576 addToMap(errormap,"code", "InternalError"); 1577 printf("Content-Type: text/xml; charset=utf-8\r\nStatus: 200 OK\r\n\r\n"); 1578 printExceptionReportResponse(m,errormap); 1579 freeMap(&errormap); 1580 free(errormap); 1581 } 1337 1582 } 1338 1583 -
trunk/zoo-kernel/service_internal.h
r9 r26 31 31 #define TIME_SIZE 40 32 32 33 #include <sys/stat.h> 33 34 #include <sys/types.h> 35 #include <sys/ipc.h> 36 #include <sys/shm.h> 37 #include <stdio.h> 34 38 #include <unistd.h> 35 39 #include <time.h> … … 48 52 extern int conf_read(char*,maps*); 49 53 54 #ifdef USE_JS 55 #define XP_UNIX 0 56 #include "service_internal_js.h" 57 #endif 58 50 59 #ifdef __cplusplus 51 60 extern "C" { … … 57 66 static int nbNs=0; 58 67 68 void* unhandleStatus(maps*); 69 void* updateStatus(maps*); 70 char* getStatus(int); 59 71 72 #ifdef USE_JS 73 char* JSValToChar(JSContext*,jsval*); 74 JSBool JSUpdateStatus(JSContext*,JSObject*,uintN,jsval *,jsval *); 75 #endif 76 60 77 void URLDecode(char *); 61 78 char *url_encode(char *); … … 67 84 68 85 void printExceptionReportResponse(maps*,map*); 86 xmlNodePtr createExceptionReportNode(maps*,map*,int); 69 87 void printProcessResponse(maps*,map*,int,service*,char*,int,maps*,maps*); 70 88 xmlNodePtr printGetCapabilitiesHeader(xmlDocPtr,char*,maps*); -
trunk/zoo-kernel/service_internal_js.c
r9 r26 23 23 */ 24 24 25 #include "service_internal _js.h"25 #include "service_internal.h" 26 26 27 27 static char dbg[1024]; … … 74 74 if (!JS_DefineFunction(cx, global, "ZOORequest", JSRequest, 4, 0)) 75 75 return 1; 76 if (!JS_DefineFunction(cx, global, "ZOOUpdateStatus", JSUpdateStatus, 2, 0)) 77 return 1; 76 78 77 79 /* Your application code here. This may include JSAPI calls … … 82 84 map* tmpm1=getMap(request,"metapath"); 83 85 map* tmpm2=getMap(s->content,"serviceProvider"); 84 char filename[strlen(tmpm1->value)+strlen(tmpm2->value)+6];85 86 char ntmp[1024]; 86 87 getcwd(ntmp,1024); 88 char filename[strlen(tmpm1->value)+strlen(tmpm2->value)+strlen(ntmp)+2]; 87 89 sprintf(filename,"%s/%s%s",ntmp,tmpm1->value,tmpm2->value); 90 filename[strlen(tmpm1->value)+strlen(tmpm2->value)+strlen(ntmp)+1]=0; 91 fprintf(stderr,"FILENAME %s\n",filename); 88 92 struct stat file_status; 89 93 stat(filename, &file_status); … … 203 207 204 208 /* Cleanup. */ 205 // The JS_MaybeGC call imply segmentation fault206 //JS_MaybeGC(cx);207 209 JS_DestroyScript(cx, script); 210 JS_MaybeGC(cx); 208 211 // If we use the DestroyContext as requested to release memory then we get 209 212 // issue getting back the main configuration maps after coming back to the … … 387 390 #endif 388 391 if(res!=NULL){ 392 #ifdef JS_DEBUG 389 393 fprintf(stderr,"%s - %s\n",JS_GetStringBytes(jsmsg),JS_GetStringBytes(jsmsg1)); 394 #endif 390 395 addToMap(res,JS_GetStringBytes(jsmsg),JS_GetStringBytes(jsmsg1)); 391 396 } … … 394 399 res->next=NULL; 395 400 } 401 #ifdef JS_DEBUG 396 402 dumpMap(res); 403 #endif 397 404 } 398 405 } -
trunk/zoo-services/ogr/base-vect-ops/Makefile
r9 r26 1 CFLAGS=-I../../../zoo-kernel/ -I./ `xml2-config --cflags` `python-config --cflags` `gdal-config --cflags` -DLINUX_FREE_ISSUE #-DDEBUG 2 CC=gcc 1 CFLAGS=-I../../../zoo-kernel/ -I./ `xsl-config --cflags` `gdal-config --cflags` -DLINUX_FREE_ISSUE #-DDEBUG 2 # if JS_ENABLED flag is set to true in your ZOO-Kernel Makefile then you'll have 3 # uncomment the following line 4 # JS_LDFLAGS=../../../zoo-kernel/ulinet.o ../../../zoo-kernel/service_internal_js.o 3 5 4 cgi-env/ service.zo: service.c5 g++ ${CFLAGS} -shared -fpic -o cgi-env/ogr_service.zo ./service.c ../../../zoo-kernel/service_internal.o `gdal-config --libs`6 cgi-env/ogr_service.zo: service.c 7 g++ ${CFLAGS} -shared -fpic -o cgi-env/ogr_service.zo ./service.c ../../../zoo-kernel/service_internal.o ${JS_LDFLAGS} `xsl-config --libs` `gdal-config --libs` `geos-config --libs` 6 8 7 9 clean: -
trunk/zoo-services/ogr/base-vect-ops/service.c
r9 r26 74 74 char *tmp=(char*)calloc((xmlStrlen(xmlStrstr(xmlbuff,BAD_CAST "?>"))-1),sizeof(char)); 75 75 sprintf(tmp,"%s",xmlStrstr(xmlbuff,BAD_CAST "?>")+2); 76 //strdup(strstr((char*)xmlbuff,"?>")+2);77 76 xmlXPathFreeObject(xpathObj); 78 77 xmlXPathFreeContext(xpathCtx); … … 87 86 free(tmp); 88 87 if(res==NULL){ 89 map* tmp=createMap("text","Unable to call OGR_G_CreatFromGML"); 90 addToMap(tmp,"code","NoApplicableCode"); 91 printExceptionReportResponse(conf,tmp); 92 exit(0); 88 setMapInMaps(conf,"lenv","message","Unable to call OGR_G_CreatFromGML"); 89 return NULL; 93 90 } 94 91 else 95 return res; //OGR_G_CreateFromGML(tmp);92 return res; 96 93 } 97 94 … … 108 105 fprintf(stderr,"Tolerance for Simplify %f",tolerance); 109 106 map* tmp=getMapFromMaps(inputs,"InputPolygon","value"); 110 if(!tmp) 111 return SERVICE_FAILED; 112 map* tmp1=getMapFromMaps(inputs,"InputPolygon","mimeTime"); 107 if(!tmp){ 108 setMapInMaps(conf,"lenv","message","Unagle to parse the input geometry from InputPolygon"); 109 return SERVICE_FAILED; 110 } 111 map* tmp1=getMapFromMaps(inputs,"InputPolygon","mimeType"); 113 112 if(tmp1!=NULL){ 114 113 if(strncmp(tmp1->value,"text/js",7)==0 || 115 strncmp(tmp1->value,"application/json", 7)==0)114 strncmp(tmp1->value,"application/json",16)==0) 116 115 geometry=OGR_G_CreateGeometryFromJson(tmp->value); 117 116 else 118 117 geometry=createGeometryFromGML(conf,tmp->value); 119 118 } 120 else 121 geometry=createGeometryFromGML(conf,tmp->value); 119 else{ 120 setMapInMaps(conf,"lenv","message","Unable to find any geometry for InputPolygon"); 121 return SERVICE_FAILED; 122 } 123 if(geometry==NULL){ 124 setMapInMaps(conf,"lenv","message","Unagle to parse the input geometry from InputPolygon"); 125 return SERVICE_FAILED; 126 } 127 fprintf(stderr,"Create GEOSGeometry object"); 122 128 GEOSGeometry* ggeometry=((OGRGeometry *) geometry)->exportToGEOS(); 123 129 GEOSGeometry* gres=GEOSTopologyPreserveSimplify(ggeometry,tolerance); 124 130 res=OGRGeometryFactory::createFromGEOS(gres); 131 tmp1=getMapFromMaps(outputs,"Result","mimeType"); 125 132 if(tmp1!=NULL){ 126 133 if(strncmp(tmp1->value,"text/js",7)==0 || 127 134 strncmp(tmp1->value,"application/json",16)==0){ 128 outputs->content=createMap("value",OGR_G_ExportToJson(tmp->value)); 129 addMapToMap(&outputs->content,createMap("mimeType","text/plain")); 130 addMapToMap(&outputs->content,createMap("encoding","UTF-8")); 135 char *tmpS=OGR_G_ExportToJson(res); 136 setMapInMaps(outputs,"Result","value",tmpS); 137 setMapInMaps(outputs,"Result","mimeType","text/plain"); 138 setMapInMaps(outputs,"Result","encoding","UTF-8"); 139 free(tmpS); 131 140 } 132 141 else{ 133 outputs->content=createMap("value",OGR_G_ExportToGML(res)); 134 addMapToMap(&outputs->content,createMap("mimeType","text/xml")); 135 addMapToMap(&outputs->content,createMap("encoding","UTF-8")); 136 addMapToMap(&outputs->content,createMap("schema","http://fooa/gml/3.1.0/polygon.xsd")); 142 char *tmpS=OGR_G_ExportToGML(res); 143 setMapInMaps(outputs,"Result","value",tmpS); 144 setMapInMaps(outputs,"Result","mimeType","text/xml"); 145 setMapInMaps(outputs,"Result","encoding","UTF-8"); 146 setMapInMaps(outputs,"Result","schema","http://fooa/gml/3.1.0/polygon.xsd"); 147 free(tmpS); 137 148 } 138 149 }else{ 139 outputs->content=createMap("value",OGR_G_ExportToJson(res)); 140 addMapToMap(&outputs->content,createMap("mimeType","text/plain")); 141 addMapToMap(&outputs->content,createMap("encoding","UTF-8")); 150 char *tmpS=OGR_G_ExportToJson(tmp->value); 151 setMapInMaps(outputs,"Result","value",tmpS); 152 setMapInMaps(outputs,"Result","mimeType","text/plain"); 153 setMapInMaps(outputs,"Result","encoding","UTF-8"); 154 free(tmpS); 142 155 } 143 156 outputs->next=NULL; … … 178 191 else 179 192 geometry=createGeometryFromGML(conf,tmp->value); 193 if(geometry==NULL) 194 return SERVICE_FAILED; 180 195 res=(*myFunc)(geometry); 181 196 fprintf(stderr,"Service internal print \n"); … … 189 204 if(strncmp(tmp_2->value,"text/js",7)==0 || 190 205 strncmp(tmp_2->value,"application/json",16)==0){ 191 char *t res=OGR_G_ExportToJson(res);192 addToMap(outputs->content,"value",tres);193 free(tres);194 addToMap(outputs->content,"mimeType","text/plain");195 addToMap(outputs->content,"encoding","UTF-8");206 char *tmpS=OGR_G_ExportToJson(res); 207 setMapInMaps(outputs,"Result","value",tmpS); 208 setMapInMaps(outputs,"Result","mimeType","text/plain"); 209 setMapInMaps(outputs,"Result","encoding","UTF-8"); 210 free(tmpS); 196 211 } 197 212 else{ 198 char *tres=OGR_G_ExportToGML(res); 199 addToMap(outputs->content,"value",tres); 200 free(tres); 213 char *tmpS=OGR_G_ExportToGML(res); 214 setMapInMaps(outputs,"Result","value",tmpS); 215 setMapInMaps(outputs,"Result","mimeType","text/plain"); 216 setMapInMaps(outputs,"Result","encoding","UTF-8"); 217 free(tmpS); 218 201 219 } 202 220 }else{ 203 char *t res=OGR_G_ExportToJson(res);204 addToMap(outputs->content,"value",tres);205 free(tres);206 addToMap(outputs->content,"mimeType","text/plain");207 addToMap(outputs->content,"encoding","UTF-8");221 char *tmpS=OGR_G_ExportToJson(res); 222 setMapInMaps(outputs,"Result","value",tmpS); 223 setMapInMaps(outputs,"Result","mimeType","text/plain"); 224 setMapInMaps(outputs,"Result","encoding","UTF-8"); 225 free(tmpS); 208 226 } 209 227 outputs->next=NULL; … … 235 253 else 236 254 geometry=createGeometryFromGML(conf,tmp->value); 237 int bufferDistance=1; 255 if(geometry==NULL){ 256 setMapInMaps(conf,"lenv","message","Unable to parse input geometry"); 257 return SERVICE_FAILED; 258 } 259 double bufferDistance; 238 260 tmp=getMapFromMaps(inputs,"BufferDistance","value"); 239 if(tmp!=NULL) 240 bufferDistance=atoi(tmp->value); 261 if(tmp==NULL){ 262 bufferDistance=atof("10.0"); 263 } 264 else 265 bufferDistance=atof(tmp->value); 241 266 res=OGR_G_Buffer(geometry,bufferDistance,30); 242 267 tmp1=getMapFromMaps(outputs,"Result","mimeType"); 243 268 if(strncmp(tmp1->value,"application/json",16)==0){ 244 addToMap(outputs->content,"value",OGR_G_ExportToJson(res)); 245 addToMap(outputs->content,"mimeType","text/plain"); 269 char *tmpS=OGR_G_ExportToJson(res); 270 setMapInMaps(outputs,"Result","value",tmpS); 271 setMapInMaps(outputs,"Result","mimeType","text/plain"); 272 setMapInMaps(outputs,"Result","encoding","UTF-8"); 273 free(tmpS); 246 274 } 247 275 else{ 248 addToMap(outputs->content,"value",OGR_G_ExportToGML(res)); 276 char *tmpS=OGR_G_ExportToGML(res); 277 setMapInMaps(outputs,"Result","value",tmpS); 278 setMapInMaps(outputs,"Result","mimeType","text/xml"); 279 setMapInMaps(outputs,"Result","encoding","UTF-8"); 280 setMapInMaps(outputs,"Result","schema","http://fooa/gml/3.1.0/polygon.xsd"); 249 281 } 250 282 outputs->next=NULL; … … 254 286 } 255 287 256 /* int Buffer(maps*& conf,maps*& inputs,maps*& outputs){257 #ifdef DEBUG258 fprintf(stderr,"\nService internal print\n");259 #endif260 maps* cursor=inputs;261 OGRGeometryH geometry,res;262 int bufferDistance;263 if(cursor!=NULL){264 #ifdef DEBUG265 fprintf(stderr,"\nService internal print\n");266 dumpMaps(cursor);267 fprintf(stderr,"\nService internal print\n");268 dumpMaps(inputs);269 fprintf(stderr,"\nService internal print\n");270 #endif271 map* tmp=getMapFromMaps(inputs,"InputPolygon","value");272 map* tmp1=getMapFromMaps(inputs,"InputPolygon","mimeType");273 if(tmp1!=NULL){274 if(strncmp(tmp1->value,"application/json",16)==0 ||275 strncmp(tmp1->value,"text/js",7)==0)276 geometry=OGR_G_CreateGeometryFromJson(tmp->value);277 else278 geometry=createGeometryFromGML(conf,tmp->value);279 }280 else281 geometry=createGeometryFromGML(conf,tmp->value);282 }283 if(cursor!=NULL){284 map* tmp=getMapFromMaps(cursor,"BufferDistance","value");285 if(tmp==NULL){286 bufferDistance=10;287 }288 else289 bufferDistance=atoi(tmp->value);290 #ifdef DEBUG291 fprintf(stderr,"\nService internal print (BufferDistance value: %i)\n",bufferDistance);292 #endif293 }294 #ifdef DEBUG295 dumpMaps(outputs);296 #endif297 map* tmp=getMapFromMaps(outputs,"Result","mimeType");298 res=OGR_G_Buffer(geometry,bufferDistance,30);299 #ifdef DEBUG300 dumpMap(tmp);301 #endif302 if(tmp!=NULL){303 #ifdef DEBUG304 dumpMap(tmp);305 #endif306 if(strncmp(tmp->value,"application/json",16)==0){307 addToMap(outputs->content,"value",OGR_G_ExportToJson(res));308 addToMap(outputs->content,"mimeType","text/plain");309 addToMap(outputs->content,"encoding","UTF-8");310 }311 else if(strcmp(tmp->value,"text/xml")==0){312 xmlInitParser();313 xmlDocPtr doc = xmlParseMemory(tmp->value,strlen(tmp->value));314 xmlChar *xmlbuff;315 int buffersize;316 char *buff=OGR_G_ExportToGML(res);317 addToMap(outputs->content,"value",buff);318 map* tmp1=getMapFromMaps(outputs,"Result","encoding");319 if(tmp1!=NULL)320 addToMap(outputs->content,"encoding",tmp1->value);321 else322 addToMap(outputs->content,"encoding","UTF-8");323 xmlDocDumpFormatMemory(doc, &xmlbuff, &buffersize, 1);324 xmlFree(xmlbuff);325 xmlFreeDoc(doc);326 xmlCleanupParser();327 }328 else{329 addToMap(outputs->content,"value",OGR_G_ExportToJson(res));330 addToMap(outputs->content,"mimeType","text/plain");331 addToMap(outputs->content,"encoding","UTF-8");332 outputs->next=NULL;333 }334 outputs->next=NULL;335 }336 else{337 addToMap(outputs->content,"value",OGR_G_ExportToJson(res));338 addToMap(outputs->content,"mimeType","text/plain");339 addToMap(outputs->content,"encoding","UTF-8");340 outputs->next=NULL;341 }342 outputs->next=NULL;343 #ifdef DEBUG344 dumpMaps(outputs);345 fprintf(stderr,"\nService internal print\n===\n");346 #endif347 OGR_G_DestroyGeometry(geometry);348 OGR_G_DestroyGeometry(res);349 return SERVICE_SUCCEEDED;350 }351 */352 353 288 #ifdef WIN32 354 289 __declspec(dllexport) … … 387 322 #ifdef DEBUG 388 323 fprintf(stderr,"\nService internal print1\n"); 389 #endif390 324 fflush(stderr); 325 #endif 326 fprintf(stderr,"\nService internal print1\n"); 327 dumpMaps(inputs); 328 fprintf(stderr,"\nService internal print1\n"); 391 329 392 330 maps* cursor=inputs; … … 405 343 geometry1=createGeometryFromGML(conf,tmp->value); 406 344 } 345 if(geometry1==NULL){ 346 setMapInMaps(conf,"lenv","message","Unable to parse input geometry for InputEntity1."); 347 fprintf(stderr,"SERVICE FAILED !\n"); 348 return SERVICE_FAILED; 349 } 350 fprintf(stderr,"\nService internal print1 InputEntity1\n"); 407 351 { 408 352 map* tmp=getMapFromMaps(inputs,"InputEntity2","value"); 409 353 map* tmp1=getMapFromMaps(inputs,"InputEntity2","mimeType"); 410 #ifdef DEBUG 354 //#ifdef DEBUG 355 fprintf(stderr,"MY MAP \n[%s] - %i\n",tmp1->value,strncmp(tmp1->value,"application/json",16)); 356 //dumpMap(tmp); 411 357 fprintf(stderr,"MY MAP\n"); 412 dumpMap(tmp1); 413 fprintf(stderr,"MY MAP\n"); 414 #endif 358 ///#endif 359 fprintf(stderr,"\nService internal print1 InputEntity2\n"); 415 360 if(tmp1!=NULL){ 416 if(strncmp(tmp1->value,"application/json",16)==0) 361 if(strncmp(tmp1->value,"application/json",16)==0){ 362 fprintf(stderr,"\nService internal print1 InputEntity2 as JSON\n"); 417 363 geometry2=OGR_G_CreateGeometryFromJson(tmp->value); 418 else 364 } 365 else{ 366 fprintf(stderr,"\nService internal print1 InputEntity2 as GML\n"); 419 367 geometry2=createGeometryFromGML(conf,tmp->value); 368 } 420 369 } 421 370 else 422 371 geometry2=createGeometryFromGML(conf,tmp->value); 423 } 372 fprintf(stderr,"\nService internal print1 InputEntity2 PreFinal\n"); 373 } 374 fprintf(stderr,"\nService internal print1 InputEntity2 Final\n"); 375 if(geometry2==NULL){ 376 setMapInMaps(conf,"lenv","message","Unable to parse input geometry for InputEntity2."); 377 fprintf(stderr,"SERVICE FAILED !\n"); 378 return SERVICE_FAILED; 379 } 380 fprintf(stderr,"\nService internal print1\n"); 424 381 res=(*myFunc)(geometry1,geometry2); 425 addToMap(outputs->content,"value",OGR_G_ExportToJson(res)); 426 addToMap(outputs->content,"mimeType","text/plain"); 427 addToMap(outputs->content,"encoding","UTF-8"); 428 outputs->next=NULL; 382 fprintf(stderr,"\nService internal print1\n"); 383 char *tmpS=OGR_G_ExportToJson(res); 384 setMapInMaps(outputs,"Result","value",tmpS); 385 setMapInMaps(outputs,"Result","mimeType","text/plain"); 386 setMapInMaps(outputs,"Result","encoding","UTF-8"); 387 free(tmpS); 429 388 OGR_G_DestroyGeometry(geometry1); 430 389 OGR_G_DestroyGeometry(geometry2); … … 469 428 #endif 470 429 fflush(stderr); 471 472 430 maps* cursor=inputs; 473 431 OGRGeometryH geometry1,geometry2; … … 491 449 geometry1=createGeometryFromGML(conf,tmp->value); 492 450 } 451 if(geometry1==NULL){ 452 setMapInMaps(conf,"lenv","message","Unable to parse input geometry for InputEntity1."); 453 fprintf(stderr,"SERVICE FAILED !\n"); 454 return SERVICE_FAILED; 455 } 493 456 { 494 457 map* tmp=getMapFromMaps(inputs,"InputEntity2","value"); … … 509 472 geometry2=createGeometryFromGML(conf,tmp->value); 510 473 } 511 res=OGR_G_Distance(geometry1,geometry2); 512 outputs=(maps*)malloc(sizeof(maps*)); 513 outputs->name="Distance"; 474 if(geometry2==NULL){ 475 setMapInMaps(conf,"lenv","message","Unable to parse input geometry for InputEntity2."); 476 fprintf(stderr,"SERVICE FAILED !\n"); 477 return SERVICE_FAILED; 478 } 479 res=OGR_G_Distance(geometry1,geometry2); 514 480 char tmpres[100]; 515 481 sprintf(tmpres,"%d",res); 516 outputs->content=createMap("value",tmpres); 517 addMapToMap(&outputs->content,createMap("datatype","float")); 518 outputs->next=NULL; 482 setMapInMaps(outputs,"Distance","value",tmpres); 483 setMapInMaps(outputs,"Distance","dataType","float"); 519 484 #ifdef DEBUG 520 485 dumpMaps(outputs); … … 531 496 double res; 532 497 /** 533 * Extract Geometry from the Input Entity1value498 * Extract Geometry from the InputPolygon value 534 499 */ 535 OGRGeometryH geometry1; 536 map* tmp=getMapFromMaps(inputs,"InputEntity1","value"); 500 OGRGeometryH geometry; 501 map* tmp=getMapFromMaps(inputs,"InputPolygon","value"); 502 if(tmp==NULL){ 503 setMapInMaps(conf,"lenv","message","Unable to parse input geometry from InputPolygon"); 504 return SERVICE_FAILED; 505 } 537 506 fprintf(stderr,"geometry creation %s \n",tmp->value); 538 geometry1=createGeometryFromGML(conf,tmp->value); 507 geometry=createGeometryFromGML(conf,tmp->value); 508 if(geometry==NULL){ 509 setMapInMaps(conf,"lenv","message","Unable to parse input geometry from InputPolygon"); 510 return SERVICE_FAILED; 511 } 539 512 fprintf(stderr,"geometry created %s \n",tmp->value); 540 res=OGR_G_GetArea(geometry 1);513 res=OGR_G_GetArea(geometry); 541 514 fprintf(stderr,"area %d \n",res); 542 515 /** 543 * Creating the outputs516 * Filling the outputs 544 517 */ 545 outputs=(maps*)malloc(sizeof(maps*));546 outputs->name="Area";547 518 char tmp1[100]; 548 519 sprintf(tmp1,"%d",res); 549 outputs->content=createMap("value",tmp1); 550 addMapToMap(&outputs->content,createMap("datatype","float")); 551 outputs->next=NULL; 520 setMapInMaps(outputs,"Area","value",tmp1); 521 setMapInMaps(outputs,"Area","dataType","float"); 552 522 #ifdef DEBUG 553 523 dumpMaps(outputs);
Note: See TracChangeset
for help on using the changeset viewer.