📄 main.c
字号:
/*************************************************************************** * main.c * * Fri Aug 24 09:11:56 2007 * Copyright 2007 hunbuso * hunbuso@gmail.com ****************************************************************************/#ifdef HAVE_CONFIG_H# include <config.h>#endif#include "main.h"#include "logger.h"#include "configrc.h"#include "gui.h"#include "libproxyfish.h"ProxyFishApp* app = NULL; ///主程序static ProxyFishConf cfg;typedef struct proxyfish_cfg_nument_t { char const *ie_vname; gint *ie_vloc; gboolean ie_wrt;} proxyfish_cfg_nument;static proxyfish_cfg_nument proxyfish_numents[] = { {"ck_port_to", &cfg.ck_port_to, TRUE},};static gint ncfgient = G_N_ELEMENTS(proxyfish_numents);/* 默认配置 */ProxyFishConf proxyfish_default_config = { 6, /* 检测端口超时 */};static void proxyfish_usage (void){ fprintf(stderr, "/**********************************************************\n"); fprintf(stderr, " * %s %s \n * Copyright (C) 2007 ToFree organization, www.tofree.org.\n", PACKAGE, VERSION); fprintf(stderr, " * Authors and E-mail: \n %s\n", AUTHORS); fprintf(stderr, " * Welcome to our forum\n"); fprintf(stderr, " * http://www.tofree.org/Forum/index.php\n"); fprintf(stderr, " **********************************************************/\n"); return;}static void app_init(int argc, char *argv[]){ g_thread_init(NULL); if(!g_thread_supported()) { g_printerr(_("Sorry, threads isn't supported on your platform.\n\n" "If you're on a libc5 based linux system and installed Glib & GTK+ before you\n" "installed LinuxThreads you need to recompile Glib & GTK+.\n")); exit(EXIT_FAILURE); } gdk_threads_init (); #ifdef ENABLE_NLS gchar* zh_cn_path = g_build_filename(PACKAGE_SOURCE_DIR, "/po/zh_CN/LC_MESSAGES/proxyfish.mo", NULL); gchar* po_path = g_build_filename(PACKAGE_SOURCE_DIR, "/po", NULL); if (g_file_test(zh_cn_path, \ G_FILE_TEST_IS_REGULAR |G_FILE_TEST_EXISTS)) { bindtextdomain (GETTEXT_PACKAGE, po_path); } else { bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); } g_free(zh_cn_path); g_free(po_path); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE);#endif gtk_set_locale (); gtk_init (&argc, &argv); add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps"); add_pixmap_directory (PACKAGE_SOURCE_DIR "/pixmaps"); /** 初始化线程池 */ app->env.thread_pool = proxy_fish_thread_pool_init(); g_assert(app->env.thread_pool != NULL); /** 创建主窗口 */ app->gui.window_main = create_window_main (); /** 主窗口界面的初始化 */ window_main_init(); gtk_widget_show (app->gui.window_main);}void app_exit (void){}static void make_directory(const gchar * path, mode_t mode){ if (mkdir(path, mode) == 0) return; if (errno == EEXIST) return; g_printerr(_("Could not create directory (%s): %s"), path, g_strerror(errno));}static void app_make_user_dir (void){ const mode_t mode755 = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; make_directory(app->env.rcpaths.proxyfish_user_dir, mode755);}static void app_free_path (void){ g_free(app->env.rcpaths.proxyfish_user_dir); g_free(app->env.rcpaths.proxyfish_config_filename); g_free(app->env.rcpaths.proxyfish_log_filename);}static void app_init_paths(void){ app->env.rcpaths.proxyfish_user_dir = g_build_filename(g_get_home_dir(), \ PROXYFISH_RCPATH, NULL); app->env.rcpaths.proxyfish_config_filename = g_build_filename(app->env.rcpaths.proxyfish_user_dir, \ PROXYFISH_CONFIG_BASENAME, NULL); app->env.rcpaths.proxyfish_log_filename = g_build_filename(app->env.rcpaths.proxyfish_user_dir, \ PROXYFISH_LOG_BASENAME, NULL); g_atexit(app_free_path);}static voidproxyfish_setup_logger(void){ if (!proxyfish_logger_start(app->env.rcpaths.proxyfish_log_filename)) return; g_atexit(proxyfish_logger_stop);}static voidsegfault_handler(gint sig){ g_printerr(_("\nReceived SIGSEGV\n\n" "This could be a bug in ProxyFish. If you don't know why this happened, " "send a mail to us at hunbuso@gmail.com\n\n")); GtkWidget *window_message_warning; window_message_warning = gtk_message_dialog_new(GTK_WINDOW(app->gui.window_main), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, _("\nReceived SIGSEGV\n\n" "This could be a bug in ProxyFish. If you don't know why this happened, " "send a mail to us at hunbuso@gmail.com\n\n")); GTK_WINDOW (window_message_warning)->type = GTK_WINDOW_POPUP; gtk_dialog_run(GTK_DIALOG(window_message_warning)); gtk_widget_destroy (window_message_warning); #ifdef HANDLE_SIGSEGV exit(EXIT_FAILURE);#else abort();#endif}voidproxyfish_config_load(void){ ConfigDb *db; gint i; memcpy(&app->conf, &proxyfish_default_config, sizeof(ProxyFishConf)); db = proxyfish_cfg_db_open(); for (i = 0; i < ncfgient; ++i) { proxyfish_cfg_db_get_int(db, NULL, proxyfish_numents[i].ie_vname, proxyfish_numents[i].ie_vloc); } proxyfish_cfg_db_close(db);}intmain (int argc, char *argv[]){ app = g_new0(ProxyFishApp, 1); signal(SIGSEGV, segfault_handler); ///捕捉段错误信号 signal(SIGPIPE, SIG_IGN); ///忽略broken pipe信号 proxyfish_usage(); app_init_paths(); app_make_user_dir(); proxyfish_setup_logger(); proxyfish_config_load(); app_init(argc, argv); g_atexit(app_exit); gdk_threads_enter(); gtk_main (); gdk_threads_leave(); return EXIT_SUCCESS;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -