Wed Dec 31 17:06:55 CET 2003 Jochen Eisinger <jochen@penguin-breeder.org>
authorJochen Eisinger <coffee@silcnet.org>
Wed, 31 Dec 2003 16:13:10 +0000 (16:13 +0000)
committerJochen Eisinger <coffee@silcnet.org>
Wed, 31 Dec 2003 16:13:10 +0000 (16:13 +0000)
* Make the session data filename configurable.  This makes it
  possible to have different session files for different
  SILC networks.  Affected files irssi/src/silc/core/silc-core.c,
  client_ops.[ch], silc-servers.c,
  irssi/src/silc/fe-common/silc/module-formats.[ch]

CHANGES
apps/irssi/src/fe-common/silc/module-formats.c
apps/irssi/src/fe-common/silc/module-formats.h
apps/irssi/src/silc/core/client_ops.c
apps/irssi/src/silc/core/client_ops.h
apps/irssi/src/silc/core/silc-core.c
apps/irssi/src/silc/core/silc-servers.c

diff --git a/CHANGES b/CHANGES
index 0b89f89a2e5493aad483138d4f30b2ae4685a00b..f372182a037b26178dc073ea44544c68f0e0eea5 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,15 @@
+Wed Dec 31 17:06:55 CET 2003  Jochen Eisinger <jochen@penguin-breeder.org>
+
+       * Don't use silc_get_input, it's obviously not reliable.  Fixes
+         issue when the current key expires.  Affect file
+         irssi/src/silc/core/clientutils.c
+
+       * Make the session data filename configurable.  This makes it
+         possible to have different session files for different
+         SILC networks.  Affected files irssi/src/silc/core/silc-core.c,
+         client_ops.[ch], silc-servers.c, 
+         irssi/src/silc/fe-common/silc/module-formats.[ch]
+
 Sun Dec 28 21:57:39 EET 2003  Pekka Riikonen <priikone@silcnet.org>
 
        * Fixed server statistics decrementing error to not go to
index ba8cdfcb319c00d06a4aaf32834d9c508f6d1856..d63f971620f30e48d0829c5a872a39fe2dab4e32 100644 (file)
@@ -163,6 +163,7 @@ FORMAT_REC fecommon_silc_formats[] = {
        { "watch_nick_change", "Watch: {nick $0} changed nickname to {nick $1}", 2, { 0, 0 } },
        { "message_data", "{nick $0} sent \"{hilight $1}\" data message: cannot display", 2, { 0, 0 } },
        { "stats", "$[25]0: {hilight $1}", 2, { 0, 0 } },
+       { "reattach", "Resuming old session on {hilight $0}, may take a while ...", 1, { 0 } },
 
        /* File transfer messages */
        { NULL, "FileTransfer", 0 },
index 4e8e8849afde67a23501b6decbae7c0cdcd63808..4e7c1ae398946cb51024d22c3778ff68cbc61311 100644 (file)
@@ -157,6 +157,7 @@ enum {
   SILCTXT_WATCH_NICK_CHANGE,
   SILCTXT_MESSAGE_DATA,
   SILCTXT_STATS,
+  SILCTXT_REATTACH,
 
   SILCTXT_FILL_5,
 
index bd3a610dc61032e4bb9eaee65baed1ff9ca56bfe..ba0201cc9311a687d01b358a41d00519cfbd6596 100644 (file)
@@ -34,6 +34,7 @@
 #include "levels.h"
 #include "settings.h"
 #include "ignore.h"
+#include "special-vars.h"
 #include "fe-common/core/printtext.h"
 #include "fe-common/core/fe-channels.h"
 #include "fe-common/core/keyboard.h"
@@ -49,6 +50,20 @@ silc_verify_public_key_internal(SilcClient client, SilcClientConnection conn,
                                SilcSKEPKType pk_type,
                                SilcVerifyPublicKey completion, void *context);
 
+char *silc_get_session_filename(SILC_SERVER_REC *server)
+{
+  char *file, *expanded;
+
+  expanded = parse_special_string(settings_get_str("session_filename"),
+                               SERVER(server), NULL, "", NULL, 0);
+
+  file = silc_calloc(1, strlen(expanded) + 255);
+  snprintf(file, strlen(expanded) + 255, "%s/%s", get_irssi_dir(), expanded);
+  free(expanded);
+
+  return file;
+}
+
 static void silc_get_umode_string(SilcUInt32 mode, char *buf,
                                  SilcUInt32 buf_size)
 {
@@ -1200,6 +1215,16 @@ void silc_connect(SilcClient client, SilcClientConnection conn,
       signal_emit("message own_nick", 4, server, server->nick, old, "");
       g_free(old);
     }
+
+    /* remove the detach data now */
+    {
+      char *file;
+
+      file = silc_get_session_filename(server);
+
+      unlink(file);
+      silc_free(file);
+    }
     break;
 
   default:
@@ -2866,13 +2891,14 @@ void
 silc_detach(SilcClient client, SilcClientConnection conn,
             const unsigned char *detach_data, SilcUInt32 detach_data_len)
 {
-  char file[256];
+  SILC_SERVER_REC *server = conn->context;
+  char *file;
 
   /* Save the detachment data to file. */
 
-  memset(file, 0, sizeof(file));
-  snprintf(file, sizeof(file) - 1, "%s/session", get_irssi_dir());
+  file = silc_get_session_filename(server);
   silc_file_writefile(file, detach_data, detach_data_len);
+  silc_free(file);
 }
 
 
index 31f5ad2989bc03af515ee948be049a5af09ec0eb..db982e0954e49f20c3f4793dd4a25f6fe9665fd8 100644 (file)
@@ -21,6 +21,8 @@
 #ifndef CLIENT_OPS_H
 #define CLIENT_OPS_H
 
+#include "silc-servers.h"
+
 void silc_say(SilcClient client, SilcClientConnection conn, 
              SilcClientMessageType type, char *msg, ...);
 void silc_say_error(char *msg, ...);
@@ -75,4 +77,7 @@ silc_unescape_data(const char *escaped_data, SilcUInt32 *length);
 char * 
 silc_escape_data(const char *data, SilcUInt32 len);
 
+char *
+silc_get_session_filename(SILC_SERVER_REC *server);
+
 #endif
index d4befe376eb7116e612596d4a904415516177241..7de591f318daec933edc126bb1eb7038480e98f7 100644 (file)
@@ -398,6 +398,7 @@ void silc_core_init(void)
   settings_add_int("server", "connauth_request_secs", 2);
   settings_add_int("server", "heartbeat", 300);
   settings_add_bool("server", "ignore_message_signatures", FALSE);
+  settings_add_str("server", "session_filename", "session.$chatnet");
 
   /* Requested Attributes settings */
   settings_add_bool("silc", "attr_allow", TRUE);
index db57213d2f9eb7b6f7506862878f209b79a48ae1..54360f59348a1c3d60808c4799117ce5732f9c76 100644 (file)
@@ -34,6 +34,7 @@
 
 #include "servers-setup.h"
 
+#include "client_ops.h"
 #include "silc-servers.h"
 #include "silc-channels.h"
 #include "silc-queries.h"
@@ -276,7 +277,7 @@ static void sig_connected(SILC_SERVER_REC *server)
 {
   SilcClientConnection conn;
   SilcClientConnectionParams params;
-  char file[256];
+  char *file;
   int fd;
 
   if (!IS_SILC_SERVER(server))
@@ -284,8 +285,7 @@ static void sig_connected(SILC_SERVER_REC *server)
 
   /* Try to read detached session data and use it if found. */
   memset(&params, 0, sizeof(params));
-  memset(file, 0, sizeof(file));
-  snprintf(file, sizeof(file) - 1, "%s/session", get_irssi_dir());
+  file = silc_get_session_filename(server);
   params.detach_data = silc_file_readfile(file, &params.detach_data_len);
   if (params.detach_data)
     params.detach_data[params.detach_data_len] = 0;
@@ -298,12 +298,10 @@ static void sig_connected(SILC_SERVER_REC *server)
   server->conn = conn;
 
   if (params.detach_data)
-    keyboard_entry_redirect(NULL,
-                           "-- Resuming old session, may take a while ...",
-                           ENTRY_REDIRECT_FLAG_HIDDEN, server);
+    printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP,
+                       SILCTXT_REATTACH, server->tag);
 
   silc_free(params.detach_data);
-  unlink(file);
 
   fd = g_io_channel_unix_get_fd(net_sendbuffer_handle(server->handle));