Changeset 576
- Timestamp:
- Feb 11, 2015, 11:29:35 AM (10 years ago)
- Location:
- trunk/zoo-project
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/zoo-project/HISTORY.txt
r558 r576 1 1 Version 1.5.0-dev 2 * Add support for multiple Exception nodes 3 * Add a length key when creating MapArray 2 4 * Add Orfeo Toolbox support for applications as a service 3 5 * Add the otb2zcfg utility to produce zcfg for otb applications -
trunk/zoo-project/zoo-kernel/service.h
r554 r576 2 2 * Author : Gérald FENOY 3 3 * 4 * Copyright (c) 2009-201 2GeoLabs SARL4 * Copyright (c) 2009-2015 GeoLabs SARL 5 5 * 6 6 * Permission is hereby granted, free of charge, to any person obtaining a copy … … 475 475 tmp->value[size]=0; 476 476 char sin[128]; 477 sprintf(sin,"% ld",size);477 sprintf(sin,"%d",size); 478 478 addToMap(m,"size",sin); 479 479 } … … 611 611 if(size!=NULL) 612 612 loadMapBinary(out,in,-1); 613 char* tmpSized=NULL;614 615 613 } 616 614 … … 672 670 673 671 674 static void setMapArray(map* m,c har* key,int index,char* value){672 static void setMapArray(map* m,const char* key,int index,const char* value){ 675 673 char tmp[1024]; 676 if(index>0) 674 if(index>0){ 677 675 sprintf(tmp,"%s_%d",key,index); 676 map* len=getMap(m,"length"); 677 if((len!=NULL && atoi(len->value)<index+1) || len==NULL){ 678 char tmp0[5]; 679 sprintf(tmp0,"%d",index+1); 680 addToMap(m,"length",tmp0); 681 } 682 } 678 683 else 679 684 sprintf(tmp,"%s",key); -
trunk/zoo-project/zoo-kernel/service_internal.c
r565 r576 2 2 * Author : Gérald FENOY 3 3 * 4 * Copyright (c) 2009-201 3GeoLabs SARL4 * Copyright (c) 2009-2015 GeoLabs SARL 5 5 * 6 6 * Permission is hereby granted, free of charge, to any person obtaining a copy … … 399 399 } 400 400 } 401 errno = NULL;401 errno = ZOO_LOCK_ACQUIRE_FAILED; 402 402 if (!ready) { 403 403 #ifdef DEBUG … … 428 428 int lockShm(int id){ 429 429 struct sembuf sb; 430 int i;431 430 sb.sem_num = 0; 432 431 sb.sem_op = -1; /* set to allocate resource */ … … 629 628 630 629 char *zCapitalize1(char *tmp){ 631 char *res=strdup(tmp);632 633 634 630 char *res=zStrdup(tmp); 631 if(res[0]>=97 && res[0]<=122) 632 res[0]-=32; 633 return res; 635 634 } 636 635 637 636 char *zCapitalize(char *tmp){ 638 637 int i=0; 639 char *res= strdup(tmp);638 char *res=zStrdup(tmp); 640 639 for(i=0;i<strlen(res);i++) 641 640 if(res[i]>=97 && res[i]<=122) … … 713 712 714 713 714 /************************************************************************/ 715 /* soapEnvelope() */ 716 /************************************************************************/ 717 718 /** 719 * Generate a SOAP Envelope node when required (if the isSoap key of the [main] 720 * section is set to true). 721 * 722 * @param conf the conf maps containing the main.cfg settings 723 * @param n the node used as children of the generated soap:Envelope 724 * @return the generated soap:Envelope (if isSoap=true) or the input node n 725 * (when isSoap=false) 726 */ 715 727 xmlNodePtr soapEnvelope(maps* conf,xmlNodePtr n){ 716 728 map* soap=getMapFromMaps(conf,"main","isSoap"); … … 737 749 } 738 750 739 xmlNodePtr printGetCapabilitiesHeader(xmlDocPtr doc,const char* service,maps* m){ 740 741 xmlNsPtr ns,ns_ows,ns_xlink,ns_xsi; 751 /************************************************************************/ 752 /* printWPSHeader() */ 753 /************************************************************************/ 754 755 /** 756 * Generate a WPS header. 757 * 758 * @param doc the document to add the header 759 * @param m the conf maps containing the main.cfg settings 760 * @param req the request type (GetCapabilities,DescribeProcess,Execute) 761 * @param rname the root node name 762 * @return the generated wps:rname xmlNodePtr (can be wps: Capabilities, 763 * wps:ProcessDescriptions,wps:ExecuteResponse) 764 */ 765 xmlNodePtr printWPSHeader(xmlDocPtr doc,maps* m,const char* req,const char* rname){ 766 767 xmlNsPtr ns,ns_xsi; 768 xmlNodePtr n; 769 770 int wpsId=zooXmlAddNs(NULL,"http://schemas.opengis.net/wps/1.0.0","wps"); 771 ns=usedNs[wpsId]; 772 n = xmlNewNode(ns, BAD_CAST rname); 773 zooXmlAddNs(n,"http://www.opengis.net/ows/1.1","ows"); 774 xmlNewNs(n,BAD_CAST "http://www.opengis.net/wps/1.0.0",BAD_CAST "wps"); 775 zooXmlAddNs(n,"http://www.w3.org/1999/xlink","xlink"); 776 int xsiId=zooXmlAddNs(n,"http://www.w3.org/2001/XMLSchema-instance","xsi"); 777 ns_xsi=usedNs[xsiId]; 778 779 char *tmp=(char*) malloc((86+strlen(req)+1)*sizeof(char)); 780 sprintf(tmp,"http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wps%s_response.xsd",req); 781 xmlNewNsProp(n,ns_xsi,BAD_CAST "schemaLocation",BAD_CAST tmp); 782 free(tmp); 783 xmlNewProp(n,BAD_CAST "service",BAD_CAST "WPS"); 784 xmlNewProp(n,BAD_CAST "version",BAD_CAST "1.0.0"); 785 addLangAttr(n,m); 786 xmlNodePtr fn=soapEnvelope(m,n); 787 xmlDocSetRootElement(doc, fn); 788 return n; 789 } 790 791 /************************************************************************/ 792 /* printGetCapabilitiesHeader() */ 793 /************************************************************************/ 794 795 /** 796 * Generate a Capabilities header. 797 * 798 * @param doc the document to add the header 799 * @param m the conf maps containing the main.cfg settings 800 * @return the generated wps:ProcessOfferings xmlNodePtr 801 */ 802 xmlNodePtr printGetCapabilitiesHeader(xmlDocPtr doc,maps* m){ 803 804 xmlNsPtr ns,ns_ows,ns_xlink; 742 805 xmlNodePtr n,nc,nc1,nc2,nc3,nc4,nc5,nc6; 743 /** 744 * Create the document and its temporary root. 745 */ 806 n = printWPSHeader(doc,m,"GetCapabilities","Capabilities"); 807 maps* toto1=getMaps(m,"main"); 808 char tmp[256]; 809 746 810 int wpsId=zooXmlAddNs(NULL,"http://www.opengis.net/wps/1.0.0","wps"); 747 811 ns=usedNs[wpsId]; 748 maps* toto1=getMaps(m,"main"); 749 750 n = xmlNewNode(ns, BAD_CAST "Capabilities"); 751 int owsId=zooXmlAddNs(n,"http://www.opengis.net/ows/1.1","ows"); 812 int xlinkId=zooXmlAddNs(NULL,"http://www.w3.org/1999/xlink","xlink"); 813 ns_xlink=usedNs[xlinkId]; 814 int owsId=zooXmlAddNs(NULL,"http://www.opengis.net/ows/1.1","ows"); 752 815 ns_ows=usedNs[owsId]; 753 xmlNewNs(n,BAD_CAST "http://www.opengis.net/wps/1.0.0",BAD_CAST "wps"); 754 int xsiId=zooXmlAddNs(n,"http://www.w3.org/2001/XMLSchema-instance","xsi"); 755 ns_xsi=usedNs[xsiId]; 756 int xlinkId=zooXmlAddNs(n,"http://www.w3.org/1999/xlink","xlink"); 757 ns_xlink=usedNs[xlinkId]; 758 xmlNewNsProp(n,ns_xsi,BAD_CAST "schemaLocation",BAD_CAST "http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsGetCapabilities_response.xsd"); 759 xmlNewProp(n,BAD_CAST "service",BAD_CAST "WPS"); 760 addLangAttr(n,m); 761 762 if(toto1!=NULL){ 763 map* tmp=getMap(toto1->content,"version"); 764 if(tmp!=NULL){ 765 xmlNewProp(n,BAD_CAST "version",BAD_CAST tmp->value); 766 } 767 else 768 xmlNewProp(n,BAD_CAST "version",BAD_CAST "1.0.0"); 769 } 770 else 771 xmlNewProp(n,BAD_CAST "version",BAD_CAST "1.0.0"); 772 773 char tmp[256]; 774 816 775 817 nc = xmlNewNode(ns_ows, BAD_CAST "ServiceIdentification"); 776 818 maps* tmp4=getMaps(m,"identification"); … … 827 869 nc2 = xmlNewNode(ns_ows, BAD_CAST "ServiceTypeVersion"); 828 870 xmlAddChild(nc2,xmlNewText(BAD_CAST "1.0.0")); 829 xmlAddChild(nc,nc2); 871 xmlAddChild(nc,nc2); 830 872 } 831 873 tmp2=tmp2->next; … … 972 1014 } 973 1015 else 974 SERVICE_URL = strdup("not_ found");1016 SERVICE_URL = strdup("not_defined"); 975 1017 } 976 1018 else 977 SERVICE_URL = strdup("not_ found");1019 SERVICE_URL = strdup("not_defined"); 978 1020 979 1021 for(j=0;j<3;j++){ … … 983 1025 nc3 = xmlNewNode(ns_ows, BAD_CAST "HTTP"); 984 1026 nc4 = xmlNewNode(ns_ows, BAD_CAST "Get"); 985 sprintf(tmp,"%s /%s",SERVICE_URL,service);1027 sprintf(tmp,"%s",SERVICE_URL); 986 1028 xmlNewNsProp(nc4,ns_xlink,BAD_CAST "href",BAD_CAST tmp); 987 1029 xmlAddChild(nc3,nc4); 988 if(j>0){ 989 nc4 = xmlNewNode(ns_ows, BAD_CAST "Post"); 990 xmlNewNsProp(nc4,ns_xlink,BAD_CAST "href",BAD_CAST tmp); 991 xmlAddChild(nc3,nc4); 992 } 1030 nc4 = xmlNewNode(ns_ows, BAD_CAST "Post"); 1031 xmlNewNsProp(nc4,ns_xlink,BAD_CAST "href",BAD_CAST tmp); 1032 xmlAddChild(nc3,nc4); 993 1033 xmlAddChild(nc2,nc3); 994 1034 xmlAddChild(nc1,nc2); … … 1045 1085 xmlAddChild(n,nc1); 1046 1086 1047 xmlNodePtr fn=soapEnvelope(m,n);1048 xmlDocSetRootElement(doc, fn);1049 //xmlFreeNs(ns);1050 1087 free(SERVICE_URL); 1051 1088 return nc; 1052 1089 } 1090 1053 1091 1054 1092 void addPrefix(maps* conf,map* level,service* serv){ … … 1115 1153 xmlAddChild(nc,nc1); 1116 1154 } 1117 }1118 1119 xmlNodePtr printDescribeProcessHeader(xmlDocPtr doc,const char* service,maps* m){1120 1121 xmlNsPtr ns,ns_xsi;1122 xmlNodePtr n;1123 1124 int wpsId=zooXmlAddNs(NULL,"http://schemas.opengis.net/wps/1.0.0","wps");1125 ns=usedNs[wpsId];1126 n = xmlNewNode(ns, BAD_CAST "ProcessDescriptions");1127 zooXmlAddNs(n,"http://www.opengis.net/ows/1.1","ows");1128 xmlNewNs(n,BAD_CAST "http://www.opengis.net/wps/1.0.0",BAD_CAST "wps");1129 zooXmlAddNs(n,"http://www.w3.org/1999/xlink","xlink");1130 int xsiId=zooXmlAddNs(n,"http://www.w3.org/2001/XMLSchema-instance","xsi");1131 ns_xsi=usedNs[xsiId];1132 1133 xmlNewNsProp(n,ns_xsi,BAD_CAST "schemaLocation",BAD_CAST "http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsDescribeProcess_response.xsd");1134 xmlNewProp(n,BAD_CAST "service",BAD_CAST "WPS");1135 xmlNewProp(n,BAD_CAST "version",BAD_CAST "1.0.0");1136 addLangAttr(n,m);1137 1138 xmlNodePtr fn=soapEnvelope(m,n);1139 xmlDocSetRootElement(doc, fn);1140 1141 return n;1142 1155 } 1143 1156 … … 1668 1681 1669 1682 void printProcessResponse(maps* m,map* request, int pid,service* serv,const char* service,int status,maps* inputs,maps* outputs){ 1670 xmlNsPtr ns,ns_ows,ns_xlink ,ns_xsi;1683 xmlNsPtr ns,ns_ows,ns_xlink; 1671 1684 xmlNodePtr nr,n,nc,nc1=NULL,nc3; 1672 1685 xmlDocPtr doc; … … 1674 1687 time(&time1); 1675 1688 nr=NULL; 1676 /**1677 * Create the document and its temporary root.1678 */1679 1689 doc = xmlNewDoc(BAD_CAST "1.0"); 1690 n = printWPSHeader(doc,m,"Execute","ExecuteResponse"); 1680 1691 int wpsId=zooXmlAddNs(NULL,"http://www.opengis.net/wps/1.0.0","wps"); 1681 1692 ns=usedNs[wpsId]; 1682 1683 n = xmlNewNode(ns, BAD_CAST "ExecuteResponse"); 1684 xmlNewNs(n,BAD_CAST "http://www.opengis.net/wps/1.0.0",BAD_CAST "wps"); 1685 int owsId=zooXmlAddNs(n,"http://www.opengis.net/ows/1.1","ows"); 1693 int owsId=zooXmlAddNs(NULL,"http://www.opengis.net/ows/1.1","ows"); 1686 1694 ns_ows=usedNs[owsId]; 1687 int xlinkId=zooXmlAddNs( n,"http://www.w3.org/1999/xlink","xlink");1695 int xlinkId=zooXmlAddNs(NULL,"http://www.w3.org/1999/xlink","xlink"); 1688 1696 ns_xlink=usedNs[xlinkId]; 1689 int xsiId=zooXmlAddNs(n,"http://www.w3.org/2001/XMLSchema-instance","xsi");1690 ns_xsi=usedNs[xsiId];1691 1692 xmlNewNsProp(n,ns_xsi,BAD_CAST "schemaLocation",BAD_CAST "http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsExecute_response.xsd");1693 1694 xmlNewProp(n,BAD_CAST "service",BAD_CAST "WPS");1695 xmlNewProp(n,BAD_CAST "version",BAD_CAST "1.0.0");1696 addLangAttr(n,m);1697 1697 1698 1698 char tmp[256]; … … 1876 1876 while(mcursor!=NULL){ 1877 1877 scursor=getElements(serv->outputs,mcursor->name); 1878 printOutputDefinitions 1(doc,nc,ns,ns_ows,scursor,mcursor,"Output");1878 printOutputDefinitions(doc,nc,ns,ns_ows,scursor,mcursor,"Output"); 1879 1879 mcursor=mcursor->next; 1880 1880 } … … 1915 1915 } 1916 1916 1917 #ifdef DEBUG1918 fprintf(stderr,"printProcessResponse 1 202\n");1919 #endif1920 nr=soapEnvelope(m,n);1921 xmlDocSetRootElement(doc, nr);1922 1923 1917 if(hasStoredExecuteResponse==true && status!=SERVICE_STARTED){ 1924 1918 semid lid=getShmLockId(m,1); … … 1936 1930 char tmpMsg[1024]; 1937 1931 sprintf(tmpMsg,_("Unable to create the file : \"%s\" for storing the ExecuteResponse."),stored_path); 1938 map * errormap = createMap("text",tmpMsg); 1939 addToMap(errormap,"code", "InternalError"); 1940 printExceptionReportResponse(m,errormap); 1941 freeMap(&errormap); 1942 free(errormap); 1932 1933 errorException(m,tmpMsg,"InternalError",NULL); 1943 1934 xmlFreeDoc(doc); 1944 1935 xmlCleanupParser(); … … 1995 1986 } 1996 1987 1997 void printOutputDefinitions 1(xmlDocPtr doc,xmlNodePtr nc,xmlNsPtr ns_wps,xmlNsPtr ns_ows,elements* e,maps* m,const char* type){1988 void printOutputDefinitions(xmlDocPtr doc,xmlNodePtr nc,xmlNsPtr ns_wps,xmlNsPtr ns_ows,elements* e,maps* m,const char* type){ 1998 1989 xmlNodePtr nc1; 1999 1990 nc1=xmlNewNode(ns_wps, BAD_CAST type); … … 2012 2003 || strncasecmp(tmp->name,"SCHEMA",strlen(tmp->name))==0 2013 2004 || strncasecmp(tmp->name,"UOM",strlen(tmp->name))==0) 2014 xmlNewProp(nc1,BAD_CAST tmp->name,BAD_CAST tmp->value);2015 tmp=tmp->next;2016 }2017 tmp=getMap(e->defaults->content,"asReference");2018 if(tmp==NULL)2019 xmlNewProp(nc1,BAD_CAST "asReference",BAD_CAST "false");2020 2021 tmp=e->content;2022 2023 printDescription(nc1,ns_ows,m->name,e->content);2024 2025 xmlAddChild(nc,nc1);2026 2027 }2028 2029 void printOutputDefinitions(xmlDocPtr doc,xmlNodePtr nc,xmlNsPtr ns_wps,xmlNsPtr ns_ows,elements* e,map* m,const char* type){2030 xmlNodePtr nc1;2031 nc1=xmlNewNode(ns_wps, BAD_CAST type);2032 map *tmp=NULL;2033 if(e!=NULL && e->defaults!=NULL)2034 tmp=e->defaults->content;2035 else{2036 /*2037 dumpElements(e);2038 */2039 return;2040 }2041 while(tmp!=NULL){2042 2005 xmlNewProp(nc1,BAD_CAST tmp->name,BAD_CAST tmp->value); 2043 2006 tmp=tmp->next; … … 2212 2175 if(rs==NULL){ 2213 2176 char tmp1[1024]; 2214 sprintf(tmp1,"% u",strlen(tmp3->value));2177 sprintf(tmp1,"%ld",strlen(tmp3->value)); 2215 2178 rs=createMap("size",tmp1); 2216 2179 isSized=false; … … 2335 2298 } 2336 2299 2300 /************************************************************************/ 2301 /* printExceptionReportResponse() */ 2302 /************************************************************************/ 2303 2304 /** 2305 * Print an OWS ExceptionReport Document and HTTP headers (when required) 2306 * depending on the code. 2307 * Set hasPrinted value to true in the [lenv] section. 2308 * 2309 * @param m the conf maps 2310 * @param s the map containing the text,code,locator keys 2311 */ 2337 2312 void printExceptionReportResponse(maps* m,map* s){ 2338 2313 if(getMapFromMaps(m,"lenv","hasPrinted")!=NULL) … … 2351 2326 map* tmp=getMap(s,"code"); 2352 2327 if(tmp!=NULL){ 2353 if(strcmp(tmp->value,"OperationNotSupported")==0) 2328 if(strcmp(tmp->value,"OperationNotSupported")==0 || 2329 strcmp(tmp->value,"NoApplicableCode")==0) 2354 2330 exceptionCode="501 Not Implemented"; 2355 2331 else … … 2361 2337 exceptionCode="400 Bad request"; 2362 2338 else 2363 if(strcmp(tmp->value,"NoApplicableCode")==0) 2364 exceptionCode="501 Internal Server Error"; 2365 else 2366 exceptionCode="501 Internal Server Error"; 2339 exceptionCode="501 Internal Server Error"; 2367 2340 } 2368 2341 else … … 2397 2370 } 2398 2371 2372 /************************************************************************/ 2373 /* createExceptionReportNode() */ 2374 /************************************************************************/ 2375 2376 /** 2377 * Create an OWS ExceptionReport Node. 2378 * 2379 * @param m the conf maps 2380 * @param s the map containing the text,code,locator keys 2381 * @param use_ns (0/1) choose if you want to generate an ExceptionReport or 2382 * ows:ExceptionReport node respectively 2383 * @return the ExceptionReport/ows:ExceptionReport node 2384 */ 2399 2385 xmlNodePtr createExceptionReportNode(maps* m,map* s,int use_ns){ 2400 2386 … … 2404 2390 int nsid=zooXmlAddNs(NULL,"http://www.opengis.net/ows","ows"); 2405 2391 ns=usedNs[nsid]; 2406 if(use_ns== 1){2392 if(use_ns==0){ 2407 2393 ns=NULL; 2408 2394 } 2409 2395 n = xmlNewNode(ns, BAD_CAST "ExceptionReport"); 2410 2396 if(use_ns==1){ 2411 xmlNewNs(n,BAD_CAST "http://www.opengis.net/ows/1.1", NULL);2397 xmlNewNs(n,BAD_CAST "http://www.opengis.net/ows/1.1",BAD_CAST"ows"); 2412 2398 int xsiId=zooXmlAddNs(n,"http://www.w3.org/2001/XMLSchema-instance","xsi"); 2413 2399 ns_xsi=usedNs[xsiId]; … … 2419 2405 xmlNewProp(n,BAD_CAST "version",BAD_CAST "1.1.0"); 2420 2406 2421 nc = xmlNewNode(ns, BAD_CAST "Exception"); 2422 2423 map* tmp=getMap(s,"code"); 2424 if(tmp!=NULL) 2425 xmlNewProp(nc,BAD_CAST "exceptionCode",BAD_CAST tmp->value); 2407 int length=1; 2408 int cnt=0; 2409 map* len=getMap(s,"length"); 2410 if(len!=NULL) 2411 length=atoi(len->value); 2412 fprintf(stderr,"LEN %d %s %d \n",length,__FILE__,__LINE__); 2413 for(cnt=0;cnt<length;cnt++){ 2414 nc = xmlNewNode(ns, BAD_CAST "Exception"); 2415 2416 map* tmp=getMapArray(s,"code",cnt); 2417 if(tmp==NULL) 2418 tmp=getMap(s,"code"); 2419 if(tmp!=NULL) 2420 xmlNewProp(nc,BAD_CAST "exceptionCode",BAD_CAST tmp->value); 2421 else 2422 xmlNewProp(nc,BAD_CAST "exceptionCode",BAD_CAST "NoApplicableCode"); 2423 2424 tmp=getMapArray(s,"locator",cnt); 2425 if(tmp==NULL) 2426 tmp=getMap(s,"locator"); 2427 if(tmp!=NULL && strcasecmp(tmp->value,"NULL")!=0) 2428 xmlNewProp(nc,BAD_CAST "locator",BAD_CAST tmp->value); 2429 2430 tmp=getMapArray(s,"text",cnt); 2431 nc1 = xmlNewNode(ns, BAD_CAST "ExceptionText"); 2432 if(tmp!=NULL){ 2433 xmlNodePtr txt=xmlNewText(BAD_CAST tmp->value); 2434 xmlAddChild(nc1,txt); 2435 } 2436 else{ 2437 xmlNodeSetContent(nc1, BAD_CAST _("No debug message available")); 2438 } 2439 xmlAddChild(nc,nc1); 2440 xmlAddChild(n,nc); 2441 } 2442 return n; 2443 } 2444 2445 /************************************************************************/ 2446 /* errorException() */ 2447 /************************************************************************/ 2448 2449 /** 2450 * Print an OWS ExceptionReport. 2451 * 2452 * @param m the conf maps 2453 * @param message the error message 2454 * @param errorcode the error code 2455 * @param locator the potential locator 2456 */ 2457 int errorException(maps *m, const char *message, const char *errorcode, const char *locator) 2458 { 2459 map* errormap = createMap("text", message); 2460 addToMap(errormap,"code", errorcode); 2461 if(locator!=NULL) 2462 addToMap(errormap,"locator", locator); 2426 2463 else 2427 xmlNewProp(nc,BAD_CAST "exceptionCode",BAD_CAST "NoApplicableCode"); 2428 2429 tmp=getMap(s,"locator"); 2430 if(tmp!=NULL && strcasecmp(tmp->value,"NULL")!=0) 2431 xmlNewProp(nc,BAD_CAST "locator",BAD_CAST tmp->value); 2432 2433 2434 tmp=getMap(s,"text"); 2435 nc1 = xmlNewNode(ns, BAD_CAST "ExceptionText"); 2436 if(tmp!=NULL){ 2437 xmlNodePtr txt=xmlNewText(BAD_CAST tmp->value); 2438 xmlAddChild(nc1,txt); 2439 } 2440 else{ 2441 xmlNodeSetContent(nc1, BAD_CAST _("No debug message available")); 2442 } 2443 xmlAddChild(nc,nc1); 2444 xmlAddChild(n,nc); 2445 return n; 2464 addToMap(errormap,"locator", "NULL"); 2465 printExceptionReportResponse(m,errormap); 2466 freeMap(&errormap); 2467 free(errormap); 2468 return -1; 2446 2469 } 2447 2470 … … 2479 2502 fclose(file); 2480 2503 char rsize[100]; 2481 sprintf(rsize,"% d",count*sizeof(char));2504 sprintf(rsize,"%ld",count*sizeof(char)); 2482 2505 addToMap(tmpMap1,"size",rsize); 2483 2506 } … … 2529 2552 char tmpMsg[1024]; 2530 2553 sprintf(tmpMsg,_("Unable to create the file : \"%s\" for storing the session maps."),session_file_path); 2531 map * errormap = createMap("text",tmpMsg); 2532 addToMap(errormap,"code", "InternalError"); 2533 2534 printExceptionReportResponse(m,errormap); 2535 freeMap(&errormap); 2536 free(errormap); 2554 errorException(m,tmpMsg,"InternalError",NULL); 2555 2537 2556 return; 2538 2557 } … … 2543 2562 } 2544 2563 2545 if(res==SERVICE_FAILED){ 2546 map * errormap; 2547 map *lenv; 2548 lenv=getMapFromMaps(m,"lenv","message"); 2549 char *tmp0; 2550 if(lenv!=NULL){ 2551 tmp0=(char*)malloc((strlen(lenv->value)+strlen(_("Unable to run the Service. The message returned back by the Service was the following: "))+1)*sizeof(char)); 2552 sprintf(tmp0,_("Unable to run the Service. The message returned back by the Service was the following: %s"),lenv->value); 2553 } 2554 else{ 2555 tmp0=(char*)malloc((strlen(_("Unable to run the Service. No more information was returned back by the Service."))+1)*sizeof(char)); 2556 sprintf(tmp0,_("Unable to run the Service. No more information was returned back by the Service.")); 2557 } 2558 errormap = createMap("text",tmp0); 2559 free(tmp0); 2560 addToMap(errormap,"code", "InternalError"); 2561 dumpMap(errormap); 2562 printExceptionReportResponse(m,errormap); 2563 freeMap(&errormap); 2564 free(errormap); 2565 return; 2566 } 2567 2568 2564 if(res==SERVICE_FAILED){ 2565 map *lenv; 2566 lenv=getMapFromMaps(m,"lenv","message"); 2567 char *tmp0; 2568 if(lenv!=NULL){ 2569 tmp0=(char*)malloc((strlen(lenv->value)+strlen(_("Unable to run the Service. The message returned back by the Service was the following: "))+1)*sizeof(char)); 2570 sprintf(tmp0,_("Unable to run the Service. The message returned back by the Service was the following: %s"),lenv->value); 2571 } 2572 else{ 2573 tmp0=(char*)malloc((strlen(_("Unable to run the Service. No more information was returned back by the Service."))+1)*sizeof(char)); 2574 sprintf(tmp0,"%s",_("Unable to run the Service. No more information was returned back by the Service.")); 2575 } 2576 errorException(m,tmp0,"InternalError",NULL); 2577 free(tmp0); 2578 return; 2579 } 2580 2581 2582 map *tmp1=getMapFromMaps(m,"main","tmpPath"); 2569 2583 if(asRaw==0){ 2570 2584 #ifdef DEBUG … … 2573 2587 #endif 2574 2588 maps* tmpI=request_outputs; 2589 2575 2590 while(tmpI!=NULL){ 2576 2591 #ifdef USE_MS … … 2596 2611 addToMap(tmpI->content,"schema","http://schemas.opengis.net/ows/1.1.0/owsCommon.xsd"); 2597 2612 } 2598 2599 map *tmp1=getMapFromMaps(m,"main","tmpPath");2600 2613 2601 2614 map *gfile=getMap(tmpI->content,"generated_file"); … … 2648 2661 char tmpMsg[1024]; 2649 2662 sprintf(tmpMsg,_("Unable to create the file : \"%s\" for storing the %s final result."),file_name,tmpI->name); 2650 map * errormap = createMap("text",tmpMsg); 2651 addToMap(errormap,"code", "InternalError"); 2652 printExceptionReportResponse(m,errormap); 2653 freeMap(&errormap); 2654 free(errormap); 2663 errorException(m,tmpMsg,"InternalError",NULL); 2655 2664 free(file_name); 2656 2665 free(file_path); … … 2730 2739 map *gfile=getMap(tmpI->content,"generated_file"); 2731 2740 if(gfile!=NULL){ 2741 gfile=getMap(tmpI->content,"expected_generated_file"); 2742 if(gfile==NULL){ 2743 gfile=getMap(tmpI->content,"generated_file"); 2744 } 2732 2745 readGeneratedFile(m,tmpI->content,gfile->value); 2733 2746 } … … 2736 2749 char tmpMsg[1024]; 2737 2750 sprintf(tmpMsg,_("Wrong RawDataOutput parameter, unable to fetch any result for the name your provided : \"%s\"."),tmpI->name); 2738 map * errormap = createMap("text",tmpMsg); 2739 addToMap(errormap,"code", "InvalidParameterValue"); 2740 printExceptionReportResponse(m,errormap); 2741 freeMap(&errormap); 2742 free(errormap); 2751 errorException(m,tmpMsg,"InvalidParameterValue","RawDataOutput"); 2743 2752 return; 2744 2753 } … … 2842 2851 } 2843 2852 2844 char* addDefaultValues(maps** out,elements* in,maps* m,int type){ 2853 char* addDefaultValues(maps** out,elements* in,maps* m,int type,map** err){ 2854 map *res=*err; 2845 2855 elements* tmpInputs=in; 2846 2856 maps* out1=*out; 2857 char *result=NULL; 2858 int nb=0; 2847 2859 if(type==1){ 2848 2860 while(out1!=NULL){ 2849 if(getElements(in,out1->name)==NULL) 2850 return out1->name; 2861 if(getElements(in,out1->name)==NULL){ 2862 if(res==NULL){ 2863 res=createMap("value",out1->name); 2864 }else{ 2865 setMapArray(res,"value",nb,out1->name); 2866 } 2867 nb++; 2868 result=out1->name; 2869 } 2851 2870 out1=out1->next; 2871 } 2872 if(res!=NULL){ 2873 *err=res; 2874 return result; 2852 2875 } 2853 2876 out1=*out; … … 2867 2890 freeMaps(&tmpMaps2); 2868 2891 free(tmpMaps2); 2869 return tmpInputs->name; 2892 if(res==NULL){ 2893 res=createMap("value",tmpInputs->name); 2894 }else{ 2895 setMapArray(res,"value",nb,tmpInputs->name); 2896 } 2897 nb++; 2898 result=tmpInputs->name; 2870 2899 } 2871 2900 else{ … … 2876 2905 } 2877 2906 } 2878 map* tmpMaxO=getMap(tmpInputs->content,"maxOccurs"); 2879 if(tmpMaxO!=NULL){ 2880 if(tmpMaps2->content==NULL) 2881 tmpMaps2->content=createMap("maxOccurs",tmpMaxO->value); 2882 else 2883 addToMap(tmpMaps2->content,"maxOccurs",tmpMaxO->value); 2884 } 2885 map* tmpMaxMB=getMap(tmpInputs->content,"maximumMegabytes"); 2886 if(tmpMaxMB!=NULL){ 2887 if(tmpMaps2->content==NULL) 2888 tmpMaps2->content=createMap("maximumMegabytes",tmpMaxMB->value); 2889 else 2890 addToMap(tmpMaps2->content,"maximumMegabytes",tmpMaxMB->value); 2891 } 2892 } 2893 2894 iotype* tmpIoType=tmpInputs->defaults; 2895 if(tmpIoType!=NULL){ 2896 map* tmpm=tmpIoType->content; 2897 while(tmpm!=NULL){ 2898 if(tmpMaps2->content==NULL) 2899 tmpMaps2->content=createMap(tmpm->name,tmpm->value); 2900 else 2901 addToMap(tmpMaps2->content,tmpm->name,tmpm->value); 2902 tmpm=tmpm->next; 2903 } 2904 } 2905 addToMap(tmpMaps2->content,"inRequest","false"); 2906 if(type==0){ 2907 map *tmpMap=getMap(tmpMaps2->content,"value"); 2908 if(tmpMap==NULL) 2909 addToMap(tmpMaps2->content,"value","NULL"); 2910 } 2911 if(out1==NULL){ 2912 *out=dupMaps(&tmpMaps2); 2913 out1=*out; 2914 } 2915 else 2916 addMapsToMaps(&out1,tmpMaps2); 2917 freeMap(&tmpMaps2->content); 2918 free(tmpMaps2->content); 2919 tmpMaps2->content=NULL; 2920 freeMaps(&tmpMaps2); 2921 free(tmpMaps2); 2922 tmpMaps2=NULL; 2907 if(res==NULL){ 2908 map* tmpMaxO=getMap(tmpInputs->content,"maxOccurs"); 2909 if(tmpMaxO!=NULL){ 2910 if(tmpMaps2->content==NULL) 2911 tmpMaps2->content=createMap("maxOccurs",tmpMaxO->value); 2912 else 2913 addToMap(tmpMaps2->content,"maxOccurs",tmpMaxO->value); 2914 } 2915 map* tmpMaxMB=getMap(tmpInputs->content,"maximumMegabytes"); 2916 if(tmpMaxMB!=NULL){ 2917 if(tmpMaps2->content==NULL) 2918 tmpMaps2->content=createMap("maximumMegabytes",tmpMaxMB->value); 2919 else 2920 addToMap(tmpMaps2->content,"maximumMegabytes",tmpMaxMB->value); 2921 } 2922 } 2923 } 2924 2925 if(res==NULL){ 2926 iotype* tmpIoType=tmpInputs->defaults; 2927 if(tmpIoType!=NULL){ 2928 map* tmpm=tmpIoType->content; 2929 while(tmpm!=NULL){ 2930 if(tmpMaps2->content==NULL) 2931 tmpMaps2->content=createMap(tmpm->name,tmpm->value); 2932 else 2933 addToMap(tmpMaps2->content,tmpm->name,tmpm->value); 2934 tmpm=tmpm->next; 2935 } 2936 } 2937 addToMap(tmpMaps2->content,"inRequest","false"); 2938 if(type==0){ 2939 map *tmpMap=getMap(tmpMaps2->content,"value"); 2940 if(tmpMap==NULL) 2941 addToMap(tmpMaps2->content,"value","NULL"); 2942 } 2943 if(out1==NULL){ 2944 *out=dupMaps(&tmpMaps2); 2945 out1=*out; 2946 } 2947 else 2948 addMapsToMaps(&out1,tmpMaps2); 2949 freeMap(&tmpMaps2->content); 2950 free(tmpMaps2->content); 2951 tmpMaps2->content=NULL; 2952 freeMaps(&tmpMaps2); 2953 free(tmpMaps2); 2954 tmpMaps2=NULL; 2955 } 2923 2956 } 2924 2957 else{ … … 3048 3081 } 3049 3082 tmpInputs=tmpInputs->next; 3083 } 3084 if(res!=NULL){ 3085 *err=res; 3086 return result; 3050 3087 } 3051 3088 return ""; … … 3381 3418 3382 3419 } 3420 return 0; 3383 3421 } 3384 3422 … … 3480 3518 } 3481 3519 3482 int errorException(maps *m, const char *message, const char *errorcode, const char *locator)3483 {3484 map* errormap = createMap("text", message);3485 addToMap(errormap,"code", errorcode);3486 if(locator!=NULL)3487 addToMap(errormap,"locator", locator);3488 else3489 addToMap(errormap,"locator", "NULL");3490 printExceptionReportResponse(m,errormap);3491 freeMap(&errormap);3492 free(errormap);3493 return -1;3494 }3495 3496 3497 3520 char *readVSIFile(maps* conf,const char* dataSource){ 3498 3521 VSILFILE * fichier=VSIFOpenL(dataSource,"rb"); … … 3501 3524 if(fichier==NULL){ 3502 3525 char tmp[1024]; 3503 sprintf(tmp,"Failed to open file %s for reading purpose. File seems empty % d.",3526 sprintf(tmp,"Failed to open file %s for reading purpose. File seems empty %lld.", 3504 3527 dataSource,file_status.st_size); 3505 3528 setMapInMaps(conf,"lenv","message",tmp); … … 3620 3643 return 0; 3621 3644 } 3645 3646 /************************************************************************/ 3647 /* checkValidValue() */ 3648 /************************************************************************/ 3649 3650 /** 3651 * Verify if a parameter value is valid. 3652 * 3653 * @param request the request map 3654 * @param res the error map potentially generated 3655 * @param avalues the acceptable values (or null if testing only for presence) 3656 * @param mandatory verify the presence of the parameter if mandatory > 0 3657 */ 3658 void checkValidValue(map* request,map** res,const char* toCheck,const char** avalues,int mandatory){ 3659 map* lres=*res; 3660 map* r_inputs = getMap (request,toCheck); 3661 if (r_inputs == NULL){ 3662 if(mandatory>0){ 3663 char *replace=_("Mandatory parameter <%s> was not specified"); 3664 char *message=(char*)malloc((strlen(replace)+strlen(toCheck)+1)*sizeof(char)); 3665 sprintf(message,replace,toCheck); 3666 if(lres==NULL){ 3667 lres=createMap("code","MissingParameterValue"); 3668 addToMap(lres,"text",message); 3669 addToMap(lres,"locator",toCheck); 3670 }else{ 3671 int length=1; 3672 map* len=getMap(lres,"length"); 3673 if(len!=NULL){ 3674 length=atoi(len->value); 3675 } 3676 setMapArray(lres,"text",length,message); 3677 setMapArray(lres,"locator",length,toCheck); 3678 setMapArray(lres,"code",length,"MissingParameter"); 3679 } 3680 free(message); 3681 } 3682 }else{ 3683 if(avalues==NULL) 3684 return; 3685 int nb=0; 3686 int hasValidValue=-1; 3687 while(avalues[nb]!=NULL){ 3688 if(strcasecmp(avalues[nb],r_inputs->value)==0){ 3689 hasValidValue=1; 3690 break; 3691 } 3692 nb++; 3693 } 3694 if(hasValidValue<0){ 3695 char *replace=_("Ununderstood <%s> value, %s %s the only acceptable value."); 3696 nb=0; 3697 char *vvalues=NULL; 3698 char* num=_("is"); 3699 while(avalues[nb]!=NULL){ 3700 char *tvalues; 3701 if(vvalues==NULL){ 3702 vvalues=(char*)malloc((strlen(avalues[nb])+3)*sizeof(char)); 3703 sprintf(vvalues,"%s",avalues[nb]); 3704 } 3705 else{ 3706 tvalues=zStrdup(vvalues); 3707 vvalues=(char*)realloc(vvalues,(strlen(tvalues)+strlen(avalues[nb])+3)*sizeof(char)); 3708 sprintf(vvalues,"%s, %s",tvalues,avalues[nb]); 3709 free(tvalues); 3710 num=_("are"); 3711 } 3712 nb++; 3713 } 3714 char *message=(char*)malloc((strlen(replace)+strlen(num)+strlen(vvalues)+strlen(toCheck)+1)*sizeof(char)); 3715 sprintf(message,replace,toCheck,vvalues,num); 3716 if(lres==NULL){ 3717 lres=createMap("code","InvalidParameterValue"); 3718 addToMap(lres,"text",message); 3719 addToMap(lres,"locator",toCheck); 3720 }else{ 3721 int length=1; 3722 map* len=getMap(lres,"length"); 3723 if(len!=NULL){ 3724 length=atoi(len->value); 3725 } 3726 setMapArray(lres,"text",length,message); 3727 setMapArray(lres,"locator",length,toCheck); 3728 setMapArray(lres,"code",length,"InvalidParameterValue"); 3729 } 3730 } 3731 } 3732 if(lres!=NULL){ 3733 *res=lres; 3734 } 3735 } -
trunk/zoo-project/zoo-kernel/service_internal.h
r550 r576 99 99 int readServiceFile(maps*, char*,service**,char *); 100 100 int isValidLang(maps*,const char*); 101 void addLangAttr(xmlNodePtr,maps*); 101 102 102 103 void printHeaders(maps*); … … 137 138 xmlNodePtr createExceptionReportNode(maps*,map*,int); 138 139 void printProcessResponse(maps*,map*,int,service*,const char*,int,maps*,maps*); 139 xmlNodePtr printGetCapabilitiesHeader(xmlDocPtr,const char*,maps*); 140 xmlNodePtr printWPSHeader(xmlDocPtr,maps*,const char*,const char*); 141 xmlNodePtr printGetCapabilitiesHeader(xmlDocPtr,maps*); 140 142 void printGetCapabilitiesForProcess(maps*,xmlNodePtr,service*); 141 xmlNodePtr printDescribeProcessHeader(xmlDocPtr,const char*,maps*);142 143 void printDescribeProcessForProcess(maps*,xmlNodePtr,service*); 143 144 void printFullDescription(int,elements*,const char*,xmlNsPtr,xmlNodePtr); … … 148 149 void printBoundingBox(xmlNsPtr,xmlNodePtr,map*); 149 150 void printBoundingBoxDocument(maps*,maps*,FILE*); 150 void printOutputDefinitions 1(xmlDocPtr,xmlNodePtr,xmlNsPtr,xmlNsPtr,elements*,maps*,const char*);151 151 void printOutputDefinitions(xmlDocPtr,xmlNodePtr,xmlNsPtr,xmlNsPtr,elements*,maps*,const char*); 152 152 153 void outputResponse(service*,maps*,maps*,map*,int,maps*,int); 153 154 … … 155 156 char *base64d(const char*,int,int*); 156 157 void ensureDecodedBase64(maps**); 157 158 char* addDefaultValues(maps**,elements*,maps*,int );158 void checkValidValue(map*,map**,const char*,const char**,int); 159 char* addDefaultValues(maps**,elements*,maps*,int,map**); 159 160 160 161 int errorException(maps *, const char *, const char *, const char*); 161 162 163 xmlNodePtr soapEnvelope(maps*,xmlNodePtr); 162 164 int checkForSoapEnvelope(xmlDocPtr); 163 165 -
trunk/zoo-project/zoo-kernel/service_internal_js.c
r505 r576 200 200 sprintf(tmp1,"Unable to load JavaScript file %s",filename); 201 201 free(filename); 202 map* err=createMap("text",tmp1); 203 addToMap(err,"code","NoApplicableCode"); 204 printExceptionReportResponse(mc,err); 205 freeMap(&err); 206 free(err); 202 errorException(*main_conf,tmp1,"NoApplicableCode",NULL); 207 203 JS_MaybeGC(cx); 208 204 JS_DestroyContext(cx); … … 248 244 fprintf(stderr,"%s",tmp1); 249 245 #endif 250 map* err=createMap("text",tmp1); 251 addToMap(err,"code","NoApplicableCode"); 252 printExceptionReportResponse(*main_conf,err); 253 freeMap(&err); 254 free(err); 246 errorException(*main_conf,tmp1,"NoApplicableCode",NULL); 255 247 free(filename); 256 248 JS_MaybeGC(cx); -
trunk/zoo-project/zoo-kernel/service_internal_otb.c
r565 r576 137 137 else if (strncasecmp(test->value,"double",6)==0) 138 138 outPixType = ImagePixelType_double; 139 c har* ext="tiff";139 const char* ext="tiff"; 140 140 if(tmpVal!=NULL){ 141 141 if(strncasecmp(tmpVal->value,"image/jp2",9)==0) -
trunk/zoo-project/zoo-kernel/service_internal_python.c
r539 r576 215 215 } 216 216 else{ 217 map* err=createMap("text","Unable to parse serviceProvider please check your zcfg file."); 218 addToMap(err,"code","NoApplicableCode"); 219 printExceptionReportResponse(m,err); 217 errorException (m, "Unable to parse serviceProvider please check your zcfg file.", "NoApplicableCode", NULL); 220 218 exit(-1); 221 219 } … … 250 248 #endif 251 249 }else{ 252 PyObject *ptype,*pvalue, *ptraceback; 253 PyErr_Fetch(&ptype, &pvalue, &ptraceback); 254 PyObject *trace=PyObject_Str(pvalue); 255 char pbt[10240]; 256 if(PyString_Check(trace)) 257 sprintf(pbt,"TRACE : %s",PyString_AsString(trace)); 258 else 259 fprintf(stderr,"EMPTY TRACE ?"); 260 trace=NULL; 261 trace=PyObject_Str(ptype); 262 if(PyString_Check(trace)){ 263 char *tpbt=zStrdup(pbt); 264 sprintf(pbt,"%s\n%s",tpbt,PyString_AsString(trace)); 265 free(tpbt); 266 } 267 else 268 fprintf(stderr,"EMPTY TRACE ?"); 269 270 char *tpbt=zStrdup(pbt); 271 pName = PyString_FromString("traceback"); 272 pModule = PyImport_Import(pName); 273 pArgs = PyTuple_New(1); 274 PyTuple_SetItem(pArgs, 0, ptraceback); 275 pFunc = PyObject_GetAttrString(pModule,"format_tb"); 276 pValue = PyObject_CallObject(pFunc, pArgs); 277 trace=NULL; 278 trace=PyObject_Str(pValue); 279 if(PyString_Check(trace)) 280 sprintf(pbt,"%s\nUnable to run your python process properly. Please check the following messages : %s",tpbt,PyString_AsString(trace)); 281 else 282 sprintf(pbt,"%s \n Unable to run your python process properly. Unable to provide any futher informations.",tpbt); 283 free(tpbt); 284 map* err=createMap("text",pbt); 285 addToMap(err,"code","NoApplicableCode"); 286 printExceptionReportResponse(m,err); 250 PythonZooReport(m,tmp->value,0); 287 251 res=-1; 288 252 } … … 291 255 char tmpS[1024]; 292 256 sprintf(tmpS, "Cannot find the %s function in the %s file.\n", s->name, tmp->value); 293 map* tmps=createMap("text",tmpS); 294 printExceptionReportResponse(m,tmps); 257 errorException(m,tmpS,"NoApplicableCode",NULL); 295 258 res=-1; 296 259 } 297 260 } else{ 298 char tmpS[1024]; 299 sprintf(tmpS, "Python module %s cannot be loaded.\n", tmp->value); 300 map* tmps=createMap("text",tmpS); 301 printExceptionReportResponse(m,tmps); 302 if (PyErr_Occurred()) 303 PyErr_Print(); 304 PyErr_Clear(); 261 PythonZooReport(m,tmp->value,1); 305 262 res=-1; 306 263 } … … 312 269 Py_Finalize(); 313 270 return res; 271 } 272 273 void PythonZooReport(maps* m,const char* module,int load){ 274 PyObject *pName, *pModule, *pFunc; 275 PyObject *ptype, *pvalue, *ptraceback,*pValue,*pArgs; 276 PyErr_Fetch(&ptype, &pvalue, &ptraceback); 277 char *pStrErrorMessage = PyString_AsString(pvalue); 278 char *tmp0=_("Python module %s cannot be loaded. Message: %s\n"); 279 280 PyObject *trace=PyObject_Str(pvalue); 281 char *pbt=NULL; 282 if(PyString_Check(trace)){ 283 pbt=(char*)malloc((7+strlen(PyString_AsString(trace))+1)*sizeof(char)); 284 sprintf(pbt,"TRACE: %s",PyString_AsString(trace)); 285 } 286 else 287 fprintf(stderr,"EMPTY TRACE ?"); 288 289 trace=NULL; 290 291 trace=PyObject_Str(ptype); 292 if(PyString_Check(trace)){ 293 char *tpbt=zStrdup(pbt); 294 if(pbt!=NULL) 295 free(pbt); 296 pbt=(char*)malloc((1+strlen(tpbt)+strlen(PyString_AsString(trace))+1)*sizeof(char)); 297 sprintf(pbt,"%s\n%s",tpbt,PyString_AsString(trace)); 298 free(tpbt); 299 } 300 else 301 fprintf(stderr,"EMPTY TRACE ?"); 302 303 if(ptraceback!=NULL){ 304 char *tpbt=zStrdup(pbt); 305 pName = PyString_FromString("traceback"); 306 pModule = PyImport_Import(pName); 307 pArgs = PyTuple_New(1); 308 PyTuple_SetItem(pArgs, 0, ptraceback); 309 pFunc = PyObject_GetAttrString(pModule,"format_tb"); 310 pValue = PyObject_CallObject(pFunc, pArgs); 311 trace=NULL; 312 trace=PyObject_Str(pValue); 313 if(PyString_Check(trace)){ 314 if(pbt!=NULL) 315 free(pbt); 316 pbt=(char*)malloc((90+strlen(tpbt)+strlen(PyString_AsString(trace))+1)*sizeof(char)); 317 sprintf(pbt,_("%s\nUnable to run your python process properly. Please check the following messages : %s"),tpbt,PyString_AsString(trace)); 318 } 319 else{ 320 if(pbt!=NULL) 321 free(pbt); 322 pbt=(char*)malloc((90+strlen(tpbt)+strlen(PyString_AsString(trace))+1)*sizeof(char)); 323 sprintf(pbt,_("%s \n Unable to run your python process properly. Unable to provide any futher informations."),tpbt); 324 } 325 free(tpbt); 326 } 327 if(load>0){ 328 char *tmpS=(char*)malloc((strlen(tmp0)+strlen(module)+strlen(pbt)+1)*sizeof(char)); 329 sprintf(tmpS,tmp0,module,pbt); 330 errorException(m,tmpS,"NoApplicableCode",NULL); 331 free(tmpS); 332 }else 333 errorException(m,pbt,"NoApplicableCode",NULL); 334 free(pbt); 314 335 } 315 336 -
trunk/zoo-project/zoo-kernel/service_internal_python.h
r469 r576 45 45 int zoo_python_support(maps**,map*,service*,maps**,maps**); 46 46 47 void PythonZooReport(maps*,const char*,int); 48 47 49 PyObject* PythonTranslate(PyObject*, PyObject*); 48 50 PyObject* PythonUpdateStatus(PyObject*, PyObject*); -
trunk/zoo-project/zoo-kernel/zoo_service_loader.c
r557 r576 609 609 #endif 610 610 sprintf (tmps, _("C Library can't be loaded %s"), errstr); 611 map *tmps1 = createMap ("text", tmps); 612 printExceptionReportResponse (m, tmps1); 611 errorException(m,tmps,"InternalError",NULL); 613 612 *eres = -1; 614 freeMap (&tmps1);615 free (tmps1);616 613 } 617 614 } … … 697 694 ("Programming Language (%s) set in ZCFG file is not currently supported by ZOO Kernel.\n"), 698 695 r_inputs->value); 699 map *tmps = createMap ("text", tmpv); 700 printExceptionReportResponse (m, tmps); 696 errorException (m, tmpv, "InternalError", NULL); 701 697 *eres = -1; 702 698 } … … 986 982 * Check for minimum inputs 987 983 */ 984 map* err=NULL; 985 const char *vvr[]={ 986 "GetCapabilities", 987 "DescribeProcess", 988 "Execute", 989 NULL 990 }; 991 checkValidValue(request_inputs,&err,"Request",(const char**)vvr,1); 992 const char *vvs[]={ 993 "WPS", 994 NULL 995 }; 996 if(err!=NULL){ 997 checkValidValue(request_inputs,&err,"service",(const char**)vvs,1); 998 printExceptionReportResponse (m, err); 999 freeMap(&err); 1000 free(err); 1001 if (count (request_inputs) == 1) 1002 { 1003 freeMap (&request_inputs); 1004 free (request_inputs); 1005 } 1006 freeMaps (&m); 1007 free (m); 1008 return 1; 1009 } 1010 checkValidValue(request_inputs,&err,"service",(const char**)vvs,1); 1011 const char *vvv[]={ 1012 "1.0.0", 1013 NULL 1014 }; 988 1015 r_inputs = getMap (request_inputs, "Request"); 989 if (request_inputs == NULL || r_inputs == NULL) 990 { 991 errorException (m, _("Parameter <request> was not specified"), 992 "MissingParameterValue", "request"); 993 if (count (request_inputs) == 1) 994 { 995 freeMap (&request_inputs); 996 free (request_inputs); 997 } 998 freeMaps (&m); 999 free (m); 1000 return 1; 1001 } 1002 else 1003 { 1004 REQUEST = zStrdup (r_inputs->value); 1005 if (strncasecmp (r_inputs->value, "GetCapabilities", 15) != 0 1006 && strncasecmp (r_inputs->value, "DescribeProcess", 15) != 0 1007 && strncasecmp (r_inputs->value, "Execute", 7) != 0) 1008 { 1009 errorException (m, 1010 _ 1011 ("Unenderstood <request> value. Please check that it was set to GetCapabilities, DescribeProcess or Execute."), 1012 "OperationNotSupported", r_inputs->value); 1013 freeMaps (&m); 1014 free (m); 1015 free (REQUEST); 1016 return 1; 1017 } 1018 } 1019 r_inputs = NULL; 1020 r_inputs = getMap (request_inputs, "Service"); 1021 if (r_inputs == NULLMAP) 1022 { 1023 errorException (m, _("Parameter <service> was not specified"), 1024 "MissingParameterValue", "service"); 1025 freeMaps (&m); 1026 free (m); 1027 free (REQUEST); 1028 return 1; 1029 } 1030 else 1031 { 1032 if (strcasecmp (r_inputs->value, "WPS") != 0) 1033 { 1034 errorException (m, 1035 _ 1036 ("Unenderstood <service> value, WPS is the only acceptable value."), 1037 "InvalidParameterValue", "service"); 1038 freeMaps (&m); 1039 free (m); 1040 free (REQUEST); 1041 return 1; 1042 } 1043 } 1044 if (strncasecmp (REQUEST, "GetCapabilities", 15) != 0) 1045 { 1046 r_inputs = getMap (request_inputs, "Version"); 1047 if (r_inputs == NULL) 1048 { 1049 errorException (m, _("Parameter <version> was not specified"), 1050 "MissingParameterValue", "version"); 1051 freeMaps (&m); 1052 free (m); 1053 free (REQUEST); 1054 return 1; 1055 } 1056 else 1057 { 1058 if (strcasecmp (r_inputs->value, "1.0.0") != 0) 1059 { 1060 errorException (m, 1061 _ 1062 ("Unenderstood <version> value, 1.0.0 is the only acceptable value."), 1063 "InvalidParameterValue", "service"); 1064 freeMaps (&m); 1065 free (m); 1066 free (REQUEST); 1067 return 1; 1068 } 1069 } 1070 } 1071 else 1072 { 1073 r_inputs = getMap (request_inputs, "AcceptVersions"); 1074 if (r_inputs != NULL) 1075 { 1076 if (strncmp (r_inputs->value, "1.0.0", 5) != 0) 1077 { 1078 errorException (m, 1079 _ 1080 ("Unenderstood <AcceptVersions> value, 1.0.0 is the only acceptable value."), 1081 "VersionNegotiationFailed", NULL); 1082 freeMaps (&m); 1083 free (m); 1084 free (REQUEST); 1085 return 1; 1086 } 1087 } 1088 } 1016 REQUEST = zStrdup (r_inputs->value); 1017 if (strncasecmp (REQUEST, "GetCapabilities", 15) != 0){ 1018 checkValidValue(request_inputs,&err,"version",(const char**)vvv,1); 1019 checkValidValue(request_inputs,&err,"identifier",NULL,1); 1020 }else{ 1021 checkValidValue(request_inputs,&err,"AcceptVersions",(const char**)vvv,-1); 1022 } 1023 if(err!=NULL){ 1024 printExceptionReportResponse (m, err); 1025 freeMap(&err); 1026 free(err); 1027 if (count (request_inputs) == 1) 1028 { 1029 freeMap (&request_inputs); 1030 free (request_inputs); 1031 } 1032 free(REQUEST); 1033 freeMaps (&m); 1034 free (m); 1035 return 1; 1036 } 1089 1037 1090 1038 r_inputs = getMap (request_inputs, "serviceprovider"); … … 1093 1041 addToMap (request_inputs, "serviceprovider", ""); 1094 1042 } 1043 1095 1044 1096 1045 maps *request_output_real_format = NULL; … … 1124 1073 xmlDocPtr doc = xmlNewDoc (BAD_CAST "1.0"); 1125 1074 r_inputs = NULL; 1126 r_inputs = getMap (request_inputs, "ServiceProvider"); 1127 xmlNodePtr n; 1128 if (r_inputs != NULL) 1129 n = printGetCapabilitiesHeader (doc, r_inputs->value, m); 1130 else 1131 n = printGetCapabilitiesHeader (doc, "", m); 1132 /** 1133 * Here we need to close stdout to ensure that not supported chars 1134 * has been found in the zcfg and then printed on stdout 1135 */ 1075 //r_inputs = getMap (request_inputs, "ServiceProvider"); 1076 xmlNodePtr n=printGetCapabilitiesHeader(doc,m); 1077 /** 1078 * Here we need to close stdout to ensure that unsupported chars 1079 * has been found in the zcfg and then printed on stdout 1080 */ 1136 1081 int saved_stdout = dup (fileno (stdout)); 1137 1082 dup2 (fileno (stderr), fileno (stdout)); … … 1159 1104 { 1160 1105 r_inputs = getMap (request_inputs, "Identifier"); 1161 if (r_inputs == NULL1162 || strlen (r_inputs->name) == 0 || strlen (r_inputs->value) == 0)1163 {1164 errorException (m, _("Mandatory <identifier> was not specified"),1165 "MissingParameterValue", "identifier");1166 freeMaps (&m);1167 free (m);1168 free (REQUEST);1169 free (SERVICE_URL);1170 return 0;1171 }1172 1106 1173 1107 struct dirent *dp; … … 1185 1119 if (strncasecmp (REQUEST, "DescribeProcess", 15) == 0) 1186 1120 { 1187 1188 1189 1121 /** 1122 * Loop over Identifier list 1123 */ 1190 1124 xmlDocPtr doc = xmlNewDoc (BAD_CAST "1.0"); 1191 1125 r_inputs = NULL; 1192 r_inputs = getMap (request_inputs, "ServiceProvider"); 1193 1194 xmlNodePtr n; 1195 if (r_inputs != NULL) 1196 n = printDescribeProcessHeader (doc, r_inputs->value, m); 1197 else 1198 n = printDescribeProcessHeader (doc, "", m); 1126 xmlNodePtr n = printWPSHeader(doc,m,"DescribeProcess", 1127 "ProcessDescriptions"); 1199 1128 1200 1129 r_inputs = getMap (request_inputs, "Identifier"); … … 1460 1389 sprintf (tmpMsg, 1461 1390 _ 1462 ("The value for <i ndetifier> seems to be wrong (%s). Please, ensure that the process exist using the GetCapabilities request."),1391 ("The value for <identifier> seems to be wrong (%s). Please, ensure that the process exist using the GetCapabilities request."), 1463 1392 r_inputs->value); 1464 1393 errorException (m, tmpMsg, "InvalidParameterValue", "identifier"); … … 1640 1569 #endif 1641 1570 char cursor_input[40960]; 1642 if (r_inputs != NULL) 1571 if (r_inputs != NULL){ 1643 1572 snprintf (cursor_input, 40960, "%s", r_inputs->value); 1644 else 1645 { 1646 errorException (m, _("Parameter <DataInputs> was not specified"), 1647 "MissingParameterValue", "DataInputs"); 1648 freeMaps (&m); 1649 free (m); 1650 free (REQUEST); 1651 free (SERVICE_URL); 1652 InternetCloseHandle (&hInternet); 1653 freeService (&s1); 1654 free (s1); 1655 return 0; 1656 } 1657 j = 0; 1658 1659 /** 1660 * Put each DataInputs into the inputs_as_text array 1661 */ 1662 char *tmp1 = zStrdup (cursor_input); 1663 char *pToken; 1664 pToken = strtok (cursor_input, ";"); 1665 if (pToken != NULL && strncasecmp (pToken, tmp1, strlen (tmp1)) == 0) 1666 { 1667 char *tmp2 = url_decode (tmp1); 1668 snprintf (cursor_input, (strlen (tmp2) + 1) * sizeof (char), "%s", 1669 tmp2); 1670 free (tmp2); 1671 pToken = strtok (cursor_input, ";"); 1672 } 1673 free (tmp1); 1674 1675 char **inputs_as_text = (char **) malloc (100 * sizeof (char *)); 1676 if (inputs_as_text == NULL) 1677 { 1678 return errorException (m, _("Unable to allocate memory."), 1679 "InternalError", NULL); 1680 } 1681 i = 0; 1682 while (pToken != NULL) 1683 { 1684 #ifdef DEBUG 1685 fprintf (stderr, "***%s***\n", pToken); 1686 #endif 1687 fflush (stderr); 1688 #ifdef DEBUG 1689 fprintf (stderr, "***%s***\n", pToken); 1690 #endif 1691 inputs_as_text[i] = 1692 (char *) malloc ((strlen (pToken) + 1) * sizeof (char)); 1693 snprintf (inputs_as_text[i], strlen (pToken) + 1, "%s", pToken); 1694 if (inputs_as_text[i] == NULL) 1695 { 1696 return errorException (m, _("Unable to allocate memory."), 1697 "InternalError", NULL); 1698 } 1699 pToken = strtok (NULL, ";"); 1700 i++; 1701 } 1702 1703 for (j = 0; j < i; j++) 1704 { 1705 char *tmp = zStrdup (inputs_as_text[j]); 1706 free (inputs_as_text[j]); 1707 char *tmpc; 1708 tmpc = strtok (tmp, "@"); 1709 while (tmpc != NULL) 1710 { 1711 #ifdef DEBUG 1712 fprintf (stderr, "***\n***%s***\n", tmpc); 1713 #endif 1714 char *tmpv = strstr (tmpc, "="); 1715 char tmpn[256]; 1716 memset (tmpn, 0, 256); 1717 if (tmpv != NULL) 1718 { 1719 strncpy (tmpn, tmpc, 1720 (strlen (tmpc) - strlen (tmpv)) * sizeof (char)); 1721 tmpn[strlen (tmpc) - strlen (tmpv)] = 0; 1722 } 1723 else 1724 { 1725 strncpy (tmpn, tmpc, strlen (tmpc) * sizeof (char)); 1726 tmpn[strlen (tmpc)] = 0; 1727 } 1728 #ifdef DEBUG 1729 fprintf (stderr, "***\n*** %s = %s ***\n", tmpn, tmpv + 1); 1730 #endif 1731 if (tmpmaps == NULL) 1732 { 1733 tmpmaps = (maps *) malloc (MAPS_SIZE); 1734 if (tmpmaps == NULL) 1735 { 1736 return errorException (m, 1737 _("Unable to allocate memory."), 1738 "InternalError", NULL); 1739 } 1740 tmpmaps->name = zStrdup (tmpn); 1741 if (tmpv != NULL) 1742 { 1743 char *tmpvf = url_decode (tmpv + 1); 1744 tmpmaps->content = createMap ("value", tmpvf); 1745 free (tmpvf); 1746 } 1747 else 1748 tmpmaps->content = createMap ("value", "Reference"); 1749 tmpmaps->next = NULL; 1750 } 1751 tmpc = strtok (NULL, "@"); 1752 while (tmpc != NULL) 1753 { 1754 #ifdef DEBUG 1755 fprintf (stderr, "*** KVP NON URL-ENCODED \n***%s***\n", 1756 tmpc); 1757 #endif 1758 char *tmpv1 = strstr (tmpc, "="); 1759 #ifdef DEBUG 1760 fprintf (stderr, "*** VALUE NON URL-ENCODED \n***%s***\n", 1761 tmpv1 + 1); 1762 #endif 1763 char tmpn1[1024]; 1764 memset (tmpn1, 0, 1024); 1765 if (tmpv1 != NULL) 1766 { 1767 strncpy (tmpn1, tmpc, strlen (tmpc) - strlen (tmpv1)); 1768 tmpn1[strlen (tmpc) - strlen (tmpv1)] = 0; 1769 addToMap (tmpmaps->content, tmpn1, tmpv1 + 1); 1770 } 1771 else 1772 { 1773 strncpy (tmpn1, tmpc, strlen (tmpc)); 1774 tmpn1[strlen (tmpc)] = 0; 1775 map *lmap = getLastMap (tmpmaps->content); 1776 char *tmpValue = 1777 (char *) malloc ((strlen (tmpv) + strlen (tmpc) + 1) * 1778 sizeof (char)); 1779 sprintf (tmpValue, "%s@%s", tmpv + 1, tmpc); 1780 free (lmap->value); 1781 lmap->value = zStrdup (tmpValue); 1782 free (tmpValue); 1783 tmpc = strtok (NULL, "@"); 1784 continue; 1785 } 1786 #ifdef DEBUG 1787 fprintf (stderr, "*** NAME NON URL-ENCODED \n***%s***\n", 1788 tmpn1); 1789 fprintf (stderr, "*** VALUE NON URL-ENCODED \n***%s***\n", 1790 tmpv1 + 1); 1791 #endif 1792 if (strcmp (tmpn1, "xlink:href") != 0) 1793 addToMap (tmpmaps->content, tmpn1, tmpv1 + 1); 1794 else if (tmpv1 != NULL) 1795 { 1796 char *tmpx2 = url_decode (tmpv1 + 1); 1797 if (strncasecmp (tmpx2, "http://", 7) != 0 && 1798 strncasecmp (tmpx2, "ftp://", 6) != 0 && 1799 strncasecmp (tmpx2, "https://", 8) != 0) 1800 { 1801 char emsg[1024]; 1802 sprintf (emsg, 1803 _ 1804 ("Unable to find a valid protocol to download the remote file %s"), 1805 tmpv1 + 1); 1806 errorException (m, emsg, "InternalError", NULL); 1807 freeMaps (&m); 1808 free (m); 1809 free (REQUEST); 1810 free (SERVICE_URL); 1811 InternetCloseHandle (&hInternet); 1812 freeService (&s1); 1813 free (s1); 1814 return 0; 1815 } 1816 #ifdef DEBUG 1817 fprintf (stderr, 1818 "REQUIRE TO DOWNLOAD A FILE FROM A SERVER : url(%s)\n", 1819 tmpv1 + 1); 1820 #endif 1821 addToMap (tmpmaps->content, tmpn1, tmpx2); 1573 j = 0; 1574 1575 /** 1576 * Put each DataInputs into the inputs_as_text array 1577 */ 1578 char *tmp1 = zStrdup (cursor_input); 1579 char *pToken; 1580 pToken = strtok (cursor_input, ";"); 1581 if (pToken != NULL && strncasecmp (pToken, tmp1, strlen (tmp1)) == 0) 1582 { 1583 char *tmp2 = url_decode (tmp1); 1584 snprintf (cursor_input, (strlen (tmp2) + 1) * sizeof (char), "%s", 1585 tmp2); 1586 free (tmp2); 1587 pToken = strtok (cursor_input, ";"); 1588 } 1589 free (tmp1); 1590 1591 char **inputs_as_text = (char **) malloc (100 * sizeof (char *)); 1592 if (inputs_as_text == NULL) 1593 { 1594 return errorException (m, _("Unable to allocate memory."), 1595 "InternalError", NULL); 1596 } 1597 i = 0; 1598 while (pToken != NULL) 1599 { 1600 #ifdef DEBUG 1601 fprintf (stderr, "***%s***\n", pToken); 1602 fflush (stderr); 1603 fprintf (stderr, "***%s***\n", pToken); 1604 #endif 1605 inputs_as_text[i] = 1606 (char *) malloc ((strlen (pToken) + 1) * sizeof (char)); 1607 if (inputs_as_text[i] == NULL) 1608 { 1609 return errorException (m, _("Unable to allocate memory."), 1610 "InternalError", NULL); 1611 } 1612 snprintf (inputs_as_text[i], strlen (pToken) + 1, "%s", pToken); 1613 pToken = strtok (NULL, ";"); 1614 i++; 1615 } 1616 1617 for (j = 0; j < i; j++) 1618 { 1619 char *tmp = zStrdup (inputs_as_text[j]); 1620 free (inputs_as_text[j]); 1621 char *tmpc; 1622 tmpc = strtok (tmp, "@"); 1623 while (tmpc != NULL) 1624 { 1625 #ifdef DEBUG 1626 fprintf (stderr, "***\n***%s***\n", tmpc); 1627 #endif 1628 char *tmpv = strstr (tmpc, "="); 1629 char tmpn[256]; 1630 memset (tmpn, 0, 256); 1631 if (tmpv != NULL) 1632 { 1633 strncpy (tmpn, tmpc, 1634 (strlen (tmpc) - strlen (tmpv)) * sizeof (char)); 1635 tmpn[strlen (tmpc) - strlen (tmpv)] = 0; 1636 } 1637 else 1638 { 1639 strncpy (tmpn, tmpc, strlen (tmpc) * sizeof (char)); 1640 tmpn[strlen (tmpc)] = 0; 1641 } 1642 #ifdef DEBUG 1643 fprintf (stderr, "***\n*** %s = %s ***\n", tmpn, tmpv + 1); 1644 #endif 1645 if (tmpmaps == NULL) 1646 { 1647 tmpmaps = (maps *) malloc (MAPS_SIZE); 1648 if (tmpmaps == NULL) 1649 { 1650 return errorException (m, 1651 _("Unable to allocate memory."), 1652 "InternalError", NULL); 1653 } 1654 tmpmaps->name = zStrdup (tmpn); 1655 if (tmpv != NULL) 1656 { 1657 char *tmpvf = url_decode (tmpv + 1); 1658 tmpmaps->content = createMap ("value", tmpvf); 1659 free (tmpvf); 1660 } 1661 else 1662 tmpmaps->content = createMap ("value", "Reference"); 1663 tmpmaps->next = NULL; 1664 } 1665 tmpc = strtok (NULL, "@"); 1666 while (tmpc != NULL) 1667 { 1668 #ifdef DEBUG 1669 fprintf (stderr, "*** KVP NON URL-ENCODED \n***%s***\n", 1670 tmpc); 1671 #endif 1672 char *tmpv1 = strstr (tmpc, "="); 1673 #ifdef DEBUG 1674 fprintf (stderr, "*** VALUE NON URL-ENCODED \n***%s***\n", 1675 tmpv1 + 1); 1676 #endif 1677 char tmpn1[1024]; 1678 memset (tmpn1, 0, 1024); 1679 if (tmpv1 != NULL) 1680 { 1681 strncpy (tmpn1, tmpc, strlen (tmpc) - strlen (tmpv1)); 1682 tmpn1[strlen (tmpc) - strlen (tmpv1)] = 0; 1683 addToMap (tmpmaps->content, tmpn1, tmpv1 + 1); 1684 } 1685 else 1686 { 1687 strncpy (tmpn1, tmpc, strlen (tmpc)); 1688 tmpn1[strlen (tmpc)] = 0; 1689 map *lmap = getLastMap (tmpmaps->content); 1690 char *tmpValue = 1691 (char *) malloc ((strlen (tmpv) + strlen (tmpc) + 1) * 1692 sizeof (char)); 1693 sprintf (tmpValue, "%s@%s", tmpv + 1, tmpc); 1694 free (lmap->value); 1695 lmap->value = zStrdup (tmpValue); 1696 free (tmpValue); 1697 tmpc = strtok (NULL, "@"); 1698 continue; 1699 } 1700 #ifdef DEBUG 1701 fprintf (stderr, "*** NAME NON URL-ENCODED \n***%s***\n", 1702 tmpn1); 1703 fprintf (stderr, "*** VALUE NON URL-ENCODED \n***%s***\n", 1704 tmpv1 + 1); 1705 #endif 1706 if (strcmp (tmpn1, "xlink:href") != 0) 1707 addToMap (tmpmaps->content, tmpn1, tmpv1 + 1); 1708 else if (tmpv1 != NULL) 1709 { 1710 char *tmpx2 = url_decode (tmpv1 + 1); 1711 if (strncasecmp (tmpx2, "http://", 7) != 0 && 1712 strncasecmp (tmpx2, "ftp://", 6) != 0 && 1713 strncasecmp (tmpx2, "https://", 8) != 0) 1714 { 1715 char emsg[1024]; 1716 sprintf (emsg, 1717 _ 1718 ("Unable to find a valid protocol to download the remote file %s"), 1719 tmpv1 + 1); 1720 errorException (m, emsg, "InternalError", NULL); 1721 freeMaps (&m); 1722 free (m); 1723 free (REQUEST); 1724 free (SERVICE_URL); 1725 InternetCloseHandle (&hInternet); 1726 freeService (&s1); 1727 free (s1); 1728 return 0; 1729 } 1730 #ifdef DEBUG 1731 fprintf (stderr, 1732 "REQUIRE TO DOWNLOAD A FILE FROM A SERVER : url(%s)\n", 1733 tmpv1 + 1); 1734 #endif 1735 addToMap (tmpmaps->content, tmpn1, tmpx2); 1822 1736 #ifndef WIN32 1823 if (CHECK_INET_HANDLE (hInternet)) 1824 #endif 1825 { 1826 if (loadRemoteFile 1827 (&m, &tmpmaps->content, &hInternet, tmpx2) < 0) 1828 { 1829 freeMaps (&m); 1830 free (m); 1831 free (REQUEST); 1832 free (SERVICE_URL); 1833 InternetCloseHandle (&hInternet); 1834 freeService (&s1); 1835 free (s1); 1836 return 0; 1837 } 1838 } 1839 free (tmpx2); 1840 addToMap (tmpmaps->content, "Reference", tmpv1 + 1); 1841 } 1842 tmpc = strtok (NULL, "@"); 1843 } 1844 #ifdef DEBUG 1845 dumpMaps (tmpmaps); 1846 fflush (stderr); 1847 #endif 1848 if (request_input_real_format == NULL) 1849 request_input_real_format = dupMaps (&tmpmaps); 1850 else 1851 { 1852 maps *testPresence = 1853 getMaps (request_input_real_format, tmpmaps->name); 1854 if (testPresence != NULL) 1855 { 1856 elements *elem = 1857 getElements (s1->inputs, tmpmaps->name); 1858 if (elem != NULL) 1859 { 1860 if (appendMapsToMaps 1861 (m, request_input_real_format, tmpmaps, 1862 elem) < 0) 1863 { 1864 freeMaps (&m); 1865 free (m); 1866 free (REQUEST); 1867 free (SERVICE_URL); 1868 InternetCloseHandle (&hInternet); 1869 freeService (&s1); 1870 free (s1); 1871 return 0; 1872 } 1873 } 1874 } 1875 else 1876 addMapsToMaps (&request_input_real_format, tmpmaps); 1877 } 1878 freeMaps (&tmpmaps); 1879 free (tmpmaps); 1880 tmpmaps = NULL; 1881 free (tmp); 1882 } 1883 } 1884 free (inputs_as_text); 1737 if (CHECK_INET_HANDLE (hInternet)) 1738 #endif 1739 { 1740 if (loadRemoteFile 1741 (&m, &tmpmaps->content, &hInternet, tmpx2) < 0) 1742 { 1743 freeMaps (&m); 1744 free (m); 1745 free (REQUEST); 1746 free (SERVICE_URL); 1747 InternetCloseHandle (&hInternet); 1748 freeService (&s1); 1749 free (s1); 1750 return 0; 1751 } 1752 } 1753 free (tmpx2); 1754 addToMap (tmpmaps->content, "Reference", tmpv1 + 1); 1755 } 1756 tmpc = strtok (NULL, "@"); 1757 } 1758 #ifdef DEBUG 1759 dumpMaps (tmpmaps); 1760 fflush (stderr); 1761 #endif 1762 if (request_input_real_format == NULL) 1763 request_input_real_format = dupMaps (&tmpmaps); 1764 else 1765 { 1766 maps *testPresence = 1767 getMaps (request_input_real_format, tmpmaps->name); 1768 if (testPresence != NULL) 1769 { 1770 elements *elem = 1771 getElements (s1->inputs, tmpmaps->name); 1772 if (elem != NULL) 1773 { 1774 if (appendMapsToMaps 1775 (m, request_input_real_format, tmpmaps, 1776 elem) < 0) 1777 { 1778 freeMaps (&m); 1779 free (m); 1780 free (REQUEST); 1781 free (SERVICE_URL); 1782 InternetCloseHandle (&hInternet); 1783 freeService (&s1); 1784 free (s1); 1785 return 0; 1786 } 1787 } 1788 } 1789 else 1790 addMapsToMaps (&request_input_real_format, tmpmaps); 1791 } 1792 freeMaps (&tmpmaps); 1793 free (tmpmaps); 1794 tmpmaps = NULL; 1795 free (tmp); 1796 } 1797 } 1798 free (inputs_as_text); 1799 } 1885 1800 } 1886 1801 else … … 2580 2495 while (cur2 != NULL && cur2->type != XML_ELEMENT_NODE) 2581 2496 cur2 = cur2->next; 2582 int cur1cnt = 0;2583 2497 while (cur2 != NULL) 2584 2498 { … … 2928 2842 * DataInputs and ResponseDocument / RawDataOutput 2929 2843 */ 2930 char *dfv = addDefaultValues (&request_input_real_format, s1->inputs, m, 0); 2844 map* errI=NULL; 2845 dumpMaps(request_input_real_format); 2846 char *dfv = addDefaultValues (&request_input_real_format, s1->inputs, m, 0,&errI); 2847 dumpMaps(request_input_real_format); 2931 2848 maps *ptr = request_input_real_format; 2932 2849 while (ptr != NULL) … … 2968 2885 } 2969 2886 2887 map* errO=NULL; 2970 2888 char *dfv1 = 2971 addDefaultValues (&request_output_real_format, s1->outputs, m, 1 );2889 addDefaultValues (&request_output_real_format, s1->outputs, m, 1,&errO); 2972 2890 if (strcmp (dfv1, "") != 0 || strcmp (dfv, "") != 0) 2973 2891 { 2974 2892 char tmps[1024]; 2975 map *tmpe = createMap ("code", "MissingParameterValue");2893 map *tmpe = NULL; 2976 2894 if (strcmp (dfv, "") != 0) 2977 2895 { 2978 snprintf (tmps, 1024, 2979 _ 2980 ("The <%s> argument was not specified in DataInputs but defined as requested in ZOO ServicesProvider configuration file, please correct your query or the ZOO Configuration file."), 2981 dfv); 2982 addToMap (tmpe, "locator", dfv); 2983 } 2984 else if (strcmp (dfv1, "") != 0) 2896 tmpe = createMap ("code", "MissingParameterValue"); 2897 int nb=0; 2898 int length=1; 2899 map* len=getMap(errI,"length"); 2900 if(len!=NULL) 2901 length=atoi(len->value); 2902 for(nb=0;nb<length;nb++){ 2903 map* errp=getMapArray(errI,"value",nb); 2904 snprintf (tmps, 1024, 2905 _ 2906 ("The <%s> argument was not specified in DataInputs but defined as requested in ZOO ServicesProvider configuration file, please correct your query or the ZOO Configuration file."), 2907 errp->value); 2908 setMapArray (tmpe, "locator", nb , errp->value); 2909 setMapArray (tmpe, "text", nb , tmps); 2910 setMapArray (tmpe, "code", nb , "MissingParameterValue"); 2911 } 2912 } 2913 if (strcmp (dfv1, "") != 0) 2985 2914 { 2986 snprintf (tmps, 1024, 2987 _ 2988 ("The <%s> argument was specified as Output identifier but not defined in the ZOO Configuration File. Please, correct your query or the ZOO Configuration File."), 2989 dfv1); 2990 addToMap (tmpe, "locator", dfv1); 2991 } 2992 addToMap (tmpe, "text", tmps); 2915 int ilength=0; 2916 if(tmpe==NULL) 2917 tmpe = createMap ("code", "InvalidParameterValue"); 2918 else{ 2919 map* len=getMap(tmpe,"length"); 2920 if(len!=NULL) 2921 ilength=atoi(len->value); 2922 } 2923 int nb=0; 2924 int length=1; 2925 map* len=getMap(errO,"length"); 2926 if(len!=NULL) 2927 length=atoi(len->value); 2928 for(nb=0;nb<length;nb++){ 2929 map* errp=getMapArray(errO,"value",nb); 2930 snprintf (tmps, 1024, 2931 _ 2932 ("The <%s> argument was specified as %s identifier but not defined in the ZOO Configuration File. Please, correct your query or the ZOO Configuration File."), 2933 errp->value, 2934 ((getMap(request_inputs,"RawDataOutput")!=NULL)?"RawDataOutput":"ResponseDocument")); 2935 setMapArray (tmpe, "locator", nb+ilength , errp->value); 2936 setMapArray (tmpe, "text", nb+ilength , tmps); 2937 setMapArray (tmpe, "code", nb+ilength , "InvalidParameterValue"); 2938 } 2939 } 2993 2940 printExceptionReportResponse (m, tmpe); 2994 2941 freeService (&s1); … … 3006 2953 freeMaps (&tmpmaps); 3007 2954 free (tmpmaps); 2955 if(errI!=NULL){ 2956 freeMap(&errI); 2957 free(errI); 2958 } 2959 if(errO!=NULL){ 2960 freeMap(&errO); 2961 free(errO); 2962 } 3008 2963 return 1; 3009 2964 }
Note: See TracChangeset
for help on using the changeset viewer.