static int check_logged_in(struct hub_info* hub, struct hub_user* user, struct adc_message* cmd) { struct hub_user* lookup1 = uman_get_user_by_nick(hub->users, user->id.nick); struct hub_user* lookup2 = uman_get_user_by_cid(hub->users, user->id.cid); if (lookup1 == user) { return 0; } if (lookup1 || lookup2) { if (lookup1 == lookup2) { LOG_DEBUG("check_logged_in: exact same user is logged in: %s", user->id.nick); hub_disconnect_user(hub, lookup1, quit_ghost_timeout); return 0; } else { if (lookup1) { LOG_DEBUG("check_logged_in: nickname is in use: %s", user->id.nick); return status_msg_inf_error_nick_taken; } else { LOG_DEBUG("check_logged_in: CID is in use: %s", user->id.cid); return status_msg_inf_error_cid_taken; } } } return 0; }
/** * @return 1 if CID is in use, or 0 if not used. */ static int is_cid_in_use(struct hub_info* hub, const char* cid) { struct hub_user* lookup = uman_get_user_by_cid(hub, cid); if (lookup) { return 1; } return 0; }
static int check_duplicate_logins_ok(struct hub_info* hub, struct hub_user* user) { struct hub_user* lookup1; struct hub_user* lookup2; lookup1 = uman_get_user_by_nick(hub->users, user->id.nick); if (lookup1) return status_msg_inf_error_nick_taken; lookup2 = uman_get_user_by_cid(hub->users, user->id.cid); if (lookup2) return status_msg_inf_error_cid_taken; return 0; }