Index: ../ircu2.10.06/include/struct.h =================================================================== RCS file: /usr/local/cvsroot/ircu2.10.06/include/struct.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** ../ircu2.10.06/include/struct.h 1999/10/06 09:49:40 1.1.1.1 --- ../ircu2.10.06+/include/struct.h 1999/10/06 17:24:15 1.2 *************** *** 146,152 **** unsigned int nn_mask; /* [Remote] FD_SETSIZE - 1 */ char nn_capacity[4]; /* numeric representation of server capacity */ #ifdef DB_ESNET ! unsigned char esnet_db; #endif #ifdef LIST_DEBUG struct Client *bcptr; --- 146,152 ---- unsigned int nn_mask; /* [Remote] FD_SETSIZE - 1 */ char nn_capacity[4]; /* numeric representation of server capacity */ #ifdef DB_ESNET ! unsigned long esnet_db; /* Mascara de grifo abierto para cada BDD */ #endif #ifdef LIST_DEBUG struct Client *bcptr; *************** *** 194,199 **** --- 194,200 ---- #define DBH_CHANDB 'C' #define DBH_BOTSDB 'B' #define DBH_VIRTUALDB 'V' + #define ESNET_BDD 'a' #define ESNET_NICKDB 'n' /* Para las features del Virtual CHaN */ Index: ../ircu2.10.06/ircd/s_bsd.c =================================================================== RCS file: /usr/local/cvsroot/ircu2.10.06/ircd/s_bsd.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** ../ircu2.10.06/ircd/s_bsd.c 1999/10/06 09:49:41 1.1.1.1 --- ../ircu2.10.06+/ircd/s_bsd.c 1999/10/06 17:24:16 1.2 *************** *** 992,998 **** my_name_for_link(me.name, aconf), me.serv->timestamp, newts, MAJOR_PROTOCOL, NumServCap(&me), me.info); #ifdef DB_ESNET ! sendto_one(cptr,"%s DB * 0 J %lu",NumServ(&me),tabla_serie[ESNET_NICKDB]); #endif #ifdef DB_HISPANO --- 992,998 ---- my_name_for_link(me.name, aconf), me.serv->timestamp, newts, MAJOR_PROTOCOL, NumServCap(&me), me.info); #ifdef DB_ESNET ! sendto_one(cptr,"%s DB * 0 J %lu 2",NumServ(&me),tabla_serie[ESNET_NICKDB]); #endif #ifdef DB_HISPANO Index: ../ircu2.10.06/ircd/s_debug.c =================================================================== RCS file: /usr/local/cvsroot/ircu2.10.06/ircd/s_debug.c,v retrieving revision 1.3 retrieving revision 1.4 diff -c -r1.3 -r1.4 *** ../ircu2.10.06/ircd/s_debug.c 1999/10/06 13:58:27 1.3 --- ../ircu2.10.06+/ircd/s_debug.c 1999/10/06 17:24:16 1.4 *************** *** 191,197 **** '-', #endif #endif ! 'D','B','1','5', #ifdef DB_ESNET '+', #else --- 191,197 ---- '-', #endif #endif ! 'D','B','1','6', #ifdef DB_ESNET '+', #else Index: ../ircu2.10.06/ircd/s_serv.c =================================================================== RCS file: /usr/local/cvsroot/ircu2.10.06/ircd/s_serv.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** ../ircu2.10.06/ircd/s_serv.c 1999/10/06 09:49:41 1.1.1.1 --- ../ircu2.10.06+/ircd/s_serv.c 1999/10/06 17:24:16 1.2 *************** *** 829,835 **** cptr->serv->timestamp, MAJOR_PROTOCOL, NumServCap(&me), (me.info[0]) ? (me.info) : "IRCers United"); #ifdef DB_ESNET ! sendto_one(cptr,"%s DB * 0 J %lu",NumServ(&me),tabla_serie[ESNET_NICKDB]); #endif #ifdef DB_HISPANO /* --- 829,835 ---- cptr->serv->timestamp, MAJOR_PROTOCOL, NumServCap(&me), (me.info[0]) ? (me.info) : "IRCers United"); #ifdef DB_ESNET ! sendto_one(cptr,"%s DB * 0 J %lu 2",NumServ(&me),tabla_serie[ESNET_NICKDB]); #endif #ifdef DB_HISPANO /* *************** *** 1495,1501 **** * Se mueve hasta un registro de la base de datos * */ ! int abrir_db(unsigned long registro,char *buf) { int handle; int cont; --- 1495,1501 ---- * Se mueve hasta un registro de la base de datos * */ ! int abrir_db(unsigned long registro,char *buf,char bdd) { int handle; int cont; *************** *** 1503,1509 **** *buf='\0'; alarm(3); ! sprintf_irc(path,"%s/tabla.%c",DBPATH,ESNET_NICKDB); handle=open(path, O_RDONLY, S_IRUSR | S_IWUSR); alarm(0); if(handle==-1) return 0; --- 1503,1509 ---- *buf='\0'; alarm(3); ! sprintf_irc(path,"%s/tabla.%c",DBPATH,bdd); handle=open(path, O_RDONLY, S_IRUSR | S_IWUSR); alarm(0); if(handle==-1) return 0; *************** *** 1526,1532 **** * modificado para usar las hash con funciones dbh_* * 1999/06/30 savage@apostols.org */ ! void db_alta(char *registro) { char *p0, *p1, *p2, *p3, *p4; --- 1526,1532 ---- * modificado para usar las hash con funciones dbh_* * 1999/06/30 savage@apostols.org */ ! void db_alta(char *registro,char que_bdd) { char *p0, *p1, *p2, *p3, *p4; *************** *** 1539,1554 **** if(p3==NULL) return; /* registro incompleto */ ! tabla_serie[ESNET_NICKDB]=atol(p0); switch (*p2) { case 'N': if(p4==NULL) { /* Borrado */ ! dbh_eliminar_registro(ESNET_NICKDB, p3); break; } ! dbh_insertar_registro(ESNET_NICKDB, p1, p3, p4); break; default: --- 1539,1554 ---- if(p3==NULL) return; /* registro incompleto */ ! tabla_serie[que_bdd]=atol(p0); switch (*p2) { case 'N': if(p4==NULL) { /* Borrado */ ! dbh_eliminar_registro(que_bdd, p3); break; } ! dbh_insertar_registro(que_bdd, p1, p3, p4); break; default: *************** *** 1573,1581 **** tabla_serie[ESNET_NICKDB]=0; tabla_cuantos[ESNET_NICKDB]=0; ! if(!(handle=abrir_db(0,buf))) return; do { ! db_alta(buf); } while(leer_db(handle,buf)!=-1); dbh_eliminar_borrados(ESNET_NICKDB); --- 1573,1581 ---- tabla_serie[ESNET_NICKDB]=0; tabla_cuantos[ESNET_NICKDB]=0; ! if(!(handle=abrir_db(0,buf,ESNET_NICKDB))) return; do { ! db_alta(buf,ESNET_NICKDB); } while(leer_db(handle,buf)!=-1); dbh_eliminar_borrados(ESNET_NICKDB); *************** *** 1631,1636 **** --- 1631,1638 ---- int db_file; int es_hub=0; char *p,*p2,*p3,*p4; + char que_bdd=ESNET_NICKDB; + unsigned long mascara_bdd; int cont; *************** *** 1641,1659 **** db=atol(parv[4]); switch(*parv[3]) { case 'B': ! if(es_hub) sendto_one(sptr,"%s DB %s 0 J %lu",NumServ(&me),parv[0],tabla_serie[ESNET_NICKDB]); return 0; break; case 'J': cont=100; ! if(db>=tabla_serie[ESNET_NICKDB]) { /* Se le pueden mandar registros individuales */ ! sptr->serv->esnet_db=!0; return 0; break; } ! db_file=abrir_db(db,db_buf); if(db_file==0) return 0; /* Problemas con la DB */ do { p=strchr(db_buf,' '); --- 1643,1671 ---- db=atol(parv[4]); switch(*parv[3]) { case 'B': ! if(parc==6) { ! que_bdd=*parv[5]; ! if((que_bdd<'a')||(que_bdd>'z')) return 0; ! } ! if(es_hub) sendto_one(sptr,"%s DB %s 0 J %lu %c",NumServ(&me),parv[0],tabla_serie[que_bdd],que_bdd); return 0; break; case 'J': cont=100; + + if(parc==6) { + que_bdd=*parv[5]; + if((que_bdd<'a')||(que_bdd>'z')) return 0; + } ! if(db>=tabla_serie[que_bdd]) { /* Se le pueden mandar registros individuales */ ! mascara_bdd=((unsigned long)1)<<(que_bdd-ESNET_BDD); ! sptr->serv->esnet_db|=mascara_bdd; return 0; break; } ! db_file=abrir_db(db,db_buf,que_bdd); if(db_file==0) return 0; /* Problemas con la DB */ do { p=strchr(db_buf,' '); *************** *** 1675,1693 **** if(!(--cont)) break; } while(leer_db(db_file,db_buf)!=-1); close(db_file); ! if(cont) sptr->serv->esnet_db=!0; ! else sendto_one(sptr,"%s DB %s 0 B %lu",NumServ(&me),parv[0],tabla_serie[ESNET_NICKDB]); return 0; break; ! case 'q': if((acptr=find_match_server(parv[1]))&&(!IsMe(acptr))) sendto_one(acptr,"%s DB %s 0 q %lu %s",NumServ(sptr), acptr->name,db,parv[5]); return 0; break; ! case 'Q': if(!es_hub) return 0; if(!(acptr = find_match_server(parv[1]))) { sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], parv[1]); --- 1687,1708 ---- if(!(--cont)) break; } while(leer_db(db_file,db_buf)!=-1); close(db_file); ! if(cont) { ! mascara_bdd=((unsigned long)1)<<(que_bdd-ESNET_BDD); ! sptr->serv->esnet_db|=mascara_bdd; ! } ! else sendto_one(sptr,"%s DB %s 0 B %lu %c",NumServ(&me),parv[0],tabla_serie[que_bdd],que_bdd); return 0; break; ! case 'q': /* FALTA POR ACTUALIZAR DESDE DB16 */ if((acptr=find_match_server(parv[1]))&&(!IsMe(acptr))) sendto_one(acptr,"%s DB %s 0 q %lu %s",NumServ(sptr), acptr->name,db,parv[5]); return 0; break; ! case 'Q': /* FALTA POR ACTUALIZAR DESDE DB16 */ if(!es_hub) return 0; if(!(acptr = find_match_server(parv[1]))) { sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], parv[1]); *************** *** 1714,1721 **** } /* Nuevo registro */ ! if(db<=tabla_serie[ESNET_NICKDB]) return 0; if(!es_hub) return 0; if(parc==5) --- 1729,1744 ---- } /* Nuevo registro */ + + que_bdd=*parv[5]; + if((que_bdd<'a')||(que_bdd>'z')) { + if(que_bdd=='N') que_bdd=ESNET_NICKDB; + else return 0; + } + + mascara_bdd=((unsigned long)1)<<(que_bdd-ESNET_BDD); ! if(db<=tabla_serie[que_bdd]) return 0; if(!es_hub) return 0; if(parc==5) *************** *** 1723,1729 **** else sprintf_irc(db_buf,"%s %s %s %s %s",parv[2],parv[1],parv[3],parv[4],parv[5]); ! db_alta(db_buf); if(parc==5) sprintf_irc(db_buf,"%s DB %s %s %s %s", --- 1746,1752 ---- else sprintf_irc(db_buf,"%s %s %s %s %s",parv[2],parv[1],parv[3],parv[4],parv[5]); ! db_alta(db_buf,que_bdd); if(parc==5) sprintf_irc(db_buf,"%s DB %s %s %s %s", *************** *** 1734,1747 **** for (lp = me.serv->down; lp; lp = lp->next) { ! if(!(lp->value.cptr->serv->esnet_db) || (lp->value.cptr==cptr)) continue; sendto_one(lp->value.cptr,db_buf); } ! tabla_serie[ESNET_NICKDB]=db; alarm(3); ! sprintf_irc(path,"%s/tabla.%c",DBPATH,ESNET_NICKDB); db_file=open(path,O_WRONLY | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR); alarm(0); --- 1757,1770 ---- for (lp = me.serv->down; lp; lp = lp->next) { ! if(!((lp->value.cptr->serv->esnet_db)&mascara_bdd) || (lp->value.cptr==cptr)) continue; sendto_one(lp->value.cptr,db_buf); } ! tabla_serie[que_bdd]=db; alarm(3); ! sprintf_irc(path,"%s/tabla.%c",DBPATH,que_bdd); db_file=open(path,O_WRONLY | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR); alarm(0);