示例#1
0
文件: nick.c 项目: malinkb/bitlbee
void nick_set_raw(account_t *acc, const char *handle, const char *nick)
{
	char *store_handle, *store_nick = g_malloc(MAX_NICK_LENGTH + 1);
	irc_t *irc = (irc_t *) acc->bee->ui_data;

	store_handle = clean_handle(handle);
	store_nick[MAX_NICK_LENGTH] = '\0';
	strncpy(store_nick, nick, MAX_NICK_LENGTH);
	nick_strip(irc, store_nick);

	g_hash_table_replace(acc->nicks, store_handle, store_nick);
}
示例#2
0
/* Check is `msg' is meant for `nick'. */
int irc_nick_match(const char *nick, const char *msg)
{
	char *stripnick, *stripmsg;
	int ret, len;

	g_return_val_if_fail(nick != NULL, FALSE);
	g_return_val_if_fail(msg != NULL, FALSE);

	if (g_strncasecmp(msg, nick, strlen(nick)) == 0 &&
	    !isalnum((int) msg[strlen(nick)])) return TRUE;

	stripnick = nick_strip(nick);
	stripmsg = nick_strip(msg);

	len = strlen(stripnick);
	ret = len > 0 && g_strncasecmp(stripmsg, stripnick, len) == 0 &&
		!isalnum((int) stripmsg[len]) &&
		(unsigned char) stripmsg[len] < 128;

	g_free(stripnick);
	g_free(stripmsg);
	return ret;
}
示例#3
0
文件: nick.c 项目: malinkb/bitlbee
char *nick_get(bee_user_t *bu)
{
	static char nick[MAX_NICK_LENGTH + 1];
	char *store_handle, *found_nick;
	irc_t *irc = (irc_t *) bu->bee->ui_data;

	memset(nick, 0, MAX_NICK_LENGTH + 1);

	store_handle = clean_handle(bu->handle);
	/* Find out if we stored a nick for this person already. If not, try
	   to generate a sane nick automatically. */
	if ((found_nick = g_hash_table_lookup(bu->ic->acc->nicks, store_handle))) {
		strncpy(nick, found_nick, MAX_NICK_LENGTH);
	} else if ((found_nick = nick_gen(bu))) {
		strncpy(nick, found_nick, MAX_NICK_LENGTH);
		g_free(found_nick);
	} else {
		/* Keep this fallback since nick_gen() can return NULL in some cases. */
		char *s;

		g_snprintf(nick, MAX_NICK_LENGTH, "%s", bu->handle);
		if ((s = strchr(nick, '@'))) {
			while (*s) {
				*(s++) = 0;
			}
		}

		nick_strip(irc, nick);
		if (set_getbool(&bu->bee->set, "lcnicks")) {
			nick_lc(irc, nick);
		}
	}
	g_free(store_handle);

	/* Make sure the nick doesn't collide with an existing one by adding
	   underscores and that kind of stuff, if necessary. */
	nick_dedupe(bu, nick);

	return nick;
}