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

📄 silc.c

📁 Linux下的多协议即时通讯程序源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
		g_free(silccmd);		*error = g_strdup_printf(_("Unknown command: %s, (may be a client bug)"), cmd);		return PURPLE_CMD_RET_FAILED;	}	g_free(silccmd);	return PURPLE_CMD_RET_OK;}static PurpleCmdRet silcpurple_cmd_quit(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;	silc_client_command_call(sg->client, sg->conn, NULL,				 "QUIT", (args && args[0]) ? args[0] : "Download Pidgin: " 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 ={	OPT_PROTO_CHAT_TOPIC | OPT_PROTO_UNIQUE_CHATNAME |	OPT_PROTO_PASSWORD_OPTIONAL | OPT_PROTO_IM_IMAGE,	NULL,					/* user_splits */	NULL,					/* protocol_options */	{"jpeg,gif,png,bmp", 0, 0, 96, 96, 0, PURPLE_ICON_SCALE_DISPLAY}, /* icon_spec */	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 */	silcpurple_buddy_set_icon,		/* set_buddy_icon */	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.1",					/**< 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(_("Use Perfect Forward Secrecy"),						"pfs", FALSE);	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");	silc_log_set_callback(SILC_LOG_ERROR, silcpurple_log_error, NULL);	silcpurple_register_commands();#if 0silc_log_debug(TRUE);silc_log_set_debug_string("*client*");#endif#ifdef _WIN32	silc_net_win32_init();#endif}PURPLE_INIT_PLUGIN(silc, init_plugin, info);

⌨️ 快捷键说明

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