modules/df/defs.c
/* [<][>][^][v][top][bottom][index][help] */
FUNCTIONS
This source file includes following functions.
- DF_get_filter_names
- DF_get_class_names
- DF_get_class_aliases
- DF_get_class_index
- DF_get_class_name
- DF_get_class_code
- DF_get_class_dbase_code
- DF_get_class_sql_table
- DF_get_attribute_aliases
- DF_get_attribute_name
- DF_get_attribute_code
- DF_get_attribute_names
- DF_get_attribute_index
- DF_get_class_template
- DF_get_class_template_v
- DF_get_server_queries
- DF_get_update_query
- DF_get_update_query_type
- DF_get_insert_query
- DF_get_insert_query_type
- DF_get_select_query
- DF_get_select_query_type
- DF_get_dummy_query
- DF_get_dummy_query_type
- DF_get_attribute_desc
- DF_get_attribute_frmt
- DF_attributes_to_string
- DF_attribute_code2type
- DF_attribute_name2type
- DF_class_code2type
- DF_class_name2type
- DF_attrcode_has_radix_lookup
1 /***************************************
2 $Revision: 1.16 $
3
4 Definitions module (df)
5
6 Status: NOT REVUED, NOT TESTED
7
8 ******************/ /******************
9 Filename : defs.c
10 Authors : ottrey@ripe.net
11 marek@ripe.net
12 ******************/ /******************
13 Copyright (c) 1999 RIPE NCC
14
15 All Rights Reserved
16
17 Permission to use, copy, modify, and distribute this software and its
18 documentation for any purpose and without fee is hereby granted,
19 provided that the above copyright notice appear in all copies and that
20 both that copyright notice and this permission notice appear in
21 supporting documentation, and that the name of the author not be
22 used in advertising or publicity pertaining to distribution of the
23 software without specific, written prior permission.
24
25 THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
26 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
27 AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
28 DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
29 AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
30 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
31 ***************************************/
32 #include <stdio.h>
33 #include <stdlib.h>
34 #include <stdarg.h>
35 #include <strings.h>
36 #include <glib.h>
37
38 /*+ String sizes +*/
39 #define STR_S 63
40 #define STR_M 255
41 #define STR_L 1023
42 #define STR_XL 4095
43 #define STR_XXL 16383
44
45 #define DEFS_IMPL
46 #include "defs.h"
47 #include "memwrap.h"
48
49 #include "DF_class_names.def"
50 #include "DF_class_codes.def"
51 #include "DF_class_aliases.def"
52 #include "DF_class_aliases_map.def"
53 #include "DF_class_dbase_code_map.def"
54 #include "DF_class_templates.def"
55 #include "DF_class_templates_v.def"
56
57 #include "DF_attribute_names.def"
58 #include "DF_attribute_codes.def"
59 #include "DF_attribute_aliases.def"
60 #include "DF_attribute_aliases_map.def"
61
62 #include "UD_queries.def"
63
64
65
66 /* getsubopt requires a vector of pointers to a list of possible options
67 It's used for parsing the source list.
68 Therefore a quick
69 XXX !!!!
70 hack: hardcode it. Will be initialised from the Sources array
71 once the config module is defined
72 */
73
74 char * const Server_queries[] = {
75 "sources",
76 "version",
77 NULL
78 }; /* Server_queries */
79
80 /* XXX this also should be generated from XML... */
81 char * const Filter_names[] = {
82 "aut-num",
83 "domain",
84 "inet6num",
85 "inetnum",
86 "inet-rtr",
87 "key-cert",
88 "limerick",
89 "mntner",
90 "route",
91 "origin",
92 "as-set",
93 "route-set",
94 "members",
95 "peering-set",
96 "filter-set",
97 "rtr-set",
98 NULL
99 }; /* Filter_names */
100
101 char * const *DF_get_filter_names(void) {
/* [<][>][^][v][top][bottom][index][help] */
102 return Filter_names;
103 } /* DF_get_filter_names() */
104
105 char * const *DF_get_class_names(void) {
/* [<][>][^][v][top][bottom][index][help] */
106 return Class_names;
107 } /* DF_get_class_names() */
108
109 char * const *DF_get_class_aliases(void) {
/* [<][>][^][v][top][bottom][index][help] */
110 return Class_aliases;
111 } /* DF_get_class_aliases() */
112
113 int DF_get_class_index(int alias_index) {
/* [<][>][^][v][top][bottom][index][help] */
114 return Class_aliases_map[alias_index];
115 } /* DF_get_class_index() */
116
117 char * const DF_get_class_name(int alias_index) {
/* [<][>][^][v][top][bottom][index][help] */
118 return Class_names[Class_aliases_map[alias_index]];
119 } /* DF_get_class_name() */
120
121 char * const DF_get_class_code(C_Type_t index) {
/* [<][>][^][v][top][bottom][index][help] */
122 if( index == -1 ) {
123 return "*";
124 }
125 else {
126 return Class_codes[index];
127 }
128 } /* DF_get_class_code() */
129
130 int DF_get_class_dbase_code(int class_index) {
/* [<][>][^][v][top][bottom][index][help] */
131 return Class_dbase_code_map[class_index];
132 } /* DF_get_class_dbase_code() */
133
134 /* Main tables names for object types */
135 char * const Type2main[] = {
136 "as_block",
137 "as_set",
138 "aut_num",
139 "domain",
140 "inet_rtr",
141 "inet6num",
142 "inetnum",
143 "key_cert",
144 "limerick",
145 "mntner",
146 "person_role", /*pn*/
147 "person_role", /*ro*/
148 "route",
149 "route_set",
150 "filter_set",
151 "peering_set",
152 "rtr_set",
153 NULL
154 };
155
156 char * const DF_get_class_sql_table(C_Type_t index) {
/* [<][>][^][v][top][bottom][index][help] */
157 return Type2main[index];
158 } /* DF_get_class_sql_table() */
159
160
161
162 char * const *DF_get_attribute_aliases(void) {
/* [<][>][^][v][top][bottom][index][help] */
163 return Attribute_aliases;
164 } /* DF_get_attribute_aliases() */
165
166 const char *DF_get_attribute_name(A_Type_t index) {
/* [<][>][^][v][top][bottom][index][help] */
167 return Attribute_names[index];
168 } /* DF_get_attribute_name() */
169
170 const char *DF_get_attribute_code(A_Type_t index) {
/* [<][>][^][v][top][bottom][index][help] */
171 return Attribute_codes[index];
172 } /* DF_get_attribute_code() */
173
174 char * const *DF_get_attribute_names(void) {
/* [<][>][^][v][top][bottom][index][help] */
175 return Attribute_names;
176 } /* DF_get_attribute_names() */
177
178 int DF_get_attribute_index(int alias_index) {
/* [<][>][^][v][top][bottom][index][help] */
179 return Attribute_aliases_map[alias_index];
180 } /* DF_get_attribute_index() */
181
182 const char *DF_get_class_template(C_Type_t index) {
/* [<][>][^][v][top][bottom][index][help] */
183 return Templates[index];
184 } /* DF_get_class_template() */
185
186 const char *DF_get_class_template_v(C_Type_t index) {
/* [<][>][^][v][top][bottom][index][help] */
187 return Templates_v[index];
188 } /* DF_get_class_template_v() */
189
190 char * const *DF_get_server_queries(void) {
/* [<][>][^][v][top][bottom][index][help] */
191 return Server_queries;
192 } /* DF_get_server_queries() */
193
194 const char *DF_get_update_query(A_Type_t index){
/* [<][>][^][v][top][bottom][index][help] */
195 return Update[index].qry;
196 } /* DF_get_update_query() */
197
198 UD_qtype DF_get_update_query_type(A_Type_t index){
/* [<][>][^][v][top][bottom][index][help] */
199 return Update[index].qtype;
200 } /* DF_get_update_query_type() */
201
202 const char *DF_get_insert_query(A_Type_t index){
/* [<][>][^][v][top][bottom][index][help] */
203 return Insert[index].qry;
204 } /* DF_get_insert_query() */
205
206 UD_qtype DF_get_insert_query_type(A_Type_t index){
/* [<][>][^][v][top][bottom][index][help] */
207 return Insert[index].qtype;
208 } /* DF_get_insert_query_type() */
209
210 const char *DF_get_select_query(A_Type_t index){
/* [<][>][^][v][top][bottom][index][help] */
211 return Select[index].qry;
212 } /* DF_get_select_query() */
213
214 UD_qtype DF_get_select_query_type(A_Type_t index){
/* [<][>][^][v][top][bottom][index][help] */
215 return Select[index].qtype;
216 } /* DF_get_select_query_type() */
217
218 const char *DF_get_dummy_query(A_Type_t index){
/* [<][>][^][v][top][bottom][index][help] */
219 return Dummy[index].qry;
220 } /* DF_get_dummy_query() */
221
222 UD_qtype DF_get_dummy_query_type(A_Type_t index){
/* [<][>][^][v][top][bottom][index][help] */
223 return Dummy[index].qtype;
224 } /* DF_get_dummy_query_type() */
225
226
227
228 const char *DF_get_attribute_desc(A_Type_t index) {
/* [<][>][^][v][top][bottom][index][help] */
229 /*
230 return (char *)Attributes_details[attr_index][0];
231 */
232 return NULL;
233 } /* DF_get_attribute_desc() */
234
235 const char *DF_get_attribute_frmt(A_Type_t index) {
/* [<][>][^][v][top][bottom][index][help] */
236 /*
237 return (char *)Attributes_details[attr_index][1];
238 */
239 return NULL;
240 } /* DF_get_attribute_frmt() */
241
242 /* DF_attributes_to_string() */
243 /*++++++++++++++++++++++++++++++++++++++
244 Returns a string of all the attributes. Only there for debugging and tracing purposes.
245
246 int offset The offset (Ie short or long name).
247
248 More:
249 +html+ <PRE>
250 Authors:
251 ottrey
252
253 +html+ </PRE><DL COMPACT>
254 +html+ <DT>Online References:
255 +html+ <DD><UL>
256 +html+ </UL></DL>
257
258 ++++++++++++++++++++++++++++++++++++++*/
259 char *DF_attributes_to_string(void) {
/* [<][>][^][v][top][bottom][index][help] */
260 int i;
261 char *str;
262 char str_buffer[4096];
263 int str_len;
264
265 strcpy(str_buffer, "{\"");
266 for (i=0; Attribute_names[i] != NULL; i++) {
267 strcat(str_buffer, Attribute_names[i]);
268 strcat(str_buffer, "\", \"");
269 }
270 str_len = strlen(str_buffer);
271 str_buffer[str_len-3] = '}';
272 str_buffer[str_len-2] = '\0';
273 str_len--;
274
275 /* str = (char *)calloc(1, str_len); */
276 dieif( wr_malloc((void **)&str, str_len ) != UT_OK);
277 strcpy(str, str_buffer);
278
279 return str;
280
281 } /* DF_attributes_to_string() */
282
283 /* XXX This could be done MUCH more efficiently (with a hash) */
284 A_Type_t DF_attribute_code2type(const gchar *token) {
/* [<][>][^][v][top][bottom][index][help] */
285 A_Type_t result=-1;
286
287 int i;
288 for (i=0; Attribute_aliases[i] != NULL; i++) {
289 if (strcmp(Attribute_aliases[i], token) == 0) {
290 result = Attribute_aliases_map[i];
291 break;
292 }
293 }
294
295 return result;
296 } /* DF_attribute_code2type() */
297
298 /* XXX This could be done MUCH more efficiently (with a hash) */
299 A_Type_t DF_attribute_name2type(const gchar *token) {
/* [<][>][^][v][top][bottom][index][help] */
300 A_Type_t result=-1;
301
302 int i;
303 for (i=0; Attribute_aliases[i] != NULL; i++) {
304 if (strcmp(Attribute_aliases[i], token) == 0) {
305 result = Attribute_aliases_map[i];
306 break;
307 }
308 }
309
310 return result;
311 } /* DF_attribute_name2type() */
312
313 /* XXX This could be done MUCH more efficiently (with a hash) */
314 C_Type_t DF_class_code2type(const gchar *token) {
/* [<][>][^][v][top][bottom][index][help] */
315 C_Type_t result=-1;
316
317 int i;
318 for (i=0; Class_aliases[i] != NULL; i++) {
319 if (strcmp(Class_aliases[i], token) == 0) {
320 result = Class_aliases_map[i];
321 break;
322 }
323 }
324
325 return result;
326 } /* DF_class_code2type() */
327
328 /* XXX This could be done MUCH more efficiently (with a hash) */
329 C_Type_t DF_class_name2type(const gchar *token) {
/* [<][>][^][v][top][bottom][index][help] */
330 C_Type_t result=-1;
331
332 int i;
333 for (i=0; Class_aliases[i] != NULL; i++) {
334 if (strcmp(Class_aliases[i], token) == 0) {
335 result = Class_aliases_map[i];
336 break;
337 }
338 }
339
340 return result;
341 } /* DF_class_name2type() */
342
343
344 /* check in the queries if this attribute can trigger a radix lookup */
345 int DF_attrcode_has_radix_lookup(A_Type_t attr)
/* [<][>][^][v][top][bottom][index][help] */
346 {
347 int i;
348
349 for (i=0; Query[i].query != NULL; i++) {
350 if( Query[i].refer == R_RADIX &&
351 Query[i].attribute == attr ) {
352 return 1;
353 }
354 }
355 return 0;
356 }