? ../ircu2.10.06/patch.db36 ? ../ircu2.10.06/patch.db37 ? ../ircu2.10.06/patch.db38 ? ../ircu2.10.06/patch.db39 ? ../ircu2.10.06/patch.db40 ? ../ircu2.10.06/patch.db41 ? ../ircu2.10.06/patch.db42 ? ../ircu2.10.06/patch.dbh15 ? ../ircu2.10.06/patch.db43 ? ../ircu2.10.06/patch.db44 Index: ../ircu2.10.06/include/s_bdd.h =================================================================== RCS file: /cvsroot/ircd/include/s_bdd.h,v retrieving revision 1.4 retrieving revision 1.5 diff -c -r1.4 -r1.5 *** ../ircu2.10.06/include/s_bdd.h 1999/10/26 19:59:58 1.4 --- ../ircu2.10.06/include/s_bdd.h 1999/10/26 22:37:41 1.5 *************** *** 34,41 **** /* DB_HASH_SIZE ha de ser 2^n */ #define DBH_HASH_SIZE 256 #define DBH_MAX_TABLA 256 - #define DBH_PRIMERA_TABLA 'A' - #define DBH_ULTIMA_TABLA 'Z' #define ESNET_BDD 'a' #define ESNET_BDD_END 'z' #define ESNET_NICKDB 'n' --- 34,39 ---- *************** *** 80,86 **** extern int tabla_residente[DBH_MAX_TABLA]; extern unsigned long tabla_cuantos[DBH_MAX_TABLA]; extern struct dbh_reg *tabla_datos[DBH_MAX_TABLA][DBH_HASH_SIZE]; - extern unsigned long tabla_version[DBH_MAX_TABLA]; extern unsigned long tabla_serie[DBH_MAX_TABLA]; extern void tea(unsigned long v[], unsigned long k[], unsigned long x[]); --- 78,83 ---- Index: ../ircu2.10.06/ircd/ircd.c =================================================================== RCS file: /cvsroot/ircd/ircd/ircd.c,v retrieving revision 1.10 retrieving revision 1.11 diff -c -r1.10 -r1.11 *** ../ircu2.10.06/ircd/ircd.c 1999/10/15 08:24:25 1.10 --- ../ircu2.10.06/ircd/ircd.c 1999/10/26 22:37:41 1.11 *************** *** 942,950 **** syslog(LOG_NOTICE, "Server Ready"); #endif #if defined(DB_HISPANO) || defined(DB_ESNET) - dbh_inicializa(); - #endif - #ifdef DB_ESNET initdb(); #endif --- 942,947 ---- Index: ../ircu2.10.06/ircd/opercmds.c =================================================================== RCS file: /cvsroot/ircd/ircd/opercmds.c,v retrieving revision 1.9 retrieving revision 1.10 diff -c -r1.9 -r1.10 *** ../ircu2.10.06/ircd/opercmds.c 1999/10/21 22:44:42 1.9 --- ../ircu2.10.06/ircd/opercmds.c 1999/10/26 22:37:41 1.10 *************** *** 652,671 **** #if defined(DB_HISPANO) || defined(DB_ESNET) case 'B': case 'b': - #ifdef DB_HISPANO - for (i = DBH_PRIMERA_TABLA; i <= DBH_ULTIMA_TABLA; i++) - { - if (tabla_serie[i]) - if (tabla_residente[i]) - sendto_one(sptr, ":%s %d %s %c Tabla '%c' :V=%lu S=%lu R=%lu", - me.name, RPL_STATSDEBUG, parv[0], stat, - i, tabla_version[i], tabla_serie[i], tabla_cuantos[i]); - else - sendto_one(sptr, ":%s %d %s %c Tabla '%c' :V=%lu S=%lu NoResidente", - me.name, RPL_STATSDEBUG, parv[0], stat, - i, tabla_version[i], tabla_serie[i]); - } - #endif /* DB_HISPANO */ #ifdef DB_ESNET for (i = ESNET_BDD; i <= ESNET_BDD_END; i++) { --- 652,657 ---- Index: ../ircu2.10.06/ircd/s_bdd.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_bdd.c,v retrieving revision 1.6 retrieving revision 1.7 diff -c -r1.6 -r1.7 *** ../ircu2.10.06/ircd/s_bdd.c 1999/10/26 22:04:29 1.6 --- ../ircu2.10.06/ircd/s_bdd.c 1999/10/26 22:37:41 1.7 *************** *** 952,957 **** --- 952,959 ---- { char c; + memset(tabla_residente, 0, sizeof(tabla_residente)); + tabla_residente[ESNET_NICKDB] = 1; #if defined(DB_ESNET) && defined(ESNET_CLONES) *************** *** 1331,1629 **** } /* - * dbh_hash_tabla (tabla) - * - * calcula la HASH de una tabla. - * 1999/06/21 savage@apostols.org - */ - unsigned long dbh_hash_tabla(char tabla) - { - return 0; - } - - /* - * dbh_guardar_version (tabla, version) - * - * actualiza la version en memoria y disco. - * 1999/06/21 savage@apostols.org - */ - void dbh_guardar_version(char tabla, unsigned long version) - { - FILE *f; - char fichero[1024]; - - /* guardo en memoria */ - tabla_version[tabla] = version; - - /* guardo en disco */ - sprintf_irc(fichero, "%s/version.%c", DBPATH, tabla); - alarm(3); - f = fopen(fichero, "w"); - if (f) - { - fprintf(f, "%lu\n", version); - fclose(f); - } - alarm(0); - - return; - } - - /* - * dbh_leer_version (tabla) - * - * actualiza la version en memoria a partir de la de disco. - * 1999/06/21 savage@apostols.org - */ - unsigned long dbh_leer_version(char tabla) - { - FILE *f; - char fichero[1024]; - char buff[512]; - - buff[0] = 0; - - /* guardo en disco */ - sprintf_irc(fichero, "%s/version.%c", DBPATH, tabla); - alarm(3); - f = fopen(fichero, "r"); - if (f) - { - fgets(buff, sizeof(buff) - 1, f); - fclose(f); - } - alarm(0); - - /* ke pone? */ - tabla_version[tabla] = atol(buff); - - return tabla_version[tabla]; - } - - /* - * dbh_abrir_tabla (fichero) - * - * abre una tabla con un modo concreto "a", "r", "w" ... - * 1999/06/21 savage@apostols.org - */ - FILE *dbh_abrir_tabla(char tabla, char *modo) - { - FILE *f; - char fichero[1024]; - - alarm(3); - sprintf_irc(fichero, "%s/tabla.%c", DBPATH, tabla); - f = fopen(fichero, modo); - alarm(0); - - return f; - } - - /* - * dbh_cerrar_tabla (fichero) - * - * cierra una tabla abierta con dbh_abrir_tabla ... - * 1999/06/21 savage@apostols.org - */ - int dbh_cerrar_tabla(FILE * f) - { - if (f) - { - alarm(3); - fclose(f); - alarm(0); - } - - return 0; - } - - /* - * dbh_leer_registro (fichero, numero_registro) - * - * lee el registro n de una tabla abierta con dbh_abrir_tabla - * 1999/06/21 savage@apostols.org - */ - char *dbh_leer_registro(FILE * f, unsigned long regnum) - { - char buf[1024]; - static char b2[1024]; - char *p; - unsigned long num = 0; - - while (num != regnum && !feof(f)) - { - alarm(3); - fgets(buf, sizeof(buf) - 1, f); - alarm(0); - memcpy(b2, buf, sizeof(b2)); /* mas rapido ke strcpy */ - p = strtok(buf, " "); - p = strtok(NULL, " "); - if (p) - num = atol(p); - } - - if (num != regnum) - return NULL; - - return b2; - } - - /* - * dbh_cargar_tabla (tabla) - * - * lee una tabla y la mete en memoria - * 1999/06/21 savage@apostols.org - */ - void dbh_cargar_tabla(char tabla) - { - char *p1, *p2, *p3, *p4, *p5, *txt; - unsigned long num = 0; - FILE *f; - - f = dbh_abrir_tabla(tabla, "r"); - if (!f) - return; - while ((txt = dbh_leer_registro(f, num + 1)) != NULL) - { - num++; - if (tabla_residente[tabla]) - { - p1 = strtok(txt, " "); /* destino */ - p2 = strtok(NULL, " "); /* serie */ - p3 = strtok(NULL, " "); /* tabla */ - p4 = strtok(NULL, " \n\r"); /* clave */ - p5 = strtok(NULL, "\n\r"); /* :valor */ - - if (p5 != NULL) - dbh_insertar_registro(*p3, p1, p4, ++p5); /* salto : */ - else - dbh_eliminar_registro(*p3, p4); - } - } - - dbh_cerrar_tabla(f); - - dbh_leer_version(tabla); - tabla_serie[tabla] = num; - } - - /* - * dbh_borrar_tabla (tabla, version) - * - * borra la tabla de disco, guarda version en disco, marca - * todos los registros como borrados en memoria. - * 1999/06/21 savage@apostols.org - */ - void dbh_borrar_tabla(char tabla, unsigned long version) - { - FILE *f; - struct dbh_reg *reg; - int i; - - f = dbh_abrir_tabla(tabla, "w"); /* esto truncara la tabla */ - dbh_cerrar_tabla(f); - - dbh_guardar_version(tabla, version); - - if (!tabla_residente[tabla]) - return; /* no esta en memoria, no hace falta */ - - for (i = 0; i < DBH_HASH_SIZE; i++) - for (reg = tabla_datos[tabla][i]; reg != NULL; reg = reg->next) - reg->borrado = 1; - - return; - } - - /* - * dbh_compactar_tabla (tabla, version, serie, hash) - * - * compacta la tabla de disco, guarda version en disco, - * si la hash no coincide borra la tabla. - * 1999/06/21 savage@apostols.org - */ - void dbh_compactar_tabla(char tabla, unsigned long version, unsigned long serie, - unsigned long hash) - { - FILE *n, *o; - struct dbh_reg *reg; - unsigned long i, j = 0; - char resi; - char *rtxt; - char *p; - char tmp1[1024], tmp2[1024]; - - resi = tabla_residente[tabla]; - - /* creamos una tabla nueva */ - n = dbh_abrir_tabla('-', "w"); - o = dbh_abrir_tabla(tabla, "r"); - - if (!resi) - dbh_cargar_tabla(tabla); /* Hacemos residente la tabla un momento */ - - /* pongo los flags de compactacion a 0 */ - for (i = 0; i < DBH_HASH_SIZE; i++) - for (reg = tabla_datos[tabla][i]; reg != NULL; reg = reg->next) - reg->compactado = 0; - - /* - * recorremos la tabla y si el registro esta en memoria, - * lo metemos de nuevo en la tabla - */ - for (i = 1; i < tabla_serie[tabla]; i++) - { - if ((rtxt = dbh_leer_registro(o, i)) != NULL) - { - p = strtok(rtxt, " "); /* destino */ - p = strtok(NULL, " "); /* serie */ - p = strtok(NULL, " "); /* tabla */ - p = strtok(NULL, " \n\r"); /* clave */ - if (p && ((reg = dbh_buscar_registro(tabla, p)) != NULL) - && reg->compactado == 0) - { - reg->compactado = 1; - fprintf(n, "%s %lu %c %s :%s\n", reg->destino, ++j, tabla, p, - reg->valor); - } - } - } - - dbh_cerrar_tabla(o); - dbh_cerrar_tabla(n); - - /* en cualquier caso actualizo version */ - dbh_guardar_version(tabla, version); - - /* calculo si ha sido correcto */ - sprintf(tmp1, "%s/tabla.%c", DBPATH, tabla); - sprintf(tmp2, "%s/tabla.%c", DBPATH, '-'); /* tabla temporal */ - if (hash == dbh_hash_tabla('-') && j == serie) - { - unlink(tmp1); - rename(tmp2, tmp1); - } - else - { - unlink(tmp2); - dbh_borrar_tabla(tabla, version); /* pone a 0 la serie */ - dbh_eliminar_borrados(tabla); /* limpia de verdad con RunFree() */ - return; - } - - if (!resi) - { - /* no era residente, la elimino de memoria aunque haya funcionado */ - for (i = 0; i < DBH_HASH_SIZE; i++) - for (reg = tabla_datos[tabla][i]; reg != NULL; reg = reg->next) - reg->borrado = 1; - dbh_eliminar_borrados(tabla); - } - - return; - } - - /* * m_dbq * * parv[0] = prefijo del enviador --- 1333,1338 ---- *************** *** 1721,1781 **** reg->valor); return 0; - } - - /* - * dbh_recarga () - * - * Recarga la base de datos (carga todas las tablas) - * 1999/06/28 savage@apostols.org - */ - void dbh_recarga() - { - unsigned char i; - unsigned int j; - struct dbh_reg *reg; - - sendto_ops("Recargando tablas DBH"); - for (i = DBH_PRIMERA_TABLA; i <= DBH_ULTIMA_TABLA; i++) - { - /* marco todo como borrado */ - for (j = 0; j < DBH_HASH_SIZE; j++) - for (reg = tabla_datos[i][j]; reg != NULL; reg = reg->next) - reg->borrado = 1; - /* cargo de nuevo de disco */ - dbh_cargar_tabla(i); - /* elimino lo marcado */ - dbh_eliminar_borrados(i); - if (tabla_serie[i]) - sendto_ops("Tabla '%c' V:%lu S:%lu", i, tabla_version[i], tabla_serie[i]); - } - - return; - } - - /* - * dbh_inicializa () - * - * Inicailiza la base de datos (carga todas las tablas) - * 1999/06/28 savage@apostols.org - */ - void dbh_inicializa() - { - unsigned char i; - - /* --------------------------------------------------- */ - memset(tabla_residente, 0, sizeof(tabla_residente)); - memset(tabla_cuantos, 0, sizeof(tabla_cuantos)); - memset(tabla_datos, 0, sizeof(tabla_datos)); - memset(tabla_version, 0, sizeof(tabla_version)); - memset(tabla_serie, 0, sizeof(tabla_serie)); - /* --------------------------------------------------- */ - - /* --------------------------------------------------- */ - for (i = DBH_PRIMERA_TABLA; i <= DBH_ULTIMA_TABLA; i++) - dbh_cargar_tabla(i); - - return; } #endif /* DB_HISPANO */ --- 1430,1435 ---- Index: ../ircu2.10.06/ircd/s_bsd.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_bsd.c,v retrieving revision 1.15 retrieving revision 1.16 diff -c -r1.15 -r1.16 *** ../ircu2.10.06/ircd/s_bsd.c 1999/10/21 22:44:42 1.15 --- ../ircu2.10.06/ircd/s_bsd.c 1999/10/26 22:37:41 1.16 *************** *** 1064,1099 **** tabla_serie[ESNET_NICKDB]); #endif - #ifdef DB_HISPANO - /* - * Cuando nos conectamos enviamos una linea 'DBH - 0 J' para cada una - * de las posibles tablas (A..Z), esto hace un pelin mas largo el - * netburst, pero nos ayuda a actualizar todas las tablas. - * 1999/06/20 savage@apostols.org - * OPTIMIZACION a Implementar: - * Nodo->Hub: Solo mando relacion de las residentes - * Hub->Nodo: No mando ninguna (el nodo NO ha de actualizarme) - * Hub->Hub : Las mando todas, que remedio ... - * 1999/06/30 savage@apostols.org - */ - { - int es_hub = 0; - if (find_conf_host(cptr->confs, cptr->name, CONF_HUB) != NULL) - es_hub = 1; - - for (i = DBH_PRIMERA_TABLA; i <= DBH_ULTIMA_TABLA; i++) - { - #ifndef HUB - /* Ok, soy un LEAF node */ - if (!tabla_residente[i]) - continue; /* Nodo->Hub: solo residentes */ - #endif /* !HUB */ - sendto_one(cptr, "%s %s - 0 J %c %lu %lu", - NumServ(&me), MSG_DBH, (char)i, tabla_version[i], tabla_serie[i]); - } - } - #endif /* DB_HISPANO */ - #ifdef PROXY_PROTECTION if (!IsDead(cptr)) { --- 1064,1069 ---- Index: ../ircu2.10.06/ircd/s_conf.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_conf.c,v retrieving revision 1.7 retrieving revision 1.8 diff -c -r1.7 -r1.8 *** ../ircu2.10.06/ircd/s_conf.c 1999/10/15 08:24:25 1.7 --- ../ircu2.10.06/ircd/s_conf.c 1999/10/26 22:37:41 1.8 *************** *** 648,656 **** #ifdef DB_ESNET reload_db(); #endif - #ifdef DB_HISPANO - dbh_recarga(); - #endif for (i = 0; i <= highest_fd; i++) if ((acptr = loc_clients[i]) && !IsMe(acptr)) --- 648,653 ---- Index: ../ircu2.10.06/ircd/s_debug.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_debug.c,v retrieving revision 1.67 retrieving revision 1.68 diff -c -r1.67 -r1.68 *** ../ircu2.10.06/ircd/s_debug.c 1999/10/26 22:00:07 1.67 --- ../ircu2.10.06/ircd/s_debug.c 1999/10/26 22:37:41 1.68 *************** *** 191,197 **** '-', #endif #endif ! 'D','B','4','3', #ifdef DB_ESNET '+', #else --- 191,197 ---- '-', #endif #endif ! 'D','B','4','4', #ifdef DB_ESNET '+', #else Index: ../ircu2.10.06/ircd/s_serv.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_serv.c,v retrieving revision 1.45 retrieving revision 1.46 diff -c -r1.45 -r1.46 *** ../ircu2.10.06/ircd/s_serv.c 1999/10/21 22:44:42 1.45 --- ../ircu2.10.06/ircd/s_serv.c 1999/10/26 22:37:41 1.46 *************** *** 816,850 **** sendto_one(cptr, "%s DB * 0 J %lu 2", NumServ(&me), tabla_serie[ESNET_NICKDB]); #endif - #ifdef DB_HISPANO - /* - * Cuando se nos conectan enviamos una linea 'DBH * 0 J' para cada una - * de las posibles tablas (A..Z), esto hace un pelin mas largo el - * netburst, pero nos ayuda a actualizar todas las tablas. - * 1999/06/20 savage@apostols.org - * OPTIMIZACION a implementar: - * Nodo->Hub: Solo mando relacion de las residentes - * Hub->Nodo: No mando ninguna (el nodo NO ha de actualizarme) - * Hub->Hub : Las mando todas, que remedio ... - * 1999/06/30 savage@apostols.org - */ - { - int es_hub = 0; - if (find_conf_host(cptr->confs, cptr->name, CONF_HUB) != NULL) - es_hub = 1; - - for (i = DBH_PRIMERA_TABLA; i <= DBH_ULTIMA_TABLA; i++) - { - #ifndef HUB - /* soy un LEAF node */ - if (!tabla_residente[i]) - continue; /* Nodo->Hub: solo residentes */ - #endif /* !HUB */ - sendto_one(cptr, "%s %s - 0 J %c %lu %lu", - NumServ(&me), MSG_DBH, (char)i, tabla_version[i], tabla_serie[i]); - } - } - #endif /* DB_HISPANO */ IPcheck_connect_fail(cptr); /* Don't charge this IP# for connecting */ } --- 816,821 ----