Changeset 26


Ignore:
Timestamp:
Sep 24, 2010, 5:11:43 AM (14 years ago)
Author:
djay
Message:

ZOO-Kernel updates and bug fixes :

  • Fixing gestion of RawDataOutput? when the Service return SERVICE_FAILED an ExceptionReport? was returned to the client.
  • Use gcc when compiling service_internal.c to avoid strange error messages about switch ....
  • Function setMapInMaps was added in service.h to let users set the value of a specific map in a maps.
  • Fixing JavaScript? issue during the context destruction process.
  • Use the GetStatus? ZOO Service when it is available on the local installation for statusLocation.
  • Add some comments for ServiceStarted?, ServiceSucceeded?, ServiceFailed? and ServiceAccepted?.
  • Dynamic creation of a lenv maps in the main configuration file maps, containing the current status and a sid (Service ID). Those informations can be used later by the GetStatus? Service to let user check the on-going status during the Service runs.
  • Function updateStatus was added to service_internal.h which let the Services developers set the current percentCompleted value.

ZOO-Service updates and bug fixes :

  • Add GetStatus? Service and its demo longProcess Service. All are in the wps_status.zo Services Provider.
  • Use the setMapInMaps in the base-vect-ops code to enhance readibility.

ZOO-API updates :

  • Add the function ZOO.UpdateStatus? to the ZOO JavaScript? API which simply point on ZOOUpdateStatus which can be called as-is from JavaScript?. Use : ZOOUpdateStatus(conf,value) where conf is the main configuration file maps and value the the value of the current status.
Location:
trunk
Files:
7 added
2 deleted
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/zoo-api/js/ZOO-api.js

    r1 r26  
    7474
    7575    return Class;
     76  },
     77  UpdateStatus: function(env,value) {
     78    return ZOOUpdateStatus(env,value);
    7679  }
     80};
     81
    7782};
    7883
  • trunk/zoo-kernel/Makefile.in

    r23 r26  
    5555
    5656service_internal.o: service_internal.c service.h
    57         g++ ${XML2CFLAGS} ${CFLAGS} -c service_internal.c
     57        gcc ${JS_ENABLED} ${JSCFLAGS} ${XML2CFLAGS} ${CFLAGS} -c service_internal.c
    5858
    5959service_internal_python.o: service_internal_python.c service.h
     
    7878
    7979zoo_service_loader.o: zoo_service_loader.c service.h
    80         g++ -g -O2 -Wall ${XML2CFLAGS} ${CFLAGS} ${PYTHONCFLAGS} ${JAVACFLAGS} ${JSCFLAGS} ${PHPCFLAGS} ${JS_ENABLED} ${PERL_ENABLED} ${JAVA_ENABLED} -c zoo_service_loader.c  -fno-common -DPIC -o zoo_service_loader.o
     80        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
    8181
    8282zoo_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  
    5353#define SERVICE_SIZE (ELEMENTS_SIZE*2)+(MAP_SIZE*2)+sizeof(char*)
    5454
    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
    7056
    7157  /**
     
    437423      }
    438424      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      }
    439440    }
    440441  }
  • trunk/zoo-kernel/service_internal.c

    r9 r26  
    3535  return hex[code & 15];
    3636}
     37
     38void* 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
     66JSBool
     67JSUpdateStatus(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
     104void* 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
     133char* 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
    37155
    38156/* Returns a url-encoded version of str */
     
    729847          char tmp[1024];
    730848          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);
    732850          xmlAddChild(nc3,nc6);
    733851          tmp1=tmp1->next;
     
    841959  xmlNewProp(n,BAD_CAST "xml:lang",BAD_CAST "en");
    842960  char tmp[256];
    843   char url[256];
     961  char url[1024];
    844962  memset(tmp,0,256);
    845963  memset(url,0,256);
    846964  maps* tmp_maps=getMaps(m,"main");
    847965  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&amp;service=WPS&amp;version=1.0.0&amp;Identifier=GetStatus&amp;DataInputs=sid=%s&amp;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&amp;service=WPS&amp;version=1.0.0&amp;Identifier=GetStatus&amp;DataInputs=sid=%s&amp;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);
    8551014  }
    8561015
    8571016  xmlNewProp(n,BAD_CAST "serviceInstance",BAD_CAST tmp);
    858   if(status!=SERVICE_SUCCEEDED){
     1017  if(status!=SERVICE_SUCCEEDED && status!=SERVICE_FAILED){
    8591018    xmlNewProp(n,BAD_CAST "statusLocation",BAD_CAST url);
    8601019  }
     
    8761035  time_t now;
    8771036  char *tmp1;
     1037  map *tmpStatus;
    8781038 
    8791039  now = time ( NULL );
     
    8841044  len = strftime ( tmp1, TIME_SIZE, "%Y-%m-%dT%I:%M:%SZ", tm );
    8851045
     1046  xmlNewProp(nc,BAD_CAST "creationTime",BAD_CAST tmp1);
     1047
     1048  char sMsg[2048];
    8861049  switch(status){
    8871050  case SERVICE_SUCCEEDED:
    888     xmlNewProp(nc,BAD_CAST "creationTime",BAD_CAST tmp1);
    8891051    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);
    8901055    break;
    8911056  case SERVICE_STARTED:
    892     xmlNewProp(nc,BAD_CAST "creationTime",BAD_CAST tmp1);
    8931057    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);
    8951063    break;
    8961064  case SERVICE_ACCEPTED:
    897     xmlNewProp(nc,BAD_CAST "creationTime",BAD_CAST tmp1);
    8981065    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);
    8991069    break;
    9001070  case SERVICE_FAILED:
    9011071    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);
    9021086    break;
    9031087  default :
    9041088    printf("error code not know : %i\n",status);
    905     exit(1);
     1089    //exit(1);
    9061090    break;
    9071091  }
     
    10591243  nc1=xmlNewNode(ns_wps, BAD_CAST type);
    10601244  map *tmp=e->content;
    1061   //#ifdef DEBUG
     1245#ifdef DEBUG
    10621246  dumpMap(tmp);
    10631247  dumpElements(e);
    1064   //#endif
     1248#endif
    10651249  nc2=xmlNewNode(ns_ows, BAD_CAST "Identifier");
    10661250  nc3=xmlNewText(BAD_CAST e->name);
     
    10851269   * IO type Reference or full Data ?
    10861270   */
    1087   //#ifdef DEBUG
     1271#ifdef DEBUG
    10881272  fprintf(stderr,"FORMAT %s %s\n",e->format,e->format);
    1089   //#endif
     1273#endif
    10901274  map *tmpMap=getMap(m->content,"Reference");
    10911275  if(tmpMap==NULL){
     
    12101394  maps* tmpMap=getMaps(m,"main");
    12111395  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);
    12131399
    12141400  ns=xmlNewNs(NULL,BAD_CAST "http://www.opengis.net/ows/1.1",BAD_CAST "ows");
     
    12171403  ns_xlink=xmlNewNs(n,BAD_CAST "http://www.w3.org/1999/xlink",BAD_CAST "xlink");
    12181404  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");
    12201406  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");
    12241408
    12251409  nc = xmlNewNode(ns, BAD_CAST "Exception"); 
     
    12511435  xmlFreeNs(ns);
    12521436  xmlCleanupParser();
     1437}
     1438
     1439xmlNodePtr 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;
    12531482}
    12541483
     
    12961525#endif
    12971526    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)
    13201545        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);
    13231548      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    }
    13371582}
    13381583
  • trunk/zoo-kernel/service_internal.h

    r9 r26  
    3131#define TIME_SIZE 40
    3232
     33#include <sys/stat.h>
    3334#include <sys/types.h>
     35#include <sys/ipc.h>
     36#include <sys/shm.h>
     37#include <stdio.h>
    3438#include <unistd.h>
    3539#include <time.h>
     
    4852extern   int conf_read(char*,maps*);
    4953
     54#ifdef USE_JS
     55#define XP_UNIX 0
     56#include "service_internal_js.h"
     57#endif
     58
    5059#ifdef __cplusplus
    5160extern "C" {
     
    5766  static int nbNs=0;
    5867
     68  void* unhandleStatus(maps*);
     69  void* updateStatus(maps*);
     70  char* getStatus(int);
    5971
     72#ifdef USE_JS
     73  char* JSValToChar(JSContext*,jsval*);
     74  JSBool JSUpdateStatus(JSContext*,JSObject*,uintN,jsval *,jsval *);
     75#endif
     76 
    6077  void URLDecode(char *);
    6178  char *url_encode(char *);
     
    6784 
    6885  void printExceptionReportResponse(maps*,map*);
     86  xmlNodePtr createExceptionReportNode(maps*,map*,int);
    6987  void printProcessResponse(maps*,map*,int,service*,char*,int,maps*,maps*);
    7088  xmlNodePtr printGetCapabilitiesHeader(xmlDocPtr,char*,maps*);
  • trunk/zoo-kernel/service_internal_js.c

    r9 r26  
    2323 */
    2424
    25 #include "service_internal_js.h"
     25#include "service_internal.h"
    2626
    2727static char dbg[1024];
     
    7474  if (!JS_DefineFunction(cx, global, "ZOORequest", JSRequest, 4, 0))
    7575    return 1;
     76  if (!JS_DefineFunction(cx, global, "ZOOUpdateStatus", JSUpdateStatus, 2, 0))
     77    return 1;
    7678
    7779  /* Your application code here. This may include JSAPI calls
     
    8284  map* tmpm1=getMap(request,"metapath");
    8385  map* tmpm2=getMap(s->content,"serviceProvider");
    84   char filename[strlen(tmpm1->value)+strlen(tmpm2->value)+6];
    8586  char ntmp[1024];
    8687  getcwd(ntmp,1024);
     88  char filename[strlen(tmpm1->value)+strlen(tmpm2->value)+strlen(ntmp)+2];
    8789  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);
    8892  struct stat file_status;
    8993  stat(filename, &file_status);
     
    203207
    204208  /* Cleanup. */
    205   // The JS_MaybeGC call imply segmentation fault
    206   //JS_MaybeGC(cx);
    207209  JS_DestroyScript(cx, script);
     210  JS_MaybeGC(cx);
    208211  // If we use the DestroyContext as requested to release memory then we get
    209212  // issue getting back the main configuration maps after coming back to the
     
    387390#endif
    388391      if(res!=NULL){
     392#ifdef JS_DEBUG
    389393        fprintf(stderr,"%s - %s\n",JS_GetStringBytes(jsmsg),JS_GetStringBytes(jsmsg1));
     394#endif
    390395        addToMap(res,JS_GetStringBytes(jsmsg),JS_GetStringBytes(jsmsg1));
    391396      }
     
    394399        res->next=NULL;
    395400      }
     401#ifdef JS_DEBUG
    396402      dumpMap(res);
     403#endif
    397404    }
    398405  }
  • 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
     1CFLAGS=-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
    35
    4 cgi-env/service.zo: service.c
    5         g++ ${CFLAGS} -shared -fpic -o cgi-env/ogr_service.zo ./service.c ../../../zoo-kernel/service_internal.o `gdal-config --libs`
     6cgi-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`
    68
    79clean:
  • trunk/zoo-services/ogr/base-vect-ops/service.c

    r9 r26  
    7474    char *tmp=(char*)calloc((xmlStrlen(xmlStrstr(xmlbuff,BAD_CAST "?>"))-1),sizeof(char));
    7575    sprintf(tmp,"%s",xmlStrstr(xmlbuff,BAD_CAST "?>")+2);
    76     //strdup(strstr((char*)xmlbuff,"?>")+2);
    7776    xmlXPathFreeObject(xpathObj);
    7877    xmlXPathFreeContext(xpathCtx);
     
    8786    free(tmp);
    8887    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;
    9390    }
    9491    else
    95       return res;//OGR_G_CreateFromGML(tmp);
     92      return res;
    9693  }
    9794
     
    108105    fprintf(stderr,"Tolerance for Simplify %f",tolerance);
    109106    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");
    113112    if(tmp1!=NULL){
    114113      if(strncmp(tmp1->value,"text/js",7)==0 ||
    115          strncmp(tmp1->value,"application/json",7)==0)
     114         strncmp(tmp1->value,"application/json",16)==0)
    116115        geometry=OGR_G_CreateGeometryFromJson(tmp->value);
    117116      else
    118117        geometry=createGeometryFromGML(conf,tmp->value);
    119118    }
    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");
    122128    GEOSGeometry* ggeometry=((OGRGeometry *) geometry)->exportToGEOS();
    123129    GEOSGeometry* gres=GEOSTopologyPreserveSimplify(ggeometry,tolerance);
    124130    res=OGRGeometryFactory::createFromGEOS(gres);
     131    tmp1=getMapFromMaps(outputs,"Result","mimeType");
    125132    if(tmp1!=NULL){
    126133      if(strncmp(tmp1->value,"text/js",7)==0 ||
    127134         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);
    131140      }
    132141      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);
    137148      }
    138149    }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);
    142155    }
    143156    outputs->next=NULL;
     
    178191    else
    179192      geometry=createGeometryFromGML(conf,tmp->value);
     193    if(geometry==NULL)
     194      return SERVICE_FAILED;
    180195    res=(*myFunc)(geometry);
    181196    fprintf(stderr,"Service internal print \n");
     
    189204      if(strncmp(tmp_2->value,"text/js",7)==0 ||
    190205         strncmp(tmp_2->value,"application/json",16)==0){
    191         char *tres=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);
    196211      }
    197212      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
    201219      }
    202220    }else{
    203       char *tres=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);
    208226    }
    209227    outputs->next=NULL;
     
    235253   else
    236254     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;
    238260   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);
    241266   res=OGR_G_Buffer(geometry,bufferDistance,30);
    242267   tmp1=getMapFromMaps(outputs,"Result","mimeType");
    243268   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);
    246274   }
    247275   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");
    249281   }
    250282   outputs->next=NULL;
     
    254286}
    255287
    256 /*  int Buffer(maps*& conf,maps*& inputs,maps*& outputs){
    257 #ifdef DEBUG
    258     fprintf(stderr,"\nService internal print\n");
    259 #endif
    260     maps* cursor=inputs;
    261     OGRGeometryH geometry,res;
    262     int bufferDistance;   
    263     if(cursor!=NULL){
    264 #ifdef DEBUG
    265       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 #endif
    271       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         else
    278           geometry=createGeometryFromGML(conf,tmp->value);
    279       }
    280       else
    281         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       else
    289         bufferDistance=atoi(tmp->value);
    290 #ifdef DEBUG
    291       fprintf(stderr,"\nService internal print (BufferDistance value: %i)\n",bufferDistance);
    292 #endif
    293     }
    294 #ifdef DEBUG
    295     dumpMaps(outputs);
    296 #endif
    297     map* tmp=getMapFromMaps(outputs,"Result","mimeType");
    298     res=OGR_G_Buffer(geometry,bufferDistance,30);
    299 #ifdef DEBUG
    300     dumpMap(tmp);
    301 #endif
    302     if(tmp!=NULL){
    303 #ifdef DEBUG
    304       dumpMap(tmp);
    305 #endif
    306       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         else
    322           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 DEBUG
    344     dumpMaps(outputs);
    345     fprintf(stderr,"\nService internal print\n===\n");
    346 #endif
    347     OGR_G_DestroyGeometry(geometry);
    348     OGR_G_DestroyGeometry(res);
    349     return SERVICE_SUCCEEDED;
    350   }
    351 */
    352 
    353288#ifdef WIN32
    354289  __declspec(dllexport)
     
    387322#ifdef DEBUG
    388323    fprintf(stderr,"\nService internal print1\n");
    389 #endif
    390324    fflush(stderr);
     325#endif
     326    fprintf(stderr,"\nService internal print1\n");
     327    dumpMaps(inputs);
     328    fprintf(stderr,"\nService internal print1\n");
    391329
    392330    maps* cursor=inputs;
     
    405343        geometry1=createGeometryFromGML(conf,tmp->value);
    406344    }
     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");
    407351    {
    408352      map* tmp=getMapFromMaps(inputs,"InputEntity2","value");
    409353      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);
    411357      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");
    415360      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");
    417363          geometry2=OGR_G_CreateGeometryFromJson(tmp->value);
    418         else
     364        }
     365        else{
     366          fprintf(stderr,"\nService internal print1 InputEntity2 as GML\n");
    419367          geometry2=createGeometryFromGML(conf,tmp->value);
     368        }
    420369      }
    421370      else
    422371        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");
    424381    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);
    429388    OGR_G_DestroyGeometry(geometry1);
    430389    OGR_G_DestroyGeometry(geometry2);
     
    469428#endif
    470429    fflush(stderr);
    471 
    472430    maps* cursor=inputs;
    473431    OGRGeometryH geometry1,geometry2;
     
    491449        geometry1=createGeometryFromGML(conf,tmp->value);
    492450    }
     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    }
    493456    {
    494457      map* tmp=getMapFromMaps(inputs,"InputEntity2","value");
     
    509472        geometry2=createGeometryFromGML(conf,tmp->value);
    510473    }
    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);   
    514480    char tmpres[100];
    515481    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");
    519484#ifdef DEBUG
    520485    dumpMaps(outputs);
     
    531496    double res;
    532497    /**
    533      * Extract Geometry from the InputEntity1 value
     498     * Extract Geometry from the InputPolygon value
    534499     */
    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    }
    537506    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    }
    539512    fprintf(stderr,"geometry created %s \n",tmp->value);
    540     res=OGR_G_GetArea(geometry1);
     513    res=OGR_G_GetArea(geometry);
    541514    fprintf(stderr,"area %d \n",res);
    542515    /**
    543      * Creating the outputs
     516     * Filling the outputs
    544517     */
    545     outputs=(maps*)malloc(sizeof(maps*));
    546     outputs->name="Area";
    547518    char tmp1[100];
    548519    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");
    552522#ifdef DEBUG
    553523    dumpMaps(outputs);
Note: See TracChangeset for help on using the changeset viewer.

Search

Context Navigation

ZOO Sponsors

http://www.zoo-project.org/trac/chrome/site/img/geolabs-logo.pnghttp://www.zoo-project.org/trac/chrome/site/img/neogeo-logo.png http://www.zoo-project.org/trac/chrome/site/img/apptech-logo.png http://www.zoo-project.org/trac/chrome/site/img/3liz-logo.png http://www.zoo-project.org/trac/chrome/site/img/gateway-logo.png

Become a sponsor !

Knowledge partners

http://www.zoo-project.org/trac/chrome/site/img/ocu-logo.png http://www.zoo-project.org/trac/chrome/site/img/gucas-logo.png http://www.zoo-project.org/trac/chrome/site/img/polimi-logo.png http://www.zoo-project.org/trac/chrome/site/img/fem-logo.png http://www.zoo-project.org/trac/chrome/site/img/supsi-logo.png http://www.zoo-project.org/trac/chrome/site/img/cumtb-logo.png

Become a knowledge partner

Related links

http://zoo-project.org/img/ogclogo.png http://zoo-project.org/img/osgeologo.png