/* * Copyright (c) 2026 Nakidai Perumenei * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "ircd.h" #include #include #include const char * getnick(const struct Peer *peer) { return *peer->nick ? peer->nick : "*"; } void user_reg(struct Peer *peer, const char *nick, const char *user, const char *real) { if (nick) strlcpy(peer->nick, nick, sizeof(peer->nick)); if (user) strlcpy(peer->user, user, sizeof(peer->user)); if (real) strlcpy(peer->real, real, sizeof(peer->real)); if (*peer->nick && *peer->user && *peer->real) { peer->type = CLIENT; reply(peer, 1); } } void user_remove(size_t pid) { size_t i, j; for (i = 0; i < peers[peers_c-1].channels_c; ++i) { for (j = 0; j < peers[peers_c-1].channels[i]->users_c; ++j) if (peers[peers_c-1].channels[i]->users[j]->fd == peers[peers_c-1].fd) break; if (j == peers[peers_c-1].channels[i]->users_c) { warnx( "user_unlink(): %s@%s doesn't belong to %s, " "though they believe in the opposite", getnick(&peers[peers_c-1]), peers[peers_c-1].host, peers[peers_c-1].channels[i]->name ); continue; } peers[peers_c-1].channels[i]->users[j] = &peers[pid]; } peers[pid] = peers[--peers_c]; }