ZOO-Project
service.h
Go to the documentation of this file.
1 /*
2  * Author : Gérald FENOY
3  *
4  * Copyright (c) 2009-2019 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_SERVICE_H
26 #define ZOO_SERVICE_H 1
27 
28 #pragma once
29 
30 #ifdef WIN32
31 #define ZOO_DLL_EXPORT __declspec( dllexport )
32 #else
33 #define ZOO_DLL_EXPORT
34 #endif
35 
36  // knut: add bool if necessary
37 #ifndef __cplusplus
38 #ifndef WIN32
39 #include <stdbool.h>
40 #else
41 typedef int bool;
42 #define false 0
43 #define true 1
44 #endif
45 #endif
46 #ifndef __bool_true_false_are_defined
47 #define __bool_true_false_are_defined 1
48 #endif
49 
50 #ifdef WIN32
51 #define strtok_r strtok_s
52 #define strncasecmp _strnicmp
53 #define strcasecmp _stricmp
54 #if defined(_MSC_VER) && _MSC_VER < 1900
55 #define snprintf _snprintf
56 #endif
57 #define zStrdup _strdup
58 #define zMkdir _mkdir
59 #define zGetpid _getpid
60 #define zOpen _open
61 #define zClose _close
62 #define zUnlink _unlink
63 #define zDup _dup
64 #define zDup2 _dup2
65 #define zWrite _write
66 #define zSleep Sleep
67 #include <sys/timeb.h>
68 struct ztimeval {
69  long tv_sec; /* seconds */
70  long tv_usec; /* and microseconds */
71 };
72 static int zGettimeofday(struct ztimeval* tp, void* tzp)
73 {
74  if (tp == 0) {
75  return -1;
76  }
77 
78  struct _timeb theTime;
79  _ftime(&theTime);
80  tp->tv_sec = theTime.time;
81  tp->tv_usec = theTime.millitm * 1000;
82 
83  return 0; // The gettimeofday() function shall return 0 on success
84 }
85 
86 #define zStatStruct struct _stati64
87 #define zStat _stati64
88 
89 #else
90 
93 #define zStrdup strdup
94 
97 #define zMkdir mkdir
98 
101 #define zOpen open
102 
105 #define zClose close
106 
109 #define zUnlink unlink
110 
113 #define zDup dup
114 
117 #define zDup2 dup2
118 
121 #define zWrite write
122 #include "unistd.h"
126 static int zSleep(const long millisecond){
127  return usleep(millisecond*1000);
128 }
132 #define zGettimeofday gettimeofday
133 
136 #define ztimeval timeval
137 
140 #define zGetpid getpid
141 
142 #define zStatStruct struct stat64
143 #define zStat stat64
144 
145 #endif
146 
147 #ifdef __cplusplus
148 extern "C" {
149 #endif
150 
151 #ifdef WIN32
152 #ifdef USE_MS
153 #include <mapserver.h>
154 #endif
155 #endif
156 #include <stdlib.h>
157 #include <ctype.h>
158 
159 #include <stdio.h>
160 
161 #include <string.h>
162 #ifndef WIN32
163 #include <ctype.h>
164 #include <stdbool.h>
165 #endif
166 
170 #define SERVICE_ACCEPTED 0
171 
174 #define SERVICE_STARTED 1
175 
178 #define SERVICE_PAUSED 2
179 
182 #define SERVICE_SUCCEEDED 3
183 
186 #define SERVICE_FAILED 4
187 
191 #define ELEMENTS_SIZE (sizeof(char*)+(((2*sizeof(char*))+sizeof(maps*))*3)+sizeof(char*)+((sizeof(map*) + sizeof(iotype*))*2)+(2*sizeof(elements*)))
192 
195 //#define MAP_SIZE (2*sizeof(char*))+sizeof(NULL) // knut: size of NULL pointer may be different from regular pointer (platform dependent)
196 #define MAP_SIZE (2*sizeof(char*))+sizeof(map*)
197 
200 //#define IOTYPE_SIZE MAP_SIZE+sizeof(NULL)
201 #define IOTYPE_SIZE sizeof(map*) + sizeof(iotype*)
202 
205 //#define MAPS_SIZE (2*sizeof(char*))+sizeof(map*)+MAP_SIZE
206 #define MAPS_SIZE sizeof(char*)+sizeof(map*)+(2*sizeof(maps*))
207 
210 //#define SERVICE_SIZE (ELEMENTS_SIZE*2)+(MAP_SIZE*2)+sizeof(char*)
211 #define SERVICE_SIZE sizeof(char*) + 3*sizeof(map*) + 2*sizeof(elements*)
212 
215 //#define SERVICES_SIZE SERVICE_SIZE+sizeof(services*)
216 #define SERVICES_SIZE sizeof(service*)+sizeof(services*)
217 
220 //#define REGISTRY_SIZE SERVICES_SIZE+sizeof(char*)
221 #define REGISTRY_SIZE sizeof(char*)+sizeof(services*)+sizeof(registry*)
222 
223 #define SHMSZ 27
224 
225 #include "version.h"
226 
227 #ifdef DEBUG_STACK
228  void debugStack(const char* file,const int line){
229  int stack;
230  fprintf(stderr,"stack %p (%s: %d) \n",&stack,file,line);
231  }
232 #endif
233 
237  typedef struct map{
238  char* name;
239  char* value;
240  struct map* next;
241  } map;
242 
243 #ifdef WIN32
244 #define NULLMAP ((map*) 0)
245 // knut: see new definition above
246 //#define bool int
247 //#define true 1
248 //#define false 0
249 #else
250 #define NULLMAP NULL
251 #endif
252 
258  typedef struct maps{
259  char* name;
260  struct map* content;
261  struct maps* child;
262  struct maps* next;
263  } maps;
264 
270  typedef struct iotype{
271  struct map* content;
272  struct iotype* next;
273  } iotype;
274 
280  typedef struct elements{
281  char* name;
282  struct map* content;
283  struct map* metadata;
284  struct map* additional_parameters;
285  char* format;
286  struct iotype* defaults;
287  struct iotype* supported;
288  struct elements* child;
289  struct elements* next;
290  } elements;
291 
295  typedef struct service{
296  char* name;
297  struct map* content;
298  struct map* metadata;
299  struct map* additional_parameters;
300  struct elements* inputs;
301  struct elements* outputs;
302  } service;
303 
307  typedef struct services{
308  struct service* content;
309  struct services* next;
310  } services;
311 
315  typedef struct registry{
316  char *name;
317  struct services* content;
318  struct registry* next;
319  } registry;
320 
321  // knut
323  /*
324  * StatusOK is not a WPS exception, it is added
325  * here for convenience.
326  */
328  /*
329  * See WPS 1.0 specification, Table 38 and Table 62.
330  */
339  /*
340  * See WPS 2.0 specification, Tables 41, 46, 48, and 50.
341  */
355  };
356 
357  static const char* const WPSExceptionCode[] = {
358  "StatusOK",
359  "MissingParameterValue",
360  "InvalidParameterValue",
361  "NoApplicableCode",
362  "NotEnoughStorage",
363  "ServerBusy",
364  "FileSizeExceeded",
365  "StorageNotSupported",
366  "VersionNegotiationFailed",
367  "NoSuchProcess",
368  "NoSuchMode",
369  "NoSuchInput",
370  "NoSuchOutput",
371  "DataNotAccessible",
372  "SizeExceeded",
373  "TooManyInputs",
374  "TooManyOutputs",
375  "NoSuchFormat",
376  "WrongInputData",
377  "InternalServerError",
378  "NoSuchJob",
379  "ResultNotReady"
380  };
381 
382  static const char* const WPSExceptionText[] = {
383  "No problem detected",
384  "Operation request does not include a parameter value, and this server did not declare a default value for that parameter.",
385  "Operation request contains an invalid parameter value.",
386  "No other exceptionCode specified by this service and server applies to this exception.",
387  "The server does not have enough space available to store the inputs and outputs associated with the request.",
388  "The server is too busy to accept and queue the request at this time.",
389  "The file size of one of the input parameters was too large for this process to handle.",
390  "Execute operation request included transmission=”reference” for one of the outputs, but storage is not offered by this server.",
391  "Service version for a ComplexData xlink:href input was not supported by the referenced server, and version negotiation failed.",
392  "One of the identifiers passed does not match with any of the processes offered by this server.",
393  "The process does not permit the desired execution mode.",
394  "One or more of the input identifiers passed does not match with any of the input identifiers of this process.",
395  "One or more of the output identifiers passed does not match with any of the input identifiers of this process.",
396  "One of the referenced input data sets was inaccessible.",
397  "The size of one of the input parameters was too large for this process to handle.",
398  "Too many input items have been specified.",
399  "Too many output items have been specified.",
400  "One or more of the input or output formats specified in the request did not match with any of the formats defined for that particular input or output.",
401  "One or more of inputs for which the service was able to retrieve the data but could not read it.",
402  "",
403  "The JobID from the request does not match any of the Jobs running on this server.",
404  "The result for the requested JobID has not yet been generated."
405  };
406 
407  ZOO_DLL_EXPORT void _dumpMap(map*);
408  ZOO_DLL_EXPORT void dumpMap(map*);
409  ZOO_DLL_EXPORT void dumpMaps(maps* m);
410  ZOO_DLL_EXPORT void dumpMapToFile(map*,FILE*); // (used only internally)
411  ZOO_DLL_EXPORT void dumpMapsToFile(maps*,char*,int);
412  ZOO_DLL_EXPORT map* createMap(const char*,const char*);
413  ZOO_DLL_EXPORT maps* createMaps(const char*);
414  ZOO_DLL_EXPORT int count(map*);
415  ZOO_DLL_EXPORT bool hasKey(map*,const char*);
416  ZOO_DLL_EXPORT maps* getMaps(maps*,const char*);
417  ZOO_DLL_EXPORT map* getMap(map*,const char*);
419  ZOO_DLL_EXPORT map* getMapFromMaps(maps*,const char*,const char*);
420  ZOO_DLL_EXPORT void freeMap(map**);
421  ZOO_DLL_EXPORT void freeMaps(maps** mo);
424  ZOO_DLL_EXPORT elements* createElements(const char*);
426  ZOO_DLL_EXPORT bool hasElement(elements*,const char*);
430  ZOO_DLL_EXPORT void setServiceName(service**,char*);
433  ZOO_DLL_EXPORT void addToMap(map*,const char*,const char*);
434  ZOO_DLL_EXPORT void addIntToMap(map*,const char*,const int);
435  ZOO_DLL_EXPORT void addIntToMapArray(map*,const char*,int,const int);
436  ZOO_DLL_EXPORT map* addToMapWithSize(map*,const char*,const char*,int);
439  ZOO_DLL_EXPORT map* getMapOrFill(map**,const char*,const char*);
440  ZOO_DLL_EXPORT bool contains(map*,map*);
442  ZOO_DLL_EXPORT void loadMapBinary(map**,map*,int);
446  ZOO_DLL_EXPORT map* getMapArray(map*,const char*,int);
447  ZOO_DLL_EXPORT void setMapArray(map*,const char*,int,const char*);
450  ZOO_DLL_EXPORT void setMapInMaps(maps*,const char*,const char*,const char*);
462  ZOO_DLL_EXPORT void inheritMap(map**,map*);
466  ZOO_DLL_EXPORT void mapsToCharXXX(maps*,char***);
467  ZOO_DLL_EXPORT void charxxxToMaps(char***,maps**);
468 #if defined(_MSC_VER) && _MSC_VER < 1800
469  // snprintf for Visual Studio compiler;
470  // it is also used by services (e.g., GetStatus), therefore exported to shared library
471  ZOO_DLL_EXPORT int snprintf(char *buffer, size_t n, const char *format, ...);
472 #endif
473 
474  // knut: some new utility functions; logMessage is primarily intended for debugging
476  ZOO_DLL_EXPORT bool hasvalue(maps* source, const char* node, const char* key, map** kvp);
477 #ifdef __cplusplus
478  ZOO_DLL_EXPORT void setErrorMessage(maps*& conf, const char* service, WPSException exc, const char* message = NULL);
479  ZOO_DLL_EXPORT void logMessage(const char* source, const char* function, int line, const char* file = NULL, const char* message = NULL);
480 #endif
481  #define zooLogMsg(file,message) logMessage(__FILE__, __func__, __LINE__, (file), (message))
482  #define zooLog logMessage(__FILE__, __func__, __LINE__)
483 
484 #ifdef __cplusplus
485 }
486 #endif
487 
488 #endif
ZOO_DLL_EXPORT void freeMap(map **)
Free allocated memory of a map.
Definition: service.c:324
ZOO_DLL_EXPORT void inheritance(registry *, service **)
Apply inheritance to a service based on a registry.
Definition: service.c:1605
ZOO_DLL_EXPORT void freeMaps(maps **mo)
Free allocated memory of a maps.
Definition: service.c:345
struct registry registry
Profile registry.
ZOO_DLL_EXPORT void dumpMapsToFile(maps *, char *, int)
Dump a maps to a file, see _dumpMapsToFile().
Definition: service.c:146
Definition: service.h:349
struct maps maps
linked list of map pointer
char * name
the maps name
Definition: main_conf_read.y:286
ZOO_DLL_EXPORT void freeIOType(iotype **)
Free allocated memory of an iotype.
Definition: service.c:407
char * format
the format: LiteralData or ComplexData or BoundingBoxData
Definition: main_conf_read.y:312
ZOO_DLL_EXPORT void dumpMap(map *)
Dump a map on stderr, see _dumpMap()
Definition: service.c:73
ZOO_DLL_EXPORT bool hasKey(map *, const char *)
Verify if a key exist in a map.
Definition: service.c:234
Definition: service.h:332
ZOO_DLL_EXPORT void addMapToIoType(iotype **, map *)
Add a map to iotype.
Definition: service.c:628
ZOO_DLL_EXPORT void setElementsName(elements **, char *)
Set the name of an elements.
Definition: service.c:1083
ZOO_DLL_EXPORT map * getMapArray(map *, const char *, int)
Access a specific map array element.
Definition: service.c:857
Definition: service.h:331
ZOO_DLL_EXPORT void inheritElements(elements **, elements *)
Apply inheritance to an out elements from a reference in elements.
Definition: service.c:1573
struct service * content
the content service pointer
Definition: main_conf_read.y:335
struct map * content
the content map
Definition: main_conf_read.y:298
#define ztimeval
The crossplatform timeval alias.
Definition: service.h:136
ZOO_DLL_EXPORT void addToElements(elements **, elements *)
Add an elements to another elements.
Definition: service.c:1293
ZOO_DLL_EXPORT void setServiceName(service **, char *)
Set the name of a service.
Definition: service.c:1307
Definition: service.h:353
ZOO_DLL_EXPORT map * getMap(map *, const char *)
Access a specific map.
Definition: service.c:272
ZOO_DLL_EXPORT bool hasvalue(maps *source, const char *node, const char *key, map **kvp)
Verify that a particular map value exists in a maps data structure, and obtain that value...
Definition: service.c:1723
Definition: service.h:327
ZOO_DLL_EXPORT map * getMapType(map *)
Access the map "type".
Definition: service.c:935
struct iotype * next
the pointer to the next iotype if any or NULL
Definition: main_conf_read.y:299
Definition: service.h:335
Definition: service.h:333
ZOO_DLL_EXPORT map * getMapFromMaps(maps *, const char *, const char *)
Access a specific map from a maps.
Definition: service.c:309
struct elements * inputs
the inputs elements
Definition: main_conf_read.y:327
struct map * metadata
the metadata map
Definition: main_conf_read.y:310
ZOO_DLL_EXPORT void dumpElementsAsYAML(elements *, int)
Dump an elements on stderr using the YAML syntaxe.
Definition: service.c:1141
ZOO_DLL_EXPORT bool contains(map *, map *)
Verify if a map is contained in another map.
Definition: service.c:668
char * value
the value
Definition: service.h:239
Definition: service.h:344
ZOO_DLL_EXPORT elements * createEmptyElements()
Create an empty elements.
Definition: service.c:1043
snprintf(current_maps->name,(strlen($1)+1),"%s", $1)
struct iotype * supported
the supported iotype
Definition: main_conf_read.y:314
ZOO_DLL_EXPORT void addMapsToMaps(maps **, maps *)
Add a maps at the end of another maps.
Definition: service.c:818
ZOO_DLL_EXPORT void _dumpMap(map *)
Dump a map on stderr.
Definition: service.c:58
ZOO_DLL_EXPORT iotype * createIoType()
Create a new iotype*.
Definition: service.c:158
struct registry * next
the next registry pointer
Definition: main_conf_read.y:345
ZOO_DLL_EXPORT service * getServiceFromRegistry(registry *, char *, char *)
Access a service in the registry.
Definition: service.c:1507
Definition: service.h:346
struct map map
KVP linked list.
Definition: service.h:337
ZOO_DLL_EXPORT void dumpMapToFile(map *, FILE *)
Dump a map to a file.
Definition: service.c:87
ZOO_DLL_EXPORT map * createMap(const char *, const char *)
Create a new map.
Definition: service.c:172
static const char *const WPSExceptionText[]
Definition: service.h:382
Definition: service.h:343
struct map * content
the content map
Definition: main_conf_read.y:287
struct elements * outputs
the outputs elements
Definition: main_conf_read.y:328
ZOO_DLL_EXPORT maps * createMaps(const char *)
Create a new maps with the given name.
Definition: service.c:186
ZOO_DLL_EXPORT elements * getElements(elements *, const char *)
Access a specific elements named key.
Definition: service.c:391
ZOO_DLL_EXPORT void addToMap(map *, const char *, const char *)
Add key value pair to an existing map.
Definition: service.c:514
Definition: service.h:354
Definition: service.h:342
ZOO_DLL_EXPORT bool nonempty(map *map)
Verify that a map has a value.
Definition: service.c:1707
Definition: service.h:352
linked list of map pointer
Definition: main_conf_read.y:285
ZOO_DLL_EXPORT void mapsToCharXXX(maps *, char ***)
Convert a maps to a char*** (only used for Fortran support)
Definition: service.c:1641
char * name
the name
Definition: main_conf_read.y:308
struct services services
Services chained list.
ZOO_DLL_EXPORT service * createService()
Allocate memory for a service.
Definition: service.c:467
struct map * metadata
the metadata map
Definition: main_conf_read.y:325
ZOO_DLL_EXPORT bool hasElement(elements *, const char *)
Verify if an elements contains a name equal to the given key.
Definition: service.c:374
ZOO_DLL_EXPORT void addMapToMap(map **, map *)
Add a map at the end of another map.
Definition: service.c:598
void setErrorMessage(maps *&conf, const char *service, WPSException exc, const char *message)
Definition: service.c:1737
ZOO_DLL_EXPORT bool addServiceToRegistry(registry **, char *, service *)
Add a service to the registry.
Definition: service.c:1424
ZOO_DLL_EXPORT maps * getMaps(maps *, const char *)
Access a specific maps.
Definition: service.c:254
char * name
the name
Definition: main_conf_read.y:343
struct service service
Metadata information about a full Service.
ZOO_DLL_EXPORT void dumpService(service *)
Dump a service on stderr.
Definition: service.c:1321
ZOO_DLL_EXPORT void dumpMaps(maps *m)
Dump a maps on stderr, see dumpMap().
Definition: service.c:100
KVP linked list.
Definition: service.h:237
ZOO_DLL_EXPORT void dumpRegistry(registry *)
Print the registry on stderr.
Definition: service.c:1403
ZOO_DLL_EXPORT void dumpElements(elements *)
Dump an elements on stderr.
Definition: service.c:1100
Definition: service.h:345
ZOO_DLL_EXPORT void freeRegistry(registry **)
Free memory allocated for the registry.
Definition: service.c:1481
ZOO_DLL_EXPORT void loadMapBinary(map **, map *, int)
Load binary values from a map (in) and add them to another map (out)
Definition: service.c:729
ZOO_DLL_EXPORT void addIntToMap(map *, const char *, const int)
Add a key and an integer value to an existing map.
Definition: service.c:539
Definition: service.h:348
Metadata information about a full Service.
Definition: main_conf_read.y:322
struct services * content
the content services pointer
Definition: main_conf_read.y:344
struct elements elements
Metadata information about input or output.
Definition: service.h:338
ZOO_DLL_EXPORT elements * dupElements(elements *)
Duplicate an elements.
Definition: service.c:1225
ZOO_DLL_EXPORT void charxxxToMaps(char ***, maps **)
Convert a char*** to a maps (only used for Fortran support)
Definition: service.c:1677
ZOO_DLL_EXPORT void dumpServiceAsYAML(service *)
Dump a service on stderr using the YAML syntaxe.
Definition: service.c:1351
char * name
the key
Definition: service.h:238
Profile registry.
Definition: main_conf_read.y:342
Not named linked list.
Definition: main_conf_read.y:297
struct maps * next
the pointer to the next maps if any or NULL
Definition: main_conf_read.y:289
struct maps * child
the child maps
Definition: main_conf_read.y:288
Definition: service.h:334
static const char *const WPSExceptionCode[]
Definition: service.h:357
struct map * additional_parameters
the additional parameters map
Definition: main_conf_read.y:326
ZOO_DLL_EXPORT int addMapsArrayToMaps(maps **, maps *, char *)
Add a Maps containing a MapArray to a Maps.
Definition: service.c:958
Definition: service.h:336
ZOO_DLL_EXPORT map * getMapOrFill(map **, const char *, const char *)
Access a specific map or set its value.
Definition: service.c:647
void logMessage(const char *source, const char *function, int line, const char *file, const char *message)
Definition: service.c:1753
struct map * next
the pointer to the next map if any or NULL
Definition: service.h:240
ZOO_DLL_EXPORT map * addToMapWithSize(map *, const char *, const char *, int)
Add a key and a binary value to an existing map.
Definition: service.c:566
ZOO_DLL_EXPORT void inheritMap(map **, map *)
Apply inheritance to an out map from a reference in map.
Definition: service.c:1530
struct iotype * defaults
the default iotype
Definition: main_conf_read.y:313
ZOO_DLL_EXPORT void freeService(service **)
Free allocated memory of a service.
Definition: service.c:484
struct elements * next
the pointer to the next element if any (or NULL)
Definition: main_conf_read.y:316
struct iotype iotype
Not named linked list.
#define ZOO_DLL_EXPORT
Definition: service.h:33
ZOO_DLL_EXPORT void setMapArray(map *, const char *, int, const char *)
Add a key value in a MapArray for a specific index.
Definition: service.c:884
#define zGettimeofday
The crossplatform gettimeofday alias.
Definition: service.h:132
Metadata information about input or output.
Definition: main_conf_read.y:307
struct map * content
the content map
Definition: main_conf_read.y:309
ZOO_DLL_EXPORT void addIntToMapArray(map *, const char *, int, const int)
Add a key and an integer value to an existing map array.
Definition: service.c:922
ZOO_DLL_EXPORT int count(map *)
Count number of map in a map.
Definition: service.c:201
ZOO_DLL_EXPORT elements * createElements(const char *)
Create a named elements.
Definition: service.c:1063
ZOO_DLL_EXPORT iotype * getIoTypeFromElement(elements *, char *, map *)
Access a specific iotype from an elements.
Definition: service.c:693
ZOO_DLL_EXPORT void setMapInMaps(maps *, const char *, const char *, const char *)
Set a key value pair to a map contained in a Maps.
Definition: service.c:1014
Definition: service.h:350
char * name
the name
Definition: main_conf_read.y:323
ZOO_DLL_EXPORT void inheritIOType(iotype **, iotype *)
Apply inheritance to an out iotype from a reference in iotype.
Definition: service.c:1550
ZOO_DLL_EXPORT map * getLastMap(map *)
Access the last map.
Definition: service.c:290
ZOO_DLL_EXPORT void loadMapBinaries(map **, map *)
Load binary values from a map (in) and add them to another map (out).
Definition: service.c:764
WPSException
Definition: main_conf_read.y:349
struct elements * child
the pointer to the children element if any (or NULL)
Definition: main_conf_read.y:315
ZOO_DLL_EXPORT service * dupService(service *)
Duplicate a service.
Definition: service.c:1384
Definition: service.h:347
struct map * content
the content map
Definition: main_conf_read.y:324
struct map * additional_parameters
the additional parameters map
Definition: main_conf_read.y:311
struct services * next
the pointer to the next services*
Definition: main_conf_read.y:336
static int zSleep(const long millisecond)
The crossplatform sleep alias.
Definition: service.h:126
ZOO_DLL_EXPORT void freeElements(elements **)
Free allocated memory of an elements.
Definition: service.c:425
Definition: service.h:351
Services chained list.
Definition: main_conf_read.y:334
ZOO_DLL_EXPORT maps * dupMaps(maps **)
Duplicate a Maps.
Definition: service.c:792
pair PAIR FOUND n
Definition: service_conf.y:1102