⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 outbound.c

📁 The major functionality added in this release includes: - Rootless mode in X11 - Widget Templt
💻 C
📖 第 1 页 / 共 5 页
字号:
	free (file);	if (i == 0)		return TRUE;	return FALSE;}#endifintcmd_me (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	char *act = word_eol[2];	if (!(*act))		return FALSE;	sprintf (tbuf, "\001ACTION %s\001\r", act);	/* first try through DCC CHAT */	if (dcc_write_chat (sess->channel, tbuf))	{		/* print it to screen */		channel_action (sess, tbuf, sess->channel, sess->server->nick,								act, TRUE);	} else	{		/* DCC CHAT failed, try through server */		if (sess->server->connected)		{			sprintf (tbuf, "PRIVMSG %s :\001ACTION %s\001\r\n", sess->channel,						act);			tcp_send (sess->server, tbuf);			/* print it to screen */			channel_action (sess, tbuf, sess->channel, sess->server->nick,									act, TRUE);		} else		{			notc_msg (sess);		}	}	return TRUE;}intcmd_msg (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	char *nick = word[2];	char *msg = word_eol[3];	struct session *newsess;	if (*nick)	{		if (*msg)		{			if (strcmp (nick, ".") == 0)			{							  /* /msg the last nick /msg'ed */				if (sess->lastnick[0])					nick = sess->lastnick;			} else				strcpy (sess->lastnick, nick);	/* prime the last nick memory */			if (*nick == '=')			{				nick++;				if (!dcc_write_chat (nick, msg))				{					EMIT_SIGNAL (XP_TE_NODCC, sess, NULL, NULL, NULL, NULL, 0);					return TRUE;				}			} else			{				if (!sess->server->connected)				{					notc_msg (sess);					return TRUE;				}				sprintf (tbuf, "PRIVMSG %s :%s\r\n", nick, msg);				tcp_send (sess->server, tbuf);			}			newsess = find_session_from_channel (nick, sess->server);			if (newsess)				channel_msg (newsess->server, tbuf, newsess->channel,						newsess->server->nick, msg, TRUE);			else				EMIT_SIGNAL (XP_TE_MSGSEND, sess, nick, msg, NULL, NULL, 0);			return TRUE;		}	}	return FALSE;}intcmd_names (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	if (*word[2])		sprintf (tbuf, "NAMES %s\r\n", word[2]);	else		sprintf (tbuf, "NAMES %s\r\n", sess->channel);	tcp_send (sess->server, tbuf);	return TRUE;}intcmd_nctcp (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	if (*word[2] && *word_eol[3])	{		sprintf (tbuf, "NOTICE %s :\001%s\001\r\n", word[2], word_eol[3]);		tcp_send (sess->server, tbuf);		return TRUE;	}	return FALSE;}intcmd_newserver (struct session *sess, char *tbuf, char *word[],					char *word_eol[]){	sess = new_ircwindow (NULL, NULL, SESS_SERVER);	cmd_server (sess, tbuf, word, word_eol);	return TRUE;}intcmd_nick (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	char *nick = word[2];	if (*nick)	{		if (sess->server->connected)		{			sprintf (tbuf, "NICK %s\r\n", nick);			tcp_send (sess->server, tbuf);		} else			user_new_nick (sess->server, sess->server->nick, nick, TRUE);		return TRUE;	}	return FALSE;}intcmd_notice (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	if (*word[2] && *word_eol[3])	{		sprintf (tbuf, "NOTICE %s :%s\r\n", word[2], word_eol[3]);		tcp_send (sess->server, tbuf);		EMIT_SIGNAL (XP_TE_NOTICESEND, sess, word[2], word_eol[3], NULL, NULL,						 0);		return TRUE;	}	return FALSE;}intcmd_notify (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	int i = 1;	if (*word[2])	{		while (1)		{			i++;			if (!*word[i])				break;			if (notify_deluser (word[i]))			{				EMIT_SIGNAL (XP_TE_DELNOTIFY, sess, word[i], NULL, NULL, NULL, 0);				return TRUE;			}			notify_adduser (word[i]);			EMIT_SIGNAL (XP_TE_ADDNOTIFY, sess, word[i], NULL, NULL, NULL, 0);		}	} else		notify_showlist (sess);	return TRUE;}intcmd_op (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	int i = 2;	while (1)	{		if (!*word[i])		{			if (i == 2)				return FALSE;			send_channel_modes (sess, tbuf, word, 2, i, '+', 'o');			return TRUE;		}		i++;	}}intcmd_part (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	char *chan = word[2];	char *reason = word_eol[3];	if (!*chan)		chan = sess->channel;	if ((*chan) && is_channel (sess->server, chan))	{		server_sendpart (sess->server, chan, reason);		return TRUE;	}	return FALSE;}intcmd_ping (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	unsigned long tim;	char *to = word[2];	tim = make_ping_time ();	if (*to)		sprintf (tbuf, "PRIVMSG %s :\001PING %lu\001\r\n", to, tim);	else		sprintf (tbuf, "PING %lu\r\n", tim);		/*sprintf (tbuf, "PING %lu :%s\r\n", tim, sess->server->servername);*/	tcp_send (sess->server, tbuf);	return TRUE;}intcmd_query (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	char *nick = word[2];	if (*nick)	{		if (!find_dialog (sess->server, nick))			new_ircwindow (sess->server, nick, SESS_DIALOG);		return TRUE;	}	return FALSE;}intcmd_quote (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	int len;	char *raw = word_eol[2];	if (*raw)	{		len = strlen (raw);		if (len < 4094)		{			tcp_send_len (sess->server, tbuf, sprintf (tbuf, "%s\r\n", raw));		} else		{			tcp_send_len (sess->server, raw, len);			tcp_send_len (sess->server, "\r\n", 2);		}		return TRUE;	}	return FALSE;}intcmd_reconnect (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	int tmp = prefs.recon_delay;	GSList *list;	server *serv;	prefs.recon_delay = 0;	if (!strcasecmp (word[2], "ALL"))	{		list = serv_list;		while (list)		{			serv = list->data;			if (serv->connected)				auto_reconnect (serv, TRUE, -1);			list = list->next;		}	}		/* If it isn't "ALL" and there is something 	there it *should* be a server they are trying to connect to*/	else if (*word[2])	{		int offset = 0;#ifdef USE_OPENSSL		int use_ssl = FALSE;		if (strcmp (word[2], "-ssl") == 0)		{			use_ssl = TRUE;			offset++;	/* args move up by 1 word */		}		sess->server->use_ssl = use_ssl;		sess->server->accept_invalid_cert = TRUE;#endif		if (*word[4+offset])			safe_strcpy (sess->server->password, word[4+offset], sizeof (sess->server->password));		if (*word[3+offset])			sess->server->port = atoi (word[3+offset]);		safe_strcpy (sess->server->hostname, word[2+offset], sizeof (sess->server->hostname));		auto_reconnect (sess->server, TRUE, -1);	}	else	{		auto_reconnect (sess->server, TRUE, -1);	}		prefs.recon_delay = tmp;	return TRUE;}#ifdef USE_PLUGINintcmd_rmdll (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	char *dllname = word[2];	if (module_unload (dllname, sess) == 0)		return TRUE;	return FALSE;}#endifintcmd_say (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	char *speech = word_eol[2];	if (*speech)	{		channel_msg (sess->server, tbuf, sess->channel, sess->server->nick,						 speech, TRUE);		sprintf (tbuf, "PRIVMSG %s :%s\r\n", sess->channel, speech);		tcp_send (sess->server, tbuf);		return TRUE;	}	return FALSE;}intcmd_settab (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	if (*word_eol[2])	{		strcpy (tbuf, sess->channel);		safe_strcpy (sess->channel, word_eol[2], CHANLEN);		fe_set_channel (sess);		strcpy (sess->channel, tbuf);	}	return TRUE;}intcmd_server (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	int offset = 0;	char *server;	char *port;	char *pass;	char *co;#ifdef USE_OPENSSL	int use_ssl = FALSE;	if (strcmp (word[2], "-ssl") == 0)	{		use_ssl = TRUE;		offset++;	/* args move up by 1 word */	}#endif	server = word[2 + offset];	port = word[3 + offset];	pass = word[4 + offset];	if (!(*server))		return FALSE;#ifdef USE_OPENSSL	if (strncasecmp ("ircs://", server, 7) == 0)	{		use_ssl = TRUE;		server += 7;		goto urlserv;	}#endif	/* dont clear it for /servchan */	if (strncasecmp (word[1], "SERVCHAN ", 9))		sess->willjoinchannel[0] = 0;	if (strncasecmp ("irc://", server, 6) == 0)	{		server += 6;#ifdef USE_OPENSSLurlserv:#endif		/* check for port */		co = strchr (server, ':');		if (co)		{			port = co + 1;			*co = 0;			pass = word[3 + offset];		} else			co = server;		/* check for channel - mirc style */		co = strchr (co + 1, '/');		if (co)		{			*co = 0;			co++;			if (*co == '#')			{				safe_strcpy (sess->willjoinchannel, co, CHANLEN);			} else			{				sess->willjoinchannel[0] = '#';				strncpy (sess->willjoinchannel + 1, co, CHANLEN);				sess->willjoinchannel[CHANLEN-1] = 0;			}		}	}	if (*pass)		strcpy (sess->server->password, pass);#ifdef USE_OPENSSL	sess->server->use_ssl = use_ssl;	sess->server->accept_invalid_cert = TRUE;#endif	if (*port)	{		connect_server (sess, server, atoi (port), FALSE);	} else {#ifdef USE_OPENSSL		if (use_ssl)			connect_server (sess, server, 994, FALSE);		else#endif			connect_server (sess, server, 6667, FALSE);	}	return TRUE;}intcmd_servchan (struct session *sess, char *tbuf, char *word[],				  char *word_eol[]){	int offset = 0;#ifdef USE_OPENSSL	if (strcmp (word[2], "-ssl") == 0)		offset++;#endif	if (*word[4 + offset])	{		strcpy (sess->willjoinchannel, word[4 + offset]);		return cmd_server (sess, tbuf, word, word_eol);	}	return FALSE;}struct timercommand{	session *sess;	char *cmd;};static inttimer_timeout (struct timercommand *tr){	if (is_session (tr->sess))		handle_command (tr->cmd, tr->sess, 0, 0);	free (tr->cmd);	free (tr);	return 0;}intcmd_timer (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	struct timercommand *tr;	if (!*word_eol[3])		return FALSE;	tr = malloc (sizeof (struct timercommand));	tr->sess = sess;	tr->cmd = strdup (word_eol[3]);	fe_timeout_add (atoi (word[2]) * 1000, timer_timeout, tr);	return TRUE;}intcmd_topic (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	char *topic = word_eol[2];	if (*topic)		sprintf (tbuf, "TOPIC %s :%s\r\n", sess->channel, topic);	else		sprintf (tbuf, "TOPIC %s\r\n", sess->channel);	tcp_send (sess->server, tbuf);	return TRUE;}intcmd_unignore (struct session *sess, char *tbuf, char *word[],				  char *word_eol[]){	char *mask = word[2];	char *arg = word[3];	if (*mask)	{		if (ignore_del (mask, NULL))		{			if (strcasecmp (arg, "QUIET"))				EMIT_SIGNAL (XP_TE_IGNOREREMOVE, sess, mask, NULL, NULL, NULL, 0);		}		return TRUE;	}	return FALSE;}intcmd_userlist (struct session *sess, char *tbuf, char *word[],				  char *word_eol[]){	struct User *user;	GSList *list;	int lt;	list = sess->userlist;	while (list)	{		user = list->data;		lt = time (0) - user->lasttalk;		if (!user->lasttalk)			lt = 0;		sprintf (tbuf,					"\00306%s\t\00314[\00310%-38s\00314] \017ov\0033=\017%d%d lt\0033=\017%d\n",					user->nick, user->hostname, user->op, user->voice, lt);		PrintText (sess, tbuf);		list = list->next;	}	return TRUE;}intcmd_wallchop (struct session *sess, char *tbuf, char *word[],				  char *word_eol[]){	int i = 0;	struct User *user;	GSList *list;	if (*word_eol[2])	{		strcpy (tbuf, "NOTICE ");		list = sess->userlist;		while (list)		{			user = (struct User *) list->

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -