- Location:
- /trunk
- Files:
-
- 11 added
- 2 deleted
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
/trunk/zoo-api/js/ZOO-api.js
r20 r30 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
r20 r30 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} ${P HPCFLAGS} ${JS_ENABLED} ${PHP_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} ${PERLCFLAGS} ${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/configure.ac
r20 r30 128 128 # =========================================================================== 129 129 130 131 132 130 133 AC_ARG_WITH([python], 131 [AS_HELP_STRING([--with-python=PATH], [specify an alternative directory for python installation])], 132 [PYTHONCONFIG="$withval/bin/python-config"], [PYTHONCONFIG=""]) 133 134 if test "x$PYTHONCONFIG" = "x"; then 135 # PYTHON was not specified, so search within the current path 136 AC_PATH_PROG([PYTHONCONFIG], [python-config]) 137 138 # If we couldn't find python-config, display a warning 139 if test "x$PYTHONCONFIG" = "x"; then 140 AC_MSG_ERROR([could not find python-config from libpython within the current path. You may need to try re-running configure with a --with-python parameter.]) 141 fi 142 else 143 # PYTHON was specified; display a message to the user 144 if test "x$PYTHON" = "xyes"; then 145 AC_MSG_ERROR([you must specify a parameter to --with-python, e.g. --with-python=/path/to/python]) 146 else 147 if test -f $PYTHONCONFIG; then 148 AC_MSG_RESULT([Using user-specified python-config file: $PYTHONCONFIG]) 149 else 150 AC_MSG_ERROR([the user-specified python-config file $PYTHONCONFIG does not exist]) 151 fi 152 fi 153 fi 154 155 156 # Extract the linker and include flags 157 PYTHON_LDFLAGS=`$PYTHONCONFIG --libs` 158 PYTHON_CPPFLAGS=`$PYTHONCONFIG --cflags` 159 160 # Check headers file 161 CPPFLAGS_SAVE="$CPPFLAGS" 162 CPPFLAGS="$PYTHON_CPPFLAGS" 163 AC_CHECK_HEADERS([Python.h], 134 [AS_HELP_STRING([--with-python=PATH], [To enabled python support or specify an alternative directory for python installation, disabled by default])], 135 [PYTHON_PATH="$withval"; PYTHON_ENABLED="-DUSE_PYTHON"], [PYTHON_ENABLED=""]) 136 137 138 if test -z "$PYTHON_ENABLED" 139 then 140 PYTHON_FILE="" 141 else 142 PYTHONCONFIG="$PYTHON_PATH/bin/python-config" 143 PYTHON_FILE="service_internal_python.o" 144 if test "$PYTHON_PATH" = "yes" 145 then 146 # PHP was not specified, so search within the current path 147 AC_PATH_PROG([PYTHONCONFIG], [python-config]) 148 else 149 PYTHONCONFIG="$PYTHON_PATH/bin/python-config" 150 fi 151 152 # Extract the linker and include flags 153 PYTHON_LDFLAGS=`$PYTHONCONFIG --ldflags` 154 PYTHON_CPPFLAGS=`$PYTHONCONFIG --cflags` 155 156 # Check headers file 157 CPPFLAGS_SAVE="$CPPFLAGS" 158 CPPFLAGS="$PYTHON_CPPFLAGS" 159 AC_CHECK_HEADERS([Python.h], 164 160 [], [AC_MSG_ERROR([could not find headers include related to libpython])]) 165 161 166 # Ensure we can link against libpython 167 LIBS_SAVE="$LIBS" 168 LIBS="$PYTHON_LDFLAGS" 169 # Shouldn't we get python here rather than python2.6 :) ?? 170 PY_LIB=`$PYTHONCONFIG --libs | sed -e 's/^.*\(python2\..\)$/\1/'` 171 AC_CHECK_LIB([$PY_LIB], [PyObject_CallObject], [], [AC_MSG_ERROR([could not find libpython])], []) 172 173 AC_SUBST([PYTHON_CPPFLAGS]) 174 AC_SUBST([PYTHON_LDFLAGS]) 162 # Ensure we can link against libphp 163 LIBS_SAVE="$LIBS" 164 LIBS="$PYTHON_LDFLAGS" 165 PY_LIB=`$PYTHONCONFIG --libs | sed -e 's/^.*\(python2\..\)$/\1/'` 166 AC_CHECK_LIB([$PY_LIB], [PyObject_CallObject], [], [AC_MSG_ERROR([could not find libpython])], []) 167 AC_SUBST([PYTHON_CPPFLAGS]) 168 AC_SUBST([PYTHON_LDFLAGS]) 169 fi 170 171 AC_SUBST([PYTHON_ENABLED]) 172 AC_SUBST([PYTHON_FILE]) 175 173 176 174 # =========================================================================== … … 182 180 183 181 AC_ARG_WITH([php], 184 [AS_HELP_STRING([--with-php=PATH], [specify an alternative directory for php installation or --with-php=no to disable php support])], 185 [PHP_PATH="$withval"], [PHP_PATH=""]) 186 if test "$PHP_PATH" != "no"; 187 then 182 [AS_HELP_STRING([--with-php=PATH], [To enabled php support or specify an alternative directory for php installation, disabled by default])], 183 [PHP_PATH="$withval"; PHP_ENABLED="-DUSE_PHP"], [PHP_ENABLED=""]) 184 185 186 if test -z "$PHP_ENABLED" 187 then 188 PHP_FILE="" 189 else 188 190 PHPCONFIG="$PHP_PATH/bin/php-config" 189 PHP_ENABLED="-DUSE_PHP"190 191 PHP_FILE="service_internal_php.o" 191 if test "x$PHPCONFIG" = "x"; 192 then 193 # PHP was not specified, so search within the current path 194 AC_PATH_PROG([PHPCONFIG], [php-config]) 195 196 # If we couldn't find php-config, display a warning 197 if test "x$PHPCONFIG" = "x"; 198 then 199 AC_MSG_ERROR([could not find php-config from libphp within the current path. You may need to try re-running configure with a --with-php parameter.]) 200 fi 201 else 202 # PHP was specified; display a message to the user 203 if test "x$PHP" = "xyes"; 204 then 205 AC_MSG_ERROR([you must specify a parameter to --with-php, e.g. --with-php=/path/to/php]) 206 else 207 if test -f $PHPCONFIG; 208 then 209 AC_MSG_RESULT([Using user-specified php-config file: $PHPCONFIG]) 210 else 211 AC_MSG_ERROR([the user-specified php-config file $PHPCONFIG does not exist]) 212 fi 213 fi 214 fi 192 if test "$PHP_PATH" = "yes" 193 then 194 # PHP was not specified, so search within the current path 195 AC_PATH_PROG([PHPCONFIG], [php-config]) 196 else 197 PHPCONFIG="$PHP_PATH/bin/php-config" 198 fi 199 215 200 # Extract the linker and include flags 216 201 PHP_LDFLAGS="-L/`$PHPCONFIG --prefix`/lib -lphp5" … … 230 215 AC_SUBST([PHP_CPPFLAGS]) 231 216 AC_SUBST([PHP_LDFLAGS]) 232 else233 PHP_ENABLED=""234 PHP_FILE=""235 217 fi 236 218 … … 244 226 245 227 246 247 248 228 AC_ARG_WITH([perl], 249 [AS_HELP_STRING([--with-perl=PATH], [specify an alternative directory for perl installation or --with-perl=no to disable perl support])], 250 [PERL_PATH="$withval"], [PERL_PATH=""]) 251 if test "$PERL_PATH" != "no"; 252 then 253 if test "x$PERL_PATH" = "xyes"; 254 then 229 [AS_HELP_STRING([--with-perl=PATH], [To enabled perl support or specify an alternative directory for perl installation, disabled by default])], 230 [PERL_PATH="$withval"; PERL_ENABLED="-DUSE_PERL"], [PERL_ENABLED=""]) 231 232 233 if test -z "$PERL_ENABLED" 234 then 235 PERL_FILE="" 236 else 237 PERLCONFIG="$PERL_PATH/bin/perl" 238 PHP_FILE="service_internal_perl.o" 239 if test "$PERL_PATH" = "yes" 240 then 241 # PHP was not specified, so search within the current path 255 242 AC_PATH_PROG([PERLCONFIG], [perl]) 256 243 else … … 258 245 fi 259 246 260 if test -f $PERLCONFIG;261 then262 AC_MSG_RESULT([Using user-specified perl file: $PERLCONFIG])263 else264 AC_MSG_ERROR([the user-specified perl file $PERLCONFIG does not exist])265 fi266 267 PERL_ENABLED="-DUSE_PERL"268 PERL_FILE="service_internal_perl.o"269 270 247 # Extract the linker and include flags 271 248 PERL_LDFLAGS=`$PERLCONFIG -MExtUtils::Embed -e ldopts` … … 280 257 AC_SUBST([PERL_CPPFLAGS]) 281 258 AC_SUBST([PERL_LDFLAGS]) 282 else283 PERL_ENABLED=""284 PERL_FILE=""285 259 fi 286 260 -
/trunk/zoo-kernel/service.h
r20 r30 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
r20 r30 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
r20 r30 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
r20 r30 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-kernel/service_internal_perl.c
r20 r30 127 127 } 128 128 129 129 int zoo_perl_support(maps** main_conf,map* request,service* s,maps **real_inputs,maps **real_outputs){ 130 maps* m=*main_conf; 131 maps* inputs=*real_inputs; 132 maps* outputs=*real_outputs; 133 int res=SERVICE_FAILED; 134 map * tmp=getMap(s->content,"serviceProvide"); 135 136 char *my_argv[] = { "", tmp->value }; 137 if ((my_perl = perl_alloc()) == NULL){ 138 fprintf(stderr,"no memmory"); 139 exit(1); 140 } 141 perl_construct( my_perl ); 142 perl_parse(my_perl, xs_init, 2, my_argv, (char **)NULL); 143 perl_run(my_perl); 144 145 146 HV* h_main_conf = (HV *)sv_2mortal((SV *)newHV()); 147 HV* h_real_inputs = (HV *)sv_2mortal((SV *)newHV()); 148 HV* h_real_outputs = (HV *)sv_2mortal((SV *)newHV()); 149 maps_to_hash(m,&h_main_conf); 150 maps_to_hash(inputs,&h_real_inputs); 151 maps_to_hash(outputs,&h_real_outputs); 152 dSP; 153 ENTER; 154 SAVETMPS; 155 PUSHMARK(SP); 156 XPUSHs(sv_2mortal(newRV_inc((SV *)h_main_conf))); 157 XPUSHs(sv_2mortal(newRV_inc((SV *)h_real_inputs))); 158 XPUSHs(sv_2mortal(newRV_inc((SV *)h_real_outputs))); 159 PUTBACK; 160 call_pv(s->name, G_SCALAR); 161 SPAGAIN; 162 res = POPi; 163 hash_to_maps(h_real_outputs,real_outputs); 164 PUTBACK; 165 FREETMPS; 166 LEAVE; 167 return res; 168 } 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 -
/trunk/zoo-kernel/zoo_service_loader.c
r20 r30 44 44 #include "service.h" 45 45 #include "service_internal.h" 46 47 48 #ifdef USE_PYTHON 46 49 #include "service_internal_python.h" 50 #endif 47 51 48 52 #ifdef USE_JAVA … … 57 61 #include "service_internal_js.h" 58 62 #endif 63 64 #ifdef USE_PERL 65 #include "service_internal_perl.h" 66 #endif 67 59 68 60 69 … … 173 182 freeMaps(&m); 174 183 free(m); 184 freeMap(&request_inputs); 185 free(request_inputs); 175 186 return 1; 176 187 } … … 183 194 freeMaps(&m); 184 195 free(m); 196 freeMap(&request_inputs); 197 free(request_inputs); 185 198 free(REQUEST); 186 199 return 1; … … 1575 1588 } 1576 1589 else{ 1590 #ifdef USE_PYTHON 1577 1591 if(strncasecmp(r_inputs->value,"PYTHON",6)==0){ 1578 1592 eres=zoo_python_support(&m,request_inputs,s1,&request_input_real_format,&request_output_real_format); 1579 1593 } 1580 1594 else 1595 #endif 1581 1596 1582 1597 #ifdef USE_JAVA … … 1593 1608 else 1594 1609 #endif 1595 1610 1611 1612 #ifdef USE_PERL 1613 if(strncasecmp(r_inputs->value,"PERL",4)==0){ 1614 eres=zoo_perl_support(&m,request_inputs,s1,&request_input_real_format,&request_output_real_format); 1615 } 1616 else 1617 #endif 1618 1596 1619 #ifdef USE_JS 1597 1620 if(strncasecmp(r_inputs->value,"JS",2)==0){ … … 1787 1810 } 1788 1811 } else{ 1812 1813 #ifdef USE_PYTHON 1789 1814 if(strncasecmp(r_inputs->value,"PYTHON",6)==0){ 1790 1815 eres=zoo_python_support(&m,request_inputs,s1,&request_input_real_format,&request_output_real_format); 1791 1816 } 1792 1817 else 1818 #endif 1793 1819 1794 1820 #ifdef USE_JAVA … … 1806 1832 #endif 1807 1833 1834 #ifdef USE_PERL 1835 if(strncasecmp(r_inputs->value,"PERL",4)==0){ 1836 eres=zoo_perl_support(&m,request_inputs,s1,&request_input_real_format,&request_output_real_format); 1837 } 1838 else 1839 #endif 1808 1840 #ifdef USE_JS 1809 1841 if(strncasecmp(r_inputs->value,"JS",2)==0){ … … 1841 1873 cpid,m,eres); 1842 1874 1875 //if(getpid()==cpid){ 1843 1876 freeService(&s1); 1844 1877 free(s1); 1845 1878 freeMaps(&m); 1846 1879 free(m); 1880 freeMaps(&tmpmaps); 1881 free(tmpmaps); 1847 1882 1848 1883 freeMaps(&request_input_real_format); 1849 1884 free(request_input_real_format); 1850 1885 1886 //freeMap(&request_inputs); 1887 //free(request_inputs); 1888 1851 1889 /* The following is requested but get issue using with Python support :/ */ 1852 /*freeMaps(&request_output_real_format); 1853 free(request_output_real_format);*/ 1890 /* freeMaps(&request_output_real_format); 1891 free(request_output_real_format); 1892 */ 1854 1893 1855 1894 free(REQUEST); … … 1860 1899 fflush(stderr); 1861 1900 #endif 1901 //} 1862 1902 1863 1903 return 0; -
/trunk/zoo-services/ogr/base-vect-ops/Makefile
r20 r30 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
r20 r30 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.