Author: dylan
Date: 2004-08-10 14:03:33 -0400 (Tue, 10 Aug 2004)
New Revision: 346
Added:
trunk/clients/irssi/src/core/channel-events.c
trunk/clients/irssi/src/core/haver-channels-setup.c
trunk/clients/irssi/src/core/haver-channels.c
trunk/clients/irssi/src/core/haver-channels.h
Removed:
trunk/clients/irssi/src/core/icq-buddy.c
trunk/clients/irssi/src/core/icq-buddy.h
Modified:
trunk/clients/irssi/src/core/Makefile
trunk/clients/irssi/src/core/Makefile.am
trunk/clients/irssi/src/core/Makefile.in
trunk/clients/irssi/src/core/haver-commands.c
trunk/clients/irssi/src/core/haver-core.c
trunk/clients/irssi/src/core/haver-login.c
trunk/clients/irssi/src/core/haver-message.c
trunk/clients/irssi/src/core/haver-protocol.c
trunk/clients/irssi/src/core/haver-protocol.h
trunk/clients/irssi/src/core/haver-servers.c
trunk/clients/irssi/src/core/haver-servers.h
trunk/clients/irssi/src/core/haver-session.c
Log:
it compiles now, and you can join channels.
Modified: trunk/clients/irssi/src/core/Makefile
===================================================================
--- trunk/clients/irssi/src/core/Makefile 2004-08-09 04:51:58 UTC (rev
345)
+++ trunk/clients/irssi/src/core/Makefile 2004-08-10 18:03:33 UTC (rev
346)
@@ -103,10 +103,10 @@
INCLUDES = $(GLIB_CFLAGS) -I$(IRSSI_INCLUDE) -I$(IRSSI_INCLUDE)/src
-I$(IRSSI_INCLUDE)/src/core
-libhaver_core_la_SOURCES = haver-commands.c haver-core.c
haver-protocol.c haver-parser.c haver-servers.c haver-login.c
haver-message.c haver-queries.c haver-session.c haver.c
+libhaver_core_la_SOURCES = haver-commands.c haver-core.c
haver-protocol.c haver-parser.c haver-servers.c haver-login.c
haver-message.c haver-queries.c haver-session.c
haver-channels.c channel-events.c haver.c
-noinst_HEADERS = haver.h haver-commands.h
haver-protocol.h haver-servers.h haver-login.h haver-message.h
haver-queries.h haver-parser.h module.h
+noinst_HEADERS = haver.h haver-commands.h
haver-protocol.h haver-servers.h haver-login.h haver-message.h
haver-queries.h haver-parser.h haver-channels.h module.h
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../../config-plugin.h
@@ -121,7 +121,8 @@
libhaver_core_la_LIBADD =
libhaver_core_la_OBJECTS = haver-commands.lo haver-core.lo \
haver-protocol.lo haver-parser.lo haver-servers.lo haver-login.lo \
-haver-message.lo haver-queries.lo haver-session.lo haver.lo
+haver-message.lo haver-queries.lo haver-session.lo haver-channels.lo \
+channel-events.lo haver.lo
CFLAGS = -g -O2 -Wall
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS)
$(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS)
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -136,10 +137,11 @@
TAR = tar
GZIP_ENV = --best
-DEP_FILES = .deps/haver-commands.P .deps/haver-core.P \
-.deps/haver-login.P .deps/haver-message.P .deps/haver-parser.P \
-.deps/haver-protocol.P .deps/haver-queries.P .deps/haver-servers.P \
-.deps/haver-session.P .deps/haver.P
+DEP_FILES = .deps/channel-events.P .deps/haver-channels.P \
+.deps/haver-commands.P .deps/haver-core.P .deps/haver-login.P \
+.deps/haver-message.P .deps/haver-parser.P .deps/haver-protocol.P \
+.deps/haver-queries.P .deps/haver-servers.P .deps/haver-session.P \
+.deps/haver.P
SOURCES = $(libhaver_core_la_SOURCES)
OBJECTS = $(libhaver_core_la_OBJECTS)
Modified: trunk/clients/irssi/src/core/Makefile.am
===================================================================
--- trunk/clients/irssi/src/core/Makefile.am 2004-08-09 04:51:58 UTC (rev
345)
+++ trunk/clients/irssi/src/core/Makefile.am 2004-08-10 18:03:33 UTC (rev
346)
@@ -18,6 +18,8 @@
haver-message.c \
haver-queries.c \
haver-session.c \
+ haver-channels.c \
+ channel-events.c \
haver.c
noinst_HEADERS = \
@@ -29,6 +31,7 @@
haver-message.h \
haver-queries.h \
haver-parser.h \
+ haver-channels.h \
module.h
user_install:
Modified: trunk/clients/irssi/src/core/Makefile.in
===================================================================
--- trunk/clients/irssi/src/core/Makefile.in 2004-08-09 04:51:58 UTC (rev
345)
+++ trunk/clients/irssi/src/core/Makefile.in 2004-08-10 18:03:33 UTC (rev
346)
@@ -103,10 +103,10 @@
INCLUDES = $(GLIB_CFLAGS) -I$(IRSSI_INCLUDE) -I$(IRSSI_INCLUDE)/src
-I$(IRSSI_INCLUDE)/src/core
-libhaver_core_la_SOURCES = haver-commands.c haver-core.c
haver-protocol.c haver-parser.c haver-servers.c haver-login.c
haver-message.c haver-queries.c haver-session.c haver.c
+libhaver_core_la_SOURCES = haver-commands.c haver-core.c
haver-protocol.c haver-parser.c haver-servers.c haver-login.c
haver-message.c haver-queries.c haver-session.c
haver-channels.c channel-events.c haver.c
-noinst_HEADERS = haver.h haver-commands.h
haver-protocol.h haver-servers.h haver-login.h haver-message.h
haver-queries.h haver-parser.h module.h
+noinst_HEADERS = haver.h haver-commands.h
haver-protocol.h haver-servers.h haver-login.h haver-message.h
haver-queries.h haver-parser.h haver-channels.h module.h
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../../config-plugin.h
@@ -121,7 +121,8 @@
libhaver_core_la_LIBADD =
libhaver_core_la_OBJECTS = haver-commands.lo haver-core.lo \
haver-protocol.lo haver-parser.lo haver-servers.lo haver-login.lo \
-haver-message.lo haver-queries.lo haver-session.lo haver.lo
+haver-message.lo haver-queries.lo haver-session.lo haver-channels.lo \
+channel-events.lo haver.lo
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS)
$(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS)
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -136,10 +137,11 @@
TAR = tar
GZIP_ENV = --best
-DEP_FILES = .deps/haver-commands.P .deps/haver-core.P \
-.deps/haver-login.P .deps/haver-message.P .deps/haver-parser.P \
-.deps/haver-protocol.P .deps/haver-queries.P .deps/haver-servers.P \
-.deps/haver-session.P .deps/haver.P
+DEP_FILES = .deps/channel-events.P .deps/haver-channels.P \
+.deps/haver-commands.P .deps/haver-core.P .deps/haver-login.P \
+.deps/haver-message.P .deps/haver-parser.P .deps/haver-protocol.P \
+.deps/haver-queries.P .deps/haver-servers.P .deps/haver-session.P \
+.deps/haver.P
SOURCES = $(libhaver_core_la_SOURCES)
OBJECTS = $(libhaver_core_la_OBJECTS)
Added: trunk/clients/irssi/src/core/channel-events.c
===================================================================
--- trunk/clients/irssi/src/core/channel-events.c 2004-08-09 04:51:58 UTC
(rev 345)
+++ trunk/clients/irssi/src/core/channel-events.c 2004-08-10 18:03:33 UTC
(rev 346)
@@ -0,0 +1,162 @@
+/*
+ channel-events.c : irssi
+
+ Copyright (C) 1999-2000 Timo Sirainen
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include "module.h"
+#include "signals.h"
+#include "misc.h"
+#include "channels-setup.h"
+#include "settings.h"
+
+#include "haver-servers.h"
+#include "haver-channels.h"
+#include "haver-protocol.h"
+
+/* Find any unjoined channel that matches `channel'. Long channel names are
+ also a bit problematic, so find a channel where start of the name matches.
*/
+static HAVER_CHANNEL_REC *channel_find_unjoined(HAVER_SERVER_REC *server,
+ const char *channel)
+{
+ GSList *tmp;
+ int len;
+
+ len = strlen(channel);
+ for (tmp = server->channels; tmp != NULL; tmp = tmp->next) {
+ HAVER_CHANNEL_REC *rec = tmp->data;
+
+ if (!IS_HAVER_CHANNEL(rec) || rec->joined)
+ continue;
+
+ if (g_strncasecmp(channel, rec->name, len) == 0 &&
+ (len > 20 || rec->name[len] == '\0'))
+ return rec;
+ }
+
+ return NULL;
+}
+
+static void event_join(HAVER_SERVER_REC *server, GSList *args)
+{
+ HAVER_CHANNEL_REC *chanrec;
+ char *uid, *cid;
+ g_assert(args != NULL);
+
+ cid = (char *) g_slist_nth_data(args, 0);
+ uid = (char *) g_slist_nth_data(args, 1);
+
+ g_assert(cid != NULL);
+ g_assert(uid != NULL);
+
+
+
+ if (g_strcasecmp(uid, server->nick) != 0) {
+ /* someone else joined channel, no need to do anything */
+ return;
+ }
+
+ //if (server->userhost == NULL)
+ // server->userhost = g_strdup("haver");
+
+ chanrec = haver_channel_find(server, cid);
+
+ if (chanrec != NULL && chanrec->joined) {
+ /* already joined this channel - probably a broken proxy that
+ forgot to send PART between */
+ chanrec->left = TRUE;
+ channel_destroy(CHANNEL(chanrec));
+ chanrec = NULL; }
+
+ if (chanrec == NULL) {
+ /* didn't get here with /join command.. */
+ chanrec = haver_channel_create(server, cid, TRUE);
+ }
+
+ chanrec->joined = TRUE;
+ if (strcmp(chanrec->name, cid) != 0) {
+ g_free(chanrec->name);
+ chanrec->name = g_strdup(cid);
+ }
+
+}
+
+static void event_part(HAVER_SERVER_REC *server, GSList *args)
+{
+ char *cid, *uid;
+ HAVER_CHANNEL_REC *chanrec;
+
+ g_assert(args != NULL);
+ g_assert(args->next != NULL);
+
+ cid = (char *) args->data;
+ uid = (char *) args->next->data;
+
+ g_assert(cid != NULL);
+ g_assert(uid != NULL);
+
+ if (g_strcasecmp(uid, server->nick) != 0) {
+ /* someone else part, no need to do anything here */
+ DEBUG("Someone else.");
+ return;
+ }
+ DEBUG("MEEE!!!");
+
+
+ chanrec = channel_find(SERVER(server), cid);
+ if (chanrec != NULL && chanrec->joined) {
+ chanrec->left = TRUE;
+ channel_destroy( (CHANNEL_REC *) chanrec);
+ }
+}
+
+static void event_fail(HAVER_SERVER_REC *server, GSList *args)
+{
+ gboolean handle = FALSE;
+ char *cmd, *error;
+ g_assert(args);
+
+ cmd = (char *) args->data;
+
+ if (strcmp(cmd, "JOIN") == 0)
+ handle = TRUE;
+ else if (strcmp(cmd, "PART"))
+ handle = TRUE;
+
+ if (handle) {
+ // do later.
+ signal_stop();
+ }
+}
+
+void haver_channel_events_init(void)
+{
+ //settings_add_bool("misc", "join_auto_chans_on_invite", TRUE);
+
+
+ signal_add_first("haver event join", (SIGNAL_FUNC) event_join);
+ signal_add_first("haver event part", (SIGNAL_FUNC) event_part);
+ signal_add("haver event fail", (SIGNAL_FUNC) event_fail);
+}
+
+void haver_channel_events_deinit(void)
+{
+ signal_remove("haver event join", (SIGNAL_FUNC) event_join);
+ signal_remove("haver event part", (SIGNAL_FUNC) event_part);
+ signal_remove("haver event fail", (SIGNAL_FUNC) event_fail);
+
+}
Added: trunk/clients/irssi/src/core/haver-channels-setup.c
===================================================================
--- trunk/clients/irssi/src/core/haver-channels-setup.c 2004-08-09 04:51:58 UTC
(rev 345)
+++ trunk/clients/irssi/src/core/haver-channels-setup.c 2004-08-10 18:03:33 UTC
(rev 346)
@@ -0,0 +1,33 @@
+/*
+ haver-channels-setup.c : irssi
+
+ Copyright (C) 1999-2000 Timo Sirainen
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include "module.h"
+#include "signals.h"
+#include "channels.h"
+
+void haver_channels_setup_init(void)
+{
+ signal_add("channel wholist", (SIGNAL_FUNC) channel_send_autocommands);
+}
+
+void haver_channels_setup_deinit(void)
+{
+ signal_remove("channel wholist", (SIGNAL_FUNC)
channel_send_autocommands);
+}
Added: trunk/clients/irssi/src/core/haver-channels.c
===================================================================
--- trunk/clients/irssi/src/core/haver-channels.c 2004-08-09 04:51:58 UTC
(rev 345)
+++ trunk/clients/irssi/src/core/haver-channels.c 2004-08-10 18:03:33 UTC
(rev 346)
@@ -0,0 +1,187 @@
+/*
+ haver-channels.c : irssi
+
+ Copyright (C) 1999-2000 Timo Sirainen
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include "module.h"
+#include "signals.h"
+#include "misc.h"
+#include "levels.h"
+#include "channels-setup.h"
+#include "commands.h"
+
+//#include "bans.h"
+//#include "modes.h"
+//#include "mode-lists.h"
+#include "haver-servers.h"
+#include "haver-channels.h"
+//#include "haver-nicklist.h"
+#include "haver-protocol.h"
+
+
+void haver_channel_events_init(void);
+void haver_channel_events_deinit(void);
+
+HAVER_CHANNEL_REC *haver_channel_create(HAVER_SERVER_REC *server,
+ const char *name, int automatic)
+{
+ HAVER_CHANNEL_REC *rec;
+
+ g_return_val_if_fail(server == NULL || IS_HAVER_SERVER(server), NULL);
+ g_return_val_if_fail(name != NULL, NULL);
+
+ rec = g_new0(HAVER_CHANNEL_REC, 1);
+ rec->no_modes = TRUE;
+
+ channel_init((CHANNEL_REC *)rec, (SERVER_REC *)server,
+ name, NULL, automatic);
+ return rec;
+}
+
+#define get_join_key(key) \
+ (((key) == NULL || *(key) == '\0') ? "x" : (key))
+
+
+void haver_channels_join(HAVER_SERVER_REC *server,
+ const char *data, int automatic)
+{
+ CHANNEL_SETUP_REC *schannel;
+ HAVER_CHANNEL_REC *chanrec;
+ char *channel;
+
+ g_return_if_fail(data != NULL);
+ g_return_if_fail(IS_HAVER_SERVER(server) && server->connected);
+ if (*data == '\0') return;
+
+
+
+ channel = g_strdup(data);
+ chanrec = haver_channel_find(server, channel);
+
+ if (chanrec == NULL) {
+ schannel = channel_setup_find(channel,
server->connrec->chatnet);
+ chanrec = haver_channel_create(server, channel, automatic);
+ }
+
+ if (strlen(channel) > 0) {
+ GSList *out = NULL;
+
+ out = g_slist_append(out, "JOIN");
+ out = g_slist_append(out, channel);
+ haver_send(HAVER_SERVER(server), out);
+
+ g_slist_free(out);
+ }
+
+ g_free(channel);
+}
+
+/* function for finding HAVER channels - adds support for !channels */
+static CHANNEL_REC *haver_channel_find_server(SERVER_REC *server,
+ const char *channel)
+{
+ GSList *item;
+
+ for (item = server->channels; item != NULL; item = item->next) {
+ CHANNEL_REC *rec = item->data;
+
+ if (rec->chat_type != server->chat_type)
+ continue;
+
+ /* check both !ABCDEchannel and !channel */
+ if (g_strcasecmp(channel, rec->name) == 0)
+ return rec;
+
+ //if (g_strcasecmp(channel, rec->visible_name) == 0)
+ // return rec;
+ }
+
+ return NULL;
+}
+
+static void sig_server_connected(SERVER_REC *server)
+{
+ if (!IS_HAVER_SERVER(server))
+ return;
+
+ server->channel_find_func = haver_channel_find_server;
+ server->channels_join = (void (*) (SERVER_REC *, const char *, int))
+ haver_channels_join;
+}
+
+static char *haver_get_join_data(CHANNEL_REC *channel)
+{
+ HAVER_CHANNEL_REC *haver_channel = (HAVER_CHANNEL_REC *) channel;
+
+ return haver_channel->key == NULL ? g_strdup(haver_channel->name) :
+ g_strconcat(haver_channel->name, " ", haver_channel->key,
NULL);
+}
+
+static void sig_channel_created(HAVER_CHANNEL_REC *channel)
+{
+ if (IS_HAVER_CHANNEL(channel))
+ channel->get_join_data = haver_get_join_data;
+}
+
+static void sig_channel_destroyed(HAVER_CHANNEL_REC *channel)
+{
+ if (!IS_HAVER_CHANNEL(channel))
+ return;
+
+ if (!channel->server->disconnected && !channel->left &&
!channel->kicked) {
+ /* destroying channel record without actually
+ having left the channel yet */
+ signal_emit("command part", 3, "", channel->server, channel);
+ }
+}
+
+void haver_channels_init(void)
+{
+ signal_add_first("server connected", (SIGNAL_FUNC)
sig_server_connected);
+ signal_add("channel created", (SIGNAL_FUNC) sig_channel_created);
+ signal_add("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed);
+
+ haver_channel_events_init();
+ //channel_rejoin_init(); /* after channel_events_init() */
+ //channels_query_init();
+ //haver_channels_setup_init();
+
+ //bans_init();
+ //modes_init();
+ //mode_lists_init();
+ //massjoin_init();
+ //haver_nicklist_init();
+}
+
+void haver_channels_deinit(void)
+{
+ signal_remove("server connected", (SIGNAL_FUNC) sig_server_connected);
+ signal_remove("channel created", (SIGNAL_FUNC) sig_channel_created);
+ signal_remove("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed);
+
+ haver_channel_events_deinit();
+ //channel_rejoin_deinit();
+ //channels_query_deinit();
+ //haver_channels_setup_deinit();
+
+ //bans_deinit();
+ //modes_deinit();
+ //mode_lists_deinit();
+ //massjoin_deinit();
+ //haver_nicklist_deinit();
+}
Added: trunk/clients/irssi/src/core/haver-channels.h
===================================================================
--- trunk/clients/irssi/src/core/haver-channels.h 2004-08-09 04:51:58 UTC
(rev 345)
+++ trunk/clients/irssi/src/core/haver-channels.h 2004-08-10 18:03:33 UTC
(rev 346)
@@ -0,0 +1,31 @@
+#ifndef __HAVER_CHANNELS_H
+#define __HAVER_CHANNELS_H
+
+#include "chat-protocols.h"
+#include "channels.h"
+
+/* Returns HAVER_CHANNEL_REC if it's HAVER channel, NULL if it isn't. */
+#define HAVER_CHANNEL(channel) \
+ PROTO_CHECK_CAST(CHANNEL(channel), HAVER_CHANNEL_REC, chat_type,
"HAVER")
+
+#define IS_HAVER_CHANNEL(channel) \
+ (HAVER_CHANNEL(channel) ? TRUE : FALSE)
+
+#define STRUCT_SERVER_REC HAVER_SERVER_REC
+struct _HAVER_CHANNEL_REC {
+#include "channel-rec.h"
+
+ GHashTable *info;
+};
+
+void haver_channels_init(void);
+void haver_channels_deinit(void);
+
+/* Create new HAVER channel record */
+HAVER_CHANNEL_REC *haver_channel_create(HAVER_SERVER_REC *server, const char
*name,
+ int automatic);
+
+#define haver_channel_find(server, name) \
+ HAVER_CHANNEL(channel_find(SERVER(server), name))
+
+#endif
Modified: trunk/clients/irssi/src/core/haver-commands.c
===================================================================
--- trunk/clients/irssi/src/core/haver-commands.c 2004-08-09 04:51:58 UTC
(rev 345)
+++ trunk/clients/irssi/src/core/haver-commands.c 2004-08-10 18:03:33 UTC
(rev 346)
@@ -23,6 +23,7 @@
#include "haver-protocol.h"
#include "fe-common/core/printtext.h"
#include "levels.h"
+#include "settings.h"
static void cmd_foobar(const char *str, HAVER_SERVER_REC * sock)
{
@@ -34,10 +35,36 @@
"Is haver server? %s", IS_HAVER_SERVER(sock) ? "yes" :
"no");
}
+static void cmd_part(const char *data, HAVER_SERVER_REC *server, WI_ITEM_REC
*item)
+{
+ GSList *out = NULL;
+ char *channame, *msg;
+ void *free_arg;
+
+ CMD_HAVER_SERVER(server);
+
+ if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST |
+ PARAM_FLAG_OPTCHAN, item, &channame, &msg))
+ return;
+ if (*channame == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
+
+ if (*msg == '\0') msg = (char *) settings_get_str("part_message");
+
+ out = g_slist_append(out, "PART");
+ out = g_slist_append(out, channame);
+
+ haver_send(server, out);
+
+ g_slist_free(out);
+
+ cmd_params_free(free_arg);
+}
+
void haver_commands_init(void)
{
// command_bind_haver("addbuddy", NULL, (SIGNAL_FUNC) cmd_addbuddy);
command_bind_haver("foobar", NULL, (SIGNAL_FUNC) cmd_foobar);
+ command_bind_haver("part", NULL, (SIGNAL_FUNC) cmd_part);
// command_bind_haver("save", NULL, (SIGNAL_FUNC) save_buddy_file);
/* command_bind_haver("connect", NULL, (SIGNAL_FUNC)
haver_check_buddies);*/
command_set_options("connect", "+haver");
@@ -47,4 +74,5 @@
{
/* command_unbind("connect", (SIGNAL_FUNC) haver_check_buddies);*/
command_unbind("foobar", (SIGNAL_FUNC) cmd_foobar);
+ command_unbind("part", (SIGNAL_FUNC) cmd_part);
}
Modified: trunk/clients/irssi/src/core/haver-core.c
===================================================================
--- trunk/clients/irssi/src/core/haver-core.c 2004-08-09 04:51:58 UTC (rev
345)
+++ trunk/clients/irssi/src/core/haver-core.c 2004-08-10 18:03:33 UTC (rev
346)
@@ -30,7 +30,7 @@
#include "haver-protocol.h"
#include "haver-login.h"
#include "haver-message.h"
-
+#include "haver-channels.h"
#include "settings.h"
void haver_session_init(void);
@@ -97,6 +97,7 @@
haver_login_init();
haver_message_init();
haver_session_init();
+ haver_channels_init();
module_register("haver", "core");
}
@@ -110,8 +111,9 @@
haver_queries_deinit();
haver_message_deinit();
haver_session_deinit();
+ haver_channels_deinit();
+ haver_login_deinit();
-
signal_emit("chat protocol deinit", 1, chat_protocol_find("haver"));
chat_protocol_unregister("haver");
}
Modified: trunk/clients/irssi/src/core/haver-login.c
===================================================================
--- trunk/clients/irssi/src/core/haver-login.c 2004-08-09 04:51:58 UTC (rev
345)
+++ trunk/clients/irssi/src/core/haver-login.c 2004-08-10 18:03:33 UTC (rev
346)
@@ -35,7 +35,7 @@
#define HAVER_VERSION "0.01"
-static void event_want(HAVER_SERVER_REC *server, char *uid, char *cid, GSList
*args)
+static void event_want(HAVER_SERVER_REC *server, GSList *args)
{
char *want = (char *) args->data;
char *event;
@@ -49,9 +49,9 @@
g_free(event);
}
-static void event_accept(HAVER_SERVER_REC *server, char *uid, char *cid,
GSList *args)
+static void event_accept(HAVER_SERVER_REC *server, GSList *args)
{
- signal_emit("haver login", 1, server, args->data);
+ signal_emit("haver login", 2, server, args->data);
}
static void want_ident(HAVER_SERVER_REC *server, GSList *args)
@@ -59,11 +59,8 @@
char *uid = g_strdup(server->nick);
GSList *msg = NULL;
- g_strdown(uid);
msg = g_slist_append(msg, "IDENT");
msg = g_slist_append(msg, uid);
- msg = g_slist_append(msg, "user");
- msg = g_slist_append(msg, "irssi-haver/" HAVER_VERSION " (irssi "
IRSSI_VERSION ")");
haver_send(server, msg);
Modified: trunk/clients/irssi/src/core/haver-message.c
===================================================================
--- trunk/clients/irssi/src/core/haver-message.c 2004-08-09 04:51:58 UTC
(rev 345)
+++ trunk/clients/irssi/src/core/haver-message.c 2004-08-10 18:03:33 UTC
(rev 346)
@@ -26,38 +26,51 @@
#include "haver-servers.h"
#include "line-split.h"
-//#include "haver-queries.h"
+#include "haver-channels.h"
#include "haver-parser.h"
#include "fe-common/core/printtext.h"
#include "levels.h"
#include "irssi-version.h"
-static void event_msg(HAVER_SERVER_REC *server, char *uid, char *cid, GSList
*args)
+static void event_msg(HAVER_SERVER_REC *server, GSList *args)
{
-/* char *type = (char *) args->data; */
- char *msg = (char *) args->next->data;
+ char *cid = (char *) args->data;
+ char *uid = (char *) args->next->data;
+ char *type = (char *) args->next->next->data;
+ char *msg = (char *) args->next->next->next->data;
- if (cid != NULL) {
- if (g_strcasecmp(server->nick, uid) != 0)
- signal_emit("message public", 5, server, msg, uid,
"haver", cid);
- }
- else
- signal_emit("message private", 4, server, msg, uid, "haver");
+ if (g_strcasecmp(server->nick, uid) != 0)
+ signal_emit("message public", 5, server, msg, uid, "haver",
cid);
}
-static void event_join(HAVER_SERVER_REC *server, char *uid, char *cid, GSList
*args)
+static void event_pmsg(HAVER_SERVER_REC *server, GSList *args)
{
+ char *uid = (char *) args->data;
+ char *type = (char *) args->next->data;
+ char *msg = (char *) args->next->next->data;
+
+ signal_emit("message private", 4, server, msg, uid, "haver");
+}
+
+static void event_join(HAVER_SERVER_REC *server, GSList *args)
+{
/* "message join", SERVER_REC, char *channel, char *nick, char *address
*/
+ char *cid = (char *) args->data;
+ char *uid = (char *) args->next->data;
+ HAVER_CHANNEL_REC *chanrec;
g_assert(uid != NULL);
g_assert(cid != NULL);
+
signal_emit("message join", 4, server, cid, uid, "haver");
}
-static void event_part(HAVER_SERVER_REC *server, char *uid, char *cid, GSList
*args)
+static void event_part(HAVER_SERVER_REC *server, GSList *args)
{
/* "message part", SERVER_REC, char *channel, char *nick, char *address
*/
+ char *cid = (char *) args->data;
+ char *uid = (char *) args->next->data;
g_assert(uid != NULL);
g_assert(cid != NULL);
@@ -68,6 +81,7 @@
void haver_message_init(void)
{
signal_add("haver event msg", (SIGNAL_FUNC) event_msg);
+ signal_add("haver event pmsg", (SIGNAL_FUNC) event_pmsg);
signal_add("haver event join", (SIGNAL_FUNC) event_join);
signal_add("haver event part", (SIGNAL_FUNC) event_part);
}
@@ -75,6 +89,7 @@
void haver_message_deinit(void)
{
signal_remove("haver event msg", (SIGNAL_FUNC) event_msg);
+ signal_remove("haver event pmsg", (SIGNAL_FUNC) event_pmsg);
signal_remove("haver event join", (SIGNAL_FUNC) event_join);
signal_remove("haver event part", (SIGNAL_FUNC) event_part);
}
Modified: trunk/clients/irssi/src/core/haver-protocol.c
===================================================================
--- trunk/clients/irssi/src/core/haver-protocol.c 2004-08-09 04:51:58 UTC
(rev 345)
+++ trunk/clients/irssi/src/core/haver-protocol.c 2004-08-10 18:03:33 UTC
(rev 346)
@@ -28,19 +28,14 @@
//#include "haver-queries.h"
#include "haver-parser.h"
-#include "fe-common/core/printtext.h"
-#include "levels.h"
#include "irssi-version.h"
+#define HAVER_VERSION "0.01"
+
+
#include <string.h>
#include <stdlib.h>
-//#define DEBUG(msg, param...) fprintf(stderr, msg "\n" , ## param)
-#define DEBUG(msg, param...) printtext(NULL, NULL, MSGLEVEL_CLIENTNOTICE, msg
,##param)
-#define NOTICE(msg, param...) printtext(server, NULL, MSGLEVEL_CLIENTNOTICE,
msg ,##param)
-//#define DEBUG(...)
-//#define NOTICE(...)
-
#ifdef BLOCKING_SOCKETS
# define MAX_SOCKET_READS 1
#else
@@ -50,17 +45,20 @@
#define ERROR(msg, param...) printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, msg
": %s (%d)" , ## param , strerror(errno), errno)
-char *current_server_event;
+//char *current_server_event;
static int signal_server_incoming;
static int signal_server_event;
static int signal_default_event;
+/* PUBLIC */
gboolean haver_send(HAVER_SERVER_REC *server, GSList *msg)
{
gboolean result;
char *out = haver_deparse(msg,
/* add CR-LF */ TRUE);
+ DEBUG("Send: %s", out);
+
if (net_transmit(net_sendbuffer_handle(server->handle), out,
strlen(out)) == -1)
result = FALSE;
else
@@ -71,15 +69,17 @@
return result;
}
+/* PRIVATE */
static int haver_receive_line(HAVER_SERVER_REC *server, char **str, int
read_socket)
{
- char tmpbuf[1024];
+ char tmpbuf[1024*16];
int recvlen, ret;
if (!IS_HAVER_SERVER(server)) {
return 0;
}
+ DEBUG("Got line");
g_return_val_if_fail(server != NULL, -1);
g_return_val_if_fail(str != NULL, -1);
@@ -97,7 +97,8 @@
return ret;
}
-/* input function: handle incoming server messages */
+/* PRIVATE
+ * input function: handle incoming server messages */
static void haver_parse_incoming(HAVER_SERVER_REC *server)
{
char *str;
@@ -105,7 +106,8 @@
if (!IS_HAVER_SERVER(server))
return;
-
+
+ DEBUG("Incoming Line");
g_return_if_fail(server != NULL);
/* Some commands can send huge replies and irssi might handle them
@@ -128,7 +130,7 @@
-
+/* SIGNAL */
static void haver_parse_incoming_line(HAVER_SERVER_REC *server, char *line)
{
if (!IS_HAVER_SERVER(server))
@@ -141,8 +143,11 @@
GSList *args = haver_parse(line);
GSList *item;
- /* EVENT: haver event, server, user, channel, args */
- signal_emit_id(signal_server_event, 4, server, NULL, NULL,
args);
+ g_assert(args != NULL);
+ DEBUG("Line: %s", line);
+
+ /* EVENT: haver event, server, args */
+ signal_emit_id(signal_server_event, 2, server, args);
/* Free everything */
for (item = args; item != NULL; item = g_slist_next(item))
@@ -154,80 +159,63 @@
signal_stop();
}
-static void haver_server_event(HAVER_SERVER_REC *server,
- char *uid, char *cid, GSList *args)
+/* SIGNAL */
+static void haver_event(HAVER_SERVER_REC *server, GSList *args)
{
+ g_assert(args != NULL);
if (!IS_HAVER_SERVER(server))
return;
char *event;
char *cmd = (char *) args->data;
-// char *s;
-
g_strdown(cmd);
event = g_strconcat("haver event ", cmd, '\0');
-// DEBUG("event: %s", event);
+ DEBUG("Event: %s", event);
- /* EVENT: haver event $cmd, user, channel, args */
- if (!signal_emit(event, 4, server, uid, cid, g_slist_next(args)))
- signal_emit_id(signal_default_event, 5, server, uid, cid,
g_slist_next(args), cmd);
+ /* EVENT: haver event $cmd, args */
+ if (!signal_emit(event, 2, server, g_slist_next(args))) {
+ DEBUG("Defaulting");
+ signal_emit_id(signal_default_event, 3, server,
g_slist_next(args), cmd);
+ }
g_free(event);
signal_stop();
}
-static void haver_event_of(HAVER_SERVER_REC *server,
- char *uid, char *cid, GSList *args)
-{
- char *new_uid = args->data;
-
- if (!IS_HAVER_SERVER(server))
- return;
-
-
- /* EVENT: server event, server, user, channel, command, args */
- signal_emit_id(signal_server_event, 5, server, new_uid, cid,
g_slist_next(args));
+/* SIGNAL */
+static void haver_event_haver(HAVER_SERVER_REC *server, GSList *args)
+{
+ g_assert(args != NULL);
+ server->version = g_strdup((char *) args->data);
+ DEBUG("Got version");
}
-static void haver_event_haver(HAVER_SERVER_REC *server,
- char *uid, char *cid, GSList *args)
-{
- int version = atoi((char *) args->data);
-/* int linelim = atoi((char *) args->next->data); */
- if (version != 3) {
- printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Wrong protocol
version. %d != 3", version);
- server->connection_lost = TRUE;
- server_disconnect(SERVER(server));
- }
-}
-
-static void haver_event_in(HAVER_SERVER_REC *server,
- char *uid, char *cid, GSList *args)
+/* SIGNAL */
+static void server_connected(HAVER_SERVER_REC * server)
{
- char *new_cid = args->data;
-
+ GSList *msg = NULL;
if (!IS_HAVER_SERVER(server))
return;
-
- /* EVENT: server event, server, user, channel, command, args */
- signal_emit_id(signal_server_event, 5, server, uid, new_cid,
g_slist_next(args));
-}
-static void sig_server_connected(HAVER_SERVER_REC * server)
-{
- if (!IS_HAVER_SERVER(server))
- return;
-
NOTICE("Reconnected");
server->readtag = g_input_add(net_sendbuffer_handle(server->handle),
G_INPUT_READ, (GInputFunction)
haver_parse_incoming, server);
+ msg = g_slist_append(msg, "HAVER");
+ msg = g_slist_append(msg, "irssi-haver/" HAVER_VERSION " (irssi "
IRSSI_VERSION ")");
+
+ haver_send(server, msg);
+
+ g_slist_free(msg);
+ DEBUG("Sent version");
+ signal_stop();
}
-static void event_login(HAVER_SERVER_REC * server, const char *data)
+/* SIGNAL */
+static void haver_login(HAVER_SERVER_REC * server, const char *data)
{
/* Login OK */
DEBUG("logged in");
@@ -235,32 +223,27 @@
signal_emit("event connected", 1, server);
}
+/* INIT */
void haver_protocol_init(void)
{
- signal_add("server connected", (SIGNAL_FUNC) sig_server_connected);
- signal_add("haver login", (SIGNAL_FUNC) event_login);
- signal_add("server incoming", (SIGNAL_FUNC) haver_parse_incoming_line);
- signal_add("haver event", (SIGNAL_FUNC) haver_server_event);
- signal_add("haver event of", (SIGNAL_FUNC) haver_event_of);
- signal_add("haver event in", (SIGNAL_FUNC) haver_event_in);
+ signal_add("server connected", (SIGNAL_FUNC) server_connected);
+ signal_add("haver login", (SIGNAL_FUNC) haver_login);
+ signal_add("server incoming", (SIGNAL_FUNC)
haver_parse_incoming_line);
+ signal_add("haver event", (SIGNAL_FUNC) haver_event);
signal_add("haver event haver", (SIGNAL_FUNC) haver_event_haver);
-// signal_add("event test", (SIGNAL_FUNC) haver_event_test);
-
signal_server_incoming = signal_get_uniq_id("server incoming");
signal_server_event = signal_get_uniq_id("haver event");
signal_default_event = signal_get_uniq_id("haver default");
}
+/* DEINIT */
void haver_protocol_deinit(void)
{
- signal_remove("server connected", (SIGNAL_FUNC) sig_server_connected);
- signal_remove("haver login", (SIGNAL_FUNC) event_login);
+ signal_remove("server connected", (SIGNAL_FUNC) server_connected);
+ signal_remove("haver login", (SIGNAL_FUNC) haver_login);
signal_remove("server incoming", (SIGNAL_FUNC)
haver_parse_incoming_line);
- signal_remove("haver event", (SIGNAL_FUNC) haver_server_event);
- signal_remove("haver event of", (SIGNAL_FUNC) haver_event_of);
- signal_remove("haver event in", (SIGNAL_FUNC) haver_event_in);
+ signal_remove("haver event", (SIGNAL_FUNC) haver_event);
signal_remove("haver event haver", (SIGNAL_FUNC) haver_event_haver);
-// signal_remove("event test", (SIGNAL_FUNC) haver_event_test);
}
Modified: trunk/clients/irssi/src/core/haver-protocol.h
===================================================================
--- trunk/clients/irssi/src/core/haver-protocol.h 2004-08-09 04:51:58 UTC
(rev 345)
+++ trunk/clients/irssi/src/core/haver-protocol.h 2004-08-10 18:03:33 UTC
(rev 346)
@@ -12,4 +12,14 @@
void haver_protocol_deinit(void);
gboolean haver_send(HAVER_SERVER_REC *server, GSList *msg);
+#include "levels.h"
+#include "fe-common/core/printtext.h"
+//#define DEBUG(msg, param...) fprintf(stderr, msg "\n" , ## param)
+#define DEBUG(msg, param...) printtext(NULL, NULL, MSGLEVEL_CLIENTNOTICE, msg
,##param)
+#define NOTICE(msg, param...) printtext(server, NULL, MSGLEVEL_CLIENTNOTICE,
msg ,##param)
+//#define DEBUG(...)
+//#define NOTICE(...)
+
+
+
#endif
Modified: trunk/clients/irssi/src/core/haver-servers.c
===================================================================
--- trunk/clients/irssi/src/core/haver-servers.c 2004-08-09 04:51:58 UTC
(rev 345)
+++ trunk/clients/irssi/src/core/haver-servers.c 2004-08-10 18:03:33 UTC
(rev 346)
@@ -98,39 +98,23 @@
g_return_if_fail(target != NULL);
out = g_slist_append(out, target);
- out = g_slist_append(out, "MSG");
out = g_slist_append(out, "\"");
out = g_slist_append(out, msg);
if (target_type == SEND_TARGET_CHANNEL)
- out = g_slist_prepend(out, "IN");
+ out = g_slist_prepend(out, "MSG");
else if (target_type == SEND_TARGET_NICK)
- out = g_slist_prepend(out, "TO");
+ out = g_slist_prepend(out, "PMSG");
haver_send(haverserver, out);
g_slist_free(out);
}
-static void channels_join(HAVER_SERVER_REC *server, char *channel, int
automatic)
-{
- if (!IS_HAVER_SERVER(server))
- return;
-
- GSList *msg = NULL;
- //signal_emit("error command", 2,
GINT_TO_POINTER(CMDERR_ILLEGAL_PROTO));
- msg = g_slist_append(msg, "JOIN");
- msg = g_slist_append(msg, channel);
-
- haver_send(server, msg);
- g_slist_free(msg);
-}
-
static void sig_server_connected(HAVER_SERVER_REC * server)
{
if (!IS_HAVER_SERVER(server))
return;
- server->channels_join = channels_join;
server->isnickflag = isnickflag_func;
server->ischannel = ischannel_func;
server->get_nick_flags = get_nick_flags;
Modified: trunk/clients/irssi/src/core/haver-servers.h
===================================================================
--- trunk/clients/irssi/src/core/haver-servers.h 2004-08-09 04:51:58 UTC
(rev 345)
+++ trunk/clients/irssi/src/core/haver-servers.h 2004-08-10 18:03:33 UTC
(rev 346)
@@ -33,7 +33,6 @@
#include "server-rec.h"
//unsigned char *cookie;
//HAVER_SERVER_CONNECT_REC *redirected;
- unsigned int linelimit;
};
HAVER_SERVER_REC * haver_server_init_connect(HAVER_SERVER_CONNECT_REC * conn);
Modified: trunk/clients/irssi/src/core/haver-session.c
===================================================================
--- trunk/clients/irssi/src/core/haver-session.c 2004-08-09 04:51:58 UTC
(rev 345)
+++ trunk/clients/irssi/src/core/haver-session.c 2004-08-10 18:03:33 UTC
(rev 346)
@@ -21,7 +21,7 @@
#include "haver-servers.h"
-static void sig_connected(HAVER_SERVER_REC * server)
+static void server_connected(HAVER_SERVER_REC * server)
{
if (!IS_HAVER_SERVER(server) || !server->session_reconnect)
return;
@@ -32,10 +32,10 @@
void haver_session_init(void)
{
- signal_add("server connected", (SIGNAL_FUNC) sig_connected);
+ signal_add("server connected", (SIGNAL_FUNC) server_connected);
}
void haver_session_deinit(void)
{
- signal_remove("server connected", (SIGNAL_FUNC) sig_connected);
+ signal_remove("server connected", (SIGNAL_FUNC) server_connected);
}
Deleted: trunk/clients/irssi/src/core/icq-buddy.c
===================================================================
--- trunk/clients/irssi/src/core/icq-buddy.c 2004-08-09 04:51:58 UTC (rev
345)
+++ trunk/clients/irssi/src/core/icq-buddy.c 2004-08-10 18:03:33 UTC (rev
346)
@@ -1,269 +0,0 @@
-#include "module.h"
-#include "signals.h"
-#include "icq-servers.h"
-#include "fe-common/core/printtext.h"
-#include "levels.h"
-#include "icq-buddy.h"
-#include "settings.h"
-#include "misc.h"
-#include "core/queries.h"
-struct buddy {
- char *uin;
- char *alias;
- int mode;
- guint32 ip;
-};
-
-GSList *buddies = NULL;
-
-void add_buddy(const char *uin, const char *alias)
-{
- QUERY_REC *query;
- struct buddy *new = g_new(struct buddy, 1);
- new->uin = strdup(uin);
- new->alias = strdup(alias);
- buddies = g_slist_prepend(buddies, new);
-
- query=query_find(NULL,uin);
- if (query)
- {
- g_free(query->visible_name);
-
- query->visible_name=g_strdup(alias);
- query->name=g_strdup(alias);
- signal_emit("query nick changed", 2, query, uin);
- signal_emit("window item name changed", 1, query);
- }
-}
-
-void destroy_buddy_list(void)
-{
- g_slist_foreach(buddies, (GFunc)g_free, NULL);
- g_slist_free(buddies);
- buddies = NULL;
-}
-
-static int compare_uin(struct buddy *try, const char *uin)
-{
- return strcmp(uin, try->uin);
-}
-static int compare_alias(struct buddy *try, const char *alias)
-{
- return strcasecmp(alias, try->alias);
-}
-
-static struct buddy *get_buddy(const char *uin)
-{
- GSList *item = g_slist_find_custom(buddies, (char *)uin,
(GCompareFunc)compare_uin);
- if (!item) return NULL;
- return item->data;
-}
-
-const char *buddy_getalias(const char *uin)
-{
- struct buddy *item = get_buddy(uin);
- if (!item) return uin;
- return item->alias;
-}
-
-const char *buddy_getuin(const char *alias)
-{
- GSList *item = g_slist_find_custom(buddies, (char *)alias,
(GCompareFunc)compare_alias);
- if (!item) return alias;
- return ((struct buddy*)item->data)->uin;
-}
-
-void buddy_forall(GFunc f, gpointer user_data)
-{
- GSList *list = buddies;
- while (list) {
- struct buddy* item = list->data;
- f(user_data, item->uin);
- list = g_slist_next(list);
- }
-}
-
-int buddy_getmode(const char *uin)
-{
- struct buddy *item = get_buddy(uin);
- if (!item) return -1;
- return item->mode;
-}
-int buddy_setmode(const char *uin, int mode)
-{
- struct buddy *item = get_buddy(uin);
- if (!item) return -1;
- return (item->mode = mode);
-}
-
-guint32 buddy_getip(const char *uin)
-{
- struct buddy *item = get_buddy(uin);
- if (!item) return -1;
- return item->ip;
-}
-
-/* Somebody mentioned ipv6? :) */
-
-int buddy_setip(const char *uin, guint32 ip)
-{
- struct buddy *item = get_buddy(uin);
- if (!item) return -1;
- item->ip = ip;
- return 0;
-}
-
-static void trim(char *src)
-{
- char *dst = src, *last = src + 666666;
-
- while (*src) {
- if (!isspace(*src)) {
- if (src > last)
- *dst++ = ' ';
- *dst++ = *src++;
- last = src;
- } else
- src++;
- }
- *dst = '\0';
-}
-
-void read_buddy_file(void)
-{
- FILE *stream;
- char line[80];
- const char *file = settings_get_str("buddy_file");
- //const char *file = "~/.irssi/icq_config";
- char *file_expanded;
-
- if (!file || !*file) return;
- file_expanded = convert_home(file);
- stream = fopen(file_expanded, "r");
- if (!stream) return;
- while (fgets(line, sizeof line, stream)) {
- char *buddy;
- trim(line);
- buddy = strchr(line, ' ');
- if (!buddy) continue;
- *buddy = '\0';
- buddy++;
- if (strspn(line, "0123456789") != strlen(line)) continue;
- add_buddy(line, buddy);
- }
- fclose(stream);
- printtext(NULL, NULL, MSGLEVEL_CLIENTNOTICE, "%d aliases read from %s",
g_slist_length(buddies), file_expanded);
- g_free(file_expanded);
-}
-
-void icq_savebuddy(FILE *stream, const char *uin)
-{
- fprintf(stream, "%s %s\n", uin, buddy_getalias(uin));
- printtext(NULL, NULL, MSGLEVEL_CLIENTNOTICE, " %s %s ",uin,
buddy_getalias(uin));
-}
-
-void save_buddy_file(void)
-{
- FILE *stream;
- const char *file = settings_get_str("buddy_file");
- //const char *file = "~/.irssi/icq_config";
- char *file_expanded;
-
- if (!file || !*file) return;
- file_expanded = convert_home(file);
- stream = fopen(file_expanded, "w");
- if (!stream) return;
- buddy_forall((GFunc)icq_savebuddy,stream);
- if (stream)
- {
- fclose(stream);
- printtext(NULL, NULL, MSGLEVEL_CLIENTNOTICE, "%d aliases saved to
%s", g_slist_length(buddies), file_expanded);
- }
- g_free(file_expanded);
-}
-
-char *read_conf_option(const char *opt)
-{
- FILE *stream;
- char line[80];
- const char *file = settings_get_str("buddy_file");
- //const char *file = "~/.irssi/icq_config";
- char *file_expanded;
-
- if (!file || !*file) return NULL;
- file_expanded = convert_home(file);
- stream = fopen(file_expanded, "r");
- g_free(file_expanded);
- if (!stream) return NULL;
- while (fgets(line, sizeof line, stream)) {
- char *buddy;
- trim(line);
- buddy = strchr(line, ' ');
- if (!buddy) continue;
- *buddy = '\0';
- buddy++;
- if (!strcmp(line, opt)) {
- fclose(stream);
- return g_strdup(buddy);
- }
- }
- fclose(stream);
- return NULL;
-}
-
-// Status constants
-// Statuses must be checked in the following order:
-// DND, Occupied, NA, Away, Online
-const unsigned short ICQ_STATUS_OFFLINE = 0xFFFF;
-const unsigned short ICQ_STATUS_ONLINE = 0x0000;
-const unsigned short ICQ_STATUS_AWAY = 0x0001;
-const unsigned short ICQ_STATUS_DND = 0x0002;
-const unsigned short ICQ_STATUS_NA = 0x0004;
-const unsigned short ICQ_STATUS_OCCUPIED = 0x0010;
-const unsigned short ICQ_STATUS_FREEFORCHAT = 0x0020;
-const char *modestring(int status)
-{
- static char unknown[30];
- static char allmode[60];
- char *mode;
- int lowerstat=status&0XFF;
-
- switch (lowerstat)
- {
- case 219:
- case OFFLINE: mode="offline"; break;
- case 0: mode="online"; break;
- case 1: mode="away"; break;
- case 2: mode="do not disturb"; break;
- case 4: mode="N/A-licq"; break;
- case 5: mode="N/A"; break;
- case 17: mode="occupied"; break;
- case 19: mode="do not disturb"; break;
- case 32: mode="free for chat"; break;
- default:
- snprintf(unknown, sizeof unknown, "damn.(%d)", lowerstat);
- mode=unknown;
- break;
- }
- if (status & 0x100) /* stealth-flag */
- {
- snprintf(allmode, sizeof allmode, "%s Invisible", mode);
- return allmode;
- }
- return mode;
-}
-
-const char *away_modes[] =
- { "online", "away", "na", "occ", "dnd", "ffc", "offline", NULL };
-
-int parse_away_mode(const char *status)
-{
- static const int codes[] = { 0, 1, 5, 17, 19, 32, OFFLINE };
- int i, code = -1;
- char *endp;
- for (i = 0; away_modes[i]; i++)
- if (!strcmp(status, away_modes[i])) return codes[i];
- code = strtol(status, &endp, 0);
- if (*endp) return -1;
- return code;
-}
Deleted: trunk/clients/irssi/src/core/icq-buddy.h
===================================================================
--- trunk/clients/irssi/src/core/icq-buddy.h 2004-08-09 04:51:58 UTC (rev
345)
+++ trunk/clients/irssi/src/core/icq-buddy.h 2004-08-10 18:03:33 UTC (rev
346)
@@ -1,18 +0,0 @@
-void add_buddy(const char *uin, const char *alias);
-void destroy_buddy_list(void);
-const char *buddy_getalias(const char *uin);
-const char *buddy_getuin(const char *alias);
-void read_buddy_file(void);
-void buddy_forall(GFunc f, gpointer user_data);
-char *read_conf_option(const char *opt);
-int buddy_getmode(const char *uin);
-int buddy_setmode(const char *uin, int mode);
-guint32 buddy_getip(const char *uin);
-int buddy_setip(const char *uin, guint32 mode);
-#define OFFLINE 1243 /* some magic number, not used by aim */
-const char *modestring(int status);
-extern const char *away_modes[];
-int parse_away_mode(const char *status);
-void save_buddy_file(void);
-
-