source: branches/prototype-v0/zoo-project/zoo-kernel/service.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:eol-style set to native
  • Property svn:mime-type set to text/x-chdr
File size: 10.2 KB
Line 
1/*
2 * Author : Gérald FENOY
3 *
4 * Copyright (c) 2009-2015 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#ifdef WIN32
37#define strncasecmp _strnicmp
38#define strcasecmp _stricmp
39#if defined(_MSC_VER) && _MSC_VER < 1900
40#define snprintf _snprintf
41#endif
42#define zStrdup _strdup
43#define zMkdir _mkdir
44#define zOpen _open
45#define zWrite _write
46#define zSleep Sleep
47#include <sys/timeb.h>
48struct ztimeval {
49  long tv_sec; /* seconds */
50  long tv_usec; /* and microseconds */
51};
52static int zGettimeofday(struct ztimeval* tp, void* tzp)
53{
54  if (tp == 0) {
55    return -1;
56  }
57 
58  struct _timeb theTime;
59  _ftime(&theTime);
60  tp->tv_sec = theTime.time;
61  tp->tv_usec = theTime.millitm * 1000;
62 
63  return 0; // The gettimeofday() function shall return 0 on success
64}
65
66#else
67/**
68 * The crossplatform strdup alias
69 */
70#define zStrdup strdup
71/**
72 * The crossplatform mkdir alias
73 */
74#define zMkdir mkdir
75/**
76 * The crossplatform open alias
77 */
78#define zOpen open
79/**
80 * The crossplatform write alias
81 */
82#define zWrite write
83/**
84 * The crossplatform sleep alias
85 */
86#define zSleep sleep
87/**
88 * The crossplatform gettimeofday alias
89 */
90#define zGettimeofday gettimeofday
91/**
92 * The crossplatform timeval alias
93 */
94#define ztimeval timeval
95#endif
96
97#ifdef __cplusplus
98extern "C" {
99#endif
100
101#ifdef WIN32
102#ifdef USE_MS
103#include <mapserver.h>
104#endif
105#endif
106#include <stdlib.h>
107#include <ctype.h>
108
109#include <stdio.h>
110
111#include <string.h>
112#ifndef WIN32
113#include <ctype.h>
114#include <stdbool.h>
115#endif
116
117/**
118 * The global accepted status for a service
119 */
120#define SERVICE_ACCEPTED 0
121/**
122 * The global started status for a service
123 */
124#define SERVICE_STARTED 1
125/**
126 * The global paused status for a service
127 */
128#define SERVICE_PAUSED 2
129/**
130 * The global succeeded status for a service
131 */
132#define SERVICE_SUCCEEDED 3
133/**
134 * The global failed status for a service
135 */
136#define SERVICE_FAILED 4
137
138/**
139 * The memory size to create an elements
140 */
141#define ELEMENTS_SIZE (sizeof(char*)+(((2*sizeof(char*))+sizeof(maps*))*3)+sizeof(char*)+(((2*sizeof(char*))+sizeof(iotype*))*2)+(2*sizeof(elements*)))
142/**
143 * The memory size to create a map
144 */
145//#define MAP_SIZE (2*sizeof(char*))+sizeof(NULL) // knut: size of NULL pointer may be different from regular pointer (platform dependent)
146#define MAP_SIZE (2*sizeof(char*))+sizeof(map*)
147/**
148 * The memory size to create an iotype
149 */
150//#define IOTYPE_SIZE MAP_SIZE+sizeof(NULL)
151#define IOTYPE_SIZE sizeof(map*) + sizeof(iotype*)
152/**
153 * The memory size to create a maps
154 */
155//#define MAPS_SIZE (2*sizeof(char*))+sizeof(map*)+MAP_SIZE
156#define MAPS_SIZE sizeof(char*)+sizeof(map*)+(2*sizeof(maps*))
157/**
158 * The memory size to create a service
159 */
160//#define SERVICE_SIZE (ELEMENTS_SIZE*2)+(MAP_SIZE*2)+sizeof(char*)
161#define SERVICE_SIZE sizeof(char*) + 3*sizeof(map*) + 2*sizeof(elements*)
162/**
163 * The memory size to create a services
164 */
165//#define SERVICES_SIZE SERVICE_SIZE+sizeof(services*)
166#define SERVICES_SIZE sizeof(service*)+sizeof(services*)
167/**
168 * The memory size to create a registry
169 */
170//#define REGISTRY_SIZE SERVICES_SIZE+sizeof(char*)
171#define REGISTRY_SIZE sizeof(char*)+sizeof(services*)+sizeof(registry*)
172
173#define SHMSZ     27
174
175#include "version.h"
176
177#ifdef DEBUG_STACK
178  void debugStack(const char* file,const int line){
179    int stack;
180    fprintf(stderr,"stack %p (%s: %d) \n",&stack,file,line);
181  }
182#endif
183
184  /**
185   * KVP linked list
186   */
187  typedef struct map{
188    char* name; //!< the key
189    char* value; //!< the value
190    struct map* next; //!< the pointer to the next map if any or NULL
191  } map;
192
193#ifdef WIN32
194#define NULLMAP ((map*) 0)
195#else
196#define NULLMAP NULL
197#endif
198
199  /**
200   * linked list of map pointer
201   *
202   * Small object to store WPS KVP set.
203   */
204  typedef struct maps{
205    char* name; //!< the maps name
206    struct map* content; //!< the content map
207    struct maps* child; //!< the child maps
208    struct maps* next; //!< the pointer to the next maps if any or NULL
209  } maps;
210 
211  /**
212   * Not named linked list
213   *
214   * Used to store information about formats, such as mimeType, encoding ...
215   */
216  typedef struct iotype{
217    struct map* content; //!< the content map
218    struct iotype* next; //!< the pointer to the next iotype if any or NULL
219  } iotype;
220
221  /**
222   * Metadata information about input or output.
223   *
224   * The elements are used to store metadata information defined in the ZCFG.
225   */
226  typedef struct elements{
227    char* name; //!< the name
228    struct map* content; //!< the content map
229    struct map* metadata; //!< the metadata map
230    struct map* additional_parameters; //!< the additional parameters map
231    char* format; //!< the format: LiteralData or ComplexData or BoundingBoxData
232    struct iotype* defaults; //!< the default iotype
233    struct iotype* supported; //!< the supported iotype
234    struct elements* child; //!< the pointer to the children element if any (or NULL)
235    struct elements* next; //!< the pointer to the next element if any (or NULL)
236  } elements;
237
238  /**
239   * Metadata information about a full Service.
240   */
241  typedef struct service{
242    char* name; //!< the name
243    struct map* content; //!< the content map
244    struct map* metadata; //!< the metadata map
245    struct map* additional_parameters; //!< the additional parameters map
246    struct elements* inputs; //!< the inputs elements
247    struct elements* outputs; //!< the outputs elements
248  } service;
249
250  /**
251   * Services chained list.
252   */
253  typedef struct services{
254    struct service* content; //!< the content service pointer
255    struct services* next; //!< the pointer to the next services*
256  } services;
257
258  /**
259   * Profile registry.
260   */
261  typedef struct registry{
262    char *name; //!< the name
263    struct services* content; //!< the content services pointer
264    struct registry* next; //!< the next registry pointer
265  } registry;
266
267  ZOO_DLL_EXPORT void _dumpMap(map*);
268  ZOO_DLL_EXPORT void dumpMap(map*);
269  ZOO_DLL_EXPORT void dumpMaps(maps* m);
270  ZOO_DLL_EXPORT void dumpMapToFile(map*,FILE*); // (used only internally)
271  ZOO_DLL_EXPORT void dumpMapsToFile(maps*,char*,int);
272  ZOO_DLL_EXPORT map* createMap(const char*,const char*);
273  ZOO_DLL_EXPORT maps* createMaps(const char*);
274  ZOO_DLL_EXPORT int count(map*);
275  ZOO_DLL_EXPORT bool hasKey(map*,const char*);
276  ZOO_DLL_EXPORT maps* getMaps(maps*,const char*);
277  ZOO_DLL_EXPORT map* getMap(map*,const char*);
278  ZOO_DLL_EXPORT map* getLastMap(map*);
279  ZOO_DLL_EXPORT map* getMapFromMaps(maps*,const char*,const char*);
280  ZOO_DLL_EXPORT void freeMap(map**);
281  ZOO_DLL_EXPORT void freeMaps(maps** mo);
282  ZOO_DLL_EXPORT iotype* createIoType();
283  ZOO_DLL_EXPORT elements* createEmptyElements();
284  ZOO_DLL_EXPORT elements* createElements(const char*);
285  ZOO_DLL_EXPORT void setElementsName(elements**,char*);
286  ZOO_DLL_EXPORT bool hasElement(elements*,const char*);
287  ZOO_DLL_EXPORT elements* getElements(elements*,char*);
288  ZOO_DLL_EXPORT void freeIOType(iotype**);
289  ZOO_DLL_EXPORT void freeElements(elements**);
290  ZOO_DLL_EXPORT void setServiceName(service**,char*);
291  ZOO_DLL_EXPORT void freeService(service**);
292  ZOO_DLL_EXPORT void addToMap(map*,const char*,const char*);
293  ZOO_DLL_EXPORT void addIntToMap(map*,const char*,const int);
294  ZOO_DLL_EXPORT map* addToMapWithSize(map*,const char*,const char*,int);
295  ZOO_DLL_EXPORT void addMapToMap(map**,map*);
296  ZOO_DLL_EXPORT void addMapToIoType(iotype**,map*);
297  ZOO_DLL_EXPORT map* getMapOrFill(map**,const char*,const char*);
298  ZOO_DLL_EXPORT bool contains(map*,map*);
299  ZOO_DLL_EXPORT iotype* getIoTypeFromElement(elements*,char*, map*);
300  ZOO_DLL_EXPORT void loadMapBinary(map**,map*,int);
301  ZOO_DLL_EXPORT void loadMapBinaries(map**,map*);
302  ZOO_DLL_EXPORT maps* dupMaps(maps**);
303  ZOO_DLL_EXPORT void addMapsToMaps(maps**,maps*);
304  ZOO_DLL_EXPORT map* getMapArray(map*,const char*,int);
305  ZOO_DLL_EXPORT void setMapArray(map*,const char*,int,const char*);
306  ZOO_DLL_EXPORT map* getMapType(map*);
307  ZOO_DLL_EXPORT int addMapsArrayToMaps(maps**,maps*,char*);
308  ZOO_DLL_EXPORT void setMapInMaps(maps*,const char*,const char*,const char*);
309  ZOO_DLL_EXPORT void dumpElements(elements*);
310  ZOO_DLL_EXPORT void dumpElementsAsYAML(elements*,int);
311  ZOO_DLL_EXPORT elements* dupElements(elements*);
312  ZOO_DLL_EXPORT void addToElements(elements**,elements*);
313  ZOO_DLL_EXPORT void dumpService(service*);
314  ZOO_DLL_EXPORT void dumpServiceAsYAML(service*);
315  ZOO_DLL_EXPORT service* dupService(service*);
316  ZOO_DLL_EXPORT void dumpRegistry(registry*);
317  ZOO_DLL_EXPORT bool addServiceToRegistry(registry**,char*,service*);
318  ZOO_DLL_EXPORT void freeRegistry(registry**);
319  ZOO_DLL_EXPORT service* getServiceFromRegistry(registry*,char*,char*);
320  ZOO_DLL_EXPORT void inheritMap(map**,map*);
321  ZOO_DLL_EXPORT void inheritIOType(iotype**,iotype*);
322  ZOO_DLL_EXPORT void inheritElements(elements**,elements*);
323  ZOO_DLL_EXPORT void inheritance(registry*,service**);
324  ZOO_DLL_EXPORT void mapsToCharXXX(maps*,char***);
325  ZOO_DLL_EXPORT void charxxxToMaps(char***,maps**);
326#if defined(_MSC_VER) && _MSC_VER < 1800
327  // snprintf for Visual Studio compiler;
328  // it is also used by services (e.g., GetStatus), therefore exported to shared library
329  ZOO_DLL_EXPORT int snprintf(char *buffer, size_t n, const char *format, ...);
330#endif
331#ifdef __cplusplus
332}
333#endif
334
335#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