source: branches/prototype-v0/zoo-project/zoo-kernel/response_print.h @ 839

Last change on this file since 839 was 839, checked in by djay, 7 years ago

Update the source code for HPC support. Automatically adding nested outputs for the HPC support (should this be available for every support?). Add capability to store the metadata in the Collection DataBase?. Addition of the zcfg2sql to import any existing ZCFG file into the Collection DB. Add the support to invoke a callback (for history purpose) in case a [callback] section contains at least one parameter defined (url). Add support to convert maps and map to JSON (for callback use only by now). Fix some memory leaks (some are still there).

  • Property svn:keywords set to Id
File size: 6.9 KB
Line 
1/*
2 * Author : Gérald FENOY
3 *
4 * Copyright (c) 2009-2013 GeoLabs SARL
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
24
25#ifndef ZOO_RESPONSE_PRINT_H
26#define ZOO_RESPONSE_PRINT_H 1
27
28#pragma once
29
30/**
31 * The default service url (overriden by serverAddress)
32 */
33#define DEFAULT_SERVICE_URL "http://www.zoo-project.org/"
34/**
35 * The time size
36 */
37#define TIME_SIZE 40
38
39#include <libintl.h>
40#include <locale.h>
41/**
42 * ZOO-Kernel internal messages translation function
43 */
44#define _(String) dgettext ("zoo-kernel",String)
45/**
46 * ZOO-Services messages translation function
47 */
48#define _ss(String) dgettext ("zoo-services",String)
49
50/**
51 * ZOO-Kernel was unable to create a lock
52 */
53#define ZOO_LOCK_CREATE_FAILED -4
54/**
55 * ZOO-Kernel was unable to acquire a lock
56 */
57#define ZOO_LOCK_ACQUIRE_FAILED -5
58/**
59 * ZOO-Kernel was unable to release a lock
60 */
61#define ZOO_LOCK_RELEASE_FAILED -6
62
63#include <sys/stat.h>
64#include <sys/types.h>
65#include "cgic.h"
66#ifndef WIN32
67#include <sys/ipc.h>
68#include <sys/shm.h>
69#include <sys/sem.h>
70#else
71#include <direct.h>
72#endif
73#include <stdio.h>
74#include <time.h>
75#include <ctype.h>
76#ifdef WIN32
77#ifndef USE_RUBY
78#include <unistd.h>
79#endif
80#endif
81#ifndef WIN32
82#include <xlocale.h>
83#endif
84#include "ulinet.h"
85
86#include "service.h"
87#include <openssl/sha.h>
88#include <openssl/md5.h>
89#include <openssl/hmac.h>
90#include <openssl/evp.h>
91#include <openssl/bio.h>
92#include <openssl/buffer.h>
93
94#include <libxml/parser.h>
95#include <libxml/xpath.h>
96
97#ifdef __cplusplus
98extern "C" {
99#endif
100  /**
101   * Maximum number of XML namespaces
102   */
103#define ZOO_NS_MAX 10
104  /**
105   * Maximum number of XML docs
106   */
107#define ZOO_DOC_MAX 20
108
109  /**
110   * Global char* to store the serverAddress value of the [main] section
111   */
112  static char* SERVICE_URL;
113
114  /**
115   * Array of xmlNsPtr storing all used XML namespace
116   */
117  static xmlNsPtr usedNs[ZOO_NS_MAX];
118  /**
119   * Array storing names of the used XML namespace
120   */
121  static char* nsName[ZOO_NS_MAX];
122  /**
123   * Number of XML namespaces
124   */
125  static int nbNs=0;
126  /**
127   * Array of xmlDocPtr storing XML docs
128   */
129  static xmlDocPtr iDocs[ZOO_DOC_MAX];
130  /**
131   * Number of XML docs
132   */
133  static int nbDocs=0;
134
135  /**
136   * Definitions of acceptable final status
137   */
138  static char wpsStatus[3][11]={
139    "Succeeded",
140    "Failed",
141    "Running"
142  };
143  /**
144   * Definitions of schemas depending on the WPS version
145   */
146  static const char* schemas[2][8]={
147    {"1.0.0","http://www.opengis.net/ows/1.1","http://www.opengis.net/wps/1.0.0","http://schemas.opengis.net/wps/1.0.0","%s %s/wps%s_response.xsd","http://schemas.opengis.net/ows/1.1.0/owsExceptionReport.xsd","1.1.0"},
148    {"2.0.0","http://www.opengis.net/ows/2.0","http://www.opengis.net/wps/2.0","http://schemas.opengis.net/wps/2.0","http://www.opengis.net/wps/2.0 http://schemas.opengis.net/wps/2.0/wps.xsd","http://schemas.opengis.net/ows/2.0/owsExceptionReport.xsd","2.0.2","http://www.opengis.net/spec/wps/2.0/def/process-profile/"},
149  };
150  /**
151   * Definitions of support requests (depending on the WPS version)
152   */
153  static int nbSupportedRequests=7;
154  /**
155   * Definitions of requests depending on the WPS version
156   */
157  static const char* requests[2][7]={
158    {"GetCapabilities","DescribeProcess","Execute",NULL},
159    {"GetCapabilities","DescribeProcess","Execute","GetStatus","GetResult","Dismiss",NULL},
160  };
161  /**
162   * Definitions requests requiring identifier (depending on the WPS version)
163   */
164  static int nbReqIdentifier=2;
165  /**
166   * Definitions requests requiring jobid (only for WPS version 2.0.0)
167   */
168  static int nbReqJob=3;
169  /**
170   * Definitions of root node for response depending on the request and the WPS version
171   */
172  static const char root_nodes[2][4][20]={
173    {"ProcessOfferings","ProcessDescriptions","ExecuteResponse",NULL},
174    {"Contents","ProcessOfferings","Result",NULL}
175  };
176
177  /**
178   * Name and corresponding attributes depending on the WPS version
179   */
180  static const char* capabilities[2][7]={
181    {
182      "Process",
183      "processVersion","1",
184      "storeSupported","true",
185      "statusSupported","true"
186    },
187    {
188      "ProcessSummary",
189      "processVersion","1.0.0",
190      "jobControlOptions","sync-execute async-execute dismiss",
191      "outputTransmission","value reference"
192    }
193  };
194
195  void addLangAttr(xmlNodePtr,maps*);
196
197  void printHeaders(maps*);
198
199  int zooXmlSearchForNs(const char*);
200  int zooXmlAddNs(xmlNodePtr,const char*,const char*);
201  void zooXmlCleanupNs();
202
203  int zooXmlAddDoc(xmlNodePtr,const char*,const char*);
204  void zooXmlCleanupDocs();
205 
206  void printExceptionReportResponse(maps*,map*);
207  xmlNodePtr createExceptionReportNode(maps*,map*,int);
208  void printProcessResponse(maps*,map*,int,service*,const char*,int,maps*,maps*);
209  xmlNodePtr printWPSHeader(xmlDocPtr,maps*,const char*,const char*,const char*,int);
210  xmlNodePtr printGetCapabilitiesHeader(xmlDocPtr,maps*,const char*);
211  void printGetCapabilitiesForProcess(registry*,maps*,xmlDocPtr,xmlNodePtr,service*);
212  void printDescribeProcessForProcess(registry*,maps*,xmlDocPtr,xmlNodePtr,service*);
213  void printFullDescription(xmlDocPtr,int,elements*,const char*,xmlNsPtr,xmlNsPtr,xmlNodePtr,int,int,const map*);
214  void printDocument(maps*,xmlDocPtr,int);
215  void printDescription(xmlNodePtr,xmlNsPtr,const char*,map*,int);
216  void printIOType(xmlDocPtr,xmlNodePtr,xmlNsPtr,xmlNsPtr,xmlNsPtr,elements*,maps*,const char*,int);
217  map* parseBoundingBox(const char*);
218  void printBoundingBox(xmlNsPtr,xmlNodePtr,map*);
219  void printBoundingBoxDocument(maps*,maps*,FILE*);
220  void printOutputDefinitions(xmlDocPtr,xmlNodePtr,xmlNsPtr,xmlNsPtr,elements*,maps*,const char*);
221  void printStatusInfo(maps*,map*,char*);
222  int addAdditionalParameters(map*,xmlDocPtr,xmlNodePtr,xmlNsPtr,xmlNsPtr,int);
223  int addMetadata(map*,xmlDocPtr,xmlNodePtr,xmlNsPtr,xmlNsPtr);
224
225  void outputResponse(service*,maps*,maps*,map*,int,maps*,int);
226
227  int errorException(maps *, const char *, const char *, const char*);
228
229  xmlNodePtr soapEnvelope(maps*,xmlNodePtr);
230  int checkForSoapEnvelope(xmlDocPtr);
231 
232#ifdef __cplusplus
233}
234#endif
235
236#endif
Note: See TracBrowser for help on using the repository browser.

Search

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