include/ud_int.h

/* [<][>]
[^][v][top][bottom][index][help] */

FUNCTIONS

This source file includes following functions.
  1. UD_commit_serial
  2. UD_rollback_serial

   1 /***************************************
   2   $Revision: 1.22 $
   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 #include "memwrap.h"
  51 
  52 #include "ca_configFns.h"
  53 #include "ca_dictionary.h"
  54 #include "ca_macros.h"
  55 #include "ca_srcAttribs.h"
  56 
  57 
  58 
  59 
  60 #include "globaldefs.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 
  78 typedef struct _Attribute_t { 
  79   A_Type_t type;
  80   char *value;
  81 } Attribute_t;
  82 
  83 typedef struct _Object_t {
  84   C_Type_t type;
  85   long id;
  86   GSList *attributes;
  87   GString *object;
  88 } Object_t;
  89 
  90 
  91 typedef struct _obj_parse_t {
  92         Object_t *obj;
  93         char *object_name;
  94         GSList *new_attr_list;
  95         Attribute_t *current_attr;
  96         SQ_connection_t *sql_connection;
  97         nic_handle_t *nh_ptr;
  98         char *nic;
  99         int garbage;
 100 } Obj_parse_t;
 101 
 102 #define MAX_DUMMIES 256
 103 
 104 typedef struct _Transaction {
 105   int thread_ins;      /* Thread number to mark(backup) creates */
 106   int thread_upd;      /* Thread number to mark(backup) updates */
 107   SQ_connection_t *sql_connection;
 108   Object_t *object;    /* ptr to the object */
 109   C_Type_t class_type;
 110   long object_id;      /* Object id which the transaction is carried out for */
 111   long sequence_id;    /* for last and history tables */
 112   long serial_id;      /* serial ID, kept for crash recovery */
 113   long transaction_id; /* ID of DBuopdate transaction */
 114   int ndummy; /* number of attempts to create dummy */
 115   long dummy_id[MAX_DUMMIES]; /* to store object_id's of dummies */
 116   int load_pass; /* No. of the pass for initial loading , 0 otherwise */
 117   /* XXX later we should merge 'succeeded' & 'error' into single 'succeeded' bitmask */
 118   int action; /* indicates wether we are updating/deleting creating a new object */
 119   int mode; /* indicates mode of operation (standalone, dummy, update, nrtm) */
 120   int succeeded;
 121   int error;
 122   GString *error_script;
 123   GString *query;
 124   GString *K; /* object primary key */
 125   char *save; /* for saving attribute (U2 & pn:) values */ 
 126   rp_upd_pack_t *packptr; /* To store radix tree data */
 127   nic_handle_t *nh; /* To store NIC handle data */
 128   ca_dbSource_t *source_hdl;
 129   int socket; /* socket to report to DBupdate */
 130 } Transaction_t;
 131 
 132 /*++++++++++++++++++++++++++++++++++++++++++++*/
 133 
 134 
 135 struct _nrtm {
 136  char *server; /* the hostname of the server */
 137  int port;
 138  int version;
 139  long current_serial;
 140  Transaction_t *tr;
 141  char object_name[STR_XXL];
 142  int op;
 143 };
 144        
 145 typedef struct _Log_t {
 146  int num_ok;
 147  int num_failed;
 148 /* FILE *logfile; */
 149 } Log_t;
 150 
 151 typedef struct UD_stream_t_ {
 152  FILE * stream;
 153  sk_conn_st condat;
 154  int num_skip;
 155  int load_pass;
 156  int ud_mode;
 157  struct _nrtm *nrtm;
 158  SQ_connection_t *db_connection;
 159  ca_dbSource_t *source_hdl; /* source we are mirroring */
 160  Log_t log; 
 161  char *error_script;
 162 } UD_stream_t;
 163          
 164 
 165 
 166 
 167 /*++++++++++++++++++ Function Prototypes +++++++++++++++++++++*/
 168 
 169 int get_NRTM_fd(struct _nrtm *nrtm, int upto_last, char *source);
 170 
 171 int UD_process_stream(UD_stream_t *ud_stream);
 172 
 173 int object_process(Transaction_t *tr);
 174 
 175 int UD_commit(Transaction_t *tr);
 176 int UD_commit_I(Transaction_t *tr);
 177 int UD_commit_II(Transaction_t *tr);
 178 
 179 
 180 int UD_rollback(Transaction_t *tr);
 181 
 182 int UD_delete(Transaction_t *tr);
 183 
 184 int UD_update_rx(Transaction_t *tr, rx_oper_mt mode);
 185 
 186 int UD_ack(Transaction_t* tr);
 187 int UD_check_ref(Transaction_t *tr);
 188 
 189 int isdummy(Transaction_t *tr);
 190 long get_object_id(Transaction_t *tr);
 191 long get_sequence_id(Transaction_t *tr);
 192 char *get_field_str(SQ_connection_t *sql_connection, char *field,
 193                  char *ref_tbl_name, char *ref_name,
 194                  char * attr_value, char *condition);
 195 char *get_qresult_str(SQ_connection_t *sql_connection, char *query);                 
 196 
 197 
 198 void attribute_free(void *data, void *ptr);
 199 
 200 Attribute_t *attribute_upd(Attribute_t *attr, int newtype, char *newvalue);
 201 
 202 Attribute_t *attribute_new1(int type, const char *value);
 203 
 204 Attribute_t *attribute_new(const char *line);
 205 
 206 void object_free(Object_t *obj);
 207 
 208 Object_t *object_new(const char *line);
 209 
 210 void transaction_free(Transaction_t *tr);
 211 
 212 Transaction_t *transaction_new(SQ_connection_t *sql_connection, C_Type_t class_type);
 213 
 214 void get_rx_data(void *element_data, void *tr_ptr);
 215 
 216 void ud_each_primary_key_select(void *element_data, void *result_ptr);
 217 
 218 
 219 #if 0
 220 void set_rx_orig(rx_bin_data_t *rx_data, char *origin);
 221 void set_rx_pref4(char *avalue, rx_bin_data_t *rx_data, 
 222                   unsigned *prefix, unsigned *prefix_length);
 223 void set_rx_pref6(char *avalue, rx_bin_data_t *rx_data, 
 224                   ip_v6word_t *high, ip_v6word_t *low, unsigned *prefix_length);
 225 void set_rx_rang(char *avalue, rx_inum_data_t *rx_data, 
 226                  unsigned *begin_in, unsigned *end_in);
 227 int update_rx_inum(rx_oper_mt mode, rx_regid_t reg_id, rx_inum_data_t *rx_data, long in_id);
 228 int update_rx_bin(rx_oper_mt mode, rx_regid_t reg_id, rx_bin_data_t *rx_data, long rt_id);
 229 int update_rx_dom(rx_oper_mt mode, rx_regid_t reg_id, rx_dom_data_t *rx_data, long dn_id);
 230 #endif
 231 
 232 char *convert_rf(char *avalue, int *type, int *port);
 233 int convert_as_range(const char *as_range, int *begin, int *end);
 234 time_t convert_time(char *asc_time);
 235 
 236 int UD_lock_serial(Transaction_t *tr);
 237 int UD_unlock_serial(Transaction_t *tr);
 238 long UD_create_serial(Transaction_t *tr);
 239 int UD_comrol_serial(Transaction_t *tr, int commit);
 240 
 241 #define UD_commit_serial(tr) UD_comrol_serial(tr, 1)
     /* [<][>][^][v][top][bottom][index][help] */
 242 #define UD_rollback_serial(tr) UD_comrol_serial(tr, 0)
     /* [<][>][^][v][top][bottom][index][help] */
 243 #endif /* _UD_INT_H */
 244 
 245 
 246 
 247 

/* [<][>][^][v][top][bottom][index][help] */