Changeset 26 for trunk/zoo-kernel


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/zoo-kernel
Files:
2 deleted
5 edited

Legend:

Unmodified
Added
Removed
  • 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  }
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