#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,
- unsigned char *pk, uint32 pk_len,
+ unsigned char *pk, SilcUInt32 pk_len,
SilcSKEPKType pk_type,
SilcVerifyPublicKey completion, void *context);
void silc_channel_message(SilcClient client, SilcClientConnection conn,
SilcClientEntry sender, SilcChannelEntry channel,
- SilcMessageFlags flags, char *msg)
+ SilcMessageFlags flags, const unsigned char *message,
+ SilcUInt32 message_len)
{
SILC_SERVER_REC *server;
SILC_NICK_REC *nick;
SILC_LOG_DEBUG(("Start"));
- if (!msg)
+ if (!message)
return;
server = conn == NULL ? NULL : conn->context;
if (flags & SILC_MESSAGE_FLAG_ACTION)
printformat_module("fe-common/silc", server, channel->channel_name,
MSGLEVEL_ACTIONS, SILCTXT_CHANNEL_ACTION,
- nick == NULL ? "[<unknown>]" : nick->nick, msg);
+ nick == NULL ? "[<unknown>]" : nick->nick, message);
else if (flags & SILC_MESSAGE_FLAG_NOTICE)
printformat_module("fe-common/silc", server, channel->channel_name,
MSGLEVEL_NOTICES, SILCTXT_CHANNEL_NOTICE,
- nick == NULL ? "[<unknown>]" : nick->nick, msg);
+ nick == NULL ? "[<unknown>]" : nick->nick, message);
else
- signal_emit("message public", 6, server, msg,
+ signal_emit("message public", 6, server, message,
nick == NULL ? "[<unknown>]" : nick->nick,
nick == NULL ? "" : nick->host == NULL ? "" : nick->host,
chanrec->name, nick);
void silc_private_message(SilcClient client, SilcClientConnection conn,
SilcClientEntry sender, SilcMessageFlags flags,
- char *msg)
+ const unsigned char *message,
+ SilcUInt32 message_len)
{
SILC_SERVER_REC *server;
char userhost[256];
if (sender->username)
snprintf(userhost, sizeof(userhost) - 1, "%s@%s",
sender->username, sender->hostname);
- signal_emit("message private", 4, server, msg,
+ signal_emit("message private", 4, server, message,
sender->nickname ? sender->nickname : "[<unknown>]",
sender->username ? userhost : NULL);
}
SILC_CHANNEL_REC *chanrec;
SILC_NICK_REC *nickrec;
SilcClientEntry client_entry, client_entry2;
- SilcChannelEntry channel;
+ SilcChannelEntry channel, channel2;
SilcServerEntry server_entry;
SilcIdType idtype;
void *entry;
- uint32 mode;
+ SilcUInt32 mode;
char userhost[512];
char *name, *tmp;
GSList *list1, *list_tmp;
client_entry = va_arg(va, SilcClientEntry);
client_entry2 = va_arg(va, SilcClientEntry);
- nicklist_rename_unique(SERVER(server),
- client_entry, client_entry->nickname,
- client_entry2, client_entry2->nickname);
-
memset(userhost, 0, sizeof(userhost));
snprintf(userhost, sizeof(userhost) - 1, "%s@%s",
client_entry2->username, client_entry2->hostname);
+ nicklist_rename_unique(SERVER(server),
+ client_entry, client_entry->nickname,
+ client_entry2, client_entry2->nickname);
signal_emit("message nick", 4, server, client_entry2->nickname,
- client_entry2->nickname, userhost);
+ client_entry->nickname, userhost);
break;
case SILC_NOTIFY_TYPE_CMODE_CHANGE:
idtype = va_arg(va, int);
entry = va_arg(va, void *);
- mode = va_arg(va, uint32);
+ mode = va_arg(va, SilcUInt32);
(void)va_arg(va, char *);
(void)va_arg(va, char *);
channel = va_arg(va, SilcChannelEntry);
MSGLEVEL_MODES, SILCTXT_CHANNEL_CMODE,
channel->channel_name, tmp ? tmp : "removed all",
server_entry->server_name);
+ } else {
+ channel2 = (SilcChannelEntry)entry;
+ printformat_module("fe-common/silc", server, channel->channel_name,
+ MSGLEVEL_MODES, SILCTXT_CHANNEL_CMODE,
+ channel->channel_name, tmp ? tmp : "removed all",
+ channel2->channel_name);
}
silc_free(tmp);
SILC_LOG_DEBUG(("Notify: CUMODE_CHANGE"));
- client_entry = va_arg(va, SilcClientEntry);
- mode = va_arg(va, uint32);
+ idtype = va_arg(va, int);
+ entry = va_arg(va, void *);
+ mode = va_arg(va, SilcUInt32);
client_entry2 = va_arg(va, SilcClientEntry);
channel = va_arg(va, SilcChannelEntry);
-
+
tmp = silc_client_chumode(mode);
chanrec = silc_channel_find_entry(server, channel);
if (chanrec != NULL) {
SILC_NICK_REC *nick;
-
+
if (client_entry2 == server->conn->local_entry)
chanrec->chanop = (mode & SILC_CHANNEL_UMODE_CHANOP) != 0;
signal_emit("nick mode changed", 2, chanrec, nick);
}
}
-
- printformat_module("fe-common/silc", server, channel->channel_name,
- MSGLEVEL_MODES, SILCTXT_CHANNEL_CUMODE,
- channel->channel_name, client_entry2->nickname,
- tmp ? tmp : "removed all",
- client_entry->nickname);
+
+ if (idtype == SILC_ID_CLIENT) {
+ client_entry = (SilcClientEntry)entry;
+ printformat_module("fe-common/silc", server, channel->channel_name,
+ MSGLEVEL_MODES, SILCTXT_CHANNEL_CUMODE,
+ channel->channel_name, client_entry2->nickname,
+ tmp ? tmp : "removed all",
+ client_entry->nickname);
+ } else if (idtype == SILC_ID_SERVER) {
+ server_entry = (SilcServerEntry)entry;
+ printformat_module("fe-common/silc", server, channel->channel_name,
+ MSGLEVEL_MODES, SILCTXT_CHANNEL_CUMODE,
+ channel->channel_name, client_entry2->nickname,
+ tmp ? tmp : "removed all",
+ server_entry->server_name);
+ } else {
+ channel2 = (SilcChannelEntry)entry;
+ printformat_module("fe-common/silc", server, channel->channel_name,
+ MSGLEVEL_MODES, SILCTXT_CHANNEL_CUMODE,
+ channel->channel_name, client_entry2->nickname,
+ tmp ? tmp : "removed all",
+ channel2->channel_name);
+ }
if (mode & SILC_CHANNEL_UMODE_CHANFO)
printformat_module("fe-common/silc",
server, channel->channel_name, MSGLEVEL_CRAP,
SILCTXT_CHANNEL_FOUNDER,
channel->channel_name, client_entry2->nickname);
-
+
silc_free(tmp);
break;
if (client_entry == conn->local_entry) {
printformat_module("fe-common/silc", server, channel->channel_name,
MSGLEVEL_CRAP, SILCTXT_CHANNEL_KICKED_YOU,
- client_entry2->nickname,
- channel->channel_name, tmp ? tmp : "");
+ channel->channel_name,
+ client_entry ? client_entry2->nickname : "",
+ tmp ? tmp : "");
if (chanrec) {
chanrec->kicked = TRUE;
channel_destroy((CHANNEL_REC *)chanrec);
} else {
printformat_module("fe-common/silc", server, channel->channel_name,
MSGLEVEL_CRAP, SILCTXT_CHANNEL_KICKED,
- client_entry->nickname,
- client_entry2->nickname,
- channel->channel_name, tmp ? tmp : "");
+ client_entry->nickname, channel->channel_name,
+ client_entry2 ? client_entry2->nickname : "",
+ tmp ? tmp : "");
if (chanrec) {
SILC_NICK_REC *nickrec = silc_nicklist_find(chanrec, client_entry);
client_entry = va_arg(va, SilcClientEntry);
tmp = va_arg(va, char *);
+ client_entry2 = va_arg(va, SilcClientEntry);
if (client_entry == conn->local_entry) {
printformat_module("fe-common/silc", server, NULL,
MSGLEVEL_CRAP, SILCTXT_CHANNEL_KILLED_YOU,
+ client_entry2 ? client_entry2->nickname : "",
tmp ? tmp : "");
} else {
list1 = nicklist_get_same_unique(SERVER(server), client_entry);
printformat_module("fe-common/silc", server, NULL,
MSGLEVEL_CRAP, SILCTXT_CHANNEL_KILLED,
client_entry->nickname,
+ client_entry2 ? client_entry2->nickname : "",
tmp ? tmp : "");
}
break;
+ case SILC_NOTIFY_TYPE_CHANNEL_CHANGE:
+ break;
+
case SILC_NOTIFY_TYPE_SERVER_SIGNOFF:
{
/*
*/
int i;
SilcClientEntry *clients;
- uint32 clients_count;
+ SilcUInt32 clients_count;
SILC_LOG_DEBUG(("Notify: SIGNOFF"));
(void)va_arg(va, void *);
clients = va_arg(va, SilcClientEntry *);
- clients_count = va_arg(va, uint32);
+ clients_count = va_arg(va, SilcUInt32);
for (i = 0; i < clients_count; i++) {
memset(userhost, 0, sizeof(userhost));
SILC_LOG_DEBUG(("Start"));
+ if (!server || server->connection_lost)
+ return;
+
if (server->conn && server->conn->local_entry) {
nicklist_rename_unique(SERVER(server),
server->conn->local_entry, server->nick,
static void silc_client_join_get_users(SilcClient client,
SilcClientConnection conn,
SilcClientEntry *clients,
- uint32 clients_count,
+ SilcUInt32 clients_count,
void *context)
{
SilcChannelEntry channel = (SilcChannelEntry)context;
{
char buf[1024], *nickname, *username, *realname, *nick;
unsigned char *fingerprint;
- uint32 idle, mode;
+ SilcUInt32 idle, mode;
SilcBuffer channels;
SilcClientEntry client_entry;
} else if (status == SILC_STATUS_ERR_NO_SUCH_CLIENT_ID) {
/* Try to find the entry for the unknown client ID, since we
might have, and print the nickname of it for user. */
- uint32 tmp_len;
+ SilcUInt32 tmp_len;
unsigned char *tmp =
silc_argument_get_arg_type(silc_command_get_args(cmd_payload),
2, &tmp_len);
if (tmp) {
- SilcClientID *client_id = silc_id_payload_parse_id(tmp, tmp_len);
+ SilcClientID *client_id = silc_id_payload_parse_id(tmp, tmp_len,
+ NULL);
if (client_id) {
client_entry = silc_client_get_client_by_id(client, conn,
client_id);
username = va_arg(vp, char *);
realname = va_arg(vp, char *);
channels = va_arg(vp, SilcBuffer);
- mode = va_arg(vp, uint32);
- idle = va_arg(vp, uint32);
+ mode = va_arg(vp, SilcUInt32);
+ idle = va_arg(vp, SilcUInt32);
fingerprint = va_arg(vp, unsigned char *);
silc_parse_userfqdn(nickname, &nick, NULL);
silc_dlist_start(list);
while ((entry = silc_dlist_get(list)) != SILC_LIST_END) {
char *m = silc_client_chumode_char(silc_channel_get_mode(entry));
- uint32 name_len;
+ SilcUInt32 name_len;
char *name = silc_channel_get_name(entry, &name_len);
if (m)
} else if (status == SILC_STATUS_ERR_NO_SUCH_CLIENT_ID) {
/* Try to find the entry for the unknown client ID, since we
might have, and print the nickname of it for user. */
- uint32 tmp_len;
+ SilcUInt32 tmp_len;
unsigned char *tmp =
silc_argument_get_arg_type(silc_command_get_args(cmd_payload),
2, &tmp_len);
if (tmp) {
- SilcClientID *client_id = silc_id_payload_parse_id(tmp, tmp_len);
+ SilcClientID *client_id = silc_id_payload_parse_id(tmp, tmp_len,
+ NULL);
if (client_id) {
client_entry = silc_client_get_client_by_id(client, conn,
client_id);
case SILC_COMMAND_JOIN:
{
char *channel, *mode, *topic;
- uint32 modei;
+ SilcUInt32 modei;
SilcChannelEntry channel_entry;
SilcBuffer client_id_list;
- uint32 list_count;
+ SilcUInt32 list_count;
if (!success)
return;
channel = va_arg(vp, char *);
channel_entry = va_arg(vp, SilcChannelEntry);
- modei = va_arg(vp, uint32);
- (void)va_arg(vp, uint32);
+ modei = va_arg(vp, SilcUInt32);
+ (void)va_arg(vp, SilcUInt32);
(void)va_arg(vp, unsigned char *);
(void)va_arg(vp, unsigned char *);
(void)va_arg(vp, unsigned char *);
topic = va_arg(vp, char *);
(void)va_arg(vp, unsigned char *);
- list_count = va_arg(vp, uint32);
+ list_count = va_arg(vp, SilcUInt32);
client_id_list = va_arg(vp, SilcBuffer);
chanrec = silc_channel_find(server, channel);
nicklist_rename_unique(SERVER(server),
server->conn->local_entry, server->nick,
client, client->nickname);
-
signal_emit("message own_nick", 4, server, server->nick, old, "");
g_free(old);
break;
case SILC_COMMAND_UMODE:
{
- uint32 mode;
+ SilcUInt32 mode;
if (!success)
return;
- mode = va_arg(vp, uint32);
+ mode = va_arg(vp, SilcUInt32);
if (mode & SILC_UMODE_SERVER_OPERATOR &&
!(server->umode & SILC_UMODE_SERVER_OPERATOR))
MSGLEVEL_CRAP, SILCTXT_ROUTER_OPER);
server->umode = mode;
+ signal_emit("user mode changed", 2, server, NULL);
}
break;
if (!success)
return;
+ server->umode |= SILC_UMODE_SERVER_OPERATOR;
+ signal_emit("user mode changed", 2, server, NULL);
+
printformat_module("fe-common/silc", server, NULL,
MSGLEVEL_CRAP, SILCTXT_SERVER_OPER);
break;
if (!success)
return;
+ server->umode |= SILC_UMODE_ROUTER_OPERATOR;
+ signal_emit("user mode changed", 2, server, NULL);
+
printformat_module("fe-common/silc", server, NULL,
MSGLEVEL_CRAP, SILCTXT_ROUTER_OPER);
break;
void *entry;
SilcPublicKey public_key;
unsigned char *pk;
- uint32 pk_len;
+ SilcUInt32 pk_len;
GetkeyContext getkey;
char *name;
if (!success)
return;
- id_type = va_arg(vp, uint32);
+ id_type = va_arg(vp, SilcUInt32);
entry = va_arg(vp, void *);
public_key = va_arg(vp, SilcPublicKey);
char *entity;
char *entity_name;
unsigned char *pk;
- uint32 pk_len;
+ SilcUInt32 pk_len;
SilcSKEPKType pk_type;
SilcVerifyPublicKey completion;
void *context;
static void
silc_verify_public_key_internal(SilcClient client, SilcClientConnection conn,
const char *name, SilcSocketType conn_type,
- unsigned char *pk, uint32 pk_len,
+ unsigned char *pk, SilcUInt32 pk_len,
SilcSKEPKType pk_type,
SilcVerifyPublicKey completion, void *context)
{
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;
/* The key already exists, verify it. */
SilcPublicKey public_key;
unsigned char *encpk;
- uint32 encpk_len;
+ SilcUInt32 encpk_len;
/* Load the key file, try for both IP filename and hostname filename */
if (!silc_pkcs_load_public_key(ipf, &public_key,
void
silc_verify_public_key(SilcClient client, SilcClientConnection conn,
SilcSocketType conn_type, unsigned char *pk,
- uint32 pk_len, SilcSKEPKType pk_type,
+ SilcUInt32 pk_len, SilcSKEPKType pk_type,
SilcVerifyPublicKey completion, void *context)
{
silc_verify_public_key_internal(client, conn, NULL, conn_type, pk,
is found and FALSE if not. `conn' may be NULL. */
void silc_get_auth_method(SilcClient client, SilcClientConnection conn,
- char *hostname, uint16 port,
+ char *hostname, SilcUInt16 port,
SilcGetAuthMeth completion, void *context)
{
InternalGetAuthMethod internal;
}
if (protocol->protocol->type == SILC_PROTOCOL_CLIENT_CONNECTION_AUTH) {
- uint32 err = (uint32)failure;
+ SilcUInt32 err = (SilcUInt32)failure;
if (err == SILC_AUTH_FAILED)
printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
int silc_key_agreement(SilcClient client, SilcClientConnection conn,
SilcClientEntry client_entry, const char *hostname,
- uint16 port, SilcKeyAgreementCallback *completion,
+ SilcUInt16 port, SilcKeyAgreementCallback *completion,
void **context)
{
char portstr[12];
}
void silc_ftp(SilcClient client, SilcClientConnection conn,
- SilcClientEntry client_entry, uint32 session_id,
- const char *hostname, uint16 port)
+ SilcClientEntry client_entry, SilcUInt32 session_id,
+ const char *hostname, SilcUInt16 port)
{
SILC_SERVER_REC *server;
char portstr[12];