source: trunk/zoo-project/zoo-kernel/service.h @ 844

Last change on this file since 844 was 843, checked in by jmckenna, 7 years ago

handle duplicate strcasestr declarations on Windows

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