#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)
{
{
if (!IS_SILC_CHANNEL(channel))
return;
+ if (channel->server && channel->server->disconnected)
+ return;
if (channel->server != NULL && !channel->left && !channel->kicked) {
/* destroying channel record without actually
having left the channel yet */
- silc_command_exec(channel->server, "PART", channel->name);
+ silc_command_exec(channel->server, "LEAVE", channel->name);
}
}
SILC_CHANNEL_REC *chanrec;
char userhost[256];
+ CMD_SILC_SERVER(server);
+
if (!IS_SILC_SERVER(server) || !server->connected)
cmd_return_error(CMDERR_NOT_CONNECTED);
signal_emit("message part", 5, server, chanrec->name,
server->nick, userhost, "");
+ chanrec->left = TRUE;
silc_command_exec(server, "LEAVE", chanrec->name);
signal_stop();
SILC_CHANNEL_REC *chanrec;
char *tmpcmd = "ME", *tmp;
SilcUInt32 argc = 0;
+ unsigned char *message = NULL;
unsigned char **argv;
SilcUInt32 *argv_lens, *argv_types;
int i;
+ CMD_SILC_SERVER(server);
+
if (!IS_SILC_SERVER(server) || !server->connected)
cmd_return_error(CMDERR_NOT_CONNECTED);
if (chanrec == NULL)
cmd_return_error(CMDERR_CHAN_NOT_FOUND);
+ if (!silc_term_utf8()) {
+ int len = silc_utf8_encoded_len(argv[1], argv_lens[1],
+ SILC_STRING_LANGUAGE);
+ message = silc_calloc(len + 1, sizeof(*message));
+ g_return_if_fail(message != NULL);
+ silc_utf8_encode(argv[1], argv_lens[1], SILC_STRING_LANGUAGE,
+ message, len);
+ }
+
/* Send the action message */
silc_client_send_channel_message(silc_client, server->conn,
chanrec->entry, NULL,
- SILC_MESSAGE_FLAG_ACTION,
- argv[1], argv_lens[1], TRUE);
+ SILC_MESSAGE_FLAG_ACTION |
+ SILC_MESSAGE_FLAG_UTF8,
+ message ? message : argv[1],
+ message ? strlen(message) : argv_lens[1],
+ TRUE);
printformat_module("fe-common/silc", server, chanrec->entry->channel_name,
MSGLEVEL_ACTIONS, SILCTXT_CHANNEL_OWNACTION,
silc_free(argv[i]);
silc_free(argv_lens);
silc_free(argv_types);
+ silc_free(message);
}
/* ACTION local command. Same as ME but takes the channel as mandatory
SILC_CHANNEL_REC *chanrec;
char *tmpcmd = "ME", *tmp;
SilcUInt32 argc = 0;
+ unsigned char *message = NULL;
unsigned char **argv;
SilcUInt32 *argv_lens, *argv_types;
int i;
+ CMD_SILC_SERVER(server);
if (!IS_SILC_SERVER(server) || !server->connected)
cmd_return_error(CMDERR_NOT_CONNECTED);
if (chanrec == NULL)
cmd_return_error(CMDERR_CHAN_NOT_FOUND);
+ if (!silc_term_utf8()) {
+ int len = silc_utf8_encoded_len(argv[2], argv_lens[2],
+ SILC_STRING_LANGUAGE);
+ message = silc_calloc(len + 1, sizeof(*message));
+ g_return_if_fail(message != NULL);
+ silc_utf8_encode(argv[2], argv_lens[2], SILC_STRING_LANGUAGE,
+ message, len);
+ }
+
/* Send the action message */
silc_client_send_channel_message(silc_client, server->conn,
chanrec->entry, NULL,
- SILC_MESSAGE_FLAG_ACTION,
- argv[2], argv_lens[2], TRUE);
+ SILC_MESSAGE_FLAG_ACTION |
+ SILC_MESSAGE_FLAG_UTF8,
+ message ? message : argv[2],
+ message ? strlen(message) : argv_lens[2],
+ TRUE);
printformat_module("fe-common/silc", server, chanrec->entry->channel_name,
MSGLEVEL_ACTIONS, SILCTXT_CHANNEL_OWNACTION,
silc_free(argv[i]);
silc_free(argv_lens);
silc_free(argv_types);
+ silc_free(message);
}
/* NOTICE local command. */
SILC_CHANNEL_REC *chanrec;
char *tmpcmd = "ME", *tmp;
SilcUInt32 argc = 0;
+ unsigned char *message = NULL;
unsigned char **argv;
SilcUInt32 *argv_lens, *argv_types;
int i;
+ CMD_SILC_SERVER(server);
if (!IS_SILC_SERVER(server) || !server->connected)
cmd_return_error(CMDERR_NOT_CONNECTED);
if (chanrec == NULL)
cmd_return_error(CMDERR_CHAN_NOT_FOUND);
+ if (!silc_term_utf8()) {
+ int len = silc_utf8_encoded_len(argv[1], argv_lens[1],
+ SILC_STRING_LANGUAGE);
+ message = silc_calloc(len + 1, sizeof(*message));
+ g_return_if_fail(message != NULL);
+ silc_utf8_encode(argv[1], argv_lens[1], SILC_STRING_LANGUAGE,
+ message, len);
+ }
+
/* Send the action message */
silc_client_send_channel_message(silc_client, server->conn,
chanrec->entry, NULL,
- SILC_MESSAGE_FLAG_NOTICE,
- argv[1], argv_lens[1], TRUE);
+ SILC_MESSAGE_FLAG_NOTICE |
+ SILC_MESSAGE_FLAG_UTF8,
+ message ? message : argv[1],
+ message ? strlen(message) : argv_lens[1],
+ TRUE);
printformat_module("fe-common/silc", server, chanrec->entry->channel_name,
MSGLEVEL_NOTICES, SILCTXT_CHANNEL_OWNNOTICE,
silc_free(argv[i]);
silc_free(argv_lens);
silc_free(argv_types);
+ silc_free(message);
}
/* AWAY local command. Sends UMODE command that sets the SILC_UMODE_GONE
{
bool set;
+ CMD_SILC_SERVER(server);
+
if (!IS_SILC_SERVER(server) || !server->connected)
cmd_return_error(CMDERR_NOT_CONNECTED);
SILCTXT_SET_AWAY, data);
}
+ server->usermode_away = set;
+ if (set)
+ server->away_reason = g_strdup((char *)data);
signal_emit("away mode changed", 1, server);
silc_command_exec(server, "UMODE", set ? "+g" : "-g");
printformat_module("fe-common/silc", i->server, NULL, MSGLEVEL_CRAP,
SILCTXT_KEY_AGREEMENT_ABORTED, client_entry->nickname);
break;
+
+ case SILC_KEY_AGREEMENT_ALREADY_STARTED:
+ printformat_module("fe-common/silc", i->server, NULL, MSGLEVEL_CRAP,
+ SILCTXT_KEY_AGREEMENT_ALREADY_STARTED,
+ client_entry->nickname);
+ break;
+
+ case SILC_KEY_AGREEMENT_SELF_DENIED:
+ printformat_module("fe-common/silc", i->server, NULL, MSGLEVEL_CRAP,
+ SILCTXT_KEY_AGREEMENT_SELF_DENIED);
+ break;
default:
break;
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();
}