1/* Copyright 2009, UCAR/Unidata and OPeNDAP, Inc.
2   See the COPYRIGHT file for more information. */
3
4#include "config.h"
5#include "ocinternal.h"
6#include "ocdebug.h"
7
8#define LBRACKET '['
9#define RBRACKET ']'
10
11
12
13/*
14Client parameters are assumed to be
15one or more instances of bracketed pairs:
16e.g "[...][...]...".
17The bracket content in turn is assumed to be a
18comma separated list of <name>=<value> pairs.
19e.g. x=y,z=,a=b.
20If the same parameter is specifed more than once,
21then the first occurrence is used; this is so that
22is possible to forcibly override user specified
23parameters by prefixing.
24IMPORTANT: client parameter string is assumed to
25have blanks compress out.
26*/
27
28int
29ocparamdecode(OCstatestate)
30{
31    int i;
32    i = ocuridecodeparams(state->uri);
33    return i?OC_NOERR:OC_EBADURL;
34}
35
36
37const char*
38ocparamlookup(OCstatestate, const char* key)
39{
40    const char* value = NULL;
41    if(state == NULL || key == NULL || state->uri == NULL) return NULL;
42    if(!ocurilookup(state->uri,key,&value))
43 value = NULL;
44    return value;
45}
46
47int
48ocparamset(OCstatestate, const char* params)
49{
50    int i;
51    i = ocurisetparams(state->uri,params);
52    return i?OC_NOERR:OC_EBADURL;
53}
54
55#ifdef OCIGNORE
56void
57ocparamfree(OClistparams)
58{
59    int i;
60    if(params == NULL) return;
61    for(i=0;i<oclistlength(params);i++) {
62 char* s = (char*)oclistget(params,i);
63 if(s != NULL) free((void*)s);
64    }
65    oclistfree(params);
66}
67
68/*
69Delete the entry.
70return value = 1 => found and deleted;
71               0 => param not found
72*/
73int
74ocparamdelete(OClistparams, const char* clientparam)
75{
76    int i,found = 0;
77    if(params == NULL || clientparam == NULL) return 0;
78    for(i=0;i<oclistlength(params);i+=2) {
79 char* name = (char*)oclistget(params,i);
80 if(strcmp(clientparam,name)==0) {found=1; break;}
81    }
82    if(found) {
83 oclistremove(params,i+1); /* remove value */
84 oclistremove(params,i); /* remove name */
85    }
86    return found;
87}
88
89
90/*
91Insert new client param (name,value);
92return value = 1 => not already defined
93               0 => param already defined (no change)
94*/
95int
96ocparaminsert(OClistparams, const char* clientparam, const char* value)
97{
98    int i;
99    if(params == NULL || clientparam == NULL) return 0;
100    for(i=0;i<oclistlength(params);i+=2) {
101 char* name = (char*)oclistget(params,i);
102 if(strcmp(clientparam,name)==0) return 0;
103    }
104    /* not found, append */
105    oclistpush(params,(ocelem)nulldup(clientparam));
106    oclistpush(params,(ocelem)nulldup(value));
107    return 1;
108}
109
110
111/*
112Replace new client param (name,value);
113return value = 1 => replacement performed
114               0 => insertion performed
115*/
116int
117ocparamreplace(OClistparams, const char* clientparam, const char* value)
118{
119    int i;
120    if(params == NULL || clientparam == NULL) return 0;
121    for(i=0;i<oclistlength(params);i+=2) {
122 char* name = (char*)oclistget(params,i);
123 if(strcmp(clientparam,name)==0) {
124     oclistinsert(params,i+1,(ocelem)nulldup(value));
125     return 1;
126 }
127    }
128    ocparaminsert(params,clientparam,value);
129    return 0;
130}
131#endif


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