modules/ud/ud_int.h
/* [<][>][^][v][top][bottom][index][help] */
FUNCTIONS
This source file includes following functions.
- UD_commit_serial
- UD_rollback_serial
1 /***************************************
2 $Revision: 1.16 $
3
4 Semi-internal header file for UD module
5
6 Status: NOT REVUED, NOT TESTED
7
8 Author(s): Andrei Robachevsky
9
10 ******************/ /******************
11 Modification History:
12 andrei (17/01/2000) Created.
13 ******************/ /******************
14 Copyright (c) 2000 RIPE NCC
15
16 All Rights Reserved
17
18 Permission to use, copy, modify, and distribute this software and its
19 documentation for any purpose and without fee is hereby granted,
20 provided that the above copyright notice appear in all copies and that
21 both that copyright notice and this permission notice appear in
22 supporting documentation, and that the name of the author not be
23 used in advertising or publicity pertaining to distribution of the
24 software without specific, written prior permission.
25
26 THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
27 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
28 AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
29 DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
30 AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
31 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
32 ***************************************/
33 #ifndef _UD_INT_H
34 #define _UD_INT_H
35
36 #include <stdio.h>
37 #include <strings.h>
38 #include <glib.h>
39 #include <stdlib.h>
40 #include <ctype.h>
41 #include <unistd.h>
42
43 #include "defs.h"
44 #include "mysql_driver.h"
45 #include "iproutines.h"
46 #include "erroutines.h"
47 #include "rp.h"
48 #include "nh.h"
49 #include "sk.h"
50
51 #include "ca_configFns.h"
52 #include "ca_dictSyms.h"
53 #include "ca_macros.h"
54 #include "ca_srcAttribs.h"
55
56
57
58
59 #include "globaldefs.h"
60 /* #include "isnic.h" */
61 #include "bitmask.h"
62 #include "which_keytypes.h"
63
64
65 /*+ String sizes +*/
66 #define STR_S 63
67 #define STR_M 255
68 #define STR_L 1023
69 #define STR_XL 4095
70 #define STR_XXL 16383
71 #define STR_XXXL 65535
72
73
74 #define MAX_NIC_HDL 30
75
76
77 /* class type for dummy objects */
78 #define DUMMY_TYPE 100
79
80
81 typedef struct _Attribute_t {
82 A_Type_t type;
83 char *value;
84 } Attribute_t;
85
86 typedef struct _Object_t {
87 C_Type_t type;
88 long id;
89 GSList *attributes;
90 GString *object;
91 } Object_t;
92
93
94 typedef struct _obj_parse_t {
95 Object_t *obj;
96 char *object_name;
97 GSList *class_attr_list;
98 nic_handle_t *nh_ptr;
99 int a_type;
100 int start_object;
101 } Obj_parse_t;
102
103 #define MAX_DUMMIES 256
104
105 typedef struct _Transaction {
106 int thread_ins; /* Thread number to mark(backup) creates */
107 int thread_upd; /* Thread number to mark(backup) updates */
108 SQ_connection_t *sql_connection;
109 Object_t *object; /* ptr to the object */
110 C_Type_t class_type;
111 long object_id; /* Object id which the transaction is carried out for */
112 long sequence_id; /* for last and history tables */
113 long serial_id; /* serial ID, kept for crash recovery */
114 long transaction_id; /* ID of DBuopdate transaction */
115 /* int dummy; */ /* Permission to create dummies for PE, RO objects (initial population) */
116 int ndummy; /* number of attempts to create dummy */
117 long dummy_id[MAX_DUMMIES]; /* to store object_id's of dummies */
118 int load_pass; /* No. of the pass for initial loading , 0 otherwise */
119 /* XXX later we should merge 'standalone' & 'dummy' into single 'mode' bitmask */
120 /* int standalone; *//* 0 if server */
121 /* XXX later we should merge 'succeeded' & 'error' into single 'succeeded' bitmask */
122 int action; /* indicates wether we are updating/deleting creating a new object */
123 int mode;
124 int succeeded;
125 int error;
126 GString *error_script;
127 GString *query;
128 GString *K;
129 char *save; /* for saving attribute (U2 & pn:) values */
130 rp_upd_pack_t *packptr; /* To store radix tree data */
131 nic_handle_t *nh; /* To store NIC handle data */
132 ca_dbSource_t *source_hdl;
133 int socket; /* socket to report to DBupdate */
134 } Transaction_t;
135
136 /*++++++++++++++++++++++++++++++++++++++++++++*/
137
138 /* Definitions for "refer" (domain referral mechanism) */
139 #define S_RIPE "RIPE"
140 #define S_INTERNIC "InterNIC"
141 #define S_SIMPLE "SIMPLE"
142 #define S_CLIENTADDERSS "CLIENTADDRESS"
143
144
145 typedef enum {
146 RF_RIPE=1,
147 RF_INTERNIC,
148 RF_SIMPLE,
149 RF_CLIENTADDRESS
150 } refer_t;
151
152 #define RF_DEF_PORT 43
153
154
155 struct _nrtm {
156 char *server; /* the hostname of the server */
157 int port;
158 int version;
159 long current_serial;
160 Transaction_t *tr;
161 char object_name[STR_XXL];
162 int op;
163 };
164
165 typedef struct _Log_t {
166 int num_ok;
167 int num_failed;
168 /* FILE *logfile; */
169 } Log_t;
170
171 typedef struct UD_stream_t_ {
172 FILE * stream;
173 sk_conn_st condat;
174 int num_skip;
175 int load_pass;
176 int ud_mode;
177 struct _nrtm *nrtm;
178 SQ_connection_t *db_connection;
179 ca_dbSource_t *source_hdl; /* source we are mirroring */
180 Log_t log;
181 char *error_script;
182 } UD_stream_t;
183
184
185
186
187 /*++++++++++++++++++ Function Prototypes +++++++++++++++++++++*/
188
189 int get_NRTM_fd(struct _nrtm *nrtm, int upto_last, char *source);
190
191 int UD_process_stream(UD_stream_t *ud_stream);
192
193 int object_process(Transaction_t *tr);
194
195 int UD_commit(Transaction_t *tr);
196 int UD_commit_I(Transaction_t *tr);
197 int UD_commit_II(Transaction_t *tr);
198
199
200 int UD_rollback(Transaction_t *tr);
201
202 int UD_delete(Transaction_t *tr);
203
204 int UD_update_rx(Transaction_t *tr, rx_oper_mt mode);
205
206 int UD_ack(Transaction_t* tr);
207 int UD_check_ref(Transaction_t *tr);
208
209 int isdummy(Transaction_t *tr);
210 long get_object_id(Transaction_t *tr);
211 long get_sequence_id(Transaction_t *tr);
212 char *get_field_str(SQ_connection_t *sql_connection, char *field,
213 char *ref_tbl_name, char *ref_name,
214 char * attr_value, char *condition);
215 char *get_qresult_str(SQ_connection_t *sql_connection, char *query);
216
217
218 void attribute_free(void *data, void *ptr);
219
220 Attribute_t *attribute_upd(Attribute_t *attr, int newtype, char *newvalue);
221
222 Attribute_t *attribute_new1(int type, const char *value);
223
224 Attribute_t *attribute_new(const char *line);
225
226 void object_free(Object_t *obj);
227
228 Object_t *object_new(const char *line);
229
230 void transaction_free(Transaction_t *tr);
231
232 Transaction_t *transaction_new(SQ_connection_t *sql_connection, C_Type_t class_type);
233
234 void get_rx_data(void *element_data, void *tr_ptr);
235
236 void ud_parse_init(Obj_parse_t *parse);
237 void ud_parse_free(Obj_parse_t *parse);
238 Object_t *UD_parse_object(SQ_connection_t *sql_connection, Obj_parse_t *parse, char *line_buff);
239
240
241
242 #if 0
243 void set_rx_orig(rx_bin_data_t *rx_data, char *origin);
244 void set_rx_pref4(char *avalue, rx_bin_data_t *rx_data,
245 unsigned *prefix, unsigned *prefix_length);
246 void set_rx_pref6(char *avalue, rx_bin_data_t *rx_data,
247 ip_v6word_t *high, ip_v6word_t *low, unsigned *prefix_length);
248 void set_rx_rang(char *avalue, rx_inum_data_t *rx_data,
249 unsigned *begin_in, unsigned *end_in);
250 int update_rx_inum(rx_oper_mt mode, rx_regid_t reg_id, rx_inum_data_t *rx_data, long in_id);
251 int update_rx_bin(rx_oper_mt mode, rx_regid_t reg_id, rx_bin_data_t *rx_data, long rt_id);
252 int update_rx_dom(rx_oper_mt mode, rx_regid_t reg_id, rx_dom_data_t *rx_data, long dn_id);
253 #endif
254
255 char *convert_rf(char *avalue, int *type, int *port);
256 int convert_as_range(const char *as_range, int *begin, int *end);
257 time_t convert_time(char *asc_time);
258
259 int UD_lock_serial(Transaction_t *tr);
260 int UD_unlock_serial(Transaction_t *tr);
261 long UD_create_serial(Transaction_t *tr);
262 int UD_comrol_serial(Transaction_t *tr, int commit);
263
264 #define UD_commit_serial(tr) UD_comrol_serial(tr, 1)
/* [<][>][^][v][top][bottom][index][help] */
265 #define UD_rollback_serial(tr) UD_comrol_serial(tr, 0)
/* [<][>][^][v][top][bottom][index][help] */
266 #endif /* _UD_INT_H */
267
268
269
270