void inbound_nameslist (server *serv, char *chan, char *names, const message_tags_data *tags_data) { session *sess; char **name_list; char *host, *nopre_name; char name[NICKLEN]; int i; size_t offset; sess = find_channel (serv, chan); if (!sess) { EMIT_SIGNAL_TIMESTAMP (XP_TE_USERSONCHAN, serv->server_session, chan, names, NULL, NULL, 0, tags_data->timestamp); return; } if (!sess->ignore_names) EMIT_SIGNAL_TIMESTAMP (XP_TE_USERSONCHAN, sess, chan, names, NULL, NULL, 0, tags_data->timestamp); if (sess->end_of_names) { sess->end_of_names = FALSE; userlist_clear (sess); } name_list = g_strsplit (names, " ", -1); for (i = 0; name_list[i]; i++) { host = NULL; offset = sizeof(name); if (name_list[i][0] == 0) continue; if (serv->have_uhnames) { offset = 0; nopre_name = name_list[i]; /* Ignore prefixes so '!' won't cause issues */ while (strchr (serv->nick_prefixes, *nopre_name) != NULL) { nopre_name++; offset++; } offset += strcspn (nopre_name, "!"); if (offset++ < strlen (name_list[i])) host = name_list[i] + offset; } g_strlcpy (name, name_list[i], MIN(offset, sizeof(name))); userlist_add (sess, name, host, NULL, NULL, tags_data); } g_strfreev (name_list); }
/* userlist_user_channel_text: * writes text to specified channel, * and registers user and joins the channel, if not already */ void userlist_user_channel_text( const char * user_name, const char * channel, const char * text, vqp_addr_t src_addr, int is_action_text) { struct userlist_entry * entry; entry = userlist_entry_by_name(user_name); if(!entry) { vqp_uuid_t nil_uuid; vqp_uuid_create_nil(&nil_uuid); /* add the user to our user list */ userlist_add( user_name, VQP_STATUS_AVAILABLE, VQP_GENDER_MALE, &nil_uuid, VQCHAT_VQP_COMPAT_CODEPAGE, VQCHAT_UNDEF_SWVERSION, src_addr, 0); } entry = userlist_entry_by_name(user_name); if(entry) { /* join the channel first and * write the text to the channel */ userlist_user_channel_join(user_name, channel, 0); chatroom_channel_user_text(channel, user_name, text, is_action_text); } }
void inbound_nameslist (server *serv, char *chan, char *names, const message_tags_data *tags_data) { session *sess; char name[NICKLEN]; int pos = 0; sess = find_channel (serv, chan); if (!sess) { EMIT_SIGNAL_TIMESTAMP (XP_TE_USERSONCHAN, serv->server_session, chan, names, NULL, NULL, 0, tags_data->timestamp); return; } if (!sess->ignore_names) EMIT_SIGNAL_TIMESTAMP (XP_TE_USERSONCHAN, sess, chan, names, NULL, NULL, 0, tags_data->timestamp); if (sess->end_of_names) { sess->end_of_names = FALSE; userlist_clear (sess); } while (1) { switch (*names) { case 0: name[pos] = 0; if (pos != 0) userlist_add (sess, name, 0, NULL, NULL, tags_data); return; case ' ': name[pos] = 0; pos = 0; userlist_add (sess, name, 0, NULL, NULL, tags_data); break; default: name[pos] = *names; if (pos < (NICKLEN-1)) pos++; } names++; } }
void inbound_join (server *serv, char *chan, char *user, char *ip) { session *sess = find_channel (serv, chan); if (sess) { EMIT_SIGNAL (XP_TE_JOIN, sess, user, chan, ip, NULL, 0); userlist_add (sess, user, ip); } }
void inbound_join (server *serv, char *chan, char *user, char *ip, char *account, char *realname, const message_tags_data *tags_data) { session *sess = find_channel (serv, chan); if (sess) { EMIT_SIGNAL_TIMESTAMP (XP_TE_JOIN, sess, tags_data->timestamp, user, chan, ip, account); userlist_add (sess, user, ip, account, realname, tags_data); } }