Update of /cvsroot/srvx/services/src
In directory usw-pr-cvs1:/tmp/cvs-serv21250/src
Modified Files:
Tag: rel-1_0
hash.c hash.h parse.c
Log Message:
add nick change callback functions
when handling remote JOINs and other crazy channels, inherit timestamp from next MODE change
Index: hash.c
===================================================================
RCS file: /cvsroot/srvx/services/src/hash.c,v
retrieving revision 1.121.2.13
retrieving revision 1.121.2.14
diff -C2 -r1.121.2.13 -r1.121.2.14
*** hash.c 2001/08/04 15:34:25 1.121.2.13
--- hash.c 2001/09/04 18:39:36 1.121.2.14
***************
*** 307,310 ****
--- 307,329 ----
}
+ static nick_change_func_t *ncf2_list;
+ static unsigned int ncf2_size = 0, ncf2_used = 0;
+
+ void
+ reg_nick_change_func(nick_change_func_t handler)
+ {
+ if (ncf2_used == ncf2_size) {
+ if (ncf2_size) {
+ ncf2_size <<= 1;
+ ncf2_list = realloc(ncf2_list, ncf2_size*sizeof(nick_change_func_t));
+ } else {
+ ncf2_size = 8;
+ ncf2_list = malloc(ncf2_size*sizeof(nick_change_func_t));
+ }
+ }
+ ncf2_list[ncf2_used++] = handler;
+ }
+
+
static del_user_func_t *duf_list;
static unsigned int duf_size = 0, duf_used = 0;
***************
*** 473,476 ****
--- 492,498 ----
void NickChange(userNode* user, const char *new_nick)
{
+ char old_nick[NICKLEN+1];
+ unsigned int nn;
+
/* don't do anything if there's no change */
if (!strncmp(new_nick, user->nick, NICKLEN)) return;
***************
*** 479,482 ****
--- 501,507 ----
dict_remove(clients, user->nick);
+ /* save old nick for callbacks */
+ safestrncpy(old_nick, user->nick, sizeof(old_nick));
+
/* copy new nick */
safestrncpy(user->nick, new_nick, sizeof(user->nick));
***************
*** 486,489 ****
--- 511,519 ----
if (IsLocal(user->numeric)) irc_nick(user);
+
+ /* make callbacks */
+ for (nn=0; nn<ncf2_used; nn++) {
+ ncf2_list[nn](user, old_nick);
+ }
}
***************
*** 644,648 ****
mod_chanmode(cNode, modes, (char *)key, limit);
! if (new || cNode->timestamp > time_) {
if (key) {
safestrncpy(cNode->key, key, sizeof(cNode->key));
--- 674,678 ----
mod_chanmode(cNode, modes, (char *)key, limit);
! if (new || (cNode->timestamp == 0) || (cNode->timestamp > time_)) {
if (key) {
safestrncpy(cNode->key, key, sizeof(cNode->key));
Index: hash.h
===================================================================
RCS file: /cvsroot/srvx/services/src/hash.h,v
retrieving revision 1.52.2.9
retrieving revision 1.52.2.10
diff -C2 -r1.52.2.9 -r1.52.2.10
*** hash.h 2001/08/04 14:14:45 1.52.2.9
--- hash.h 2001/09/04 18:39:36 1.52.2.10
***************
*** 190,193 ****
--- 190,195 ----
void DelUser(userNode* user, userNode *killer, int announce, const char *why);
void ReintroduceUser(userNode* user);
+ typedef void (*nick_change_func_t)(struct userNode *user, const char *oldnick);
+ void reg_nick_change_func(nick_change_func_t handler);
void NickChange(userNode* user, const char *new_nick);
Index: parse.c
===================================================================
RCS file: /cvsroot/srvx/services/src/Attic/parse.c,v
retrieving revision 1.113.2.16
retrieving revision 1.113.2.17
diff -C2 -r1.113.2.16 -r1.113.2.17
*** parse.c 2001/08/16 02:39:18 1.113.2.16
--- parse.c 2001/09/04 18:39:36 1.113.2.17
***************
*** 576,580 ****
struct userNode *un = data;
struct chanNode *cn;
! cn = AddChannel(name, now, "", "", 0, un->numeric, NULL);
if (cn->members.used == 1) {
struct modeNode *mn = GetUserMode(cn, un);
--- 576,580 ----
struct userNode *un = data;
struct chanNode *cn;
! cn = AddChannel(name, 0, "", "", 0, un->numeric, NULL);
if (cn->members.used == 1) {
struct modeNode *mn = GetUserMode(cn, un);
|