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);
-
-


Reply via email to