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

📄 dialog.c

📁 Linux下的飞鸽传书
💻 C
字号:
/* *  Copyright (C) 2006 Takeharu KATO * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#ifdef HAVE_CONFIG_H#  include <config.h>#endif#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <sys/time.h>#include <gnome.h>#include <glib.h>#include <bonobo.h>#include <sys/types.h>#include <stdarg.h>#include "common.h"#include "interface.h"#include "callbacks.h"#include "support.h"/** @file  * @brief  ダイアログ簇眶凡 * @author Takeharu KATO */ /** クライアント攫鼠ダイアログ脱のメッセ〖ジ叫蜗鼎奶借妄 * @param[in] text_buffer  叫蜗黎テキストバッファ * @param[in] format       今及回年矢机误 * @return    なし */static voidclient_info_add_text(GtkTextBuffer *text_buffer, const char *format,...){	char buffer[64];  /*  矢机误腊妨脱バッファ  */	size_t      len;  /*  矢机误墓  */	va_list      ap;  /*  材恃墓苞眶瓷妄  */	g_assert(text_buffer != NULL);	memset(buffer, 0, 64);	  	va_start(ap, format);	vsnprintf(buffer, 63, format, ap);	va_end(ap);	buffer[63] = '\0';	len = strlen(buffer);	gtk_text_buffer_insert_at_cursor(text_buffer, buffer, len);}/** 减慨澄千ダイアログ栏喇 * @param[in, out] user    ユ〖ザ叹 * @param[in] ipaddr  减慨荚IPアドレス(IPMSG_READMSG流慨荚アドレス) * @param[in] sec     IPMSG_READMSG减慨箕癸(Epoch 箕癸) * @retval  0       * @retval -EINVAL  * @retval -ENOMEM  * @attention userが回し绩す黎は, 塑簇眶柒で倡庶するので, 钙び叫し娄で *            剩澜を苞き畔すこと. */voidread_message_dialog(const gchar *user,const gchar *ipaddr, long sec){	GtkWidget *dialog = NULL;	GtkLabel *userlabel = NULL;	GtkLabel *timelabel = NULL;	userdb_t *user_info = NULL;	char buffer[64];	char time_string[26];	va_list ap;	dbg_out("here\n");		if (user == NULL)		return; /* ユ〖ザ叹がNULLの眷圭は, ダイアログを山绩しない  */	if (!hostinfo_refer_ipmsg_default_confirm())		goto user_free_out;  /* 减慨澄千をしない眷圭は, 篓箕牲耽  */	dialog = GTK_WIDGET(create_readNotifyDialog());	userlabel = 		GTK_LABEL(lookup_widget(dialog, 			"readNotifyDialogUserGroupLabel") );	if (ipaddr != NULL) {		if (!userdb_search_user_by_addr(ipaddr, 			(const userdb_t **)&user_info) ) {			g_assert(userlabel != NULL);			snprintf(buffer, 63, "%s@%s (%s)", 			    user_info->nickname, 			    user_info->group, 			    user_info->host);			buffer[63]='\0';			gtk_label_set_text(userlabel, buffer);			g_assert(!destroy_user_info(user_info));		} else {			/* ipaddrがユ〖ザDBに判峡されていない眷圭, 			 * ユ〖ザ叹だけを山绩する.			 */			gtk_label_set_text(userlabel, user);		}	} else {		gtk_label_set_text(userlabel, _("UnKnown"));	}	timelabel = GTK_LABEL(lookup_widget(dialog,		"readNotifyLogonIPAddrLabel"));	if (get_current_time_string(time_string, sec))		gtk_label_set_text(timelabel, _("UnKnown"));	else		gtk_label_set_text(timelabel, time_string);	gtk_widget_show(dialog);  /* ダイアログ山绩 */user_free_out:	if (user != NULL)		g_free((gchar *)user);	return;}/** エラ〖券栏ダイアログを叫蜗する * @param[in] filename  券栏傅ファイル叹 * @param[in] funcname  券栏傅簇眶叹 * @param[in] line      券栏傅乖戎规 * @param[in] format    今及回年矢机误(材恃改苞眶) * @return    なし */voiderror_message_dialog(const char *filename, const char *funcname,     const int line, const char* format, ...){	GtkWidget *dialog = NULL;	GtkLabel  *file_label = NULL;	GtkLabel  *func_label = NULL;	GtkLabel  *line_label = NULL;	GtkTextView *error_text_view = NULL;	GtkTextBuffer *error_buffer = NULL;	char error_message[256];	char line_string[8];	va_list ap;	dbg_out("here\n");	g_assert(filename != NULL);	g_assert(funcname != NULL);	/*	 * エラ〖メッセ〖ジを腊妨する.	 */	if (format != NULL) {		va_start(ap, format);		vsnprintf(error_message, 256, format, ap);		va_end(ap);	} else {		error_message[0] = '\0';	}	error_message[255] = '\0';	snprintf(line_string, 8, "%d", line);	line_string[7] = '\0';	gdk_threads_enter();	/*	 * ウィジェットを艰评	 */	dialog = GTK_WIDGET(create_errorDialog());	g_assert(dialog);	file_label = GTK_LABEL(lookup_widget(GTK_WIDGET(dialog),		"errorDialogErrInfoFileNameContLabel"));	g_assert(file_label);	func_label = GTK_LABEL(lookup_widget(GTK_WIDGET(dialog),		"errorDialogErrInfoFunctionContLabel"));	g_assert(func_label);	line_label = GTK_LABEL(lookup_widget(GTK_WIDGET(dialog),		"errorDialogErrInfoFileLineContLabel"));	g_assert(line_label);	error_text_view = GTK_TEXT_VIEW(lookup_widget(GTK_WIDGET(dialog),		"errorDialogErrorTextView"));	g_assert(error_text_view);	error_buffer = 		GTK_TEXT_BUFFER(gtk_text_view_get_buffer(error_text_view));	g_assert(error_buffer);	/*	 * エラ〖券栏疤弥攫鼠を肋年	 */	gtk_label_set_text(file_label, filename);	gtk_label_set_text(func_label, funcname);	gtk_label_set_text(line_label, line_string);	gtk_text_buffer_insert_at_cursor(error_buffer, 	    error_message, -1);	gtk_text_buffer_insert_at_cursor(error_buffer, 	    "\n", -1);		/*	 * ダイアログ山绩	 */	gtk_widget_show(dialog);	gdk_threads_leave();	return;}/** クライアント攫鼠ダイアログを山绩する * @param[in] user      ユ〖ザ叹 * @param[in] ipaddr    IPアドレス * @param[in] command   攫鼠硷侍 *                        - IPMSG_SENDINFO         クライアント攫鼠を山绩 *                        - IPMSG_SENDABSENCEINFO  稍哼攫鼠を山绩 * @param[in] message   山绩する矢鞠 * @retval    0         赖撅姜位 * @retval   -EINVAL    messageがNULLである. * @retval   -EINVAL    稍赖なcommandを苞き畔した. */intinfo_message_window(const gchar *user,const gchar *ipaddr,     unsigned long command,const char *message){	GtkWidget          *window = NULL;  /*  ダイアログウィンドウ  */	GtkLabel        *userlabel = NULL;  /*  ユ〖ザ叹山绩ラベル  */	GtkLabel        *typelabel = NULL;  /*  攫鼠硷侍山绩ラベル  */	userdb_t        *user_info = NULL;  /*  ユ〖ザ攫鼠          */	char            buffer[64];         /*  矢机误腊妨脱バッファ  */	GtkTextView     *text_view = NULL;  /*  山绩挝拌脱テキストビュ〖  */	GtkTextBuffer *text_buffer = NULL;  /*  山绩挝拌のテキストバッファ */	gchar    *internal_message = NULL;  /*  山绩矢机误の柒婶妨及呈羌挝拌  */	size_t                 len = 0;     /*  山绩矢机误墓  */	unsigned long         skey = 0;     /*  滦疚赴芭规借妄墙蜗  */	unsigned long         akey = 0;     /*  润滦疚(给倡赴)芭规借妄墙蜗  */	unsigned long         sign = 0;     /*  金叹借妄墙蜗  */	int                     rc = 0;     /*  手り猛  */	dbg_out("here\n");	rc = -EINVAL;	if (message == NULL)		goto error_out;	/*	 *  ウィジェット惩评	 */	window = GTK_WIDGET(create_clientInfoWindow());	g_assert(window);	userlabel = GTK_LABEL(lookup_widget(window, "clientInfoUserLabel"));	g_assert(userlabel);	typelabel = GTK_LABEL(lookup_widget(window, "clientInfoTypeLabel"));	g_assert(typelabel);	text_view = GTK_TEXT_VIEW(lookup_widget(GTK_WIDGET(window), 		"clientInfoTextview"));	g_assert(text_view);	text_buffer = gtk_text_view_get_buffer(text_view);	g_assert(text_buffer);	/*	 * 硷侍冉年	 */	switch(command) {	case IPMSG_SENDINFO:		gtk_label_set_text(typelabel, _("Version Information"));		break;	case IPMSG_SENDABSENCEINFO:		gtk_label_set_text(typelabel, _("Absence Information"));		break;	default:		rc = -EINVAL;		goto error_out;		break;	}	/*	 * 叫蜗メッセ〖ジ腊妨	 */	rc = convert_string_internal(message, 	    (const gchar **)&internal_message);	if (internal_message == NULL) {		ipmsg_err_dialog(_("Can not convert message from %s into ineternal representation"), ipaddr);		goto error_out;	}	len = strlen(internal_message);	gtk_text_buffer_set_text(text_buffer, internal_message, len);	g_free(internal_message);	if (command == IPMSG_SENDABSENCEINFO)		goto show_out;  /*  稍哼矢の眷圭は, クライアント攫鼠は涩妥ない  */	/*	 * クライアント攫鼠叫蜗	 */	if ( (user != NULL) && (ipaddr != NULL) ) {		if (!userdb_search_user_by_addr(ipaddr, 			(const userdb_t **)&user_info)) {			g_assert(userlabel);			snprintf(buffer, 63, "%s@%s (%s)",			    user_info->nickname, user_info->host, 			    user_info->group);			buffer[63] = '\0';			gtk_label_set_text(userlabel,buffer);			/*			 * IPアドレス			 */			client_info_add_text(text_buffer, "\n");			client_info_add_text(text_buffer, "%s:%s\n",			    _("IP Address"), user_info->ipaddr);			client_info_add_text(text_buffer, "%s : 0x%08x\n", 			    _("Capability"), (unsigned int)user_info->cap);			/*			 * Dial up			 */			if (user_info->cap & IPMSG_DIALUPOPT)				client_info_add_text(text_buffer, 				    "%s : %s\n", _("Dial up"), _("YES"));			else				client_info_add_text(text_buffer, 				    "%s : %s\n", _("Dial up"), _("NO"));			/*			 * UTF-8			 */			if (user_info->cap & IPMSG_UTF8OPT)				client_info_add_text(text_buffer, 				    "%s : %s\n", _("UTF-8"), _("YES"));			else				client_info_add_text(text_buffer, 				    "%s : %s\n", _("UTF-8"), _("NO"));			/*			 * File Attach			 */			if (user_info->cap & IPMSG_FILEATTACHOPT)				client_info_add_text(text_buffer, 				    "%s : %s\n", _("File Attach"), _("YES"));			else				client_info_add_text(text_buffer, 				    "%s : %s\n", _("File Attach"), _("NO"));			/*			 * Encryption			 */						if (user_info->cap & IPMSG_ENCRYPTOPT) {				client_info_add_text(text_buffer, 				    "%s:%s (%s:0x%08x)\n", 				    _("Encryption Capability"), _("YES"),				    _("Capability"), user_info->crypt_cap);								akey = get_asymkey_part(user_info->crypt_cap);				skey = get_symkey_part(user_info->crypt_cap);				sign = get_sign_part(user_info->crypt_cap);				/*				 * Public key				 */				client_info_add_text(text_buffer, 				    "%s:", _("Public key encryption"));				if (akey != 0) {					if (akey & IPMSG_RSA_512)						client_info_add_text(text_buffer, "[%s]", _("RSA 512 bits"));					if (akey & IPMSG_RSA_1024)						client_info_add_text(text_buffer, "[%s]", _("RSA 1024 bits"));					if (akey & IPMSG_RSA_2048)						client_info_add_text(text_buffer, "[%s]", _("RSA 2048 bits"));				} else {					client_info_add_text(text_buffer, "[%s]", _("UnKnown"));				}				client_info_add_text(text_buffer, "\n");				/*				 * Symmetric key				 */				client_info_add_text(text_buffer, "%s:",				    _("Symmetric key encryption"));				if (skey != 0) {					if (skey & IPMSG_RC2_40)						client_info_add_text(text_buffer, "[%s]", _("RC2 40 bits"));					if (skey & IPMSG_RC2_128)						client_info_add_text(text_buffer, "[%s]", _("RC2 128 bits"));					if (skey & IPMSG_RC2_256)						client_info_add_text(text_buffer, "[%s]", _("RC2 256 bits"));					if (skey & IPMSG_BLOWFISH_128)						client_info_add_text(text_buffer, "[%s]", _("Blowfish 128 bits"));					if (skey & IPMSG_BLOWFISH_256)						client_info_add_text(text_buffer, "[%s]", _("Blowfish 256 bits"));				} else {					client_info_add_text(text_buffer, 					    "[%s]", _("UnKnown"));				}				client_info_add_text(text_buffer, "\n");				/*				 * Signature				 */				client_info_add_text(text_buffer, 				    "%s:", _("Signature"));				if (sign != 0) {					if (sign & IPMSG_SIGN_MD5)						client_info_add_text(text_buffer, "[%s]", _("MD5"));					if (skey & IPMSG_SIGN_SHA1)						client_info_add_text(text_buffer, "[%s]", _("SHA1"));				} else {					client_info_add_text(text_buffer, 					    "[%s]", _("UnKnown"));				}				client_info_add_text(text_buffer, "\n");			} else {				client_info_add_text(text_buffer, 				    "%s:%s\n", _("Encryption Capability"), 				    _("NO"));			}		} else {			gtk_label_set_text(userlabel, user);		}	} else {		gtk_label_set_text(userlabel,(_("UnKnown")));	}show_out:	gtk_widget_show(window);	rc=0;error_out:	if (user_info != NULL)		g_assert(!destroy_user_info(user_info));	if (user != NULL)		g_free((gchar *)user);	return rc;}

⌨️ 快捷键说明

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