Changeset 490


Ignore:
Timestamp:
Jun 27, 2014, 1:14:39 AM (11 years ago)
Author:
djay
Message:

Remove memory leaks from ZOO-Kernel. Fix issue #99.

Location:
trunk/zoo-project/zoo-kernel
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/zoo-project/zoo-kernel/Makefile.in

    r489 r490  
    9292        g++ -g -O2 ${XML2CFLAGS} ${CFLAGS} ${PYTHONCFLAGS} ${JAVACFLAGS} ${JSCFLAGS} ${PERLCFLAGS} ${PHPCFLAGS} ${PYTHON_ENABLED} ${JS_ENABLED} ${PHP_ENABLED} ${PERL_ENABLED} ${JAVA_ENABLED} -c zoo_service_loader.c  -fno-common -DPIC -o zoo_service_loader.o
    9393
    94 zoo_loader.cgi: zoo_loader.c zoo_service_loader.o  ulinet.o service.h lex.sr.o service_conf.tab.o service_conf.y ulinet.o main_conf_read.tab.o lex.cr.o service_internal.o ${MS_FILE} ${PYTHON_FILE} ${PHP_FILE} ${JAVA_FILE} ${JS_FILE} ${PERL_FILE} ${RUBY_FILE} ${YAML_FILE}
     94zoo_loader.cgi: version.h zoo_loader.c zoo_service_loader.o  ulinet.o service.h lex.sr.o service_conf.tab.o service_conf.y ulinet.o main_conf_read.tab.o lex.cr.o service_internal.o ${MS_FILE} ${PYTHON_FILE} ${PHP_FILE} ${JAVA_FILE} ${JS_FILE} ${PERL_FILE} ${RUBY_FILE} ${YAML_FILE}
    9595        g++ -g -O2 ${JSCFLAGS} ${PHPCFLAGS}  ${PERLCFLAGS} ${RUBYCFLAGS}  ${JAVACFLAGS} ${XML2CFLAGS} ${PYTHONCFLAGS} ${CFLAGS} -c zoo_loader.c  -fno-common -DPIC -o zoo_loader.o
    9696        g++  ${JSCFLAGS} ${GDAL_CFLAGS} ${XML2CFLAGS} ${PHPCFLAGS} ${PERLCFLAGS} ${JAVACFLAGS} ${PYTHONCFLAGS} ${CFLAGS} zoo_loader.o zoo_service_loader.o service_internal.o ${MS_FILE} ${PYTHON_FILE}  ${PERL_FILE} ${PHP_FILE}  ${JS_FILE} ${JAVA_FILE} ${YAML_FILE} ulinet.o lex.cr.o lex.sr.o service_conf.tab.o main_conf_read.tab.o -o zoo_loader.cgi ${LDFLAGS}
  • trunk/zoo-project/zoo-kernel/main_conf_read.y

    r465 r490  
    1313static char* curr_key;
    1414static int debug=0;
    15 using namespace std;
    1615
    1716extern void crerror(const char *s);
  • trunk/zoo-project/zoo-kernel/service.h

    r474 r490  
    6161#include <string.h>
    6262#ifndef WIN32
     63#ifndef bool
    6364#define bool int
     65#endif
     66#ifndef true
    6467#define true 1
    6568#define false -1
     69#endif
    6670#else
    6771  //#include <stdbool.h>
     
    422426    if(hasKey(m,n)==false){
    423427      map* _cursor=m;
    424       if(_cursor->next!=NULL){
    425         addToMap(_cursor->next,n,v);
    426       }else
    427         _cursor->next=createMap(n,v);
     428      while(_cursor->next!=NULL){
     429        _cursor=_cursor->next;
     430      }
     431      _cursor->next=createMap(n,v);
    428432    }
    429433    else{
     
    478482  }
    479483
    480   static map* getMapOrFill(map** m,const char *key,char* value){
     484  static map* getMapOrFill(map** m,const char *key,const char* value){
    481485    map* tmp=*m;
    482486    map* tmpMap=getMap(tmp,key);
    483487    if(tmpMap==NULL){
    484       if(tmp!=NULL)
    485         addToMap(*m,key,value);
     488      if(tmp!=NULL){
     489        addToMap((*m),key,value);
     490      }
    486491      else
    487492        (*m)=createMap(key,value);
     
    580585  }
    581586
    582   static map* getMapArray(map* m,char* key,int index){
     587  static map* getMapArray(map* m,const char* key,int index){
    583588    char tmp[1024];
    584589    if(index>0)
     
    659664    addToMap(_cursor->content,"length",tmpLen);
    660665    int i=0;
    661     map* tmpSizeI=getMap(tmp->content,tmpV[i]);
    662666    for(i=0;i<8;i++){
    663667      map* tmpVI=getMap(tmp->content,tmpV[i]);
     
    887891
    888892  static void dumpServiceAsYAML(service* s){
    889     int level=0;
    890893    int i;
    891894    fprintf(stderr,"# %s\n\n",s->name);
     
    905908    }
    906909    if(s->inputs!=NULL){
    907       fprintf(stderr,"\ninputs:\n",s->name);
     910      fprintf(stderr,"\ninputs:\n");
    908911      dumpElementsAsYAML(s->inputs);
    909912    }
    910913    if(s->outputs!=NULL){
    911       fprintf(stderr,"\noutputs:\n",s->name);
     914      fprintf(stderr,"\noutputs:\n");
    912915      dumpElementsAsYAML(s->outputs);
    913916    }
  • trunk/zoo-project/zoo-kernel/service_internal.c

    r485 r490  
    181181
    182182void unhandleStatus(maps *conf){
    183   int shmid,i;
     183  int shmid;
    184184  key_t key;
    185185  void *shm;
    186186  struct shmid_ds shmids;
    187   char *s,*s1;
    188187  map *tmpMap=getMapFromMaps(conf,"lenv","sid");
    189188  if(tmpMap!=NULL){
     
    207206
    208207int _updateStatus(maps *conf){
    209   int shmid,i;
     208  int shmid;
    210209  key_t key;
    211210  char *shm,*s,*s1;
     
    247246
    248247char* getStatus(int pid){
    249   int shmid,i;
     248  int shmid;
    250249  key_t key;
    251250  void *shm;
    252   char *s;
    253251  key=pid;
    254252  if ((shmid = shmget(key, SHMSZ, 0666)) < 0) {
     
    265263    }
    266264  }
    267   return "-1";
     265  return (char*)"-1";
    268266}
    269267
     
    277275  jsval *argv = JS_ARGV(cx,argv1);
    278276  JS_MaybeGC(cx);
    279   char *sid;
    280277  int istatus=0;
    281278  char *status=NULL;
    282279  maps *conf;
    283   int i=0;
    284280  if(argc>2){
    285281#ifdef JS_DEBUG
     
    385381#endif
    386382  int currId=-1;
    387   int currNode=-1;
    388383  if(nbNs==0){
    389384    nbNs++;
     
    419414  nbNs=0;
    420415}
     416
     417
     418int zooXmlAddDoc(const char* value){
     419  int currId=0;
     420  nbDocs++;
     421  currId=nbDocs-1;
     422  iDocs[currId]=xmlParseMemory(value,strlen(value));
     423  return currId;
     424}
     425
     426void zooXmlCleanupDocs(){
     427  int j;
     428  for(j=nbDocs-1;j>=0;j--){
     429    xmlFreeDoc(iDocs[j]);
     430  }
     431  nbDocs=0;
     432}
     433
    421434
    422435xmlNodePtr soapEnvelope(maps* conf,xmlNodePtr n){
     
    447460
    448461  xmlNsPtr ns,ns_ows,ns_xlink,ns_xsi;
    449   xmlNodePtr n,nc,nc1,nc2,nc3,nc4,nc5,nc6,pseudor;
    450   xmlChar *xmlbuff;
    451   int buffersize;
     462  xmlNodePtr n,nc,nc1,nc2,nc3,nc4,nc5,nc6;
    452463  /**
    453464   * Create the document and its temporary root.
     
    486497  if(tmp4!=NULL){
    487498    map* tmp2=tmp4->content;
    488     char *orderedFields[5];
     499    const char *orderedFields[5];
    489500    orderedFields[0]="Title";
    490501    orderedFields[1]="Abstract";
     
    555566  if(tmp4!=NULL){
    556567    map* tmp2=tmp4->content;
    557     char *tmpAddress[6];
     568    const char *tmpAddress[6];
    558569    tmpAddress[0]="addressDeliveryPoint";
    559570    tmpAddress[1]="addressCity";
     
    562573    tmpAddress[4]="addressCountry";
    563574    tmpAddress[5]="addressElectronicMailAddress";
    564     char *tmpPhone[2];
     575    const char *tmpPhone[2];
    565576    tmpPhone[0]="phoneVoice";
    566577    tmpPhone[1]="phoneFacsimile";
    567     char *orderedFields[12];
     578    const char *orderedFields[12];
    568579    orderedFields[0]="providerName";
    569580    orderedFields[1]="providerSite";
     
    608619                  for(j=0;j<2;j++)
    609620                    if(strcasecmp(tmp2->name,tmpPhone[j])==0){
    610                       char *toto=NULL;
    611                       char *toto1=tmp2->name;
    612                       toto=strstr(toto1,"Phone");
    613                       nc1 = xmlNewNode(ns_ows, BAD_CAST toto1+5);
     621                      char *tmp4=tmp2->name;
     622                      nc1 = xmlNewNode(ns_ows, BAD_CAST tmp4+5);
    614623                      xmlAddChild(nc1,xmlNewText(BAD_CAST tmp2->value));
    615624                      xmlAddChild(nc5,nc1);
     
    621630                    for(j=0;j<6;j++)
    622631                      if(strcasecmp(tmp2->name,tmpAddress[j])==0){
    623                         char *toto=NULL;
    624                         char *toto1=tmp2->name;
    625                         toto=strstr(toto1,"Address");
    626                         nc1 = xmlNewNode(ns_ows, BAD_CAST toto1+7);
     632                        char *tmp4=tmp2->name;
     633                        nc1 = xmlNewNode(ns_ows, BAD_CAST tmp4+7);
    627634                        xmlAddChild(nc1,xmlNewText(BAD_CAST tmp2->value));
    628635                        xmlAddChild(nc6,nc1);
     
    799806void printGetCapabilitiesForProcess(maps* m,xmlNodePtr nc,service* serv){
    800807  xmlNsPtr ns,ns_ows,ns_xlink;
    801   xmlNodePtr nr,n,nc1,nc2,nc3,nc4,nc5,nc6,pseudor;
     808  xmlNodePtr n=NULL,nc1,nc2;
    802809  /**
    803810   * Initialize or get existing namspaces
     
    810817  ns_xlink=usedNs[xlinkId];
    811818
    812   int cursor=0;
    813819  map* tmp1;
    814820  if(serv->content!=NULL){
     
    833839xmlNodePtr printDescribeProcessHeader(xmlDocPtr doc,const char* service,maps* m){
    834840
    835   xmlNsPtr ns,ns_ows,ns_xlink,ns_xsi;
    836   xmlNodePtr n,nr;
    837   xmlChar *xmlbuff;
    838   int buffersize;
     841  xmlNsPtr ns,ns_xsi;
     842  xmlNodePtr n;
    839843
    840844  int wpsId=zooXmlAddNs(NULL,"http://schemas.opengis.net/wps/1.0.0","wps");
    841845  ns=usedNs[wpsId];
    842846  n = xmlNewNode(ns, BAD_CAST "ProcessDescriptions");
    843   int owsId=zooXmlAddNs(n,"http://www.opengis.net/ows/1.1","ows");
    844   ns_ows=usedNs[owsId];
     847  zooXmlAddNs(n,"http://www.opengis.net/ows/1.1","ows");
    845848  xmlNewNs(n,BAD_CAST "http://www.opengis.net/wps/1.0.0",BAD_CAST "wps");
    846849  zooXmlAddNs(n,"http://www.w3.org/1999/xlink","xlink");
     
    860863
    861864void printDescribeProcessForProcess(maps* m,xmlNodePtr nc,service* serv){
    862   xmlNsPtr ns,ns_ows,ns_xlink,ns_xsi;
    863   xmlNodePtr nr,n,nc1,nc2,nc3,nc4,nc5,nc6,pseudor;
    864 
    865   char tmp[256];
     865  xmlNsPtr ns,ns_ows,ns_xlink;
     866  xmlNodePtr n,nc1;
     867
    866868  n=nc;
    867869 
     
    874876
    875877  nc = xmlNewNode(NULL, BAD_CAST "ProcessDescription");
    876   char *tmp4[3];
     878  const char *tmp4[3];
    877879  tmp4[0]="processVersion";
    878880  tmp4[1]="storeSupported";
     
    916918    nc1 = xmlNewNode(NULL, BAD_CAST "DataInputs");
    917919    elements* e=serv->inputs;
    918     printFullDescription(e,"Input",ns_ows,nc1);
     920    printFullDescription(1,e,"Input",ns_ows,nc1);
    919921    xmlAddChild(nc,nc1);
    920922  }
     
    922924  nc1 = xmlNewNode(NULL, BAD_CAST "ProcessOutputs");
    923925  elements* e=serv->outputs;
    924   printFullDescription(e,"Output",ns_ows,nc1);
     926  printFullDescription(0,e,"Output",ns_ows,nc1);
    925927  xmlAddChild(nc,nc1);
    926928
     
    929931}
    930932
    931 void printFullDescription(elements *elem,const char* type,xmlNsPtr ns_ows,xmlNodePtr nc1){
    932   char *orderedFields[13];
     933void printFullDescription(int in,elements *elem,const char* type,xmlNsPtr ns_ows,xmlNodePtr nc1){
     934  const char *orderedFields[13];
    933935  orderedFields[0]="mimeType";
    934936  orderedFields[1]="encoding";
     
    10011003    iotype* _tmp=e->defaults;
    10021004    int datatype=0;
    1003     bool hasDefault=false;
    10041005    bool hasUOM=false;
    10051006    bool hasUOM1=false;
     
    10791080             * RangeClosure: Table 47 OGC Web Services Common Standard
    10801081             */
    1081             char *tmp="closed";
     1082            const char *tmp="closed";
    10821083            if(orig[0]=='[' && orig[strlen(orig)-1]=='[')
    10831084              tmp="closed-open";
     
    11461147            tmp0=getMap(tmp1,"rangeClosure");
    11471148            if(tmp0!=NULL){
    1148               char *tmp="closed";
     1149              const char *tmp="closed";
    11491150              if(strcasecmp(tmp0->value,"co")==0)
    11501151                tmp="closed-open";
     
    11901191   
    11911192     
    1192     int avcnt=0;
    1193     int dcnt=0;
    11941193    int oI=0;
    11951194    for(oI=0;oI<13;oI++)
     
    12471246
    12481247      map* metadata=e->metadata;
    1249       xmlNodePtr n;
     1248      xmlNodePtr n=NULL;
    12501249      int xlinkId=zooXmlAddNs(n,"http://www.w3.org/1999/xlink","xlink");
    12511250      xmlNsPtr ns_xlink=usedNs[xlinkId];
     
    13531352    }
    13541353
    1355     if(datatype==1 &&
     1354    if(in>0 && datatype==1 &&
    13561355       getMap(_tmp->content,"AllowedValues")==NULL &&
    13571356       getMap(_tmp->content,"range")==NULL &&
     
    13891388
    13901389void printProcessResponse(maps* m,map* request, int pid,service* serv,const char* service,int status,maps* inputs,maps* outputs){
    1391   xmlNsPtr ns,ns1,ns_ows,ns_xlink,ns_xsi;
    1392   xmlNodePtr nr,n,nc,nc1,nc2,nc3,pseudor;
     1390  xmlNsPtr ns,ns_ows,ns_xlink,ns_xsi;
     1391  xmlNodePtr nr,n,nc,nc1=NULL,nc3;
    13931392  xmlDocPtr doc;
    1394   xmlChar *xmlbuff;
    1395   int buffersize;
    13961393  time_t time1; 
    13971394  time(&time1);
     
    15741571  if(lineage!=NULL && strcasecmp(lineage->value,"true")==0){
    15751572    nc = xmlNewNode(ns, BAD_CAST "DataInputs");
    1576     int i;
    15771573    maps* mcursor=inputs;
    15781574    elements* scursor=NULL;
     
    17271723
    17281724void printOutputDefinitions(xmlDocPtr doc,xmlNodePtr nc,xmlNsPtr ns_wps,xmlNsPtr ns_ows,elements* e,map* m,const char* type){
    1729   xmlNodePtr nc1,nc2,nc3;
     1725  xmlNodePtr nc1;
    17301726  nc1=xmlNewNode(ns_wps, BAD_CAST type);
    17311727  map *tmp=NULL; 
     
    17741770  xmlAddChild(nc1,nc2);
    17751771  xmlAddChild(nc,nc1);
    1776   // Extract Title required to be first element in the ZCFG file !
    1777   bool isTitle=TRUE;
    17781772  if(e!=NULL)
    17791773    tmp=getMap(e->content,"Title");
     
    18361830         strcasecmp(tmp->name,"schema")==0 ||
    18371831         strcasecmp(tmp->name,"datatype")==0 ||
    1838          strcasecmp(tmp->name,"uom")==0)
     1832         strcasecmp(tmp->name,"uom")==0){
    18391833#ifdef USE_MS
    18401834        if(testMap==NULL || (testMap!=NULL && strncasecmp(testMap->value,"text/xml",8)==0)){
    18411835#endif
    1842         xmlNewProp(nc3,BAD_CAST tmp->name,BAD_CAST tmp->value);
     1836          xmlNewProp(nc3,BAD_CAST tmp->name,BAD_CAST tmp->value);
    18431837#ifdef USE_MS
    18441838        }
    1845       else
    1846         if(strcasecmp(tmp->name,"mimeType")==0)
    1847           if(testMap!=NULL)
    1848             xmlNewProp(nc3,BAD_CAST tmp->name,BAD_CAST testMap->value);
    1849           else
    1850             xmlNewProp(nc3,BAD_CAST tmp->name,BAD_CAST tmp->value);
    1851 #endif
     1839        else
     1840          if(strcasecmp(tmp->name,"mimeType")==0){
     1841            if(testMap!=NULL)
     1842              xmlNewProp(nc3,BAD_CAST tmp->name,BAD_CAST testMap->value);
     1843            else
     1844              xmlNewProp(nc3,BAD_CAST tmp->name,BAD_CAST tmp->value);
     1845          }
     1846#endif
     1847      }
    18521848      tmp=tmp->next;
    18531849      xmlAddChild(nc2,nc3);
     
    18971893      if((tmp1!=NULL && strncmp(tmp1->value,"base64",6)==0)
    18981894         || (tmp2!=NULL && (strncmp(tmp2->value,"image/",6)==0 ||
    1899                             (strncmp(tmp2->value,"application/",12)==0) &&
    1900                             strncmp(tmp2->value,"application/json",16)!=0&&
    1901                             strncmp(tmp2->value,"application/x-javascript",24)!=0&&
    1902                             strncmp(tmp2->value,"application/vnd.google-earth.kml",32)!=0)
     1895                            (strncmp(tmp2->value,"application/",12)==0 &&
     1896                             strncmp(tmp2->value,"application/json",16)!=0&&
     1897                             strncmp(tmp2->value,"application/x-javascript",24)!=0&&
     1898                             strncmp(tmp2->value,"application/vnd.google-earth.kml",32)!=0))
    19031899             )) {
    19041900        map* rs=getMap(m->content,"size");
     
    19061902        if(rs==NULL){
    19071903          char tmp1[1024];
    1908           sprintf(tmp1,"%d",strlen(tmp3->value));
     1904          sprintf(tmp1,"%u",strlen(tmp3->value));
    19091905          rs=createMap("size",tmp1);
    19101906          isSized=false;
     
    19241920          if(strncmp(tmp2->value,"text/xml",8)==0 ||
    19251921             strncmp(tmp2->value,"application/vnd.google-earth.kml",32)==0){
    1926             xmlDocPtr doc =
    1927               xmlParseMemory(tmp3->value,strlen(tmp3->value));
     1922            int li=zooXmlAddDoc(tmp3->value);
     1923            xmlDocPtr doc = iDocs[li];
    19281924            xmlNodePtr ir = xmlDocGetRootElement(doc);
    19291925            xmlAddChild(nc3,ir);
     
    19591955         strcasecmp(tmp->name,"schema")==0 ||
    19601956         strcasecmp(tmp->name,"datatype")==0 ||
    1961          strcasecmp(tmp->name,"uom")==0)
     1957         strcasecmp(tmp->name,"uom")==0){
    19621958#ifdef USE_MS
    19631959        if(testMap!=NULL  && strncasecmp(testMap->value,"text/xml",8)!=0){
     
    19671963        else
    19681964#endif
    1969         xmlNewProp(nc3,BAD_CAST tmp->name,BAD_CAST tmp->value);
     1965          xmlNewProp(nc3,BAD_CAST tmp->name,BAD_CAST tmp->value);
     1966      }
    19701967      tmp=tmp->next;
    19711968      xmlAddChild(nc2,nc3);
     
    19831980  xmlAddChild(root,nc2);
    19841981  map* tmp=amap;
    1985   char *tmp2[2];
     1982  const char *tmp2[2];
    19861983  tmp2[0]="Title";
    19871984  tmp2[1]="Abstract";
     
    20042001    }
    20052002    else
    2006       return "UTF-8";
     2003      return (char*)"UTF-8";
    20072004  }
    20082005  else
    2009     return "UTF-8"; 
     2006    return (char*)"UTF-8"; 
    20102007}
    20112008
     
    20172014    }
    20182015    else
    2019       return "1.0.0";
     2016      return (char*)"1.0.0";
    20202017  }
    20212018  else
    2022     return "1.0.0";
     2019    return (char*)"1.0.0";
    20232020}
    20242021
     
    20352032  maps* tmpMap=getMaps(m,"main");
    20362033  char *encoding=getEncoding(tmpMap);
    2037   char *exceptionCode;
     2034  const char *exceptionCode;
    20382035 
    20392036  map* tmp=getMap(s,"code");
     
    20872084xmlNodePtr createExceptionReportNode(maps* m,map* s,int use_ns){
    20882085 
    2089   int buffersize;
    2090   xmlChar *xmlbuff;
    2091   xmlNsPtr ns,ns_ows,ns_xlink,ns_xsi;
    2092   xmlNodePtr n,nc,nc1,nc2;
    2093 
    2094   maps* tmpMap=getMaps(m,"main");
     2086  xmlNsPtr ns,ns_xsi;
     2087  xmlNodePtr n,nc,nc1;
    20952088
    20962089  int nsid=zooXmlAddNs(NULL,"http://www.opengis.net/ows","ows");
     
    21012094  n = xmlNewNode(ns, BAD_CAST "ExceptionReport");
    21022095  if(use_ns==1){
    2103     ns_ows=xmlNewNs(n,BAD_CAST "http://www.opengis.net/ows/1.1",NULL);
     2096    xmlNewNs(n,BAD_CAST "http://www.opengis.net/ows/1.1",NULL);
    21042097    int xsiId=zooXmlAddNs(n,"http://www.w3.org/2001/XMLSchema-instance","xsi");
    21052098    ns_xsi=usedNs[xsiId];
     
    21262119  tmp=getMap(s,"text");
    21272120  nc1 = xmlNewNode(ns, BAD_CAST "ExceptionText");
    2128   nc2=NULL;
    21292121  if(tmp!=NULL){
    21302122    xmlNodeSetContent(nc1, BAD_CAST tmp->value);
     
    21542146  if(tmpSess!=NULL){
    21552147    map *_tmp=getMapFromMaps(m,"lenv","cookie");
    2156     char* sessId;
     2148    char* sessId=NULL;
    21572149    if(_tmp!=NULL){
    21582150      printf("Set-Cookie: %s; HttpOnly\r\n",_tmp->value);
     
    24932485      if(type==0){
    24942486        map* tmpMapMinO=getMap(tmpInputs->content,"minOccurs");
    2495         if(tmpMapMinO!=NULL)
     2487        if(tmpMapMinO!=NULL){
    24962488          if(atoi(tmpMapMinO->value)>=1){
    24972489            freeMaps(&tmpMaps2);
     
    25052497              addToMap(tmpMaps2->content,"minOccurs",tmpMapMinO->value);
    25062498          }
     2499        }
    25072500        map* tmpMaxO=getMap(tmpInputs->content,"maxOccurs");
    2508         if(tmpMaxO!=NULL)
     2501        if(tmpMaxO!=NULL){
    25092502          if(tmpMaps2->content==NULL)
    25102503            tmpMaps2->content=createMap("maxOccurs",tmpMaxO->value);
    25112504          else
    25122505            addToMap(tmpMaps2->content,"maxOccurs",tmpMaxO->value);
     2506        }
    25132507        map* tmpMaxMB=getMap(tmpInputs->content,"maximumMegabytes");
    2514         if(tmpMaxMB!=NULL)
     2508        if(tmpMaxMB!=NULL){
    25152509          if(tmpMaps2->content==NULL)
    25162510            tmpMaps2->content=createMap("maximumMegabytes",tmpMaxMB->value);
    25172511          else
    25182512            addToMap(tmpMaps2->content,"maximumMegabytes",tmpMaxMB->value);
     2513        }
    25192514      }
    25202515
     
    25722567        }
    25732568        map* tmpMaxMB=getMap(tmpInputs->content,"maximumMegabytes");
    2574         if(tmpMaxMB!=NULL)
     2569        if(tmpMaxMB!=NULL){
    25752570          if(tmpMaps->content==NULL)
    25762571            tmpMaps->content=createMap("maximumMegabytes",tmpMaxMB->value);
    25772572          else
    25782573            addToMap(tmpMaps->content,"maximumMegabytes",tmpMaxMB->value);
     2574        }
    25792575        /**
    25802576         * Parsing BoundingBoxData, fill the following map and then add it to
     
    27462742void printBoundingBox(xmlNsPtr ns_ows,xmlNodePtr n,map* boundingbox){
    27472743
    2748   xmlNodePtr bb,lw,uc;
     2744  xmlNodePtr lw=NULL,uc=NULL;
    27492745
    27502746  map* tmp=getMap(boundingbox,"value");
     
    28762872    fprintf(stderr,"MIMETYPE: %s\n",mimeType);
    28772873#endif
    2878     fwrite(mimeType,sizeof(char),strlen(mimeType),fo);
     2874    fwrite(mimeType,1,strlen(mimeType),fo);
    28792875    fclose(fo);
    28802876
     
    29142910  char* cached=isInCache(*m,url);
    29152911  char *mimeType=NULL;
    2916   int fsize;
    2917   int hasF=-1;
     2912  int fsize=0;
    29182913  if(cached!=NULL){
    29192914    struct stat f_status;
     
    29222917      fcontent=(char*)malloc(sizeof(char)*(f_status.st_size+1));
    29232918      FILE* f=fopen(cached,"rb");
    2924       int len=fread(fcontent,f_status.st_size,1,f);
     2919      fread(fcontent,f_status.st_size,1,f);
    29252920      fsize=f_status.st_size;
    29262921      fcontent[fsize]=0;
     
    29322927      mimeType=(char*)malloc(sizeof(char)*(f_status.st_size+1));
    29332928      FILE* f=fopen(cached,"rb");
    2934       int len=fread(mimeType,f_status.st_size,1,f);
     2929      fread(mimeType,f_status.st_size,1,f);
    29352930      mimeType[f_status.st_size]=0;
    29362931      fclose(f);
     
    29702965  if(cached==NULL)
    29712966    addToCache(*m,url,fcontent,mimeType,fsize);
    2972   else{
    2973     free(fcontent);
    2974     free(mimeType);
    2975     free(cached);
    2976   }
     2967  free(fcontent);
     2968  free(mimeType);
     2969  free(cached);
    29772970  return 0;
    29782971}
     
    29922985}
    29932986
     2987
    29942988char *readVSIFile(maps* conf,const char* dataSource){
    29952989    VSILFILE * fichier=VSIFOpenL(dataSource,"rb");
     
    30042998    }
    30052999    char *res1=(char *)malloc(file_status.st_size*sizeof(char));
    3006     VSIFReadL(res1,1,(file_status.st_size)*sizeof(char),fichier);
     3000    VSIFReadL(res1,1,file_status.st_size*sizeof(char),fichier);
     3001    res1[file_status.st_size-1]=0;
    30073002    VSIFCloseL(fichier);
    30083003    VSIUnlink(dataSource);
     
    30653060}
    30663061
    3067 
    30683062int updateStatus( maps* conf, const int percentCompleted, const char* message ){
    30693063  char tmp[4];
     
    30983092    tmp->value=(char*) malloc((numberOfBytes+1)*sizeof(char));
    30993093    memcpy(tmp->value,data,numberOfBytes);
    3100     sprintf(size,"%d",numberOfBytes);
     3094    sprintf(size,"%lu",numberOfBytes);
    31013095    setMapInMaps(outputs,parameterName,"size",size);
    31023096  }
  • trunk/zoo-project/zoo-kernel/service_internal.h

    r478 r490  
    5757#endif
    5858#include <dirent.h>
     59#include "ulinet.h"
     60
    5961#include "service.h"
    6062#include <openssl/sha.h>
     
    6466#include <openssl/bio.h>
    6567#include <openssl/buffer.h>
    66 
    67 #include "ulinet.h"
    6868
    6969extern   int conf_read(const char*,maps*);
     
    8888  static xmlNsPtr usedNs[10];
    8989  static char* nsName[10];
     90  static xmlDocPtr iDocs[10];
    9091  static int nbNs=0;
     92  static int nbDocs=0;
    9193
    9294  int getServiceFromYAML(maps*,char*,service**,char *name);
     
    112114  int zooXmlAddNs(xmlNodePtr,const char*,const char*);
    113115  void zooXmlCleanupNs();
     116
     117  int zooXmlAddDoc(xmlNodePtr,const char*,const char*);
     118  void zooXmlCleanupDocs();
    114119 
    115120  void printExceptionReportResponse(maps*,map*);
     
    120125  xmlNodePtr printDescribeProcessHeader(xmlDocPtr,const char*,maps*);
    121126  void printDescribeProcessForProcess(maps*,xmlNodePtr,service*);
    122   void printFullDescription(elements*,const char*,xmlNsPtr,xmlNodePtr);
     127  void printFullDescription(int,elements*,const char*,xmlNsPtr,xmlNodePtr);
    123128  void printDocument(maps*,xmlDocPtr,int);
    124129  void printDescription(xmlNodePtr,xmlNsPtr,const char*,map*);
  • trunk/zoo-project/zoo-kernel/service_internal_ms.c

    r475 r490  
    129129  if(strncasecmp(rformat->value,"image/tiff",10)==0)
    130130    proto=2;
    131   if(protoMap!=NULL)
     131  if(protoMap!=NULL){
    132132    if(strncasecmp(protoMap->value,"WMS",3)==0)
    133133      proto=0;
    134     else if(strncasecmp(protoMap->value,"WFS",3)==0)
    135       proto=1;
    136     else
    137       proto=2;
    138  
     134    else{
     135      if(strncasecmp(protoMap->value,"WFS",3)==0)
     136        proto=1;
     137      else
     138        proto=2;
     139    }
     140  }
    139141  char *protoVersion=options[proto][1];
    140142  if(proto==1){
     
    278280      msLoadProjectionStringEPSG(&myLayer->projection,msSrs->value);
    279281      char tmpSrs[128];
    280       sprintf(tmpSrs,"%s EPSG:4326 EPSG:900913",msSrs);
     282      sprintf(tmpSrs,"%s EPSG:4326 EPSG:900913",msSrs->value);
    281283      msInsertHashTable(&(m->web.metadata),"ows_srs",tmpSrs);
    282284      msInsertHashTable(&(myLayer->metadata),"ows_srs",tmpSrs);
     
    574576      msInsertHashTable(&(myLayer->metadata), "ows_srs", "EPSG:4326 EPSG:900913");
    575577    }
    576 
    577     map* crs=getMap(output->content,"crs");
    578     map* isGeo=getMap(output->content,"crs_isGeographic");
    579578
    580579    OGREnvelope oExt;
  • trunk/zoo-project/zoo-kernel/service_internal_python.c

    r478 r490  
    107107  Py_DECREF(tmp);
    108108
    109   ZooError = PyErr_NewException("zoo.error", NULL, NULL);
     109  ZooError = PyErr_NewException((char*)"zoo.error", NULL, NULL);
    110110  Py_INCREF(ZooError);
    111111  PyModule_AddObject(module, "error", ZooError);
     
    138138  }
    139139  else{
    140     python_path=".";
     140    python_path=(char*)".";
    141141  }
    142142  tmp=NULL;
     
    243243        if(PyString_Check(trace)){
    244244          char *tpbt=zStrdup(pbt);
    245           sprintf(pbt,"%s\n%s\0",tpbt,PyString_AsString(trace));
     245          sprintf(pbt,"%s\n%s",tpbt,PyString_AsString(trace));
    246246          free(tpbt);
    247247        }
     
    261261          sprintf(pbt,"%s\nUnable to run your python process properly. Please check the following messages : %s",tpbt,PyString_AsString(trace));
    262262        else
    263           sprintf(pbt,"%s \n Unable to run your python process properly. Unable to provide any futher informations. %s",tpbt);
     263          sprintf(pbt,"%s \n Unable to run your python process properly. Unable to provide any futher informations.",tpbt);
    264264        free(tpbt);
    265265        map* err=createMap("text",pbt);
     
    492492      tmpR->value[size]=0;
    493493      char sin[1024];
    494       sprintf(sin,"%d",size);
     494      sprintf(sin,"%ld",size);
    495495      addToMap(res,"size",sin);
    496496    }else{
     
    546546  /* now update the map */
    547547  {
    548     PyObject* lenv = PyMapping_GetItemString(confdict, "lenv");
     548    PyObject* lenv = PyMapping_GetItemString(confdict, (char *)"lenv");
    549549    if (lenv && PyMapping_Check(lenv)){
    550550      PyObject* valobj = PyString_FromString(status);
    551       PyMapping_SetItemString(lenv, "status", valobj);
     551      PyMapping_SetItemString(lenv, (char *)"status", valobj);
    552552      Py_DECREF(valobj);
    553553    }
  • trunk/zoo-project/zoo-kernel/service_yaml.c

    r465 r490  
    144144    case YAML_SCALAR_TOKEN: 
    145145      if(ttype==0){
    146         cur_key=zStrdup(token.data.scalar.value);
     146        cur_key=zStrdup((char *)token.data.scalar.value);
    147147      }
    148148      if(ttype==1){
    149149        if(current_content==NULL){
    150           current_content=createMap(cur_key,token.data.scalar.value);
     150          current_content=createMap(cur_key,(char *)token.data.scalar.value);
    151151        }else{
    152           addToMap(current_content,cur_key,token.data.scalar.value);
     152          addToMap(current_content,cur_key,(char *)token.data.scalar.value);
    153153        }
    154154        free(cur_key);
     
    156156      }
    157157
    158       if(ttype==0 && blevel==0 && level==0 && strcasecmp(token.data.scalar.value,"MetaData")==0 && blevel==0){
     158      if(ttype==0 && blevel==0 && level==0 && strcasecmp((char *)token.data.scalar.value,"MetaData")==0 && blevel==0){
    159159        addMapToMap(&my_service->content,current_content);
    160160#ifdef DEBUG_YAML
     
    166166        wait_metadata=1;
    167167      }
    168       if(ttype==0 && blevel>0 && level>0 && strcasecmp(token.data.scalar.value,"MetaData")==0){
     168      if(ttype==0 && blevel>0 && level>0 && strcasecmp((char *)token.data.scalar.value,"MetaData")==0){
    169169        if(current_element->content==NULL && current_content!=NULL)
    170170          addMapToMap(&current_element->content,current_content);
     
    178178        wait_metadata=1;
    179179      }
    180       if(ttype==0 && strcasecmp(token.data.scalar.value,"inputs")==0 && blevel==0){
     180      if(ttype==0 && strcasecmp((char *)token.data.scalar.value,"inputs")==0 && blevel==0){
    181181        if(wait_metadata>0){
    182182          addMapToMap(&my_service->metadata,current_content);
     
    196196        level++;
    197197      }
    198       if(ttype==0 && strcasecmp(token.data.scalar.value,"outputs")==0 && blevel==1){
     198      if(ttype==0 && strcasecmp((char *)token.data.scalar.value,"outputs")==0 && blevel==1){
    199199        level++;
    200200#ifdef DEBUG_YAML
     
    229229        }
    230230      }
    231       if(level==1 && strcasecmp(token.data.scalar.value,"default")==0){
     231      if(level==1 && strcasecmp((char *)token.data.scalar.value,"default")==0){
    232232        ilevel=0;
    233233      }
    234       if(level==1 && strcasecmp(token.data.scalar.value,"supported")==0){
     234      if(level==1 && strcasecmp((char *)token.data.scalar.value,"supported")==0){
    235235#ifdef DEBUG_YAML
    236236        dumpMap(current_content);
     
    271271
    272272
    273       if(strncasecmp(token.data.scalar.value,"ComplexData",11)==0 || strncasecmp(token.data.scalar.value,"LiteralData",10)==0
    274          || strncasecmp(token.data.scalar.value,"ComplexOutput",13)==0 || strncasecmp(token.data.scalar.value,"LiteralOutput",12)==0
    275          || strncasecmp(token.data.scalar.value,"BoundingBoxOutput",13)==0 || strncasecmp(token.data.scalar.value,"BoundingBoxData",12)==0){
    276         current_element->format=zStrdup(token.data.scalar.value);
     273      if(strncasecmp((char *)token.data.scalar.value,"ComplexData",11)==0 ||
     274         strncasecmp((char *)token.data.scalar.value,"LiteralData",10)==0 ||
     275         strncasecmp((char *)token.data.scalar.value,"ComplexOutput",13)==0 ||
     276         strncasecmp((char *)token.data.scalar.value,"LiteralOutput",12)==0 ||
     277         strncasecmp((char *)token.data.scalar.value,"BoundingBoxOutput",13)==0 ||
     278         strncasecmp((char *)token.data.scalar.value,"BoundingBoxData",12)==0){
     279        current_element->format=zStrdup((char *)token.data.scalar.value);
    277280        free(cur_key);
    278281        cur_key=NULL;
     
    324327        plevel=level;
    325328        current_element=(elements*)malloc(ELEMENTS_SIZE);
    326         current_element->name=strdup(token.data.scalar.value);
     329        current_element->name=zStrdup((char *)token.data.scalar.value);
    327330        current_element->content=NULL;
    328331        current_element->metadata=NULL;
     
    367370        plevel=level;
    368371        current_element=(elements*)malloc(ELEMENTS_SIZE);
    369         current_element->name=strdup(token.data.scalar.value);
     372        current_element->name=zStrdup((char *)token.data.scalar.value);
    370373        current_element->content=NULL;
    371374        current_element->metadata=NULL;
  • trunk/zoo-project/zoo-kernel/ulinet.c

    r478 r490  
    2727
    2828#define _ULINET
     29#define MAX_WAIT_MSECS 180*1000 /* Wait max. 180 seconds */
    2930#include "ulinet.h"
    3031#include <assert.h>
     
    162163#endif
    163164
    164 HINTERNET InternetOpen(char* lpszAgent,int dwAccessType,char* lpszProxyName,char* lpszProxyBypass,int dwFlags){
    165  
     165HINTERNET InternetOpen(char* lpszAgent,int dwAccessType,char* lpszProxyName,char* lpszProxyBypass,int dwFlags){ 
    166166  HINTERNET ret;
    167   struct MemoryStruct header;
     167  ret.handle=curl_multi_init();
     168  ret.ihandle=NULL;
    168169  ret.hasCacheFile=0;
    169170  ret.nDataAlloc = 0;
    170171  ret.mimeType = NULL;
    171 
    172   curl_global_init(CURL_GLOBAL_ALL|CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32);
    173   ret.handle=curl_easy_init();
    174 
    175   curl_easy_setopt(ret.handle, CURLOPT_COOKIEFILE, "ALL");
    176 #ifndef TIGER
    177   curl_easy_setopt(ret.handle, CURLOPT_COOKIELIST, "ALL");
    178 #endif
    179   curl_easy_setopt(ret.handle, CURLOPT_USERAGENT, lpszAgent);
    180  
    181   curl_easy_setopt(ret.handle,CURLOPT_FOLLOWLOCATION,1);
    182   curl_easy_setopt(ret.handle,CURLOPT_MAXREDIRS,3);
    183  
    184   header.memory=NULL;
    185   header.size = 0;
    186 
    187   curl_easy_setopt(ret.handle, CURLOPT_HEADERFUNCTION, header_write_data);
    188   curl_easy_setopt(ret.handle, CURLOPT_WRITEHEADER, (void *)&header);
    189 
    190 #ifdef MSG_LAF_VERBOSE
    191   curl_easy_setopt(ret.handle, CURLOPT_VERBOSE, 1);
    192 #endif
    193 
     172  ret.agent=strdup(lpszAgent);
    194173  return ret;
    195174}
     
    206185    handle.nDataAlloc = handle.nDataLen = 0;
    207186  }
     187  if(handle.ihandle!=NULL)
     188    curl_easy_cleanup(handle.ihandle);
    208189  if(handle.handle)
    209     curl_easy_cleanup(handle.handle);
    210   curl_global_cleanup();
     190    curl_multi_cleanup(handle.handle);
     191  free(handle.agent);
    211192}
    212193
     
    214195
    215196  char filename[255];
     197  struct MemoryStruct header;
     198
    216199  hInternet.nDataLen = 0;
    217200
    218201  hInternet.nDataAlloc = 0;
    219202  hInternet.pabyData= NULL;
     203
     204  if(hInternet.ihandle!=NULL)
     205    curl_easy_cleanup(hInternet.ihandle);
     206  hInternet.ihandle=curl_easy_init( );
     207  curl_easy_setopt(hInternet.ihandle, CURLOPT_COOKIEFILE, "ALL");
     208#ifndef TIGER
     209  curl_easy_setopt(hInternet.ihandle, CURLOPT_COOKIELIST, "ALL");
     210#endif
     211  curl_easy_setopt(hInternet.ihandle, CURLOPT_USERAGENT, hInternet.agent);
     212 
     213  curl_easy_setopt(hInternet.ihandle,CURLOPT_FOLLOWLOCATION,1);
     214  curl_easy_setopt(hInternet.ihandle,CURLOPT_MAXREDIRS,3);
     215 
     216  header.memory=NULL;
     217  header.size = 0;
     218
     219  curl_easy_setopt(hInternet.ihandle, CURLOPT_HEADERFUNCTION, header_write_data);
     220  curl_easy_setopt(hInternet.ihandle, CURLOPT_WRITEHEADER, (void *)&header);
     221
     222#ifdef MSG_LAF_VERBOSE
     223  curl_easy_setopt(hInternet.ihandle, CURLOPT_VERBOSE, 1);
     224#endif
     225
    220226     
    221227  switch(dwFlags)
     
    223229    case INTERNET_FLAG_NO_CACHE_WRITE:   
    224230      hInternet.hasCacheFile=-1;
    225       curl_easy_setopt(hInternet.handle, CURLOPT_WRITEFUNCTION, write_data_into);
    226       curl_easy_setopt(hInternet.handle, CURLOPT_WRITEDATA, &hInternet);
     231      curl_easy_setopt(hInternet.ihandle, CURLOPT_WRITEFUNCTION, write_data_into);
     232      curl_easy_setopt(hInternet.ihandle, CURLOPT_WRITEDATA, &hInternet);
    227233      break;
    228234    default:
     
    236242   
    237243      hInternet.hasCacheFile=1;
    238       curl_easy_setopt(hInternet.handle, CURLOPT_WRITEFUNCTION, NULL);
    239       curl_easy_setopt(hInternet.handle, CURLOPT_WRITEDATA, hInternet.file);
     244      curl_easy_setopt(hInternet.ihandle, CURLOPT_WRITEFUNCTION, NULL);
     245      curl_easy_setopt(hInternet.ihandle, CURLOPT_WRITEDATA, hInternet.file);
    240246      hInternet.nDataLen=0;
    241247      break;
     
    250256#endif
    251257    //curl_easy_setopt(hInternet.handle,CURLOPT_COOKIE,lpszHeaders);
    252     curl_easy_setopt(hInternet.handle,CURLOPT_POST,1);
     258    curl_easy_setopt(hInternet.ihandle,CURLOPT_POST,1);
    253259#ifdef ULINET_DEBUG
    254260    fprintf(stderr,"** (%s) %d **\n",lpszHeaders,dwHeadersLength);
    255     curl_easy_setopt(hInternet.handle,CURLOPT_VERBOSE,1);
    256 #endif
    257     curl_easy_setopt(hInternet.handle,CURLOPT_POSTFIELDS,lpszHeaders);
     261    curl_easy_setopt(hInternet.ihandle,CURLOPT_VERBOSE,1);
     262#endif
     263    curl_easy_setopt(hInternet.ihandle,CURLOPT_POSTFIELDS,lpszHeaders);
    258264    //curl_easy_setopt(hInternet.handle,CURLOPT_POSTFIELDSIZE,dwHeadersLength+1);
    259265    if(hInternet.header!=NULL)
    260       curl_easy_setopt(hInternet.handle,CURLOPT_HTTPHEADER,hInternet.header);
    261   }
    262 
    263   curl_easy_setopt(hInternet.handle,CURLOPT_URL,lpszUrl);
    264   curl_easy_perform(hInternet.handle);
    265   curl_easy_getinfo(hInternet.handle,CURLINFO_CONTENT_TYPE,&hInternet.mimeType);
     266      curl_easy_setopt(hInternet.ihandle,CURLOPT_HTTPHEADER,hInternet.header);
     267  }
     268
     269  curl_easy_setopt(hInternet.ihandle,CURLOPT_URL,lpszUrl);
     270
     271  curl_multi_add_handle(hInternet.handle,hInternet.ihandle);
     272 
     273  int still_running=0;
     274  int msgs_left=0;
     275  do{
     276    curl_multi_perform(hInternet.handle, &still_running);
     277  }while(still_running);
     278
     279  CURLMsg *msg=NULL;
     280  while ((msg = curl_multi_info_read(hInternet.handle, &msgs_left))) {
     281    if (msg->msg == CURLMSG_DONE) {
     282      CURL *eh=NULL;
     283      eh = msg->easy_handle;
     284      curl_easy_getinfo(eh,CURLINFO_CONTENT_TYPE,&hInternet.mimeType);
     285    }
     286    else {
     287      fprintf(stderr, "error: after curl_multi_info_read(), CURLMsg=%d\n", msg->msg);
     288    }
     289  }
     290  curl_multi_remove_handle(hInternet.handle, hInternet.ihandle);
     291
    266292#ifdef ULINET_DEBUG
    267293  fprintf(stderr,"DEBUG MIMETYPE: %s\n",hInternet.mimeType);
     
    274300  memset(&CCookie[0],0,1024);
    275301#ifndef TIGER
    276   curl_easy_setopt(hInternet.handle, CURLOPT_COOKIELIST, "ALL");
     302  curl_easy_setopt(hInternet.ihandle, CURLOPT_COOKIELIST, "ALL");
    277303#endif
    278304  return 1;
  • trunk/zoo-project/zoo-kernel/ulinet.h

    r471 r490  
    6464
    6565typedef struct {
    66   CURLSH *handle;
     66  CURLM *handle;
     67  CURL *ihandle;
    6768  struct curl_slist *header;
    6869  char* filename;
     70  char *agent;
    6971  FILE* file;
    7072  size_t size;
  • trunk/zoo-project/zoo-kernel/zoo_loader.c

    r465 r490  
    5454
    5555xmlXPathObjectPtr extractFromDoc(xmlDocPtr,const char*);
    56 int runRequest(map*);
     56int runRequest(map**);
    5757
    5858using namespace std;
     
    9191  if(strncmp(cgiContentType,"text/xml",8)==0 ||
    9292     strncasecmp(cgiRequestMethod,"post",4)==0){
    93     if(cgiContentLength==NULL){
    94        cgiContentLength=0;
     93    if(cgiContentLength==0){
    9594       char *buffer=new char[2];
    9695       char *res=NULL;
    9796       int r=0;
    9897       while((r=fread(buffer,sizeof(char),1,cgiIn))){
     98         buffer[1]=0;
    9999         cgiContentLength+=r;
    100100         if(res==NULL){
    101            res=(char*)malloc(1*sizeof(char));
     101           res=(char*)malloc(2*sizeof(char));
    102102           sprintf(res,"%s",buffer);
    103103         }
    104104         else{
    105            res=(char*)realloc(res,(cgiContentLength+1)*sizeof(char));
    106105           char *tmp=zStrdup(res);
     106           res=(char*)realloc(res,(strlen(tmp)+2)*sizeof(char));
    107107           sprintf(res,"%s%s",tmp,buffer);
    108108           free(tmp);
    109109         }
    110110       }
     111       delete[] buffer;
    111112       if(res==NULL && (strQuery==NULL || strlen(strQuery)==0)){
    112113         return errorException(NULL,"ZOO-Kernel failed to process your request cause the request was emtpty.","InternalError",NULL);
     
    114115         if(strQuery==NULL || strlen(strQuery)==0)
    115116           tmpMap=createMap("request",res);
    116             }
     117       }
     118       if(res!=NULL)
     119         free(res);
    117120    }else{
    118121      char *buffer=new char[cgiContentLength+1];
    119       if(fread(buffer,sizeof(char),cgiContentLength,cgiIn)>=0){
     122      if(fread(buffer,sizeof(char),cgiContentLength,cgiIn)>0){
    120123        buffer[cgiContentLength]=0;
    121124        tmpMap=createMap("request",buffer);
     
    146149          arrayStep++;
    147150        }
    148         tmpMap=createMap("request",buffer);
     151        if(tmpMap!=NULL)
     152          addToMap(tmpMap,"request",buffer);
     153        else
     154          tmpMap=createMap("request",buffer);
    149155      }
    150156      delete[]buffer;
     
    202208#endif
    203209     ){
    204     /**
    205      * First include the MetaPath and the ServiceProvider default parameters
    206      * (which should be always available in GET params so in cgiQueryString)
    207      */
    208     char *str1;
    209     str1=cgiQueryString;
    210210    /**
    211211     * Store the original XML request in xrequest map
     
    232232            }
    233233          }
     234          xmlXPathFreeObject(reqptr);
    234235        }
    235236      }
     
    239240      tval=NULL;
    240241      tval = (char*) xmlGetProp(cur,BAD_CAST "service");
    241       if(tval!=NULL)
     242      if(tval!=NULL){
    242243        addToMap(tmpMap,"service",tval);
     244        xmlFree(tval);
     245      }
    243246      tval=NULL;
    244247      tval = (char*) xmlGetProp(cur,BAD_CAST "language");
    245       if(tval!=NULL)
     248      if(tval!=NULL){
    246249        addToMap(tmpMap,"language",tval);
     250        xmlFree(tval);
     251      }
    247252      const char* requests[3]={"GetCapabilities","DescribeProcess","Execute"};
    248253      for(int j=0;j<3;j++){
     
    256261#endif
    257262          if(req!=NULL && req->nodeNr==1){
     263            if(t1->value!=NULL)
     264              free(t1->value);
    258265            t1->value=zStrdup(requests[j]);
    259266            j=2;
     
    272279        tval=NULL;
    273280        tval = (char*) xmlGetProp(cur,BAD_CAST "version");
    274         if(tval!=NULL)
     281        if(tval!=NULL){
    275282          addToMap(tmpMap,"version",tval);
     283          xmlFree(tval);
     284        }
    276285        tval = (char*) xmlGetProp(cur,BAD_CAST "language");
    277         if(tval!=NULL)
     286        if(tval!=NULL){
    278287          addToMap(tmpMap,"language",tval);
     288          xmlFree(tval);
     289        }
    279290        xmlXPathObjectPtr idptr=extractFromDoc(doc,"/*/*[local-name()='Identifier']");
    280291        if(idptr!=NULL){
     
    343354  if(strQuery!=NULL)
    344355    free(strQuery);
    345   runRequest(tmpMap);
     356
     357  runRequest(&tmpMap);
    346358
    347359  /**
    348360   * Required but can't be made after executing a process using POST requests.
    349361   */
    350   if(strncasecmp(cgiRequestMethod,"post",4)!=0 && count(tmpMap)!=1 && tmpMap!=NULL){
     362  if(/*strncasecmp(cgiRequestMethod,"post",4)!=0 && count(tmpMap)!=1 && */tmpMap!=NULL){
    351363    freeMap(&tmpMap);
    352364    free(tmpMap);
  • trunk/zoo-project/zoo-kernel/zoo_service_loader.c

    r488 r490  
    221221      sprintf(prefix,"%s.",dp->d_name);
    222222     
    223       map* tmpMap=getMapFromMaps(m,"lenv",tmp1);
     223      //map* tmpMap=getMapFromMaps(m,"lenv",tmp1);
    224224     
    225225      int res;
     
    467467          fprintf(stderr,"Function %s error %s\n",r_inputs->value,errstr);
    468468#endif
     469          *eres=-1;
    469470          return;
    470471        }
     
    661662#endif
    662663
    663 int runRequest(map* request_inputs)
     664int runRequest(map** inputs)
    664665{
    665 
     666 
    666667#ifndef USE_GDB
    667668  (void) signal(SIGSEGV,sig_handler);
     
    674675
    675676  map* r_inputs=NULL;
     677  map* request_inputs=*inputs;
    676678  maps* m=NULL;
    677 
    678679  char* REQUEST=NULL;
    679680  /**
     
    788789  if(request_inputs==NULL || r_inputs==NULL){
    789790    errorException(m, _("Parameter <request> was not specified"),"MissingParameterValue","request");
    790     freeMap(&request_inputs);
    791     free(request_inputs);
     791    if(count(request_inputs)==1){
     792      freeMap(&request_inputs);
     793      free(request_inputs);
     794    }
    792795    freeMaps(&m);
    793796    free(m);
     
    871874
    872875  if(strncasecmp(REQUEST,"GetCapabilities",15)==0){
    873     struct dirent *dp;
    874876#ifdef DEBUG
    875877    dumpMap(r_inputs);
     
    16221624#endif
    16231625                  if(hai==0){
    1624                     key=(char*)malloc((1+strlen((char*)val))*sizeof(char));
    1625                     snprintf(key,1+strlen((char*)val),"%s",(char*)val);
     1626                    key=zStrdup((char*)val);
    16261627                  }else{
    1627                     has=(char*)malloc((3+strlen((char*)val)+strlen(key))*sizeof(char));
     1628                    has=(char*)malloc((4+xmlStrlen(val)+strlen(key))*sizeof(char));
    16281629                    if(has == NULL){
    16291630                      return errorException(m, _("Unable to allocate memory."), "InternalError",NULL);
    16301631                    }
    1631                     snprintf(has,(3+strlen((char*)val)+strlen(key)),"%s: %s",key,(char*)val);
     1632                    snprintf(has,(3+xmlStrlen(val)+strlen(key)),"%s: %s",key,(char*)val);
     1633                    free(key);
    16321634#ifdef POST_DEBUG
    16331635                    fprintf(stderr,"%s\n",has);
    16341636#endif
    16351637                  }
     1638                  xmlFree(val);
    16361639                }
    16371640                hInternetP.header=curl_slist_append(hInternetP.header, has);
     
    16471650                  fprintf(stderr,"Body part found !!!\n",(char*)cur3->content);
    16481651#endif
    1649                   char *tmp=new char[cgiContentLength];
     1652                  char *tmp=(char*)malloc(cgiContentLength+1*sizeof(char));
    16501653                  memset(tmp,0,cgiContentLength);
    16511654                  xmlNodePtr cur4=cur3->children;
     
    16641667                    if(btmps!=NULL)
    16651668                      sprintf(tmp,"%s",(char*)btmps);
     1669                    xmlFree(btmps);
     1670                    cur4=cur4->next;
    16661671                    xmlFreeDoc(bdoc);
    1667                     cur4=cur4->next;
    16681672                  }
    16691673                  map *btmp=getMap(tmpmaps->content,"href");
     
    16861690                      curl_slist_free_all(hInternetP.header);
    16871691                    addToMap(tmpmaps->content,"value",tmpContent);
     1692                    free(tmpContent);
    16881693#ifdef POST_DEBUG
    16891694                    fprintf(stderr,"DL CONTENT : (%s)\n",tmpContent);
    1690 #endif
     1695#endif             
    16911696                  }
     1697                  free(tmp);
    16921698                }
    16931699                else
     
    18421848                  sprintf(size,"%d",buffersize);
    18431849                  addToMap(tmpmaps->content,"size",size);
     1850                  xmlFreeDoc(doc1);
    18441851                }
    18451852                addToMap(tmpmaps->content,"value",(char*)mv);
     
    21372144    }
    21382145    xmlXPathFreeObject(tmpsptr);
     2146    xmlFreeDoc(doc);
    21392147    xmlCleanupParser();
    21402148  }
     
    21682176        char tmps[1024];
    21692177        map* tmpe=createMap("code","FileSizeExceeded");
    2170         snprintf(tmps,1024,_("The <%s> parameter has a limited size (%sMB) defined in ZOO ServicesProvider configuration file but the reference you provided exceed this limitation (%dMB), please correct your query or the ZOO Configuration file."),ptr->name,tmp1->value,i);
     2178        snprintf(tmps,1024,_("The <%s> parameter has a limited size (%sMB) defined in ZOO ServicesProvider configuration file but the reference you provided exceed this limitation (%fMB), please correct your query or the ZOO Configuration file."),ptr->name,tmp1->value,i);
    21712179        addToMap(tmpe,"locator",ptr->name);
    21722180        addToMap(tmpe,"text",tmps);
     
    22302238        cgiFilePtr file;
    22312239        int targetFile;
    2232         mode_t mode;
    22332240        char storageNameOnServer[2048];
    22342241        char fileNameOnServer[64];
     
    22592266          fprintf(stderr,"fileNameOnServer: %s\n",fileNameOnServer);
    22602267#endif
    2261           mode=S_IRWXU|S_IRGRP|S_IROTH;
    22622268          targetFile = open (storageNameOnServer,O_RDWR|O_CREAT|O_TRUNC,S_IRWXU|S_IRGRP|S_IROTH);
    22632269          if(targetFile<0){
     
    24082414    char *tcook=zStrdup(cgiCookie);
    24092415    char *tmp=NULL;
    2410     int hasVal=-1;
    24112416    map* testing=getMapFromMaps(m,"main","cookiePrefix");
    24122417    if(testing==NULL){
     
    24152420      tmp=(char*)malloc((strlen(testing->value)+2)*sizeof(char));
    24162421      sprintf(tmp,"%s=",testing->value);
    2417       hasVal=1;
    24182422    }
    24192423    if(strstr(cgiCookie,";")!=NULL){
     
    25852589  (void) signal(SIGABRT,donothing);
    25862590#endif
    2587 
    25882591  if(((int)getpid())!=cpid || cgiSid!=NULL){
    25892592    fclose(stdout);
     
    26082611    unlink(fbkp1);
    26092612    free(fbkp1);
     2613    free(tmps1);
    26102614  }
    26112615
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