From: Jochen Eisinger Date: Tue, 10 Apr 2007 13:59:43 +0000 (+0000) Subject: Tue Apr 10 15:55:42 CEST 2007 Jochen Eisinger X-Git-Tag: 1.2.beta1~399 X-Git-Url: http://git.silcnet.org/gitweb/?p=crypto.git;a=commitdiff_plain;h=44e795fef6b2a2d3729175bfdf5c223dfada69d5 Tue Apr 10 15:55:42 CEST 2007 Jochen Eisinger * Add option --enable-silc-plugin. Affected files are apps/irssi/configure.{ad,in} * Only compile the SILC Plugin if required. Affected files are apps/irssi/src/Makefile.am, apps/irssi/src/fe-common/Makefile.am * Conditionally build the SILC Plugin. Affected files are apps/irssi/src/silc/core/Makefile.am, apps/irssi/src/fe-common/silc/Makefile.am * Backout delayed protocol exit and replace with a lame busy wait. Affected files are apps/irssi/src/fe-text/silc.c, apps/irssi/src/silc/core/silc-core.c * Fix key generation for SILC Plugin. Affected file apps/irssi/src/silc/core/clientutil.c --- diff --git a/CHANGES b/CHANGES index 337bc818..74492cea 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,18 @@ +Tue Apr 10 15:55:42 CEST 2007 Jochen Eisinger + + * Add option --enable-silc-plugin. Affected files are + apps/irssi/configure.{ad,in} + * Only compile the SILC Plugin if required. Affected files are + apps/irssi/src/Makefile.am, apps/irssi/src/fe-common/Makefile.am + * Conditionally build the SILC Plugin. Affected files are + apps/irssi/src/silc/core/Makefile.am, + apps/irssi/src/fe-common/silc/Makefile.am + * Backout delayed protocol exit and replace with a lame busy + wait. Affected files are apps/irssi/src/fe-text/silc.c, + apps/irssi/src/silc/core/silc-core.c + * Fix key generation for SILC Plugin. Affected file + apps/irssi/src/silc/core/clientutil.c + Tue Apr 10 12:40:19 CEST 2007 Jochen Eisinger * Only pass -rpath to libtool when building shared libraries. diff --git a/apps/irssi/configure.ad b/apps/irssi/configure.ad index 4b3b1b7f..a25473e7 100644 --- a/apps/irssi/configure.ad +++ b/apps/irssi/configure.ad @@ -52,6 +52,11 @@ AC_ARG_WITH(perl, if it should be built into main silc binary (static, default) or as a module]]) +# Irssi SILC Plugin support +# +AC_ARG_ENABLE(silc-plugin, +[ --enable-silc-plugin Compile the SILC Plugin instead of the SILC Client]) + AC_CONFIG_SUBDIRS(apps/irssi) AC_CONFIG_FILES( apps/irssi/Makefile.defines diff --git a/apps/irssi/configure.in b/apps/irssi/configure.in index 68c990a2..c1b1aaf5 100644 --- a/apps/irssi/configure.in +++ b/apps/irssi/configure.in @@ -189,6 +189,17 @@ AC_ARG_WITH(perl, fi, want_perl=static) +# Irssi SILC Plugin support +# +AC_ARG_ENABLE(silc-plugin, +[ --enable-silc-plugin Compile the SILC Plugin instead of the SILC Client], +[case "${enableval}" in + yes) silc_plugin=true ;; + no) silc_plugin=false ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-silc-plugin) ;; +esac],[silc_plugin=false]) +AM_CONDITIONAL(SILCPLUGIN, test x$silc_plugin = xtrue) + AC_ARG_WITH(file-offset-size, [ --with-file-offset-size=BITS Set size of file offsets. Usually 32 or 64. (default: 64 if available)], diff --git a/apps/irssi/src/Makefile.am b/apps/irssi/src/Makefile.am index d27958c7..13de33af 100644 --- a/apps/irssi/src/Makefile.am +++ b/apps/irssi/src/Makefile.am @@ -10,10 +10,17 @@ if HAVE_PERL PERLDIR=perl endif +if SILCPLUGIN +SBDRS= +TEXTUI= +else +SBDRS=lib-popt lib-config core +endif + pkginc_srcdir=$(pkgincludedir)/src pkginc_src_HEADERS = \ common.h noinst_HEADERS = \ common.h -SUBDIRS = lib-popt lib-config core silc fe-common $(PERLDIR) $(TEXTUI) $(BOTUI) +SUBDIRS = $(SBDRS) silc fe-common $(PERLDIR) $(TEXTUI) $(BOTUI) diff --git a/apps/irssi/src/fe-common/Makefile.am b/apps/irssi/src/fe-common/Makefile.am index de959118..8c174946 100644 --- a/apps/irssi/src/fe-common/Makefile.am +++ b/apps/irssi/src/fe-common/Makefile.am @@ -1 +1,7 @@ -SUBDIRS = core silc +if SILCPLUGIN +SBDRS= +else +SBDRS=core +endif + +SUBDIRS = $(SBDRS) silc diff --git a/apps/irssi/src/fe-common/silc/Makefile.am b/apps/irssi/src/fe-common/silc/Makefile.am index 731e5356..f79f98b4 100644 --- a/apps/irssi/src/fe-common/silc/Makefile.am +++ b/apps/irssi/src/fe-common/silc/Makefile.am @@ -1,5 +1,19 @@ IRSSI_INCLUDE=../../.. +if SILCPLUGIN +EXTRA_CFLAGS=-DSILC_PLUGIN +NILB= +LTLB= libfe_common_silc.la +LDFLGS= \ + -avoid-version \ + -rpath $(moduledir) +else +EXTRA_CFLAGS= +NILB= libfe_common_silc.la +LTLB= +LDFLGS= +endif + include $(top_srcdir)/Makefile.defines.in ADD_INCLUDES = \ @@ -25,11 +39,16 @@ ADD_INCLUDES = \ -I$(SILC_INCLUDE)/lib/silchttp \ -I$(SILC_INCLUDE)/lib/silcclient \ -I$(SILC_INCLUDE)/lib/silcmath/gmp \ - -I$(SILC_INCLUDE)/lib/trq + -I$(SILC_INCLUDE)/lib/trq \ + $(EXTRA_CFLAGS) + +noinst_LTLIBRARIES = $(NILB) +module_LTLIBRARIES = $(LTLB) -noinst_LIBRARIES = libfe_common_silc.a +libfe_common_silc_la_LDFLAGS = \ + $(LDFGS) -libfe_common_silc_a_SOURCES = \ +libfe_common_silc_la_SOURCES = \ fe-silc-channels.c \ fe-common-silc.c \ module-formats.c \ diff --git a/apps/irssi/src/fe-text/Makefile.am b/apps/irssi/src/fe-text/Makefile.am index a03b15d7..20892964 100644 --- a/apps/irssi/src/fe-text/Makefile.am +++ b/apps/irssi/src/fe-text/Makefile.am @@ -19,7 +19,7 @@ silc_DEPENDENCIES = \ LIBS = $(SILC_COMMON_LIBS) silc_LDADD = \ @COMMON_LIBS@ \ - -L$(silc_top_srcdir)/lib -lsilcclient \ + -lsilcclient \ @PERL_LINK_LIBS@ \ @PERL_FE_LINK_LIBS@ \ @PERL_LINK_FLAGS@ \ diff --git a/apps/irssi/src/fe-text/silc.c b/apps/irssi/src/fe-text/silc.c index c5f68a8d..000d5f68 100644 --- a/apps/irssi/src/fe-text/silc.c +++ b/apps/irssi/src/fe-text/silc.c @@ -78,28 +78,11 @@ static int dirty, full_redraw, dummy; static GMainLoop *main_loop; int quitting; -int quit_signalled; -int protocols_deinit; static int display_firsttimer = FALSE; -/* Protocol exit signal to tell protocol has gone away. Safe to quit. */ - -static void sig_protocol_exit(void) -{ - protocols_deinit = TRUE; - if (!quitting && quit_signalled) - quitting = TRUE; -} - static void sig_exit(void) { - quit_signalled = TRUE; - - /* If protocol hasn't finished yet, wait untill it sends "chat protocol - deinit" signal. */ - if (!protocols_deinit) - return; quitting = TRUE; } @@ -160,15 +143,11 @@ static void textui_init(void) theme_register(gui_text_formats); signal_add_last("gui exit", (SIGNAL_FUNC) sig_exit); - signal_add_last("chat protocol deinit", - (SIGNAL_FUNC) sig_protocol_exit); } static void textui_finish_init(void) { quitting = FALSE; - quit_signalled = FALSE; - protocols_deinit = FALSE; if (dummy) term_dummy_init(); @@ -221,7 +200,6 @@ static void textui_deinit(void) dirty_check(); /* one last time to print any quit messages */ signal_remove("gui exit", (SIGNAL_FUNC) sig_exit); - signal_remove("chat protocol deinit", (SIGNAL_FUNC) sig_protocol_exit); if (dummy) term_dummy_deinit(); @@ -348,8 +326,6 @@ int main(int argc, char **argv) dummy = FALSE; quitting = FALSE; - quit_signalled = FALSE; - protocols_deinit = FALSE; core_init_paths(argc, argv); check_files(); diff --git a/apps/irssi/src/silc/core/Makefile.am b/apps/irssi/src/silc/core/Makefile.am index 3e7d43a6..22320187 100644 --- a/apps/irssi/src/silc/core/Makefile.am +++ b/apps/irssi/src/silc/core/Makefile.am @@ -2,6 +2,24 @@ include $(top_srcdir)/Makefile.defines.in IRSSI_INCLUDE=../../.. +if SILCPLUGIN +EXTRA_CFLAGS=-DSILC_PLUGIN +LBDD= \ + $(top_srcdir)/../../lib/libsilc.la \ + $(top_srcdir)/../../lib/libsilcclient.la +LTLB= libsilc_core.la +NILB= +LBLDFLGS= \ + -avoid-version \ + -rpath $(moduledir) +else +EXTRA_CFLAGS= +LBDD= +NILB= libsilc_core.la +LTLB= +LBLDFLGS= +endif + ADD_INCLUDES = \ $(GLIB_CFLAGS) -I$(IRSSI_INCLUDE) -I$(IRSSI_INCLUDE)/src \ -DSYSCONFDIR=\""$(silc_etcdir)"\" \ @@ -9,11 +27,13 @@ ADD_INCLUDES = \ -I$(IRSSI_INCLUDE)/src \ -I$(IRSSI_INCLUDE)/src/core \ -I$(IRSSI_INCLUDE)/src/fe-common/core \ - -I$(IRSSI_INCLUDE)/src/fe-common/silc + -I$(IRSSI_INCLUDE)/src/fe-common/silc \ + $(EXTRA_CFLAGS) -noinst_LIBRARIES=libsilc_core.a +noinst_LTLIBRARIES= $(NILB) +module_LTLIBRARIES = $(LTLB) -libsilc_core_a_SOURCES = \ +libsilc_core_la_SOURCES = \ clientutil.c \ silc-channels.c \ silc-core.c \ @@ -27,6 +47,12 @@ libsilc_core_a_SOURCES = \ silc-cmdqueue.c \ client_ops.c +libsilc_core_la_LIBADD = \ + $(LBDD) + +libsilc_core_la_LDFLAGS = \ + $(LBDFLGS) + noinst_HEADERS = \ module.h \ client_ops.h \ @@ -40,3 +66,10 @@ noinst_HEADERS = \ silc-chatnets.h \ silc-cmdqueue.h +all-local: libsilc_core.a + +clean-local: + -rm -f libsilc_core.a + +libsilc_core.a: libsilc_core.la + cp .libs/libsilc_core.a . diff --git a/apps/irssi/src/silc/core/clientutil.c b/apps/irssi/src/silc/core/clientutil.c index 0be681a3..7c8031aa 100644 --- a/apps/irssi/src/silc/core/clientutil.c +++ b/apps/irssi/src/silc/core/clientutil.c @@ -371,6 +371,8 @@ int silc_client_load_keys(SilcClient client) } #ifdef SILC_PLUGIN +extern void irssi_redraw(void); /* dirty, I know */ + void create_key_passphrase(const char *answer, CREATE_KEY_REC *rec) { char priv_key_file[128], pub_key_file[128]; @@ -406,7 +408,7 @@ void create_key_passphrase(const char *answer, CREATE_KEY_REC *rec) if (silc_create_key_pair(rec->pkcs, rec->bits, pub_key_file, priv_key_file, NULL, (rec->passphrase == NULL ? "" : rec->passphrase), - NULL, NULL, NULL, FALSE) == TRUE) + NULL, NULL, FALSE) == TRUE) printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP, SILCTXT_CONFIG_CREATE); else diff --git a/apps/irssi/src/silc/core/silc-core.c b/apps/irssi/src/silc/core/silc-core.c index 0ef48326..3084f740 100644 --- a/apps/irssi/src/silc/core/silc-core.c +++ b/apps/irssi/src/silc/core/silc-core.c @@ -244,7 +244,7 @@ static void silc_register_cipher(SilcClient client, const char *cipher) SILC_LOG_ERROR(("Unknown cipher `%s'", cipher)); #ifdef SILC_PLUGIN init_failed = -1; - returnn; + return; #else exit(1); #endif @@ -270,7 +270,7 @@ static void silc_register_hash(SilcClient client, const char *hash) SILC_LOG_ERROR(("Unknown hash function `%s'", hash)); #ifdef SILC_PLUGIN init_failed = -1; - returnn; + return; #else exit(1); #endif @@ -296,7 +296,7 @@ static void silc_register_hmac(SilcClient client, const char *hmac) SILC_LOG_ERROR(("Unknown HMAC `%s'", hmac)); #ifdef SILC_PLUGIN init_failed = -1; - returnn; + return; #else exit(1); #endif @@ -549,20 +549,11 @@ out: #undef FUNCTION_EXIT /* Called to indicate the client library has stopped. */ - static void silc_stopped(SilcClient client, void *context) { SILC_LOG_DEBUG(("Client library has stopped")); - if (idletag != -1) - g_source_remove(idletag); - signal_emit("chat protocol deinit", 1, - chat_protocol_find("SILC")); -} - -static void sig_gui_quit(SILC_SERVER_REC *server, const char *msg) -{ - silc_client_stop(silc_client, silc_stopped, NULL); + *(int*)context = -1; } /* Called to indicate the client library is running. */ @@ -708,7 +699,6 @@ void silc_core_init(void) #ifndef SILC_PLUGIN signal_add("irssi init finished", (SIGNAL_FUNC) sig_init_finished); #endif - signal_add("gui exit", (SIGNAL_FUNC) sig_gui_quit); #if defined (SILC_PLUGIN) && defined (SILC_DEBUG) if (settings_get_bool("debug") == TRUE) @@ -801,19 +791,26 @@ void silc_core_deinit(void) if (idletag != -1) g_source_remove(idletag); + int stopped = 0; + silc_client_stop(silc_client, silc_stopped, &stopped); + + while (!stopped) + silc_client_run_one(silc_client); + if (opt_hostname) silc_free(opt_hostname); if (opt_nickname) g_free(opt_nickname); signal_remove("setup changed", (SIGNAL_FUNC) sig_setup_changed); - signal_remove("gui exit", (SIGNAL_FUNC) sig_gui_quit); #ifdef SILC_PLUGIN command_unbind("silc", (SIGNAL_FUNC) silc_opt_callback); #else signal_remove("irssi init finished", (SIGNAL_FUNC) sig_init_finished); #endif + signal_emit("chat protocol deinit", 1, chat_protocol_find("SILC")); + silc_hash_free(sha1hash); silc_queue_deinit();