+Thu Mar 21 19:12:22 EET 2002 Timo Sirainen <tss@iki.fi>
+
+ * Changed hardcoded ~/.silc paths to use get_irssi_dir() so you
+ can specify different directory with --home command line
+ parameter. Affected files irssi/src/silc/core/client_ops.c,
+ clientutil.c
+
+ * SILC-specific commands aren't now executed if the active server
+ isn't of SILC-type, so there won't be problems with having
+ IRC and SILC protocol support in same client. Affected files
+ irssi/src/silc/core/silc-channels.c, silc-servers.c,
+ silc-commands.h
+
Wed Mar 20 11:06:57 CET 2002 Pekka Riikonen <priikone@silcnet.org>
* Improved the signal support in SILC Schedule. Added new
#include "fe-common/core/keyboard.h"
#include "fe-common/silc/module-formats.h"
+#include "core.h"
+
static void
silc_verify_public_key_internal(SilcClient client, SilcClientConnection conn,
const char *name, SilcSocketType conn_type,
if (!name) {
snprintf(file, sizeof(file) - 1, "%skey_%s_%d.pub", entity,
conn->sock->ip, conn->sock->port);
- snprintf(filename, sizeof(filename) - 1, "%s/.silc/%skeys/%s",
- pw->pw_dir, entity, file);
+ snprintf(filename, sizeof(filename) - 1, "%s/%skeys/%s",
+ get_irssi_dir(), entity, file);
snprintf(file, sizeof(file) - 1, "%skey_%s_%d.pub", entity,
conn->sock->hostname, conn->sock->port);
- snprintf(filename2, sizeof(filename2) - 1, "%s/.silc/%skeys/%s",
- pw->pw_dir, entity, file);
+ snprintf(filename2, sizeof(filename2) - 1, "%s/%skeys/%s",
+ get_irssi_dir(), entity, file);
ipf = filename;
hostf = filename2;
} else {
snprintf(file, sizeof(file) - 1, "%skey_%s_%d.pub", entity,
name, conn->sock->port);
- snprintf(filename, sizeof(filename) - 1, "%s/.silc/%skeys/%s",
- pw->pw_dir, entity, file);
+ snprintf(filename, sizeof(filename) - 1, "%s/%skeys/%s",
+ get_irssi_dir(), entity, file);
ipf = filename;
}
fingerprint[i] = '_';
snprintf(file, sizeof(file) - 1, "%skey_%s.pub", entity, fingerprint);
- snprintf(filename, sizeof(filename) - 1, "%s/.silc/%skeys/%s",
- pw->pw_dir, entity, file);
+ snprintf(filename, sizeof(filename) - 1, "%s/%skeys/%s",
+ get_irssi_dir(), entity, file);
silc_free(fingerprint);
ipf = filename;
#include "fe-common/core/printtext.h"
#include "fe-common/core/keyboard.h"
+#include "core.h"
+
/* Lists supported ciphers */
void silc_client_list_ciphers()
}
/* We'll take home path from /etc/passwd file to be sure. */
- snprintf(filename, sizeof(filename) - 1, "%s/.silc/", pw->pw_dir);
- snprintf(servfilename, sizeof(servfilename) - 1, "%s/.silc/serverkeys",
- pw->pw_dir);
- snprintf(clientfilename, sizeof(clientfilename) - 1, "%s/.silc/clientkeys",
- pw->pw_dir);
+ snprintf(filename, sizeof(filename) - 1, "%s/", get_irssi_dir());
+ snprintf(servfilename, sizeof(servfilename) - 1, "%s/serverkeys",
+ get_irssi_dir());
+ snprintf(clientfilename, sizeof(clientfilename) - 1, "%s/clientkeys",
+ get_irssi_dir());
/*
* Check ~/.silc directory
return FALSE;
memset(filename, 0, sizeof(filename));
- snprintf(filename, sizeof(filename) - 1, "%s/.silc/%s",
- pw->pw_dir, SILC_CLIENT_PRIVATE_KEY_NAME);
+ snprintf(filename, sizeof(filename) - 1, "%s/%s",
+ get_irssi_dir(), SILC_CLIENT_PRIVATE_KEY_NAME);
if (silc_pkcs_load_private_key(filename, &client->private_key,
SILC_PKCS_FILE_BIN) == FALSE)
return FALSE;
memset(filename, 0, sizeof(filename));
- snprintf(filename, sizeof(filename) - 1, "%s/.silc/%s",
- pw->pw_dir, SILC_CLIENT_PUBLIC_KEY_NAME);
+ snprintf(filename, sizeof(filename) - 1, "%s/%s",
+ get_irssi_dir(), SILC_CLIENT_PUBLIC_KEY_NAME);
if (silc_pkcs_load_public_key(filename, &client->public_key,
SILC_PKCS_FILE_PEM) == FALSE)
#include "fe-common/core/printtext.h"
#include "fe-common/silc/module-formats.h"
+#include "silc-commands.h"
+
SILC_CHANNEL_REC *silc_channel_create(SILC_SERVER_REC *server,
const char *name, int automatic)
{
SILC_CHANNEL_REC *chanrec;
char userhost[256];
+ CMD_SILC_SERVER(server);
+
if (!IS_SILC_SERVER(server) || !server->connected)
cmd_return_error(CMDERR_NOT_CONNECTED);
SilcUInt32 *argv_lens, *argv_types;
int i;
+ CMD_SILC_SERVER(server);
+
if (!IS_SILC_SERVER(server) || !server->connected)
cmd_return_error(CMDERR_NOT_CONNECTED);
SilcUInt32 *argv_lens, *argv_types;
int i;
+ CMD_SILC_SERVER(server);
if (!IS_SILC_SERVER(server) || !server->connected)
cmd_return_error(CMDERR_NOT_CONNECTED);
SilcUInt32 *argv_lens, *argv_types;
int i;
+ CMD_SILC_SERVER(server);
if (!IS_SILC_SERVER(server) || !server->connected)
cmd_return_error(CMDERR_NOT_CONNECTED);
{
bool set;
+ CMD_SILC_SERVER(server);
+
if (!IS_SILC_SERVER(server) || !server->connected)
cmd_return_error(CMDERR_NOT_CONNECTED);
SilcUInt32 *argv_lens, *argv_types;
char *bindhost = NULL;
+ CMD_SILC_SERVER(server);
+
if (!server || !IS_SILC_SERVER(server) || !server->connected)
cmd_return_error(CMDERR_NOT_CONNECTED);
signal_add("server connected", (SIGNAL_FUNC) sig_connected);
signal_add("server quit", (SIGNAL_FUNC) sig_server_quit);
- command_bind("part", MODULE_NAME, (SIGNAL_FUNC) command_part);
- command_bind("me", MODULE_NAME, (SIGNAL_FUNC) command_me);
- command_bind("action", MODULE_NAME, (SIGNAL_FUNC) command_action);
- command_bind("notice", MODULE_NAME, (SIGNAL_FUNC) command_notice);
- command_bind("away", MODULE_NAME, (SIGNAL_FUNC) command_away);
- command_bind("key", MODULE_NAME, (SIGNAL_FUNC) command_key);
- command_bind("listkeys", MODULE_NAME, (SIGNAL_FUNC) command_listkeys);
+ command_bind_silc("part", MODULE_NAME, (SIGNAL_FUNC) command_part);
+ command_bind_silc("me", MODULE_NAME, (SIGNAL_FUNC) command_me);
+ command_bind_silc("action", MODULE_NAME, (SIGNAL_FUNC) command_action);
+ command_bind_silc("notice", MODULE_NAME, (SIGNAL_FUNC) command_notice);
+ command_bind_silc("away", MODULE_NAME, (SIGNAL_FUNC) command_away);
+ command_bind_silc("key", MODULE_NAME, (SIGNAL_FUNC) command_key);
+ command_bind_silc("listkeys", MODULE_NAME, (SIGNAL_FUNC) command_listkeys);
silc_nicklist_init();
}
--- /dev/null
+#ifndef SILC_COMMANDS_H
+#define SILC_COMMANDS_H
+
+#define command_bind_silc(cmd, section, signal) \
+ command_bind_proto(cmd, SILC_PROTOCOL, section, signal)
+#define command_bind_silc_first(cmd, section, signal) \
+ command_bind_proto_first(cmd, SILC_PROTOCOL, section, signal)
+#define command_bind_silc_last(cmd, section, signal) \
+ command_bind_proto_last(cmd, SILC_PROTOCOL, section, signal)
+
+/* Simply returns if server isn't for SILC protocol. Prints ERR_NOT_CONNECTED
+ error if there's no server or server isn't connected yet */
+#define CMD_SILC_SERVER(server) \
+ G_STMT_START { \
+ if (server != NULL && !IS_SILC_SERVER(server)) \
+ return; \
+ if (server == NULL || !(server)->connected) \
+ cmd_return_error(CMDERR_NOT_CONNECTED); \
+ } G_STMT_END
+
+#endif
#include "fe-common/core/printtext.h"
#include "fe-common/silc/module-formats.h"
+#include "silc-commands.h"
+
void silc_servers_reconnect_init(void);
void silc_servers_reconnect_deinit(void);
static void command_self(const char *data, SILC_SERVER_REC *server,
WI_ITEM_REC *item)
{
+ CMD_SILC_SERVER(server);
+
if (!IS_SILC_SERVER(server) || !server->connected) {
printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Not connected to server");
return;
static void command_sconnect(const char *data, SILC_SERVER_REC *server)
{
+ CMD_SILC_SERVER(server);
if (!IS_SILC_SERVER(server) || !server->connected) {
printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Not connected to server");
return;
SilcUInt32 local_port = 0;
SilcUInt32 session_id;
+ CMD_SILC_SERVER(server);
if (!server || !IS_SILC_SERVER(server) || !server->connected)
cmd_return_error(CMDERR_NOT_CONNECTED);
signal_add_first("server connected", (SIGNAL_FUNC) sig_connected);
signal_add("server disconnected", (SIGNAL_FUNC) sig_disconnected);
- command_bind("whois", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("whowas", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("nick", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("topic", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("cmode", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("cumode", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("users", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("list", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("ban", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("oper", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("silcoper", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("umode", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("invite", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("kill", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("kick", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("info", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("ping", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("motd", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("close", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("shutdown", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("getkey", MODULE_NAME, (SIGNAL_FUNC) command_self);
- command_bind("sconnect", MODULE_NAME, (SIGNAL_FUNC) command_sconnect);
- command_bind("file", MODULE_NAME, (SIGNAL_FUNC) command_file);
+ command_bind_silc("whois", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("whowas", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("nick", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("topic", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("cmode", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("cumode", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("users", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("list", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("ban", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("oper", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("silcoper", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("umode", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("invite", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("kill", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("kick", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("info", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("ping", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("motd", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("close", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("shutdown", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("getkey", MODULE_NAME, (SIGNAL_FUNC) command_self);
+ command_bind_silc("sconnect", MODULE_NAME, (SIGNAL_FUNC) command_sconnect);
+ command_bind_silc("file", MODULE_NAME, (SIGNAL_FUNC) command_file);
command_set_options("connect", "+silcnet");
}