tinyows 1.2.2
wfs_get_capabilities.c
Go to the documentation of this file.
1/*
2 Copyright (c) <2007-2012> <Barbara Philippot - Olivier Courtin>
3
4 Permission is hereby granted, free of charge, to any person obtaining a copy
5 of this software and associated documentation files (the "Software"), to deal
6 in the Software without restriction, including without limitation the rights
7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 copies of the Software, and to permit persons to whom the Software is
9 furnished to do so, subject to the following conditions:
10
11 The above copyright notice and this permission notice shall be included in
12 all copies or substantial portions of the Software.
13
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20 IN THE SOFTWARE.
21*/
22
23
24#include <stdlib.h>
25#include <stdio.h>
26#include <assert.h>
27#include <float.h>
28#include <math.h>
29
30#include "../ows/ows.h"
31
32
33/*
34 * Display what distributed computing platform is supported
35 * And what entry point is for all operations
36 * Assume that online_resource figure in the tinyows struct
37 * Used for version 1.0.0
38 */
39static void wfs_get_capabilities_dcpt_100(const ows * o, char * req)
40{
41 assert(o);
42 assert(o->online_resource);
43
44 fprintf(o->output, " <DCPType>\n");
45 fprintf(o->output, " <HTTP>\n");
46 fprintf(o->output, " <Get onlineResource=\"");
47 fprintf(o->output, "%s?%s\"/>\n", o->online_resource->buf, req);
48 fprintf(o->output, " </HTTP>\n");
49 fprintf(o->output, " </DCPType>\n");
50 fprintf(o->output, " <DCPType>\n");
51 fprintf(o->output, " <HTTP>\n");
52 fprintf(o->output, " <Post onlineResource=\"");
53 fprintf(o->output, "%s\"/>\n", o->online_resource->buf);
54 fprintf(o->output, " </HTTP>\n");
55 fprintf(o->output, " </DCPType>\n");
56}
57
58
59/*
60 * Print a GML Object type passed in parameter
61 * Used for version 1.1.0
62 */
63static void wfs_gml_object_type(ows * o, char *type)
64{
65 assert(o);
66 assert(type);
67
68 fprintf(o->output, " <GMLObjectType>\n");
69 fprintf(o->output, " <Name>gml:%s</Name>\n", type);
70 fprintf(o->output, " <OutputFormats>\n");
71 fprintf(o->output, " <Format>text/xml; subtype=gml/2.1.2</Format>\n");
72 fprintf(o->output, " <Format>text/xml; subtype=gml/3.1.1</Format>\n");
73 fprintf(o->output, " </OutputFormats>\n");
74 fprintf(o->output, " </GMLObjectType>\n");
75}
76
77
78/*
79 * Defines the list of GML Object types that the WFS server would be capable
80 * to serve.
81 * Used for version 1.1.0
82 */
84{
85 assert(o);
86
87 fprintf(o->output, " <SupportsGMLObjectTypeList>\n");
88 wfs_gml_object_type(o, "AbstractGMLFeatureType");
89 wfs_gml_object_type(o, "PointType");
90 wfs_gml_object_type(o, "LineStringType");
91 wfs_gml_object_type(o, "PolygonType");
92 wfs_gml_object_type(o, "MultiPointType");
93 wfs_gml_object_type(o, "MultiLineStringType");
94 wfs_gml_object_type(o, "MultiPolygonType");
95 fprintf(o->output, " </SupportsGMLObjectTypeList>\n");
96}
97
98
99/*
100 * Specifies the list of requests that the WFS can handle
101 * Used for version 1.0.0
102 */
103static void wfs_capability(ows * o)
104{
105 assert(o);
106
107 fprintf(o->output, " <Capability>\n");
108 fprintf(o->output, " <Request>\n");
109 fprintf(o->output, " <GetCapabilities>\n");
111 fprintf(o->output, " </GetCapabilities>\n");
112 fprintf(o->output, " <DescribeFeatureType>\n");
113 fprintf(o->output, " <SchemaDescriptionLanguage>\n");
114 fprintf(o->output, " <XMLSCHEMA/>\n");
115 fprintf(o->output, " </SchemaDescriptionLanguage>\n");
117 fprintf(o->output, " </DescribeFeatureType>\n");
118 fprintf(o->output, " <GetFeature>\n");
119 fprintf(o->output, "<ResultFormat>\n");
120 fprintf(o->output, "<GML2/>\n");
121 fprintf(o->output, "</ResultFormat>\n");
123 fprintf(o->output, " </GetFeature>\n");
124 fprintf(o->output, " <Transaction>\n");
126 fprintf(o->output, " </Transaction>\n");
127 fprintf(o->output, " </Request>\n");
128 fprintf(o->output, " </Capability>\n");
129}
130
131
132/*
133 * Specifies the list of requests and its parameters that the WFS can handle
134 * Used for version 1.1.0
135 */
137{
138 assert(o);
139
140 fprintf(o->output, " <ows:OperationsMetadata>\n");
141 fprintf(o->output, " <ows:Operation name='GetCapabilities'>\n");
143 fprintf(o->output, " <ows:Parameter name='AcceptVersions'>\n");
144 fprintf(o->output, " <ows:Value>1.1.0</ows:Value>\n");
145 fprintf(o->output, " <ows:Value>1.0.0</ows:Value>\n");
146 fprintf(o->output, " </ows:Parameter>\n");
147 fprintf(o->output, " <ows:Parameter name='AcceptFormats'>\n");
148 fprintf(o->output, " <ows:Value>text/xml</ows:Value>\n");
149 fprintf(o->output, " </ows:Parameter>\n");
150 fprintf(o->output, " <ows:Parameter name='Sections'>\n");
151 fprintf(o->output, " <ows:Value>ServiceIdentification</ows:Value>\n");
152 fprintf(o->output, " <ows:Value>ServiceProvider</ows:Value>\n");
153 fprintf(o->output, " <ows:Value>OperationsMetadata</ows:Value>\n");
154 fprintf(o->output, " <ows:Value>FeatureTypeList</ows:Value>\n");
155 fprintf(o->output, " <ows:Value>ServesGMLObjectTypeList</ows:Value>\n");
156 fprintf(o->output, " <ows:Value>SupportsGMLObjectTypeList</ows:Value>\n");
157 fprintf(o->output, " </ows:Parameter>\n");
158 fprintf(o->output, " </ows:Operation>\n");
159 fprintf(o->output, " <ows:Operation name='DescribeFeatureType'>\n");
161 fprintf(o->output, " <ows:Parameter name='outputFormat'>\n");
162 fprintf(o->output, " <ows:Value>text/xml; subtype=gml/3.1.1</ows:Value>\n");
163 fprintf(o->output, " <ows:Value>text/xml; subtype=gml/2.1.2</ows:Value>\n");
164 fprintf(o->output, " </ows:Parameter>\n");
165 fprintf(o->output, " </ows:Operation>\n");
166 fprintf(o->output, " <ows:Operation name='GetFeature'>\n");
168 fprintf(o->output, " <ows:Parameter name='resultType'>\n");
169 fprintf(o->output, " <ows:Value>results</ows:Value>\n");
170 fprintf(o->output, " <ows:Value>hits</ows:Value>\n");
171 fprintf(o->output, " </ows:Parameter>\n");
172 fprintf(o->output, " <ows:Parameter name='outputFormat'>\n");
173 fprintf(o->output, " <ows:Value>text/xml; subtype=gml/3.1.1</ows:Value>\n");
174 fprintf(o->output, " <ows:Value>text/xml; subtype=gml/2.1.2</ows:Value>\n");
175 fprintf(o->output, " <ows:Value>application/json</ows:Value>\n");
176 fprintf(o->output, " </ows:Parameter>\n");
177 fprintf(o->output, " </ows:Operation>\n");
178 fprintf(o->output, " <ows:Operation name='Transaction'>\n");
180 fprintf(o->output, " <ows:Parameter name='inputFormat'>\n");
181 fprintf(o->output, " <ows:Value>text/xml; subtype=gml/3.1.1</ows:Value>\n");
182 fprintf(o->output, " </ows:Parameter>\n");
183 fprintf(o->output, " <ows:Parameter name='idgen'>\n");
184 fprintf(o->output, " <ows:Value>GenerateNew</ows:Value>\n");
185 fprintf(o->output, " <ows:Value>UseExisting</ows:Value>\n");
186 fprintf(o->output, " </ows:Parameter>\n");
187 fprintf(o->output, " </ows:Operation>\n");
188 if (o->max_features) {
189 fprintf(o->output, " <ows:Constraint name='DefaultMaxFeatures'>\n");
190 fprintf(o->output, " <ows:Value>%d</ows:Value>\n", o->max_features);
191 fprintf(o->output, " </ows:Constraint>\n");
192 }
193 fprintf(o->output, " <ows:Constraint name='LocalTraverseXLinkScope'>\n");
194 fprintf(o->output, " <ows:Value>0</ows:Value>\n");
195 fprintf(o->output, " </ows:Constraint>\n");
196 fprintf(o->output, " <ows:Constraint name='RemoteTraverseXLinkScope'>\n");
197 fprintf(o->output, " <ows:Value>0</ows:Value>\n");
198 fprintf(o->output, " </ows:Constraint>\n");
199 fprintf(o->output, " </ows:OperationsMetadata>\n");
200}
201
202
203/*
204 * Specifies the list of feature types available from the wfs
205 * Used for both 1.0.0 && 1.1.0 versions
206 */
208{
209 ows_layer_node *ln;
210 ows_geobbox *gb;
211
212 list_node *keyword, *l_srid;
213 int s;
214 bool writable, retrievable;
215
216 assert(o);
217
218 writable = false;
219 retrievable = false;
220
221 fprintf(o->output, " <FeatureTypeList>\n");
222
223 /* print global operations */
224
227 fprintf(o->output, " <Operations>\n");
228
230 if (ows_version_get(o->request->version) == 100)
231 fprintf(o->output, " <Query/>\n");
232 else if (ows_version_get(o->request->version) == 110)
233 fprintf(o->output, " <Operation>Query</Operation>\n");
234
235 retrievable = true;
236 }
237
239 if (ows_version_get(o->request->version) == 100) {
240 fprintf(o->output, " <Insert/>\n");
241 fprintf(o->output, " <Update/>\n");
242 fprintf(o->output, " <Delete/>\n");
243 } else if (ows_version_get(o->request->version) == 110) {
244 fprintf(o->output, " <Operation>Insert</Operation>\n");
245 fprintf(o->output, " <Operation>Update</Operation>\n");
246 fprintf(o->output, " <Operation>Delete</Operation>\n");
247 }
248
249 writable = true;
250 }
251
254 fprintf(o->output, " </Operations>\n");
255
256 for (ln = o->layers->first ; ln ; ln = ln->next) {
257 /* print each feature type */
258 if (ows_layer_match_table(o, ln->layer->name)) {
259
260 fprintf(o->output, "<FeatureType xmlns:%s=\"%s\">\n",
261 ln->layer->ns_prefix->buf, ln->layer->ns_uri->buf);
262
263 /* name */
264 if (ln->layer->name) {
265 for (s = 0; s < ln->layer->depth; s++) fprintf(o->output, " ");
266
267 fprintf(o->output, " <Name>");
269 fprintf(o->output, "</Name>\n");
270 }
271
272 /* title */
273 if (ln->layer->title) {
274 for (s = 0; s < ln->layer->depth; s++) fprintf(o->output, " ");
275
276 fprintf(o->output, " <Title>");
277 buffer_flush(ln->layer->title, o->output);
278 fprintf(o->output, "</Title>\n");
279 }
280
281 /* abstract */
282 if (ln->layer->abstract) {
283 for (s = 0; s < ln->layer->depth; s++) fprintf(o->output, " ");
284
285 fprintf(o->output, " <Abstract>");
287 fprintf(o->output, "</Abstract>\n");
288 }
289
290 /* keywords */
291 if (ln->layer->keywords) {
292 for (s = 0; s < ln->layer->depth; s++) fprintf(o->output, " ");
293
294 fprintf(o->output, " <Keywords>");
295
296 for (keyword = ln->layer->keywords->first ; keyword ; keyword = keyword->next) {
297 if (ows_version_get(o->request->version) == 100) {
298 fprintf(o->output, "%s", keyword->value->buf);
299 if (keyword->next) fprintf(o->output, ",");
300 } else if (ows_version_get(o->request->version) == 110) {
301 fprintf(o->output, " <Keyword>");
302 fprintf(o->output, "%s", keyword->value->buf);
303 fprintf(o->output, "</Keyword>");
304 }
305 }
306
307 fprintf(o->output, "</Keywords>\n");
308 }
309
310 /* SRS */
311 {
312 buffer *srs = NULL;
313
314 buffer* srid = buffer_init();
315 int srid_int = ows_srs_get_srid_from_layer(o, ln->layer->name);
316 buffer_add_int(srid, srid_int);
317 if( srid_int != -1 )
318 srs = ows_srs_get_from_a_srid(o, srid_int);
319
320 if (srs && srs->use) {
321 if (ows_version_get(o->request->version) == 100) {
322 fprintf(o->output, " <SRS>");
323 buffer_flush(srs, o->output);
324 fprintf(o->output, "</SRS>\n");
325 } else if (ows_version_get(o->request->version) == 110) {
326 fprintf(o->output, " <DefaultSRS>urn:ogc:def:crs:EPSG::%s</DefaultSRS>\n", srid->buf);
327
328 if (ln->layer->srid) {
329 for (l_srid = ln->layer->srid->first; l_srid; l_srid = l_srid->next) {
330 if (!buffer_cmp(srid, l_srid->value->buf)) {
331 fprintf(o->output, " <OtherSRS>urn:ogc:def:crs:EPSG::%s</OtherSRS>\n", l_srid->value->buf);
332 }
333 }
334 }
335 }
336 } else {
337 if (ows_version_get(o->request->version) == 100)
338 fprintf(o->output, " <SRS></SRS>\n");
339 else if (ows_version_get(o->request->version) == 110)
340 fprintf(o->output, " <NoSRS/>");
341 }
342
343 buffer_free(srid);
344 if( srs )
345 buffer_free(srs);
346 }
347
348 /* Operations */
349 if (retrievable != ln->layer->retrievable || writable != ln->layer->writable) {
350 fprintf(o->output, " <Operations>\n");
351
352 if (retrievable == false && ln->layer->retrievable == true) {
353 if (ows_version_get(o->request->version) == 100)
354 fprintf(o->output, " <Query/>\n");
355 else if (ows_version_get(o->request->version) == 110)
356 fprintf(o->output, " <Operation>Query</Operation>\n");
357 }
358
359 if (writable == false && ln->layer->writable == true) {
360 if (ows_version_get(o->request->version) == 100) {
361 fprintf(o->output, " <Insert/>\n");
362 fprintf(o->output, " <Update/>\n");
363 fprintf(o->output, " <Delete/>\n");
364 } else if (ows_version_get(o->request->version) == 110) {
365 fprintf(o->output, " <Operation>Insert</Operation>\n");
366 fprintf(o->output, " <Operation>Update</Operation>\n");
367 fprintf(o->output, " <Operation>Delete</Operation>\n");
368 }
369 }
370
371 fprintf(o->output, " </Operations>\n");
372 }
373
374 /* Boundaries */
375 if (!ln->layer->geobbox) {
376 gb = ows_geobbox_compute(o, ln->layer->name);
377 } else {
378 gb = ows_geobbox_init();
379 gb->west = ln->layer->geobbox->west;
380 gb->east = ln->layer->geobbox->east;
381 gb->south = ln->layer->geobbox->south;
382 gb->north = ln->layer->geobbox->north;
383 }
384
385 if( gb )
386 {
387 for (s = 0; s < ln->layer->depth; s++) fprintf(o->output, " ");
388
389 if (ows_version_get(o->request->version) == 100)
390 fprintf(o->output, " <LatLongBoundingBox");
391 else if (ows_version_get(o->request->version) == 110)
392 fprintf(o->output, " <ows:WGS84BoundingBox>");
393
394 if (gb->east != DBL_MIN) {
395 if (ows_version_get(o->request->version) == 100) {
396 if (gb->west < gb->east)
397 fprintf(o->output, " minx='%.*f'", o->degree_precision, gb->west);
398 else
399 fprintf(o->output, " minx='%.*f'", o->degree_precision, gb->east);
400
401 if (gb->north < gb->south)
402 fprintf(o->output, " miny='%.*f'", o->degree_precision, gb->north);
403 else
404 fprintf(o->output, " miny='%.*f'", o->degree_precision, gb->south);
405
406 if (gb->west < gb->east)
407 fprintf(o->output, " maxx='%.*f'", o->degree_precision, gb->east);
408 else
409 fprintf(o->output, " maxx='%.*f'", o->degree_precision, gb->west);
410
411 if (gb->north < gb->south)
412 fprintf(o->output, " maxy='%.*f'", o->degree_precision, gb->south);
413 else
414 fprintf(o->output, " maxy='%.*f'", o->degree_precision, gb->north);
415
416 fprintf(o->output, " />\n");
417 } else if (ows_version_get(o->request->version) == 110) {
418 fprintf(o->output, " <ows:LowerCorner>%.*f %.*f</ows:LowerCorner>",
420 fprintf(o->output, " <ows:UpperCorner>%.*f %.*f</ows:UpperCorner>",
422 }
423 } else {
424 if (ows_version_get(o->request->version) == 100) {
425 fprintf(o->output, " minx='0' miny='0' maxx='0' maxy='0'/>\n");
426 } else if (ows_version_get(o->request->version) == 110) {
427 fprintf(o->output, " <ows:LowerCorner>0 0</ows:LowerCorner>");
428 fprintf(o->output, " <ows:UpperCorner>0 0</ows:UpperCorner>");
429 }
430 }
431
432 if (ows_version_get(o->request->version) == 110)
433 fprintf(o->output, " </ows:WGS84BoundingBox>\n");
434
436 }
437
438 fprintf(o->output, "</FeatureType>\n");
439 }
440 }
441
442 fprintf(o->output, " </FeatureTypeList>\n");
443}
444
445
446/*
447 * Execute the wfs get capabilities 1.1.0 request
448 */
450{
451 buffer *name;
452
453 assert(o);
454 assert(wr);
455
456 if (wr->format == WFS_TEXT_XML)
457 fprintf(o->output, "Content-Type: text/xml\n\n");
458 else
459 fprintf(o->output, "Content-Type: application/xml\n\n");
460
461 fprintf(o->output, "<?xml version='1.0' encoding='%s'?>\n", o->encoding->buf);
462 fprintf(o->output, "<WFS_Capabilities");
463 fprintf(o->output, " version='1.1.0' updateSequence='0'\n");
464 fprintf(o->output, " xmlns='http://www.opengis.net/wfs'\n");
465 fprintf(o->output, " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\n");
466 fprintf(o->output, " xmlns:ogc='http://www.opengis.net/ogc'\n");
467 fprintf(o->output, " xmlns:gml='http://www.opengis.net/gml'\n");
468 fprintf(o->output, " xmlns:ows='http://www.opengis.net/ows'\n");
469 fprintf(o->output, " xmlns:xlink='http://www.w3.org/1999/xlink'\n");
470 fprintf(o->output, " xsi:schemaLocation='http://www.opengis.net/wfs\n");
471 fprintf(o->output, " http://schemas.opengis.net/wfs/1.1.0/wfs.xsd' >\n");
472
473 name = buffer_init();
474
475 /* Service Identification Section : provides information about the
476 WFS service iself */
477 buffer_add_str(name, "ServiceIdentification");
478
479 if (wr->sections) {
480 if (in_list(wr->sections, name) || buffer_case_cmp(wr->sections->first->value, "all"))
483
484 /* Service Provider Section : provides metadata about
485 the organization operating the WFS server */
486 buffer_empty(name);
487 buffer_add_str(name, "ServiceProvider");
488
489 if (wr->sections) {
490 if (in_list(wr->sections, name) || buffer_case_cmp(wr->sections->first->value, "all"))
492 } else ows_service_provider(o);
493
494 /* Operation Metadata Section : specifies the list of requests
495 that the WFS can handle */
496 buffer_empty(name);
497 buffer_add_str(name, "OperationsMetadata");
498
499 if (wr->sections) {
500 if (in_list(wr->sections, name) || buffer_case_cmp(wr->sections->first->value, "all"))
502 } else wfs_operations_metadata(o);
503
504
505 /* FeatureType list Section : specifies the list of feature types
506 available from the wfs */
507 buffer_empty(name);
508 buffer_add_str(name, "FeatureTypeList");
509
510 if (wr->sections) {
511 if (in_list(wr->sections, name) || buffer_case_cmp(wr->sections->first->value, "all"))
513 } else wfs_feature_type_list(o);
514
515 /* No ServesGMLObjectType list Section since there isn't any supported
516 GML Object types not derived from gml:AbstractFeatureType */
517
518 /* SupportsGMLObjectType list Section : defines the list of GML Object types
519 that the WFS server would be capable of serving */
520 buffer_empty(name);
521 buffer_add_str(name, "SupportsGMLObjectTypeList");
522
523 if (wr->sections) {
524 if (in_list(wr->sections, name) || buffer_case_cmp(wr->sections->first->value, "all"))
526 } else wfs_gml_object_type_list(o);
527
528
529 /* Filter Capabilities Section : describe what specific filter capabilties
530 are supported by the wfs */
532
533 fprintf(o->output, "</WFS_Capabilities>\n");
534 fclose(o->output);
535
536 buffer_free(name);
537}
538
539
540/*
541 * Execute the wfs get capabilities request 1.0.0
542 */
544{
545 assert(o);
546 assert(wr);
547
548 fprintf(o->output, "Content-Type: application/xml\n\n");
549 fprintf(o->output, "<?xml version='1.0' encoding='%s'?>\n", o->encoding->buf);
550 fprintf(o->output, "<WFS_Capabilities\n");
551 fprintf(o->output, "version='1.0.0' updateSequence='0'\n");
552 fprintf(o->output, " xmlns='http://www.opengis.net/wfs'\n");
553 fprintf(o->output, " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\n");
554 fprintf(o->output, " xmlns:ogc='http://www.opengis.net/ogc'\n");
555 fprintf(o->output, " xsi:schemaLocation='http://www.opengis.net/wfs\n");
556 fprintf(o->output, " http://schemas.opengis.net/wfs/1.0.0/WFS-capabilities.xsd' >\n");
557
558 /* Service Section : provides information about the service iself */
560
561 /* Capabilities Section : specifies the list of requests
562 that the WFS can handle */
564
565 /* FeatureType list Section : specifies the list of feature types
566 available from the wfs */
568
569 /* Filter Capabilities Section : describe what specific filter capabilties
570 are supported by the wfs */
572
573 fprintf(o->output, "</WFS_Capabilities>\n");
574 fclose(o->output);
575}
576
577
578/*
579 * Execute the wfs get capabilities request according to version
580 */
582{
583 int version;
584
585 assert(o);
586 assert(wr);
587
588 version = ows_version_get(o->request->version);
589
590 switch (version) {
591 case 100:
593 break;
594 case 110:
596 break;
597 }
598}
599
600
601/*
602 * vim: expandtab sw=4 ts=4
603 */
ows_geobbox * ows_geobbox_compute(ows *o, buffer *layer_name)
int ows_version_get(ows_version *v)
void buffer_empty(buffer *buf)
Definition buffer.c:100
void fe_filter_capabilities_110(const ows *o)
bool buffer_cmp(const buffer *buf, const char *str)
Definition buffer.c:290
bool in_list(const list *l, const buffer *value)
Definition list.c:259
bool ows_layer_list_writable(const ows_layer_list *ll)
Definition ows_layer.c:159
void buffer_add_str(buffer *buf, const char *str)
Definition buffer.c:254
void buffer_flush(buffer *buf, FILE *output)
Definition buffer.c:112
bool buffer_case_cmp(const buffer *buf, const char *str)
Definition buffer.c:330
void ows_service_metadata(const ows *o)
bool ows_layer_match_table(const ows *o, const buffer *name)
Definition ows_layer.c:84
void ows_geobbox_free(ows_geobbox *g)
Definition ows_geobbox.c:69
bool ows_layer_list_retrievable(const ows_layer_list *ll)
Definition ows_layer.c:125
void buffer_free(buffer *buf)
Definition buffer.c:83
buffer * ows_layer_uri_to_prefix(ows_layer_list *ll, buffer *layer_name)
Definition ows_layer.c:327
void buffer_add_int(buffer *buf, int i)
Definition buffer.c:173
void fe_filter_capabilities_100(const ows *o)
int ows_srs_get_srid_from_layer(ows *o, buffer *layer_name)
Definition ows_srs.c:380
ows_geobbox * ows_geobbox_init()
Definition ows_geobbox.c:37
void ows_service_identification(const ows *o)
void ows_get_capabilities_dcpt(const ows *o, const char *req)
buffer * ows_srs_get_from_a_srid(ows *o, int srid)
Definition ows_srs.c:423
buffer * buffer_init()
Definition buffer.c:61
void ows_service_provider(const ows *o)
@ WFS_TEXT_XML
Definition ows_struct.h:285
wfs_request
Definition ows_struct.h:269
char * buf
size to next realloc
Definition ows_struct.h:39
size_t use
Definition ows_struct.h:36
struct List_node * next
Definition ows_struct.h:45
buffer * value
Definition ows_struct.h:44
list_node * first
Definition ows_struct.h:50
double east
Definition ows_struct.h:143
double south
Definition ows_struct.h:145
double north
Definition ows_struct.h:146
double west
Definition ows_struct.h:144
ows_layer_node * first
Definition ows_struct.h:205
ows_layer * layer
Definition ows_struct.h:199
struct Ows_layer_node * next
Definition ows_struct.h:200
list * srid
Definition ows_struct.h:183
buffer * name
Definition ows_struct.h:177
buffer * ns_uri
Definition ows_struct.h:193
bool retrievable
Definition ows_struct.h:181
buffer * ns_prefix
Definition ows_struct.h:192
bool writable
Definition ows_struct.h:182
buffer * abstract
Definition ows_struct.h:185
list * keywords
Definition ows_struct.h:186
buffer * title
Definition ows_struct.h:180
ows_geobbox * geobbox
Definition ows_struct.h:184
ows_version * version
Definition ows_struct.h:353
ows_request * request
Definition ows_struct.h:403
int degree_precision
Definition ows_struct.h:387
buffer * encoding
Definition ows_struct.h:375
buffer * online_resource
Definition ows_struct.h:373
int max_features
Definition ows_struct.h:390
ows_layer_list * layers
Definition ows_struct.h:402
FILE * output
Definition ows_struct.h:382
void wfs_get_capabilities(ows *o, wfs_request *wr)
static void wfs_feature_type_list(ows *o)
static void wfs_capability(ows *o)
static void wfs_get_capabilities_100(ows *o, wfs_request *wr)
static void wfs_get_capabilities_dcpt_100(const ows *o, char *req)
static void wfs_get_capabilities_110(ows *o, wfs_request *wr)
static void wfs_gml_object_type(ows *o, char *type)
static void wfs_operations_metadata(ows *o)
static void wfs_gml_object_type_list(ows *o)

Generated for tinyows by doxygen 1.10.0