1/* Copyright 2009, UCAR/Unidata and OPeNDAP, Inc.
2   See the COPYRIGHT file for more information. */
3
4#ifndef OCURI_H
5#define OCURI_H
6
7/*! This is an open structure meaning
8 it is ok to directly access its fields*/
9typedef struct OCURI {
10    char* uri;        /* as passed buy the caller */
11    char* params;     /* all params */
12    char** paramlist;    /*!<null terminated list */
13    char* constraint; /*!< projection+selection */
14    char* projection; /*!< without leading '?'*/
15    char* selection;  /*!< with leading '&'*/
16    char* strings;    /* first char of strings is always '\0' */
17    /* Following all point into the strings field */
18    char* protocol;
19    char* userpwd; /* from user:password@ */
20    char* host;       /*!< host*/
21    char* port;       /*!< host */
22    char* file;       /*!< file */
23OCURI;
24
25extern int ocuriparse(const char* sOCURI** ocuri);
26extern void ocurifree(OCURIocuri);
27
28/* Replace the constraints */
29extern void ocurisetconstraints(OCURI*,const char* constraints);
30
31/* Construct a complete OC URI; caller frees returned string */
32
33/* Define flags to control what is included */
34#define OCURICONSTRAINTS  1
35#define OCURIUSERPWD     2
36#define OCURIPREFIXPARAMS    4
37#define OCURISUFFIXPARAMS  8
38#define OCURIPARAMS    OCURIPREFIXPARAMS
39#define OCURIENCODE 16 /* If output should be encoded */
40#define OCURISTD    (OCURICONSTRAINTS|OCURIUSERPWD)
41#define OCURIALL    (0xFFFF)
42
43extern char* ocuribuild(OCURI*,const char* prefix, const char* suffix, int flags);
44
45
46/* Param Management */
47extern int ocuridecodeparams(OCURIocuri);
48extern int ocurisetparams(OCURIocuri,const char*);
49
50/*! 0 result => entry not found; 1=>found; result holds value (may be null).
51    In any case, the result is imutable and should not be free'd.
52*/
53extern int ocurilookup(OCURI*, const char* param, const char** result);
54
55extern char* ocuriencode(char* s, char* allowable);
56extern char* ocuridecode(char* s);
57extern char* ocuridecodeonly(char* s, char*);
58
59#endif /*OCURI_H*/


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed