|
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>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 | printAssociatedLinks (maps **) |
| Produce the Links header based on the links stored in the headers_links section of the main configuration. More... | |
| void | printSessionHeaders (maps **) |
| Print the Set-Cookie header if necessary (conf["lenv"]["cookie"]) and save the session file. More... | |
| int | printAFile (maps **, char *, zStatStruct, void(funcError)(maps **, map *)) |
| Print a file red as binary. 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... | |
| void | printRawdataOutputs (maps **, service *, maps *) |
| Print all 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... | |
| void | prepareLinksHeader (maps *, const char *) |
| Prepare the Links header based on the profile of the endpoint. 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... | |
| void | localPrintException (maps **, map *) |
| Invoke the ensureFiltered then printExceptionReportResponseJ functions. 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 [][10] |
| Correspondance between HTTP status code and exception code. More... | |
| #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 * | pmsConf | ||
| ) |
Add a land attribute to a XML node.
| n | the XML node to add the attribute |
| pmsConf | 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 ** | pmsConf, |
| const char * | message, | ||
| const char * | errorcode, | ||
| const char * | locator | ||
| ) |
Print an OWS ExceptionReport.
| pmsConf | the conf maps |
| message | the error message |
| errorcode | the error code |
| locator | the potential locator |
Invoke the ensureFiltered then printExceptionReportResponseJ functions.
| pmsConf | the maps containing the settings of the main.cfg file |
| pmError | the map containing the text,code,locator keys (or a map array) |
| void outputResponse | ( | service * | s, |
| maps * | request_inputs, | ||
| maps * | request_outputs, | ||
| map * | request_inputs1, | ||
| int | cpid, | ||
| maps ** | ppmsConf, | ||
| 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 |
| pmsConf | 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 prepareLinksHeader | ( | maps * | pmsConfig, |
| const char * | pccEndPoint | ||
| ) |
Prepare the Links header based on the profile of the endpoint.
| pmsaConfig | the main configuration map |
| pccEndPoint | the endpoint to check |
| int printAFile | ( | maps ** | ppmsConf, |
| char * | pcFilePath, | ||
| zStatStruct | zssStatus, | ||
| void(funcError)(maps **, map *) | |||
| ) |
Print a file red as binary.
| pmsConf | the maps containing the settings of the main.cfg file |
| pjoRes | the JSON object to populate |
| void printAssociatedLinks | ( | maps ** | ppmsConf | ) |
Produce the Links header based on the links stored in the headers_links section of the main configuration.
| ppmsConf | the main configuration map |
| 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 * | pmsConf, | ||
| 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 ** | ppmsConf, |
| xmlDocPtr | doc, | ||
| int | pid | ||
| ) |
Print a XML document.
| ppmsConf | 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.
| ppmsConf | the maps containing the settings of the main.cfg file |
| pmError | the map containing the text,code,locator keys (or a map array) |
| 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 * | pmsConf, | ||
| 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 * | pmsConf, | ||
| 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 ** | ppmsConf | ) |
Print the HTTP headers based on a map.
| ppmsConf | the map containing the headers information |
| void printIOType | ( | xmlDocPtr | doc, |
| xmlNodePtr | nc, | ||
| xmlNsPtr | ns_wps, | ||
| xmlNsPtr | ns_ows, | ||
| xmlNsPtr | ns_xlink, | ||
| elements * | e, | ||
| maps * | pmsConf, | ||
| 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 * | pmsConf, | ||
| 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 ** | ppmsConf, |
| map * | request, | ||
| int | pid, | ||
| service * | serv, | ||
| const char * | service, | ||
| int | status, | ||
| maps * | inputs, | ||
| maps * | outputs | ||
| ) |
Generate a wps:Execute XML document.
| ppmsConf | 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.
| ppmsConf | the main configuration maps |
| outputs | the output to be print as raw |
Print all outputs as raw.
| pmsConf | the main configuration maps |
| outputs | the output to be print as raw |
| void printSessionHeaders | ( | maps ** | ppmsConf | ) |
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.
| ppmsConf | 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 * | pmsConf, | ||
| 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 |
Correspondance between HTTP status code and exception code.
|
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.
1.8.17