ZOO-Project
Macros | Functions | Variables
response_print.h File Reference
#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...
 
mapparseBoundingBox (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]
 

Macro Definition Documentation

#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.

Function Documentation

void addAdditionalParameters ( map meta,
xmlDocPtr  doc,
xmlNodePtr  nc,
xmlNsPtr  ns_ows,
xmlNsPtr  ns_xlink,
int  fromDb 
)

Add AdditionalParameters nodes to any existing node.

Parameters
metathe map defining the additional parameters
docthe XML document used
nbthe node to add the additional parameters
ns_owsthe OWS namespace
ns_xlinkthe xlink namespace
fromDb1 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.

Parameters
nthe XML node to add the attribute
mthe 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.

Parameters
metathe map defining the additional parameters
docthe XML document used
nbthe node to add the additional parameters
ns_owsthe OWS namespace
ns_xlinkthe xlink namespace
vidthe version of WPS to use (0 for 1.0.0 and 1 for 2.0)
int checkForSoapEnvelope ( xmlDocPtr  )
xmlNodePtr createExceptionReportNode ( maps m,
map s,
int  use_ns 
)

Create an OWS ExceptionReport Node.

Parameters
mthe conf maps
sthe map containing the text,code,locator keys
use_ns(0/1) choose if you want to generate an ExceptionReport or ows:ExceptionReport node respectively
Returns
the ExceptionReport/ows:ExceptionReport node
int errorException ( maps m,
const char *  message,
const char *  errorcode,
const char *  locator 
)

Print an OWS ExceptionReport.

Parameters
mthe conf maps
messagethe error message
errorcodethe error code
locatorthe 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)

Parameters
sthe service structure containing the metadata information
request_inputsthe inputs provided to the service for execution
request_outputsthe outputs updated by the service execution
request_inputs1the map containing the HTTP request
cpidthe process identifier attached to a service execution
mthe conf maps containing the main.cfg settings
resthe 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:

  • lowerCorner : double,double (minimum within this bounding box)
  • upperCorner : double,double (maximum within this bounding box)
  • crs : URI (Reference to definition of the CRS)
  • dimensions : int

Note : support only 2D bounding box.

Parameters
valuethe char* containing the KVP bouding box
Returns
a map containing all the bounding box keys
void printBoundingBox ( xmlNsPtr  ns_ows,
xmlNodePtr  n,
map boundingbox 
)

Create required XML nodes for boundingbox and update the current XML node.

Parameters
ns_owsthe ows XML namespace
nthe XML node to update
boundingboxthe map containing the boundingbox definition
void printBoundingBoxDocument ( maps m,
maps boundingbox,
FILE *  file 
)

Print an ows:BoundingBox XML document.

Parameters
mthe maps containing the settings of the main.cfg file
boundingboxthe maps containing the boundingbox definition
filethe file to print the BoundingBox (if NULL then print on stdout)
See also
parseBoundingBox, printBoundingBox
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.

Parameters
regthe profile registry
mthe conf maps containing the main.cfg settings
ncthe XML node to add the Process node
servthe servive structure created from the zcfg file
Returns
the generated wps:ProcessOfferings xmlNodePtr
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)

Parameters
rootthe root XML node to add the description
ns_owsthe ows XML namespace
identifierthe identifier to use
amapthe map containing the ows metadata information
void printDocument ( maps m,
xmlDocPtr  doc,
int  pid 
)

Print a XML document.

Parameters
mthe conf maps containing the main.cfg settings
docthe XML document
pidthe process identifier linked to a service
void printExceptionReportResponse ( maps pmsConf,
map psService 
)

Print an OWS ExceptionReport or exception.yaml Document and HTTP headers (when required) depending on the code.

Parameters
pmsConfthe maps containing the settings of the main.cfg file
psServicethe 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.

Parameters
in1 in case of inputs, 0 for outputs
elemthe elements structure containing the metadata information
typethe name ("Input" or "Output") of the XML node to create
ns_owsthe ows XML namespace
ns_owsthe ows XML namespace
nc1the XML node to use to add the created tree
vidthe WPS version id (0 for 1.0.0, 1 for 2.0.0)
fromDb1 in case the metadata comes from the DB, -1 in other cases
serviceTypethe 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.

Parameters
regthe profiles registry
mthe conf maps containing the main.cfg settings
registrythe profile registry if any
ncthe XML node to add the Process node
servthe service structure created from the zcfg file
Returns
the generated wps:ProcessOfferings xmlNodePtr
xmlNodePtr printGetCapabilitiesHeader ( xmlDocPtr  doc,
maps m,
const char *  version = "1.0.0" 
)

Generate a Capabilities header.

Parameters
docthe document to add the header
mthe conf maps containing the main.cfg settings
Returns
the generated wps:ProcessOfferings xmlNodePtr
void printHeaders ( maps pmsConf)

Print the HTTP headers based on a map.

Parameters
pmsConfthe 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.

Parameters
docthe XML document
ncthe XML node to add the definition
ns_wpsthe wps namespace
ns_owsthe ows namespace
ns_xlinkthe xlink namespace
ethe output elements
mthe conf maps containing the main.cfg settings
typethe type
void printOutputDefinitions ( xmlDocPtr  doc,
xmlNodePtr  nc,
xmlNsPtr  ns_wps,
xmlNsPtr  ns_ows,
elements e,
maps m,
const char *  type 
)

Print a XML document.

Parameters
docthe XML document (unused)
ncthe XML node to add the output definition
ns_wpsthe wps XML namespace
ns_owsthe ows XML namespace
ethe output elements
mthe conf maps containing the main.cfg settings
typethe 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.

Parameters
mthe conf maps containing the main.cfg settings
requestthe map representing the HTTP request
pidthe process identifier linked to a service
servthe serv structure created from the zcfg file
servicethe service name
statusthe status returned by the service
inputsthe inputs provided
outputsthe 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

void* printRawdataOutput ( maps conf,
maps outputs 
)

Print one outputs as raw.

Parameters
confthe main configuration maps
outputsthe 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.

Parameters
pmsConfthe main configuration map
void printStatusInfo ( maps conf,
map statusInfo,
char *  req 
)

Print a StatusInfo XML document.

a statusInfo map should contain the following keys:

  • JobID corresponding to usid key from the lenv section
  • Status the current state (Succeeded,Failed,Accepted,Running)
  • PercentCompleted (optional) the percent completed
  • Message (optional) any messages the service may wish to share
Parameters
confthe maps containing the settings of the main.cfg file
statusInfothe map containing the statusInfo definition
reqthe 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.

Parameters
docthe document to add the header
mthe conf maps containing the main.cfg settings
reqthe request type (GetCapabilities,DescribeProcess,Execute)
rnamethe root node name
Returns
the generated wps:rname xmlNodePtr (can be wps: Capabilities, wps:ProcessDescriptions,wps:ExecuteResponse)
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.

Parameters
pmConfmaps* pointing to the main configuration file
const char* produceStatusString ( maps pmConf,
map pmCode 
)

Produce the status string used in HTTP headers.

Parameters
pmConfthe maps containing the settings of the main.cfg file
pmCodethe 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).

Parameters
confthe conf maps containing the main.cfg settings
nthe node used as children of the generated soap:Envelope
Returns
the generated soap:Envelope (if isSoap=true) or the input node n (when isSoap=false)
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.

Parameters
nrthe xmlNodePtr to attach the XML namspace (can be NULL)
urlthe url of the XML namespace to add
namethe name of the XML namespace to add
Returns
the index of the XML namespace added.
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.

Parameters
namethe name of the XML namespace to search
Returns
the index of the XML namespace found or -1 if not found.

Variable Documentation

const char* const aapccStatusCodes[][8]
static
Initial value:
= {
{
"500 Not Implemented",
"OperationNotSupported",
"NoApplicableCode",
NULL
},
{
"400 Bad request",
"MissingParameterValue"
"InvalidParameterValue",
"InvalidUpdateSequence",
"OptionNotSupported",
"VersionNegotiationFailed",
"NoSuchMode",
NULL
},
{
"404 Not Found",
"NotFound",
"NoSuchProcess",
"NoSuchJob",
"ResultNotReady",
NULL
},
{
"500 Not Implemented",
NULL
}
}
const char* capabilities[2][7]
static
Initial value:
={
{
"Process",
"processVersion","1",
"storeSupported","true",
"statusSupported","true"
},
{
"ProcessSummary",
"processVersion","1.0.0",
"jobControlOptions","sync-execute async-execute dismiss",
"outputTransmission","value reference"
}
}

Name and corresponding attributes depending on the WPS version.

xmlDocPtr iDocs[ZOO_DOC_MAX]
static

Array of xmlDocPtr storing XML docs.

int nbDocs =0
static

Number of XML docs.

int nbNs =0
static

Number of XML namespaces.

int nbReqIdentifier =2
static

Definitions requests requiring identifier (depending on the WPS version)

int nbReqJob =3
static

Definitions requests requiring jobid (only for WPS version 2.0.0)

int nbSupportedRequests =7
static

Definitions of support requests (depending on the WPS version)

char* nsName[ZOO_NS_MAX]
static

Array storing names of the used XML namespace.

const char* requests[2][7]
static
Initial value:
={
{"GetCapabilities","DescribeProcess","Execute",NULL},
{"GetCapabilities","DescribeProcess","Execute","GetStatus","GetResult","Dismiss",NULL},
}

Definitions of requests depending on the WPS version.

const char* root_nodes[2][4]
static
Initial value:
={
{"ProcessOfferings","ProcessDescriptions","ExecuteResponse",NULL},
{"Contents","ProcessOfferings","Result",NULL}
}

Definitions of root node for response depending on the request and the WPS version.

const char* schemas[2][8]
static
Initial value:
={
{"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"},
{"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/"},
}

Definitions of schemas depending on the WPS version.

char* SERVICE_URL
static

Global char* to store the serverAddress value of the [main] section.

xmlNsPtr usedNs[ZOO_NS_MAX]
static

Array of xmlNsPtr storing all used XML namespace.

char wpsStatus[3][11]
static
Initial value:
={
"Succeeded",
"Failed",
"Running"
}

Definitions of acceptable final status.