1 | /***************************************
2 | $Revision: 1.19 $
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_dictionary.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 | GSList *current_attr_list;
99 | nic_handle_t *nh_ptr;
100 | int a_type;
101 | int start_object;
102 | } Obj_parse_t;
103 |
104 | #define MAX_DUMMIES 256
105 |
106 | typedef struct _Transaction {
107 | int thread_ins; /* Thread number to mark(backup) creates */
108 | int thread_upd; /* Thread number to mark(backup) updates */
109 | SQ_connection_t *sql_connection;
110 | Object_t *object; /* ptr to the object */
111 | C_Type_t class_type;
112 | long object_id; /* Object id which the transaction is carried out for */
113 | long sequence_id; /* for last and history tables */
114 | long serial_id; /* serial ID, kept for crash recovery */
115 | long transaction_id; /* ID of DBuopdate transaction */
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 'succeeded' & 'error' into single 'succeeded' bitmask */
120 | int action; /* indicates wether we are updating/deleting creating a new object */
121 | int mode; /* indicates mode of operation (standalone, dummy, update, nrtm) */
122 | int succeeded;
123 | int error;
124 | GString *error_script;
125 | GString *query;
126 | GString *K; /* object primary key */
127 | char *save; /* for saving attribute (U2 & pn:) values */
128 | rp_upd_pack_t *packptr; /* To store radix tree data */
129 | nic_handle_t *nh; /* To store NIC handle data */
130 | ca_dbSource_t *source_hdl;
131 | int socket; /* socket to report to DBupdate */
132 | } Transaction_t;
133 |
134 | /*++++++++++++++++++++++++++++++++++++++++++++*/
135 |
136 | /* Definitions for "refer" (domain referral mechanism) */
137 | #define S_RIPE "RIPE"
138 | #define S_INTERNIC "InterNIC"
139 | #define S_SIMPLE "SIMPLE"
140 | #define S_CLIENTADDERSS "CLIENTADDRESS"
141 |
142 |
143 | typedef enum {
144 | RF_RIPE=1,
145 | RF_INTERNIC,
146 | RF_SIMPLE,
147 | RF_CLIENTADDRESS
148 | } refer_t;
149 |
150 | #define RF_DEF_PORT 43
151 |
152 |
153 | struct _nrtm {
154 | char *server; /* the hostname of the server */
155 | int port;
156 | int version;
157 | long current_serial;
158 | Transaction_t *tr;
159 | char object_name[STR_XXL];
160 | int op;
161 | };
162 |
163 | typedef struct _Log_t {
164 | int num_ok;
165 | int num_failed;
166 | /* FILE *logfile; */
167 | } Log_t;
168 |
169 | typedef struct UD_stream_t_ {
170 | FILE * stream;
171 | sk_conn_st condat;
172 | int num_skip;
173 | int load_pass;
174 | int ud_mode;
175 | struct _nrtm *nrtm;
176 | SQ_connection_t *db_connection;
177 | ca_dbSource_t *source_hdl; /* source we are mirroring */
178 | Log_t log;
179 | char *error_script;
180 | } UD_stream_t;
181 |
182 |
183 |
184 |
185 | /*++++++++++++++++++ Function Prototypes +++++++++++++++++++++*/
186 |
187 | int get_NRTM_fd(struct _nrtm *nrtm, int upto_last, char *source);
188 |
189 | int UD_process_stream(UD_stream_t *ud_stream);
190 |
191 | int object_process(Transaction_t *tr);
192 |
193 | int UD_commit(Transaction_t *tr);
194 | int UD_commit_I(Transaction_t *tr);
195 | int UD_commit_II(Transaction_t *tr);
196 |
197 |
198 | int UD_rollback(Transaction_t *tr);
199 |
200 | int UD_delete(Transaction_t *tr);
201 |
202 | int UD_update_rx(Transaction_t *tr, rx_oper_mt mode);
203 |
204 | int UD_ack(Transaction_t* tr);
205 | int UD_check_ref(Transaction_t *tr);
206 |
207 | int isdummy(Transaction_t *tr);
208 | long get_object_id(Transaction_t *tr);
209 | long get_sequence_id(Transaction_t *tr);
210 | char *get_field_str(SQ_connection_t *sql_connection, char *field,
211 | char *ref_tbl_name, char *ref_name,
212 | char * attr_value, char *condition);
213 | char *get_qresult_str(SQ_connection_t *sql_connection, char *query);
214 |
215 |
216 | void attribute_free(void *data, void *ptr);
217 |
218 | Attribute_t *attribute_upd(Attribute_t *attr, int newtype, char *newvalue);
219 |
220 | Attribute_t *attribute_new1(int type, const char *value);
221 |
222 | Attribute_t *attribute_new(const char *line);
223 |
224 | void object_free(Object_t *obj);
225 |
226 | Object_t *object_new(const char *line);
227 |
228 | void transaction_free(Transaction_t *tr);
229 |
230 | Transaction_t *transaction_new(SQ_connection_t *sql_connection, C_Type_t class_type);
231 |
232 | void get_rx_data(void *element_data, void *tr_ptr);
233 |
234 | void ud_parse_init(Obj_parse_t *parse);
235 | void ud_parse_free(Obj_parse_t *parse);
236 | Object_t *UD_parse_object(SQ_connection_t *sql_connection, Obj_parse_t *parse, char *line_buff);
237 |
238 |
239 |
240 | #if 0
241 | void set_rx_orig(rx_bin_data_t *rx_data, char *origin);
242 | void set_rx_pref4(char *avalue, rx_bin_data_t *rx_data,
243 | unsigned *prefix, unsigned *prefix_length);
244 | void set_rx_pref6(char *avalue, rx_bin_data_t *rx_data,
245 | ip_v6word_t *high, ip_v6word_t *low, unsigned *prefix_length);
246 | void set_rx_rang(char *avalue, rx_inum_data_t *rx_data,
247 | unsigned *begin_in, unsigned *end_in);
248 | int update_rx_inum(rx_oper_mt mode, rx_regid_t reg_id, rx_inum_data_t *rx_data, long in_id);
249 | int update_rx_bin(rx_oper_mt mode, rx_regid_t reg_id, rx_bin_data_t *rx_data, long rt_id);
250 | int update_rx_dom(rx_oper_mt mode, rx_regid_t reg_id, rx_dom_data_t *rx_data, long dn_id);
251 | #endif
252 |
253 | char *convert_rf(char *avalue, int *type, int *port);
254 | int convert_as_range(const char *as_range, int *begin, int *end);
255 | time_t convert_time(char *asc_time);
256 |
257 | int UD_lock_serial(Transaction_t *tr);
258 | int UD_unlock_serial(Transaction_t *tr);
259 | long UD_create_serial(Transaction_t *tr);
260 | int UD_comrol_serial(Transaction_t *tr, int commit);
261 |
262 | #define UD_commit_serial(tr) UD_comrol_serial(tr, 1)
263 | #define UD_rollback_serial(tr) UD_comrol_serial(tr, 0)
264 | #endif /* _UD_INT_H */
265 |
266 |
267 |
268 |