source: branches/prototype-v0/zoo-project/zoo-kernel/service.h @ 877

Last change on this file since 877 was 877, checked in by djay, 6 years ago

Fixes for supporting properly the memory=protect which force the ZOO-Kernel to not store any downloaded files in memory. Add footer to the HPC support. Fix the autotools to build service_json and sshapi only when required so, when HPC support is activated, this also avoid adding too much dependencies at compilation time. Store md5 of the downloaded files to avoid uploading on HPC server the same file more than once, in case the md5 correspond.

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