1    | /***************************************
2    |   $Revision: 1.4 $
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 "rxroutines.h"
47   | 
48   | 
49   | #include "globaldefs.h"
50   | // #include "isnic.h" 
51   | #include "bitmask.h"
52   | #include "which_keytypes.h"
53   | 
54   | 
55   | /*+ String sizes +*/
56   | #define STR_S   63
57   | #define STR_M   255
58   | #define STR_L   1023
59   | #define STR_XL  4095
60   | #define STR_XXL 16383
61   | #define STR_XXXL 65535
62   | 
63   | 
64   | #define MAX_NIC_HDL  20
65   | 
66   | 
67   | /* row# of object.id in the table */
68   | #define OBJECT_ID	1
69   | 
70   | /* class type for dummy objects */
71   | #define DUMMY_TYPE	100
72   | 
73   | 
74   | typedef struct _Attribute_t { 
75   |   A_Type_t type;
76   |   char *value;
77   | } Attribute_t;
78   | 
79   | typedef struct _Object_t {
80   |   C_Type_t type;
81   |   long id;
82   |   GSList *attributes;
83   |   GString *object;
84   | } Object_t;
85   | 
86   | #define MAX_DUMMIES 16
87   | 
88   | typedef struct _Transaction {
89   |   SQ_connection_t *sql_connection;
90   |   Object_t *object; // ptr to the object
91   |   int thread_ins; // Thread number to mark(backup) creates 
92   |   int thread_upd; // Thread number to mark(backup) updates
93   |   long object_id; // Object id which the transaction is carried out for
94   |   long sequence_id; // for last and history tables
95   |   int dummy; // Permission to create dummies for PE, RO objects (initial population)
96   |   int ndummy; // number of attempts to create dummy
97   |   long dummy_id[MAX_DUMMIES]; // to store object_id's of dummies
98   |   int action; // indicates wether we are updating/deleting creating a new object
99   |   int load_pass; // No. of te pass for initial loading , 0 otherwise
100  |   int standalone; // 0 if server
101  |   C_Type_t class_type;
102  |   int succeeded;
103  |   int error;
104  |   GString *error_script;
105  |   void *save;
106  | } Transaction_t;
107  | 
108  | /*++++++++++++++++++++++++++++++++++++++++++++*/
109  | 
110  | /* Definitions for "refer" (domain referral mechanism) */
111  | #define S_RIPE "RIPE"
112  | #define S_INTERNIC "InterNIC"
113  | #define S_SIMPLE "SIMPLE"
114  | 
115  | #define RF_RIPE	1
116  | #define RF_INTERNIC 2
117  | #define RF_SIMPLE 0
118  | #define RF_DEF_PORT	43
119  | 
120  | 
121  | #define CURRENT_SERIAL_FILE "./RIPE.CURRENTSERIAL"
122  | //#define NRTM_ADD        1
123  | //#define NRTM_DEL        2
124  | #define OP_ADD	        1
125  | #define OP_DEL	        2
126  | #define OP_UPD	        3
127  | #define OP_NOOP         4
128  | 
129  | #define _NRTM_PORT	43
130  | #define _NRTM_VERSION	1
131  | #define _DB_PORT	3306
132  | #define _DB_NAME	"andrei"
133  | #define _DB_USER        "dbint"
134  | #define _DB_PSWD        "reimp"
135  | 
136  | #define IS_DUMMY_ALLOWED(a)     ((a)&0x01)
137  | #define IS_UPDATE(a)            ((a)&0x02)
138  | #define IS_STANDALONE(a)        ((a)&0x04)
139  | 
140  | struct _nrtm {
141  |  char *server;
142  |  int port;
143  |  int version;
144  |  int current_serial;
145  |  Transaction_t *tr;
146  |  char object_name[STR_M];
147  |  int op;
148  | };
149  |        
150  | typedef struct UD_stream_t_ {
151  |  FILE * stream;
152  |  int num_skip;
153  |  int load_pass;
154  | // int dummy_allowed;
155  |  int ud_mode;
156  |  struct _nrtm *nrtm;
157  |  char *db_host;
158  |  int  db_port;
159  |  char *db_name;
160  |  char *db_user;
161  |  char *db_pswd;
162  |  char *log; 
163  |  char *error_script;
164  | } UD_stream_t;
165  |          
166  | typedef struct _Log_t {
167  |  int num_ok;
168  |  int num_failed;
169  |  FILE *logfile;
170  | } Log_t;
171  | 
172  | // Stuff needed for radix trees.
173  | //Here we save attributes. br-r-r...
174  | 
175  | typedef struct rx_bin_data_t_ {
176  |   ip_prefix_t mypref;
177  |   char *origin;
178  | } rx_bin_data_t;
179  |   
180  | typedef struct rx_inum_data_t_ {
181  |   ip_range_t myrang;
182  | //  char *origin;
183  | } rx_inum_data_t;
184  |     
185  |        
186  |    
187  |                 
188  | #define TR_UPDATE	1000
189  | #define TR_INSERT	2000
190  | #define TR_CREATE	TR_INSERT
191  | #define TR_DELETE       3000
192  | 
193  | /* res_type for mysql_info */
194  | #define SQL_RECORDS 0
195  | #define SQL_MATCHES 0 // for UPDATE queries (checking for duplicates)
196  | #define SQL_DUPLICATES 1
197  | #define SQL_WARNINGS 2
198  | 
199  | 
200  | /*++++++++++++++++++ Function Prototypes +++++++++++++++++++++*/
201  | 
202  | FILE *get_NRTM_stream(struct _nrtm *nrtm, int upto_last);
203  | 
204  | int UD_process_stream(UD_stream_t *ud_stream);
205  | 
206  | int object_process(Transaction_t *tr);
207  | 
208  | int commit(Transaction_t *tr);
209  | 
210  | int rollback(Transaction_t *tr);
211  | 
212  | int delete(Transaction_t *tr);
213  | 
214  | 
215  | long get_object_id(Transaction_t *tr);
216  | long get_sequence_id(Transaction_t *tr);
217  | char *get_field_str(Transaction_t *tr, char *field,
218  |                  char *ref_tbl_name, char *ref_name,
219  |                  char * attr_value, char *condition);
220  | 
221  | 
222  | void attribute_free(void *data, void *ptr);
223  | 
224  | Attribute_t *attribute_new1(int type, const char *value);
225  | 
226  | Attribute_t *attribute_new(const char *line);
227  | 
228  | void object_free(Object_t *obj);
229  | 
230  | Object_t *object_new(const char *line);
231  | 
232  | void transaction_free(Transaction_t *tr);
233  | 
234  | Transaction_t *transaction_new(SQ_connection_t *sql_connection, C_Type_t class_type);
235  | 
236  | void save_rx_pref(rx_bin_data_t *rx_data, unsigned int prefix, unsigned int prefix_length);
237  | void save_rx_orig(rx_bin_data_t *rx_data, char *origin);
238  | void save_rx_rang(rx_inum_data_t *rx_data, unsigned int begin_in, unsigned int end_in);
239  | int update_rx_inum(rx_oper_mt mode, rx_tree_t *mytree, rx_inum_data_t *rx_data, long in_id);
240  | int update_rx_bin(rx_oper_mt mode, rx_tree_t *mytree, rx_bin_data_t *rx_data, long rt_id);
241  | 
242  | 
243  | er_ret_t expand_rt(char *avalue, unsigned int *prefix, unsigned int *prefix_length);
244  | er_ret_t convert_if(char *avalue, unsigned int *address);
245  | er_ret_t convert_in(char *rangstr, unsigned int *begin_in, unsigned int *end_in);
246  | char *convert_rf(char *avalue, int *type, int *port);
247  | int convert_as_range(const char *as_range, int *begin, int *end);
248  | time_t convert_time(char *asc_time);
249  | 
250  | 
251  | 
252  | 
253  | #endif /* _UD_INT_H */
254  |