ZOO-Project
|
#include <libintl.h>
#include <locale.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <stdio.h>
#include <time.h>
#include <ctype.h>
#include "service.h"
#include <openssl/sha.h>
#include <openssl/md5.h>
#include <openssl/hmac.h>
#include <openssl/evp.h>
#include <openssl/bio.h>
#include <openssl/buffer.h>
#include <libxml/parser.h>
#include <libxml/xpath.h>
#include "cgic.h"
Go to the source code of this file.
Macros | |
#define | DEFAULT_SERVICE_URL "http://www.zoo-project.org/" |
The default service url (overriden by serverAddress) More... | |
#define | TIME_SIZE 40 |
The time size. More... | |
#define | _(String) dgettext ("zoo-kernel",String) |
ZOO-Kernel internal messages translation function. More... | |
#define | _ss(String) dgettext ("zoo-services",String) |
ZOO-Services messages translation function. More... | |
#define | ZOO_LOCK_CREATE_FAILED -4 |
ZOO-Kernel was unable to create a lock. More... | |
#define | ZOO_LOCK_ACQUIRE_FAILED -5 |
ZOO-Kernel was unable to acquire a lock. More... | |
#define | ZOO_LOCK_RELEASE_FAILED -6 |
ZOO-Kernel was unable to release a lock. More... | |
#define | ZOO_NS_MAX 10 |
Maximum number of XML namespaces. More... | |
#define | ZOO_DOC_MAX 20 |
Maximum number of XML docs. More... | |
Functions | |
void | addLangAttr (xmlNodePtr, maps *) |
Add a land attribute to a XML node. More... | |
void | printHeaders (maps *) |
Print the HTTP headers based on a map. More... | |
void | printSessionHeaders (maps *) |
Print the Set-Cookie header if necessary (conf["lenv"]["cookie"]) and save the session file. More... | |
int | zooXmlSearchForNs (const char *) |
Search for an existing XML namespace in usedNS. More... | |
int | zooXmlAddNs (xmlNodePtr, const char *, const char *) |
Add an XML namespace to the usedNS if it was not already used. More... | |
void | zooXmlCleanupNs () |
Free allocated memory to store used XML namespace. More... | |
int | zooXmlAddDoc (xmlNodePtr, const char *, const char *) |
void | zooXmlCleanupDocs () |
Free allocated memort to store XML documents. More... | |
const char * | produceStatusString (maps *, map *) |
Produce the status string used in HTTP headers. More... | |
void | printExceptionReportResponse (maps *, map *) |
Print an OWS ExceptionReport or exception.yaml Document and HTTP headers (when required) depending on the code. More... | |
xmlNodePtr | createExceptionReportNode (maps *, map *, int) |
Create an OWS ExceptionReport Node. More... | |
void | printProcessResponse (maps *, map *, int, service *, const char *, int, maps *, maps *) |
Generate a wps:Execute XML document. More... | |
xmlNodePtr | printWPSHeader (xmlDocPtr, maps *, const char *, const char *, const char *, int) |
Generate a WPS header. More... | |
xmlNodePtr | printGetCapabilitiesHeader (xmlDocPtr, maps *, const char *) |
Generate a Capabilities header. More... | |
void | printGetCapabilitiesForProcess (registry *, maps *, void *, void *, service *) |
Generate a wps:Process node for a servie and add it to a given node. More... | |
void | printDescribeProcessForProcess (registry *, maps *, void *, void *, service *) |
Generate a ProcessDescription node for a servie and add it to a given node. More... | |
void | printFullDescription (xmlDocPtr, int, elements *, const char *, xmlNsPtr, xmlNsPtr, xmlNodePtr, int, int, const map *) |
Generate the required XML tree for the detailled metadata information of inputs or outputs. More... | |
void | printDocument (maps *, xmlDocPtr, int) |
Print a XML document. More... | |
void | printDescription (xmlNodePtr, xmlNsPtr, const char *, map *, int) |
Create XML node with basic ows metadata information (Identifier,Title,Abstract) More... | |
void | printIOType (xmlDocPtr, xmlNodePtr, xmlNsPtr, xmlNsPtr, xmlNsPtr, elements *, maps *, const char *, int) |
Generate XML nodes describing inputs or outputs metadata. More... | |
void * | printRawdataOutput (maps *, maps *) |
Print one outputs as raw. More... | |
map * | parseBoundingBox (const char *) |
Parse a BoundingBox string. More... | |
void | printBoundingBox (xmlNsPtr, xmlNodePtr, map *) |
Create required XML nodes for boundingbox and update the current XML node. More... | |
void | printBoundingBoxDocument (maps *, maps *, FILE *) |
Print an ows:BoundingBox XML document. More... | |
void | printOutputDefinitions (xmlDocPtr, xmlNodePtr, xmlNsPtr, xmlNsPtr, elements *, maps *, const char *) |
Print a XML document. More... | |
void | printStatusInfo (maps *, map *, char *) |
Print a StatusInfo XML document. More... | |
void | addAdditionalParameters (map *, xmlDocPtr, xmlNodePtr, xmlNsPtr, xmlNsPtr, int) |
Add AdditionalParameters nodes to any existing node. More... | |
void | addMetadata (map *, xmlDocPtr, xmlNodePtr, xmlNsPtr, xmlNsPtr, int) |
Add a Metadata node to any existing node. More... | |
char * | produceFileUrl (service *, maps *, maps *, const char *, int) |
Produce a copy file and the corresponding url in case it is required Please, free the returned ressource while used. More... | |
void | outputResponse (service *, maps *, maps *, map *, int, maps *, int) |
Generate the output response (RawDataOutput or ResponseDocument) More... | |
int | errorException (maps *, const char *, const char *, const char *) |
Print an OWS ExceptionReport. More... | |
xmlNodePtr | soapEnvelope (maps *, xmlNodePtr) |
Generate a SOAP Envelope node when required (if the isSoap key of the [main] section is set to true). More... | |
int | checkForSoapEnvelope (xmlDocPtr) |
Variables | |
static char * | SERVICE_URL |
Global char* to store the serverAddress value of the [main] section. More... | |
static xmlNsPtr | usedNs [ZOO_NS_MAX] |
Array of xmlNsPtr storing all used XML namespace. More... | |
static char * | nsName [ZOO_NS_MAX] |
Array storing names of the used XML namespace. More... | |
static int | nbNs =0 |
Number of XML namespaces. More... | |
static xmlDocPtr | iDocs [ZOO_DOC_MAX] |
Array of xmlDocPtr storing XML docs. More... | |
static int | nbDocs =0 |
Number of XML docs. More... | |
static char | wpsStatus [3][11] |
Definitions of acceptable final status. More... | |
static const char * | schemas [2][8] |
Definitions of schemas depending on the WPS version. More... | |
static int | nbSupportedRequests =7 |
Definitions of support requests (depending on the WPS version) More... | |
static const char * | requests [2][7] |
Definitions of requests depending on the WPS version. More... | |
static int | nbReqIdentifier =2 |
Definitions requests requiring identifier (depending on the WPS version) More... | |
static int | nbReqJob =3 |
Definitions requests requiring jobid (only for WPS version 2.0.0) More... | |
static const char * | root_nodes [2][4] |
Definitions of root node for response depending on the request and the WPS version. More... | |
static const char * | capabilities [2][7] |
Name and corresponding attributes depending on the WPS version. More... | |
static const char *const | aapccStatusCodes [][8] |
#define _ | ( | String | ) | dgettext ("zoo-kernel",String) |
ZOO-Kernel internal messages translation function.
#define _ss | ( | String | ) | dgettext ("zoo-services",String) |
ZOO-Services messages translation function.
#define DEFAULT_SERVICE_URL "http://www.zoo-project.org/" |
The default service url (overriden by serverAddress)
#define TIME_SIZE 40 |
The time size.
#define ZOO_DOC_MAX 20 |
Maximum number of XML docs.
#define ZOO_LOCK_ACQUIRE_FAILED -5 |
ZOO-Kernel was unable to acquire a lock.
#define ZOO_LOCK_CREATE_FAILED -4 |
ZOO-Kernel was unable to create a lock.
#define ZOO_LOCK_RELEASE_FAILED -6 |
ZOO-Kernel was unable to release a lock.
#define ZOO_NS_MAX 10 |
Maximum number of XML namespaces.
void addAdditionalParameters | ( | map * | meta, |
xmlDocPtr | doc, | ||
xmlNodePtr | nc, | ||
xmlNsPtr | ns_ows, | ||
xmlNsPtr | ns_xlink, | ||
int | fromDb | ||
) |
Add AdditionalParameters nodes to any existing node.
meta | the map defining the additional parameters |
doc | the XML document used |
nb | the node to add the additional parameters |
ns_ows | the OWS namespace |
ns_xlink | the xlink namespace |
fromDb | 1 if the metadata has been extracted from the metadb, 0 otherwise |
void addLangAttr | ( | xmlNodePtr | n, |
maps * | m | ||
) |
Add a land attribute to a XML node.
n | the XML node to add the attribute |
m | the map containing the language key to add as xml:lang |
void addMetadata | ( | map * | meta, |
xmlDocPtr | doc, | ||
xmlNodePtr | nc, | ||
xmlNsPtr | ns_ows, | ||
xmlNsPtr | ns_xlink, | ||
int | vid | ||
) |
Add a Metadata node to any existing node.
meta | the map defining the additional parameters |
doc | the XML document used |
nb | the node to add the additional parameters |
ns_ows | the OWS namespace |
ns_xlink | the xlink namespace |
vid | the version of WPS to use (0 for 1.0.0 and 1 for 2.0) |
int checkForSoapEnvelope | ( | xmlDocPtr | ) |
Create an OWS ExceptionReport Node.
m | the conf maps |
s | the map containing the text,code,locator keys |
use_ns | (0/1) choose if you want to generate an ExceptionReport or ows:ExceptionReport node respectively |
int errorException | ( | maps * | m, |
const char * | message, | ||
const char * | errorcode, | ||
const char * | locator | ||
) |
Print an OWS ExceptionReport.
m | the conf maps |
message | the error message |
errorcode | the error code |
locator | the potential locator |
void outputResponse | ( | service * | s, |
maps * | request_inputs, | ||
maps * | request_outputs, | ||
map * | request_inputs1, | ||
int | cpid, | ||
maps * | m, | ||
int | res | ||
) |
Generate the output response (RawDataOutput or ResponseDocument)
s | the service structure containing the metadata information |
request_inputs | the inputs provided to the service for execution |
request_outputs | the outputs updated by the service execution |
request_inputs1 | the map containing the HTTP request |
cpid | the process identifier attached to a service execution |
m | the conf maps containing the main.cfg settings |
res | the value returned by the service execution |
We get the requested output or fallback to the first one if the requested one is not present in the resulting outputs maps.
map* parseBoundingBox | ( | const char * | value | ) |
Parse a BoundingBox string.
OGC 06-121r3: 10.2 Bounding box
Value is provided as : lowerCorner,upperCorner,crs,dimension Exemple : 189000,834000,285000,962000,urn:ogc:def:crs:OGC:1.3:CRS84
A map to store boundingbox information should contain:
Note : support only 2D bounding box.
value | the char* containing the KVP bouding box |
void printBoundingBox | ( | xmlNsPtr | ns_ows, |
xmlNodePtr | n, | ||
map * | boundingbox | ||
) |
Create required XML nodes for boundingbox and update the current XML node.
ns_ows | the ows XML namespace |
n | the XML node to update |
boundingbox | the map containing the boundingbox definition |
Print an ows:BoundingBox XML document.
m | the maps containing the settings of the main.cfg file |
boundingbox | the maps containing the boundingbox definition |
file | the file to print the BoundingBox (if NULL then print on stdout) |
void printDescribeProcessForProcess | ( | registry * | reg, |
maps * | m, | ||
void * | doc0, | ||
void * | nc0, | ||
service * | serv | ||
) |
Generate a ProcessDescription node for a servie and add it to a given node.
reg | the profile registry |
m | the conf maps containing the main.cfg settings |
nc | the XML node to add the Process node |
serv | the servive structure created from the zcfg file |
void printDescription | ( | xmlNodePtr | root, |
xmlNsPtr | ns_ows, | ||
const char * | identifier, | ||
map * | amap, | ||
int | vid = 0 |
||
) |
Create XML node with basic ows metadata information (Identifier,Title,Abstract)
root | the root XML node to add the description |
ns_ows | the ows XML namespace |
identifier | the identifier to use |
amap | the map containing the ows metadata information |
void printDocument | ( | maps * | m, |
xmlDocPtr | doc, | ||
int | pid | ||
) |
Print a XML document.
m | the conf maps containing the main.cfg settings |
doc | the XML document |
pid | the process identifier linked to a service |
Print an OWS ExceptionReport or exception.yaml Document and HTTP headers (when required) depending on the code.
pmsConf | the maps containing the settings of the main.cfg file |
psService | the service |
void printFullDescription | ( | xmlDocPtr | doc, |
int | in, | ||
elements * | elem, | ||
const char * | type, | ||
xmlNsPtr | ns, | ||
xmlNsPtr | ns_ows, | ||
xmlNodePtr | nc1, | ||
int | vid, | ||
int | fromDb, | ||
const map * | serviceType | ||
) |
Generate the required XML tree for the detailled metadata information of inputs or outputs.
in | 1 in case of inputs, 0 for outputs |
elem | the elements structure containing the metadata information |
type | the name ("Input" or "Output") of the XML node to create |
ns_ows | the ows XML namespace |
ns_ows | the ows XML namespace |
nc1 | the XML node to use to add the created tree |
vid | the WPS version id (0 for 1.0.0, 1 for 2.0.0) |
fromDb | 1 in case the metadata comes from the DB, -1 in other cases |
serviceType | the serviceType found in the ZCFG file or the DB |
Range: Table 46 OGC Web Services Common Standard
RangeClosure: Table 47 OGC Web Services Common Standard
void printGetCapabilitiesForProcess | ( | registry * | reg, |
maps * | m, | ||
void * | doc0, | ||
void * | nc0, | ||
service * | serv | ||
) |
Generate a wps:Process node for a servie and add it to a given node.
reg | the profiles registry |
m | the conf maps containing the main.cfg settings |
registry | the profile registry if any |
nc | the XML node to add the Process node |
serv | the service structure created from the zcfg file |
xmlNodePtr printGetCapabilitiesHeader | ( | xmlDocPtr | doc, |
maps * | m, | ||
const char * | version = "1.0.0" |
||
) |
Generate a Capabilities header.
doc | the document to add the header |
m | the conf maps containing the main.cfg settings |
void printHeaders | ( | maps * | pmsConf | ) |
Print the HTTP headers based on a map.
pmsConf | the map containing the headers information |
void printIOType | ( | xmlDocPtr | doc, |
xmlNodePtr | nc, | ||
xmlNsPtr | ns_wps, | ||
xmlNsPtr | ns_ows, | ||
xmlNsPtr | ns_xlink, | ||
elements * | e, | ||
maps * | m, | ||
const char * | type, | ||
int | vid | ||
) |
Generate XML nodes describing inputs or outputs metadata.
doc | the XML document |
nc | the XML node to add the definition |
ns_wps | the wps namespace |
ns_ows | the ows namespace |
ns_xlink | the xlink namespace |
e | the output elements |
m | the conf maps containing the main.cfg settings |
type | the type |
void printOutputDefinitions | ( | xmlDocPtr | doc, |
xmlNodePtr | nc, | ||
xmlNsPtr | ns_wps, | ||
xmlNsPtr | ns_ows, | ||
elements * | e, | ||
maps * | m, | ||
const char * | type | ||
) |
Print a XML document.
doc | the XML document (unused) |
nc | the XML node to add the output definition |
ns_wps | the wps XML namespace |
ns_ows | the ows XML namespace |
e | the output elements |
m | the conf maps containing the main.cfg settings |
type | the type (unused) |
void printProcessResponse | ( | maps * | m, |
map * | request, | ||
int | pid, | ||
service * | serv, | ||
const char * | service, | ||
int | status, | ||
maps * | inputs, | ||
maps * | outputs | ||
) |
Generate a wps:Execute XML document.
m | the conf maps containing the main.cfg settings |
request | the map representing the HTTP request |
pid | the process identifier linked to a service |
serv | the serv structure created from the zcfg file |
service | the service name |
status | the status returned by the service |
inputs | the inputs provided |
outputs | the outputs generated by the service |
Check if the ZOO Service GetStatus is available in the local directory. If yes, then it uses a reference to an URL which the client can access to get information on the status of a running Service (using the percentCompleted attribute). Else fallback to the initial method using the xml file to write in ...
Display the process output only when requested !
In case there was no definition found in the ZCFG file but present in the service code
Print one outputs as raw.
conf | the main configuration maps |
outputs | the output to be print as raw |
void printSessionHeaders | ( | maps * | pmsConf | ) |
Print the Set-Cookie header if necessary (conf["lenv"]["cookie"]) and save the session file.
The session file (sess_<SESSID>_.cfg where <SESSID> is the cookie value) is stored in the conf["main"]["tmpPath"] directory.
pmsConf | the main configuration map |
Print a StatusInfo XML document.
a statusInfo map should contain the following keys:
conf | the maps containing the settings of the main.cfg file |
statusInfo | the map containing the statusInfo definition |
req | the WPS requests (GetResult, GetStatus or Dismiss) |
xmlNodePtr printWPSHeader | ( | xmlDocPtr | doc, |
maps * | m, | ||
const char * | req, | ||
const char * | rname, | ||
const char * | version, | ||
int | reqId | ||
) |
Generate a WPS header.
doc | the document to add the header |
m | the conf maps containing the main.cfg settings |
req | the request type (GetCapabilities,DescribeProcess,Execute) |
rname | the root node name |
char* produceFileUrl | ( | service * | psService, |
maps * | pmsConf, | ||
maps * | pmsOutputs, | ||
const char * | pccFormat, | ||
int | itn | ||
) |
Produce a copy file and the corresponding url in case it is required Please, free the returned ressource while used.
pmConf | maps* pointing to the main configuration file |
Produce the status string used in HTTP headers.
pmConf | the maps containing the settings of the main.cfg file |
pmCode | the map containing the error code (or a map array of the same keys) |
xmlNodePtr soapEnvelope | ( | maps * | conf, |
xmlNodePtr | n | ||
) |
Generate a SOAP Envelope node when required (if the isSoap key of the [main] section is set to true).
conf | the conf maps containing the main.cfg settings |
n | the node used as children of the generated soap:Envelope |
int zooXmlAddDoc | ( | xmlNodePtr | , |
const char * | , | ||
const char * | |||
) |
int zooXmlAddNs | ( | xmlNodePtr | nr, |
const char * | url, | ||
const char * | name | ||
) |
Add an XML namespace to the usedNS if it was not already used.
nr | the xmlNodePtr to attach the XML namspace (can be NULL) |
url | the url of the XML namespace to add |
name | the name of the XML namespace to add |
void zooXmlCleanupDocs | ( | ) |
Free allocated memort to store XML documents.
void zooXmlCleanupNs | ( | ) |
Free allocated memory to store used XML namespace.
int zooXmlSearchForNs | ( | const char * | name | ) |
Search for an existing XML namespace in usedNS.
name | the name of the XML namespace to search |
|
static |
|
static |
Name and corresponding attributes depending on the WPS version.
|
static |
Array of xmlDocPtr storing XML docs.
|
static |
Number of XML docs.
|
static |
Number of XML namespaces.
|
static |
Definitions requests requiring identifier (depending on the WPS version)
|
static |
Definitions requests requiring jobid (only for WPS version 2.0.0)
|
static |
Definitions of support requests (depending on the WPS version)
|
static |
Array storing names of the used XML namespace.
|
static |
Definitions of requests depending on the WPS version.
|
static |
Definitions of root node for response depending on the request and the WPS version.
|
static |
Definitions of schemas depending on the WPS version.
|
static |
Global char* to store the serverAddress value of the [main] section.
|
static |
Array of xmlNsPtr storing all used XML namespace.
|
static |
Definitions of acceptable final status.