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

📄 silc.c

📁 Linux下的多协议即时通讯程序源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	gc = purple_conversation_get_gc(conv);	if (gc == NULL)		return PURPLE_CMD_RET_FAILED;	sg = gc->proto_data;	if (sg == NULL)		return PURPLE_CMD_RET_FAILED;	silc_client_command_call(sg->client, sg->conn, NULL,				 "QUIT", (args && args[0]) ? args[0] : "Download this: " PURPLE_WEBSITE, NULL);	return PURPLE_CMD_RET_OK;}static PurpleCmdRet silcpurple_cmd_call(PurpleConversation *conv,		const char *cmd, char **args, char **error, void *data){	PurpleConnection *gc;	SilcPurple sg;	gc = purple_conversation_get_gc(conv);	if (gc == NULL)		return PURPLE_CMD_RET_FAILED;	sg = gc->proto_data;	if (sg == NULL)		return PURPLE_CMD_RET_FAILED;	if (!silc_client_command_call(sg->client, sg->conn, args[0])) {		*error = g_strdup_printf(_("Unknown command: %s"), args[0]);		return PURPLE_CMD_RET_FAILED;	}	return PURPLE_CMD_RET_OK;}/************************** Plugin Initialization ****************************/static voidsilcpurple_register_commands(void){	purple_cmd_register("part", "w", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT |			PURPLE_CMD_FLAG_PRPL_ONLY | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS,			"prpl-silc", silcpurple_cmd_chat_part, _("part [channel]:  Leave the chat"), NULL);	purple_cmd_register("leave", "w", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT |			PURPLE_CMD_FLAG_PRPL_ONLY | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS,			"prpl-silc", silcpurple_cmd_chat_part, _("leave [channel]:  Leave the chat"), NULL);	purple_cmd_register("topic", "s", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY |			PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc",			silcpurple_cmd_chat_topic, _("topic [&lt;new topic&gt;]:  View or change the topic"), NULL);	purple_cmd_register("join", "ws", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT |			PURPLE_CMD_FLAG_PRPL_ONLY | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS,			"prpl-silc", silcpurple_cmd_chat_join,			_("join &lt;channel&gt; [&lt;password&gt;]:  Join a chat on this network"), NULL);	purple_cmd_register("list", "", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY |			PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc",			silcpurple_cmd_chat_list, _("list:  List channels on this network"), NULL);	purple_cmd_register("whois", "w", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY,			"prpl-silc",			silcpurple_cmd_whois, _("whois &lt;nick&gt;:  View nick's information"), NULL);	purple_cmd_register("msg", "ws", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY,			"prpl-silc", silcpurple_cmd_msg,			_("msg &lt;nick&gt; &lt;message&gt;:  Send a private message to a user"), NULL);	purple_cmd_register("query", "ws", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY |			PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_query,			_("query &lt;nick&gt; [&lt;message&gt;]:  Send a private message to a user"), NULL);	purple_cmd_register("motd", "", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY |			PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_motd,			_("motd:  View the server's Message Of The Day"), NULL);	purple_cmd_register("detach", "", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY,			"prpl-silc", silcpurple_cmd_detach,			_("detach:  Detach this session"), NULL);	purple_cmd_register("quit", "s", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY |			PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_quit,			_("quit [message]:  Disconnect from the server, with an optional message"), NULL);	purple_cmd_register("call", "s", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY,			"prpl-silc", silcpurple_cmd_call,			_("call &lt;command&gt;:  Call any silc client command"), NULL);	/* These below just get passed through for the silc client library to deal	 * with */	purple_cmd_register("kill", "ws", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY |			PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_generic,			_("kill &lt;nick&gt; [-pubkey|&lt;reason&gt;]:  Kill nick"), NULL);	purple_cmd_register("nick", "w", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY,			"prpl-silc", silcpurple_cmd_generic,			_("nick &lt;newnick&gt;:  Change your nickname"), NULL);	purple_cmd_register("whowas", "ww", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY |			PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_generic,			_("whowas &lt;nick&gt;:  View nick's information"), NULL);	purple_cmd_register("cmode", "wws", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY |			PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_cmode,			_("cmode &lt;channel&gt; [+|-&lt;modes&gt;] [arguments]:  Change or display channel modes"), NULL);	purple_cmd_register("cumode", "wws", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY |			PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_generic,			_("cumode &lt;channel&gt; +|-&lt;modes&gt; &lt;nick&gt;:  Change nick's modes on channel"), NULL);	purple_cmd_register("umode", "w", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY,			"prpl-silc", silcpurple_cmd_generic,			_("umode &lt;usermodes&gt;:  Set your modes in the network"), NULL);	purple_cmd_register("oper", "s", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY,			"prpl-silc", silcpurple_cmd_generic,			_("oper &lt;nick&gt; [-pubkey]:  Get server operator privileges"), NULL);	purple_cmd_register("invite", "ws", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY |			PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_generic,			_("invite &lt;channel&gt; [-|+]&lt;nick&gt;:  invite nick or add/remove from channel invite list"), NULL);	purple_cmd_register("kick", "wws", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY |			PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_generic,			_("kick &lt;channel&gt; &lt;nick&gt; [comment]:  Kick client from channel"), NULL);	purple_cmd_register("info", "w", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY |			PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_generic,			_("info [server]:  View server administrative details"), NULL);	purple_cmd_register("ban", "ww", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY |			PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_generic,			_("ban [&lt;channel&gt; +|-&lt;nick&gt;]:  Ban client from channel"), NULL);	purple_cmd_register("getkey", "w", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY,			"prpl-silc", silcpurple_cmd_generic,			_("getkey &lt;nick|server&gt;:  Retrieve client's or server's public key"), NULL);	purple_cmd_register("stats", "", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY,			"prpl-silc", silcpurple_cmd_generic,			_("stats:  View server and network statistics"), NULL);	purple_cmd_register("ping", "", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY,			"prpl-silc", silcpurple_cmd_generic,			_("ping:  Send PING to the connected server"), NULL);#if 0 /* Purple doesn't handle these yet */	purple_cmd_register("users", "w", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY,			"prpl-silc", silcpurple_cmd_users,			_("users &lt;channel&gt;:  List users in channel"));	purple_cmd_register("names", "ww", PURPLE_CMD_P_PRPL,			PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY |			PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-silc", silcpurple_cmd_names,			_("names [-count|-ops|-halfops|-voices|-normal] &lt;channel(s)&gt;:  List specific users in channel(s)"));#endif}static PurpleWhiteboardPrplOps silcpurple_wb_ops ={	silcpurple_wb_start,	silcpurple_wb_end,	silcpurple_wb_get_dimensions,	silcpurple_wb_set_dimensions,	silcpurple_wb_get_brush,	silcpurple_wb_set_brush,	silcpurple_wb_send,	silcpurple_wb_clear,	/* padding */	NULL,	NULL,	NULL,	NULL};static PurplePluginProtocolInfo prpl_info ={#ifdef HAVE_SILCMIME_H	OPT_PROTO_CHAT_TOPIC | OPT_PROTO_UNIQUE_CHATNAME |	OPT_PROTO_PASSWORD_OPTIONAL | OPT_PROTO_IM_IMAGE,#else	OPT_PROTO_CHAT_TOPIC | OPT_PROTO_UNIQUE_CHATNAME |	OPT_PROTO_PASSWORD_OPTIONAL,#endif	NULL,						/* user_splits */	NULL,						/* protocol_options */#ifdef SILC_ATTRIBUTE_USER_ICON	{"jpeg,gif,png,bmp", 0, 0, 96, 96, 0, PURPLE_ICON_SCALE_DISPLAY}, /* icon_spec */#else	NO_BUDDY_ICONS,#endif	silcpurple_list_icon,			/* list_icon */	NULL,				/* list_emblems */	silcpurple_status_text,		/* status_text */	silcpurple_tooltip_text,		/* tooltip_text */	silcpurple_away_states,		/* away_states */	silcpurple_blist_node_menu,	/* blist_node_menu */	silcpurple_chat_info,			/* chat_info */	silcpurple_chat_info_defaults,/* chat_info_defaults */	silcpurple_login,				/* login */	silcpurple_close,				/* close */	silcpurple_send_im,			/* send_im */	silcpurple_set_info,			/* set_info */	NULL,						/* send_typing */	silcpurple_get_info,			/* get_info */	silcpurple_set_status,		/* set_status */	silcpurple_idle_set,			/* set_idle */	silcpurple_change_passwd,		/* change_passwd */	silcpurple_add_buddy,			/* add_buddy */	NULL,						/* add_buddies */	silcpurple_remove_buddy,		/* remove_buddy */	NULL,						/* remove_buddies */	NULL,						/* add_permit */	NULL,						/* add_deny */	NULL,						/* rem_permit */	NULL,						/* rem_deny */	NULL,						/* set_permit_deny */	silcpurple_chat_join,			/* join_chat */	NULL,						/* reject_chat */	silcpurple_get_chat_name,		/* get_chat_name */	silcpurple_chat_invite,		/* chat_invite */	silcpurple_chat_leave,		/* chat_leave */	NULL,						/* chat_whisper */	silcpurple_chat_send,			/* chat_send */	silcpurple_keepalive,			/* keepalive */	NULL,						/* register_user */	NULL,						/* get_cb_info */	NULL,						/* get_cb_away */	NULL,						/* alias_buddy */	NULL,						/* group_buddy */	NULL,						/* rename_group */	NULL,						/* buddy_free */	NULL,						/* convo_closed */	NULL,						/* normalize */#ifdef SILC_ATTRIBUTE_USER_ICON	silcpurple_buddy_set_icon,			/* set_buddy_icon */#else	NULL,#endif	NULL,						/* remove_group */	NULL,						/* get_cb_real_name */	silcpurple_chat_set_topic,	/* set_chat_topic */	NULL,						/* find_blist_chat */	silcpurple_roomlist_get_list,	/* roomlist_get_list */	silcpurple_roomlist_cancel,	/* roomlist_cancel */	NULL,						/* roomlist_expand_category */	NULL,						/* can_receive_file */	silcpurple_ftp_send_file,		/* send_file */	silcpurple_ftp_new_xfer,		/* new_xfer */	NULL,						/* offline_message */	&silcpurple_wb_ops,			/* whiteboard_prpl_ops */	NULL,                       /* send_raw */	NULL,                       /* roomlist_room_serialize */	/* padding */	NULL,	NULL,	NULL,	NULL};static PurplePluginInfo info ={	PURPLE_PLUGIN_MAGIC,	PURPLE_MAJOR_VERSION,	PURPLE_MINOR_VERSION,	PURPLE_PLUGIN_PROTOCOL,                             /**< type           */	NULL,                                             /**< ui_requirement */	0,                                                /**< flags          */	NULL,                                             /**< dependencies   */	PURPLE_PRIORITY_DEFAULT,                            /**< priority       */	"prpl-silc",                                      /**< id             */	"SILC",                                           /**< name           */	"1.0",                                            /**< version        */	/**  summary        */	N_("SILC Protocol Plugin"),	/**  description    */	N_("Secure Internet Live Conferencing (SILC) Protocol"),	"Pekka Riikonen",                                 /**< author         */	"http://silcnet.org/",                            /**< homepage       */	NULL,                                             /**< load           */	NULL,                                             /**< unload         */	NULL,                                             /**< destroy        */	NULL,                                             /**< ui_info        */	&prpl_info,                                       /**< extra_info     */	NULL,                                             /**< prefs_info     */	silcpurple_actions,	/* padding */	NULL,	NULL,	NULL,	NULL};static voidinit_plugin(PurplePlugin *plugin){	PurpleAccountOption *option;	PurpleAccountUserSplit *split;	char tmp[256];	int i;	PurpleKeyValuePair *kvp;	GList *list = NULL;	silc_plugin = plugin;	split = purple_account_user_split_new(_("Network"), "silcnet.org", '@');	prpl_info.user_splits = g_list_append(prpl_info.user_splits, split);	/* Account options */	option = purple_account_option_string_new(_("Connect server"),						"server",						"silc.silcnet.org");	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);	option = purple_account_option_int_new(_("Port"), "port", 706);	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);	g_snprintf(tmp, sizeof(tmp), "%s" G_DIR_SEPARATOR_S "public_key.pub", silcpurple_silcdir());	option = purple_account_option_string_new(_("Public Key file"),						"public-key", tmp);	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);	g_snprintf(tmp, sizeof(tmp), "%s" G_DIR_SEPARATOR_S "private_key.prv", silcpurple_silcdir());	option = purple_account_option_string_new(_("Private Key file"),						"private-key", tmp);	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);	for (i = 0; silc_default_ciphers[i].name; i++) {		kvp = g_new0(PurpleKeyValuePair, 1);		kvp->key = g_strdup(silc_default_ciphers[i].name);		kvp->value = g_strdup(silc_default_ciphers[i].name);		list = g_list_append(list, kvp);	}	option = purple_account_option_list_new(_("Cipher"), "cipher", list);	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);	list = NULL;	for (i = 0; silc_default_hmacs[i].name; i++) {		kvp = g_new0(PurpleKeyValuePair, 1);		kvp->key = g_strdup(silc_default_hmacs[i].name);		kvp->value = g_strdup(silc_default_hmacs[i].name);		list = g_list_append(list, kvp);	}	option = purple_account_option_list_new(_("HMAC"), "hmac", list);	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);	option = purple_account_option_bool_new(_("Public key authentication"),					      "pubkey-auth", FALSE);	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);	option = purple_account_option_bool_new(_("Block IMs without Key Exchange"),					      "block-ims", FALSE);	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);	option = purple_account_option_bool_new(_("Block messages to whiteboard"),					      "block-wb", FALSE);	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);	option = purple_account_option_bool_new(_("Automatically open whiteboard"),					      "open-wb", FALSE);	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);	option = purple_account_option_bool_new(_("Digitally sign and verify all messages"),					      "sign-verify", FALSE);	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);	purple_prefs_remove("/plugins/prpl/silc");	silcpurple_register_commands();#ifdef _WIN32	silc_net_win32_init();#endif}PURPLE_INIT_PLUGIN(silc, init_plugin, info);

⌨️ 快捷键说明

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