You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(106) |
Oct
(334) |
Nov
(246) |
Dec
(145) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(42) |
Feb
(53) |
Mar
(232) |
Apr
(109) |
May
(137) |
Jun
(63) |
Jul
(26) |
Aug
(263) |
Sep
(193) |
Oct
(507) |
Nov
(440) |
Dec
(241) |
2003 |
Jan
(567) |
Feb
(195) |
Mar
(504) |
Apr
(481) |
May
(524) |
Jun
(522) |
Jul
(594) |
Aug
(502) |
Sep
(643) |
Oct
(508) |
Nov
(430) |
Dec
(377) |
2004 |
Jan
(361) |
Feb
(251) |
Mar
(219) |
Apr
(499) |
May
(461) |
Jun
(419) |
Jul
(314) |
Aug
(519) |
Sep
(416) |
Oct
(247) |
Nov
(305) |
Dec
(382) |
2005 |
Jan
(267) |
Feb
(282) |
Mar
(327) |
Apr
(338) |
May
(189) |
Jun
(400) |
Jul
(462) |
Aug
(530) |
Sep
(316) |
Oct
(523) |
Nov
(481) |
Dec
(650) |
2006 |
Jan
(536) |
Feb
(361) |
Mar
(287) |
Apr
(146) |
May
(101) |
Jun
(169) |
Jul
(221) |
Aug
(498) |
Sep
(300) |
Oct
(236) |
Nov
(209) |
Dec
(205) |
2007 |
Jan
(30) |
Feb
(23) |
Mar
(26) |
Apr
(15) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Rob F. <rob...@us...> - 2002-10-11 03:14:03
|
Update of /cvsroot/gaim/gaim/src/protocols/jabber In directory usw-pr-cvs1:/tmp/cvs-serv28946/src/protocols/jabber Modified Files: jabber.c jabber.h lib.h libxode.h socket.c Added Files: Makefile.mingw Log Message: Yeah this will probably break a lot of shit knowing my luck. But hey, I really don't care what people thnk. --- NEW FILE: Makefile.mingw --- # # Makefile.mingw # # Description: Makefile for win32 (mingw) version of libjabber # # # PATHS # INCLUDE_DIR := . GTK_TOP := ../../../../win32-dev/gtk_2_0 GAIM_TOP := ../../.. JABBER_ROOT := . GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir ## ## VARIABLE DEFINITIONS ## TARGET = libjabber VERSION := $(shell cat $(GAIM_TOP)/VERSION) # Compiler Options CC = gcc CFLAGS = -O2 -Werror -Wall -mno-cygwin -fnative-struct DEFINES = -DAIM_BUILDDATE=\"`date +%Y%m%d`\" \ -DAIM_BUILDTIME=\"`date +%H%M%S`\" \ -DVERSION=\"$(VERSION)\" \ -DHAVE_CONFIG_H # Static or Plugin... ifeq ($(TYPE),STATIC) DEFINES += -DSTATIC DLL_INSTALL_DIR = $(GAIM_INSTALL_DIR) else ifeq ($(TYPE),PLUGIN) DLL_INSTALL_DIR = $(GAIM_INSTALL_DIR)/plugins endif endif ## ## INCLUDE MAKEFILES ## ## ## INCLUDE PATHS ## INCLUDE_PATHS += -I$(JABBER_ROOT) \ -I$(JABBER_ROOT)/win32 \ -I$(GTK_TOP)/include \ -I$(GTK_TOP)/include/gtk-2.0 \ -I$(GTK_TOP)/include/glib-2.0 \ -I$(GTK_TOP)/include/pango-1.0 \ -I$(GTK_TOP)/include/atk-1.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ -I$(GTK_TOP)/lib/gtk-2.0/include \ -I$(GAIM_TOP)/src \ -I$(GAIM_TOP)/src/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ -L$(GAIM_TOP)/src ## ## SOURCES, OBJECTS ## C_SRC = jabber.c \ expat.c \ genhash.c \ hashtable.c \ jconn.c \ jid.c \ jpacket.c \ jutil.c \ karma.c \ log.c \ pool.c \ pproxy.c \ rate.c \ sha.c \ snprintf.c \ socket.c \ str.c \ xhash.c \ xmlnode.c \ xmlparse.c \ xmlrole.c \ xmltok.c \ xstream.c \ win32/posix.uname.c OBJECTS = $(C_SRC:%.c=%.o) ## ## LIBRARIES ## LIBS = -lgtk-win32-2.0 -lglib-2.0 -lgdk-win32-2.0 -lgmodule-2.0 -lgobject-2.0 -lws2_32 -lintl -lgaim # -liberty ## ## RULES ## # How to make a C file %.o: %.c $(CC) $(CFLAGS) $(DEFINES) $(INCLUDE_PATHS) -o $@ -c $< ## ## TARGET DEFINITIONS ## .PHONY: all clean all: $(TARGET).dll install: cp $(JABBER_ROOT)/$(TARGET).dll $(DLL_INSTALL_DIR) ## ## BUILD Dependencies ## $(GAIM_TOP)/src/gaim.lib: $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib ## ## BUILD DLL ## $(TARGET).def: $(OBJECTS) dlltool --dllname $(TARGET).dll -z $(TARGET).def \ $(OBJECTS) $(TARGET).base: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib gcc -mdll -o junk.tmp -Wl,--base-file,$@ $(OBJECTS) $(LIB_PATHS) $(LIBS) rm -rf junk.tmp $(TARGET).exp: $(TARGET).def $(TARGET).base dlltool --dllname $(TARGET).dll --base-file $(TARGET).base \ --output-exp $(TARGET).exp --def $(TARGET).def rm -rf $(TARGET).base $(TARGET).dll: $(OBJECTS) $(TARGET).exp $(GAIM_TOP)/src/gaim.lib dlltool -D $(TARGET).dll -d $(TARGET).def -l $(TARGET).lib gcc -mdll -o $(TARGET).dll $(OBJECTS) -Wl,$(TARGET).exp $(LIB_PATHS) $(LIBS) rm -rf $(TARGET).exp ## ## CLEAN RULES ## clean: rm -rf *.o rm -rf ./win32/*.o rm -rf $(TARGET).dll rm -rf $(TARGET).lib rm -rf $(TARGET).def Index: jabber.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/jabber/jabber.c,v retrieving revision 1.67 retrieving revision 1.68 diff -u -d -r1.67 -r1.68 --- jabber.c 9 Oct 2002 05:46:02 -0000 1.67 +++ jabber.c 11 Oct 2002 03:14:00 -0000 1.68 @@ -20,23 +20,27 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ - #ifdef HAVE_CONFIG_H -#include "config.h" +#include <config.h> #endif - +#ifndef _WIN32 #include <netdb.h> -#include <unistd.h> -#include <errno.h> #include <netinet/in.h> #include <arpa/inet.h> +#include <sys/socket.h> +#include <sys/utsname.h> +#include <unistd.h> +#else +#include <winsock.h> +#include "utsname.h" +#endif + +#include <errno.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <time.h> -#include <sys/socket.h> -#include <sys/utsname.h> #include <sys/stat.h> #include "multi.h" #include "prpl.h" @@ -50,6 +54,10 @@ #include "jabber.h" #include "proxy.h" +#ifdef _WIN32 +#include "win32dep.h" +#endif + #include "pixmaps/protocols/jabber/available.xpm" #include "pixmaps/protocols/jabber/available-away.xpm" #include "pixmaps/protocols/jabber/available-chat.xpm" @@ -57,6 +65,9 @@ #include "pixmaps/protocols/jabber/available-dnd.xpm" #include "pixmaps/protocols/jabber/available-error.xpm" +/* for win32 compatability */ +G_MODULE_IMPORT GSList *connections; + /* The priv member of gjconn's is a gaim_connection for now. */ #define GJ_GC(x) ((struct gaim_connection *)(x)->priv) @@ -140,6 +151,7 @@ time_t idle; gboolean die; GHashTable *buddies; + GSList *file_transfers; }; /* @@ -229,6 +241,8 @@ static void jabber_handlevcard(gjconn, xmlnode, char *); +static char *jabber_normalize(const char *s); + static char *create_valid_jid(const char *given, char *server, char *resource) { char *valid; @@ -492,7 +506,11 @@ gjab_send_raw(gjc, "</stream:stream>"); gjc->state = JCONN_STATE_OFF; gjc->was_connected = 0; +#ifndef _WIN32 close(gjc->fd); +#else + closesocket(gjc->fd); +#endif gjc->fd = -1; XML_ParserFree(gjc->parser); gjc->parser = NULL; @@ -535,7 +553,11 @@ if (gjc && gjc->state != JCONN_STATE_OFF) { char *buf = xmlnode2str(x); if (buf) +#ifndef _WIN32 write(gjc->fd, buf, strlen(buf)); +#else + send(gjc->fd, buf, strlen(buf), 0); +#endif debug_printf("gjab_send: %s\n", buf); } } @@ -546,7 +568,11 @@ /* * JFIXME: No error detection?!?! */ +#ifndef _WIN32 if(write(gjc->fd, str, strlen(str)) < 0) { +#else + if(send(gjc->fd, str, strlen(str), 0) < 0) { +#endif fprintf(stderr, "DBG: Problem sending. Error: %d\n", errno); fflush(stderr); } @@ -636,8 +662,11 @@ if (!gjc || gjc->state == JCONN_STATE_OFF) return; - +#ifndef _WIN32 if ((len = read(gjc->fd, buf, sizeof(buf) - 1)) > 0) { +#else + if ((len = recv(gjc->fd, buf, sizeof(buf) - 1, 0)) > 0) { +#endif struct jabber_data *jd = GJ_GC(gjc)->proto_data; buf[len] = '\0'; debug_printf("input (len %d): %s\n", len, buf); @@ -727,7 +756,11 @@ gjconn gjc; if (!g_slist_find(connections, gc)) { +#ifndef _WIN32 close(source); +#else + closesocket(source); +#endif return; } @@ -1901,12 +1934,194 @@ xmlnode_free(x); } +struct jabber_file_transfer { + enum { JFT_SENDFILE_IN, JFT_SENDFILE_OUT } type; + struct file_transfer *xfer; + char *from; + struct g_url *url; + char *name; + GString *headers; + + int len; + int fd; + int watcher; + + gboolean sentreq; + gboolean newline; + gboolean startsaving; + + struct gaim_connection *gc; +}; + +static struct jabber_file_transfer *find_jft_by_xfer(struct gaim_connection *gc, + struct file_transfer *xfer) { + GSList *g = ((struct jabber_data *)gc->proto_data)->file_transfers; + struct jabber_file_transfer *f = NULL; + + while(g) { + f = (struct jabber_file_transfer *)g->data; + if(f->xfer == xfer) + break; + g = g->next; + f = NULL; + } + + return f; +} + +static void jabber_http_recv_callback(gpointer data, gint source, GaimInputCondition condition) { + struct jabber_file_transfer *jft = data; + char test; + + jft->fd = source; + if(!jft->sentreq) { + char buf[1024]; + g_snprintf(buf, sizeof(buf), "GET /%s HTTP/1.1\r\nHost: %s\r\n\r\n", jft->url->page, jft->url->address); + write(source, buf, strlen(buf)); + fcntl(source, F_SETFL, O_NONBLOCK); + jft->sentreq = TRUE; + jft->watcher = gaim_input_add(source, GAIM_INPUT_READ, jabber_http_recv_callback,data); + return; + } + + if(!jft->startsaving) { + if(read(source, &test, sizeof(test)) > 0 || errno == EWOULDBLOCK) { + if(errno == EWOULDBLOCK) { + errno = 0; + return; + } + + jft->headers = g_string_append_c(jft->headers, test); + if(test == '\r') + return; + if(test == '\n') { + if(jft->newline) { + gchar *lenstr = strstr(jft->headers->str, "Content-Length: "); + if(lenstr) { + sscanf(lenstr, "Content-Length: %d", &jft->len); + } + jft->startsaving = TRUE; + } else + jft->newline = TRUE; + return; + } + jft->newline = FALSE; + return; + } else { + gaim_input_remove(jft->watcher); + close(source); + //FIXME: ft_cancel(NULL, jft->xfer); + } + return; + } + + /* we've parsed the headers, gotten the size, all is good. now we pass the reception of + * the file off to the core, and leave it in it's capable...err...hands?? */ + gaim_input_remove(jft->watcher); + jft->watcher = 0; + transfer_in_do(jft->xfer, jft->fd, jft->name, jft->len); +} + +static void jabber_file_transfer_cancel(struct gaim_connection *gc, struct file_transfer *xfer) { + struct jabber_data *jd = gc->proto_data; + struct jabber_file_transfer *jft = find_jft_by_xfer(gc, xfer);\ + xmlnode x,y; + + jd->file_transfers = g_slist_remove(jd->file_transfers, jft); + + gaim_input_remove(jft->watcher); + close(jft->fd); + + x = xmlnode_new_tag("iq"); + xmlnode_put_attrib(x, "type", "error"); + xmlnode_put_attrib(x, "to", jft->from); + y = xmlnode_insert_tag(x, "error"); + /* FIXME: need to handle other kinds of errors here */ + xmlnode_put_attrib(y, "code", "406"); + xmlnode_insert_cdata(y, "File Transfer Refused", -1); + + gjab_send(jd->gjc, x); + + xmlnode_free(x); + + g_string_free(jft->headers, TRUE); + g_free(jft->from); + g_free(jft->url); + g_free(jft->name); + + g_free(jft); +} + +static void jabber_file_transfer_done(struct gaim_connection *gc, struct file_transfer *xfer) { + struct jabber_data *jd = gc->proto_data; + struct jabber_file_transfer *jft = find_jft_by_xfer(gc, xfer); + xmlnode x; + + jd->file_transfers = g_slist_remove(jd->file_transfers, jft); + + gaim_input_remove(jft->watcher); + close(jft->fd); + + x = xmlnode_new_tag("iq"); + xmlnode_put_attrib(x, "type", "result"); + xmlnode_put_attrib(x, "to", jft->from); + + gjab_send(jd->gjc, x); + + xmlnode_free(x); + + g_string_free(jft->headers, TRUE); + g_free(jft->from); + g_free(jft->url); + g_free(jft->name); + + g_free(jft); +} + +static void jabber_file_transfer_in(struct gaim_connection *gc, struct file_transfer *xfer, int offset) { + struct jabber_file_transfer *jft = find_jft_by_xfer(gc, xfer); + + proxy_connect(jft->url->address, jft->url->port, jabber_http_recv_callback, jft); +} + +static void jabber_handleoob(gjconn gjc, xmlnode iqnode) { + struct jabber_file_transfer *jft; + struct jabber_data *jd = GJ_GC(gjc)->proto_data; + char *msg = NULL; + xmlnode querynode = xmlnode_get_tag(iqnode, "query"); + xmlnode urlnode,descnode; + + if(!querynode) + return; + urlnode = xmlnode_get_tag(querynode, "url"); + if(!urlnode) + return; + descnode = xmlnode_get_tag(querynode, "desc"); + if(descnode) + msg = xmlnode_get_data(descnode); + + jft = g_new0(struct jabber_file_transfer, 1); + jft->type = JFT_SENDFILE_IN; + jft->gc = GJ_GC(gjc); + jft->url = parse_url(xmlnode_get_data(urlnode)); + jft->from = g_strdup(xmlnode_get_attrib(iqnode, "from")); + jft->name = g_strdup(g_strrstr(jft->url->page,"/")); + if (!jft->name) + jft->name = g_strdup(jft->url->page); + jft->headers = g_string_new(""); + jft->len = -1; + + jd->file_transfers = g_slist_append(jd->file_transfers, jft); + + jft->xfer = transfer_in_add(GJ_GC(gjc), jft->from, jft->name, jft->len, 1, msg); +} + static void jabber_handlelast(gjconn gjc, xmlnode iqnode) { - xmlnode x, querytag; + xmlnode x, querytag; char *id, *from; struct jabber_data *jd = GJ_GC(gjc)->proto_data; char idle_time[32]; - + id = xmlnode_get_attrib(iqnode, "id"); from = xmlnode_get_attrib(iqnode, "from"); @@ -1979,6 +2194,8 @@ querynode = xmlnode_get_tag(p->x, "query"); if (NSCHECK(querynode, "jabber:iq:roster")) { jabber_handlebuddy(gjc, xmlnode_get_firstchild(querynode)); + } else if(NSCHECK(querynode, "jabber:iq:oob")) { + jabber_handleoob(gjc, p->x); } } else if (jpacket_subtype(p) == JPACKET__GET) { xmlnode querynode; @@ -2261,7 +2478,7 @@ xmlnode_insert_tag(y, "composing"); if (message && strlen(message)) { - char *utf8 = str_to_utf8(message); + char *utf8 = str_to_utf8((char*)message); y = xmlnode_insert_tag(x, "body"); xmlnode_insert_cdata(y, utf8, -1); g_free(utf8); @@ -2748,7 +2965,7 @@ g_free(subject); if (message && strlen(message)) { - char *utf8 = str_to_utf8(message); + char *utf8 = str_to_utf8((char*)message); y = xmlnode_insert_tag(x, "body"); xmlnode_insert_cdata(y, utf8, -1); g_free(utf8); @@ -3960,7 +4177,7 @@ static struct prpl *my_protocol = NULL; -void jabber_init(struct prpl *ret) +G_MODULE_EXPORT void jabber_init(struct prpl *ret) { /* the NULL's aren't required but they're nice to have */ struct proto_user_opt *puo; @@ -4009,7 +4226,12 @@ ret->send_typing = jabber_send_typing; ret->convo_closed = jabber_convo_closed; ret->rename_group = jabber_rename_group; - + ret->file_transfer_out = NULL; /* TODO */ + ret->file_transfer_in = jabber_file_transfer_in; + ret->file_transfer_data_chunk = NULL; /* TODO */ + ret->file_transfer_done = jabber_file_transfer_done; + ret->file_transfer_cancel = jabber_file_transfer_cancel; + puo = g_new0(struct proto_user_opt, 1); puo->label = g_strdup("Port:"); puo->def = g_strdup("5222"); @@ -4021,7 +4243,7 @@ #ifndef STATIC -void *gaim_prpl_init(struct prpl *prpl) +G_MODULE_EXPORT void gaim_prpl_init(struct prpl *prpl) { jabber_init(prpl); prpl->plug->desc.api_version = PLUGIN_API_VERSION; Index: jabber.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/jabber/jabber.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- jabber.h 31 Jul 2001 01:00:38 -0000 1.1 +++ jabber.h 11 Oct 2002 03:14:00 -0000 1.2 @@ -16,6 +16,18 @@ * Jabber * Copyright (C) 1998-1999 The Jabber Team http://jabber.org/ */ +#ifndef _WIN32 +#include <syslog.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <netdb.h> +#include <arpa/inet.h> +#include <strings.h> +#include <unistd.h> +#else +#include <winsock.h> +#include "win32dep.h" +#endif #include <string.h> #include <stdlib.h> @@ -27,13 +39,6 @@ #include <errno.h> #include <signal.h> #include <stdarg.h> -#include <syslog.h> -#include <strings.h> -#include <unistd.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <netdb.h> -#include <arpa/inet.h> #include <sys/time.h> #include <time.h> #include <ctype.h> Index: lib.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/jabber/lib.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- lib.h 4 Apr 2002 03:04:57 -0000 1.1 +++ lib.h 11 Oct 2002 03:14:00 -0000 1.2 @@ -1,3 +1,21 @@ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif /* HAVE_CONFIG_H */ + +#ifndef _WIN32 +#include <syslog.h> +#include <strings.h> +#include <sys/param.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <netdb.h> +#include <arpa/inet.h> +#include <unistd.h> +#else +#include <winsock.h> +#include <stdlib.h> +#include "win32dep.h" +#endif #include <string.h> #include <stdlib.h> @@ -8,14 +26,6 @@ #include <fcntl.h> #include <errno.h> #include <signal.h> -#include <syslog.h> -#include <strings.h> -#include <unistd.h> -#include <sys/param.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <netdb.h> -#include <arpa/inet.h> #include <sys/time.h> #include <stdarg.h> #include <ctype.h> @@ -151,11 +161,9 @@ #define NETSOCKET_CLIENT 1 #define NETSOCKET_UDP 2 -#ifndef WIN32 int make_netsocket(u_short port, char *host, int type); struct in_addr *make_addr(char *host); int set_fd_close_on_exec(int fd, int flag); -#endif /* --------------------------------------------------------- */ Index: libxode.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/jabber/libxode.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- libxode.h 20 Dec 2001 19:58:43 -0000 1.2 +++ libxode.h 11 Oct 2002 03:14:00 -0000 1.3 @@ -1,3 +1,17 @@ +#ifndef _WIN32 +#include <syslog.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <netdb.h> +#include <arpa/inet.h> +#include <strings.h> +#include <arpa/nameser.h> +#include <resolv.h> +#include <unistd.h> +#else + +#endif + #include <string.h> #include <stdlib.h> #include <sys/types.h> @@ -7,15 +21,6 @@ #include <fcntl.h> #include <errno.h> #include <signal.h> -#include <syslog.h> -#include <strings.h> -#include <unistd.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <netdb.h> -#include <arpa/inet.h> -#include <arpa/nameser.h> -#include <resolv.h> #include <sys/time.h> #include <time.h> @@ -152,11 +157,9 @@ #define NETSOCKET_CLIENT 1 #define NETSOCKET_UDP 2 -#ifndef WIN32 int make_netsocket(u_short port, char *host, int type); struct in_addr *make_addr(char *host); int set_fd_close_on_exec(int fd, int flag); -#endif /* --------------------------------------------------------- */ Index: socket.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/jabber/socket.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- socket.c 4 Apr 2002 03:04:57 -0000 1.2 +++ socket.c 11 Oct 2002 03:14:00 -0000 1.3 @@ -148,6 +148,7 @@ return NULL; } +#ifndef _WIN32 /* Sets a file descriptor to close on exec. "flag" is 1 to close on exec, 0 to * leave open across exec. * -- EJB 7/31/2000 @@ -166,4 +167,5 @@ return 0; return fcntl(fd,F_SETFL,(long)newflags); } +#endif |
From: Rob F. <rob...@us...> - 2002-10-11 03:14:02
|
Update of /cvsroot/gaim/gaim/src/protocols/gg In directory usw-pr-cvs1:/tmp/cvs-serv28946/src/protocols/gg Modified Files: common.c gg.c libgg.c Added Files: Makefile.mingw Log Message: Yeah this will probably break a lot of shit knowing my luck. But hey, I really don't care what people thnk. --- NEW FILE: Makefile.mingw --- # # Makefile.mingw # # Description: Makefile for win32 (mingw) version of libgg # # # PATHS # INCLUDE_DIR := . GTK_TOP := ../../../../win32-dev/gtk_2_0 GAIM_TOP := ../../.. GG_ROOT := . GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir ## ## VARIABLE DEFINITIONS ## TARGET = libgg VERSION := $(shell cat $(GAIM_TOP)/VERSION) # Compiler Options CFLAGS = -O2 -Werror -Wall -mno-cygwin -fnative-struct DEFINES = -DAIM_BUILDDATE=\"`date +%Y%m%d`\" \ -DAIM_BUILDTIME=\"`date +%H%M%S`\" \ -DVERSION=\"$(VERSION)\" \ -DHAVE_CONFIG_H # Static or Plugin... ifeq ($(TYPE),STATIC) DEFINES += -DSTATIC DLL_INSTALL_DIR = $(GAIM_INSTALL_DIR) else ifeq ($(TYPE),PLUGIN) DLL_INSTALL_DIR = $(GAIM_INSTALL_DIR)/plugins endif endif ## ## INCLUDE MAKEFILES ## ## ## INCLUDE PATHS ## INCLUDE_PATHS += -I$(GG_ROOT) \ -I$(GTK_TOP)/include \ -I$(GTK_TOP)/include/gtk-2.0 \ -I$(GTK_TOP)/include/glib-2.0 \ -I$(GTK_TOP)/include/pango-1.0 \ -I$(GTK_TOP)/include/atk-1.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ -I$(GTK_TOP)/lib/gtk-2.0/include \ -I$(GAIM_TOP)/src \ -I$(GAIM_TOP)/src/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ -L$(GAIM_TOP)/src \ ## ## SOURCES, OBJECTS ## C_SRC = libgg.c \ common.c \ iconv_string.c \ gg.c OBJECTS = $(C_SRC:%.c=%.o) ## ## LIBRARIES ## LIBS = -lgtk-win32-2.0 -lglib-2.0 -lgdk-win32-2.0 -lgmodule-2.0 -lgobject-2.0 -lintl -lgaim -lws2_32 # -liberty ## ## RULES ## # How to make a C file %.o: %.c gcc $(CFLAGS) $(DEFINES) $(INCLUDE_PATHS) -o $@ -c $< ## ## TARGET DEFINITIONS ## .PHONY: all clean all: $(TARGET).dll install: cp $(GG_ROOT)/$(TARGET).dll $(DLL_INSTALL_DIR) ## ## BUILD Dependencies ## $(GAIM_TOP)/src/gaim.lib: $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib ## ## BUILD DLL ## $(TARGET).def: $(OBJECTS) dlltool --dllname $(TARGET).dll -z $(TARGET).def \ $(OBJECTS) $(TARGET).base: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib gcc -mdll -o junk.tmp -Wl,--base-file,$@ $(OBJECTS) $(LIB_PATHS) $(LIBS) rm -rf junk.tmp $(TARGET).exp: $(TARGET).def $(TARGET).base dlltool --dllname $(TARGET).dll --base-file $(TARGET).base \ --output-exp $(TARGET).exp --def $(TARGET).def rm -rf $(TARGET).base $(TARGET).dll: $(OBJECTS) $(TARGET).exp $(GAIM_TOP)/src/gaim.lib dlltool -D $(TARGET).dll -d $(TARGET).def -l $(TARGET).lib gcc -mdll -o $(TARGET).dll $(OBJECTS) -Wl,$(TARGET).exp $(LIB_PATHS) $(LIBS) rm -rf $(TARGET).exp ## ## CLEAN RULES ## clean: rm -rf *.o rm -rf $(TARGET).dll rm -rf $(TARGET).lib rm -rf $(TARGET).def Index: common.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/gg/common.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- common.c 29 Aug 2002 01:47:14 -0000 1.2 +++ common.c 11 Oct 2002 03:13:59 -0000 1.3 @@ -20,21 +20,24 @@ #include <stdio.h> #include <stdlib.h> +#ifndef _WIN32 #include <unistd.h> -#include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> +#include <netdb.h> #include <sys/ioctl.h> +#include <pwd.h> #include <sys/wait.h> +#else +#include <winsock.h> +#endif #include <sys/time.h> -#include <netdb.h> #include <errno.h> #ifndef _AIX # include <string.h> #endif #include <stdarg.h> -#include <pwd.h> #include <time.h> #ifdef sun #include <sys/filio.h> @@ -84,7 +87,7 @@ va_start(ap, format); - if ((size = vsnprintf(buf, 0, format, ap)) < 1) { + if ((size = g_vsnprintf(buf, 0, format, ap)) < 1) { size = 128; do { size *= 2; @@ -93,14 +96,14 @@ return NULL; } buf = tmp; - res = vsnprintf(buf, size, format, ap); + res = g_vsnprintf(buf, size, format, ap); } while (res == size - 1); } else { if (!(buf = malloc(size + 1))) return NULL; } - vsnprintf(buf, size + 1, format, ap); + g_vsnprintf(buf, size + 1, format, ap); va_end(ap); @@ -156,20 +159,31 @@ */ int gg_connect(void *addr, int port, int async) { - int sock, one = 1; + int sock, ret, one = 1; struct sockaddr_in sin; struct in_addr *a = addr; gg_debug(GG_DEBUG_FUNCTION, "** gg_connect(%s, %d, %d);\n", inet_ntoa(*a), port, async); if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) { - gg_debug(GG_DEBUG_MISC, "-- socket() failed. errno = %d (%s)\n", errno, strerror(errno)); + gg_debug(GG_DEBUG_MISC, "-- socket() failed. errno = %d" +#ifndef _WIN32 + " (%s)\n", errno, strerror(errno) +#else + "\n", WSAGetLastError() +#endif + ); return -1; } if (async) { +#ifndef _WIN32 if (ioctl(sock, FIONBIO, &one) == -1) { gg_debug(GG_DEBUG_MISC, "-- ioctl() failed. errno = %d (%s)\n", errno, strerror(errno)); +#else + if (ioctlsocket(sock, FIONBIO, (unsigned long *)&one) == SOCKET_ERROR) { + gg_debug(GG_DEBUG_MISC, "-- ioctlsocket() failed. errno = %d\n", WSAGetLastError()); +#endif return -1; } } @@ -178,11 +192,22 @@ sin.sin_family = AF_INET; sin.sin_addr.s_addr = a->s_addr; - if (connect(sock, (struct sockaddr*) &sin, sizeof(sin)) == -1) { + if ((ret = connect(sock, (struct sockaddr*) &sin, sizeof(sin))) == -1) { +#ifndef _WIN32 if (errno && (!async || errno != EINPROGRESS)) { gg_debug(GG_DEBUG_MISC, "-- connect() failed. errno = %d (%s)\n", errno, strerror(errno)); return -1; } +#else + if (ret == SOCKET_ERROR) { + gg_debug(GG_DEBUG_MISC, "-- connect() SOCKET_ERROR: %d\n", WSAGetLastError()); + if((WSAGetLastError() != WSAEWOULDBLOCK) && + (!async || WSAGetLastError() != WSAEINPROGRESS)) { + gg_debug(GG_DEBUG_MISC, "-- connect() failed. errno = %d\n", WSAGetLastError()); + return -1; + } + } +#endif gg_debug(GG_DEBUG_MISC, "-- connect() in progress\n"); } @@ -208,11 +233,19 @@ for (; length > 1; buf++, length--) { do { +#ifndef _WIN32 if ((ret = read(sock, buf, 1)) == -1 && errno != EINTR) { +#else + if ((ret = recv(sock, buf, 1, 0)) == SOCKET_ERROR && (WSAGetLastError() != WSAEINTR)) { +#endif *buf = 0; return; } +#ifndef _WIN32 } while (ret == -1 && errno == EINTR); +#else + } while (ret == SOCKET_ERROR && WSAGetLastError() == WSAEINTR); +#endif if (*buf == '\n') { buf++; Index: gg.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/gg/gg.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -d -r1.24 -r1.25 --- gg.c 6 Oct 2002 00:39:02 -0000 1.24 +++ gg.c 11 Oct 2002 03:13:59 -0000 1.25 @@ -24,17 +24,22 @@ #include <config.h> #endif +#ifndef _WIN32 #include <netdb.h> #include <unistd.h> -#include <errno.h> #include <netinet/in.h> #include <arpa/inet.h> +#include <sys/socket.h> +#else +#include <winsock.h> +#endif + +#include <errno.h> #include <fcntl.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <time.h> -#include <sys/socket.h> #include <sys/stat.h> #include <ctype.h> #ifdef HAVE_LANGINFO_CODESET @@ -51,6 +56,10 @@ #include "gaim.h" #include "proxy.h" +#ifdef _WIN32 +#include "win32dep.h" +#endif + #include "pixmaps/protocols/gg/gg_suncloud.xpm" #include "pixmaps/protocols/gg/gg_sunred.xpm" #include "pixmaps/protocols/gg/gg_sunwhitered.xpm" @@ -85,6 +94,10 @@ #define UC_NORMAL 2 +/* for win32 compatability */ +G_MODULE_IMPORT GSList *connections; + + struct agg_data { struct gg_session *sess; int own_status; @@ -419,29 +432,38 @@ gg_free_event(e); } -static void login_callback(gpointer data, gint source, GaimInputCondition cond) +void login_callback(gpointer data, gint source, GaimInputCondition cond) { struct gaim_connection *gc = data; struct agg_data *gd = gc->proto_data; struct gg_event *e; - if (!g_slist_find(connections, data)) { + debug_printf("GG login_callback...\n"); + if (!g_slist_find(connections, gc)) { +#ifndef _WIN32 close(source); +#else + closesocket(source); +#endif return; } - - if (gd->sess->fd != source) + debug_printf("Found GG connection\n"); + if (gd->sess->fd != source) { gd->sess->fd = source; - + debug_printf("Setting sess->fd to source\n"); + } if (source == -1) { hide_login_progress(gc, _("Unable to connect.")); signoff(gc); return; } - - if (gc->inpa == 0) + debug_printf("Source is valid.\n"); + if (gc->inpa == 0) { + debug_printf("login_callback.. checking gc->inpa .. is 0.. setting fd watch\n"); gc->inpa = gaim_input_add(gd->sess->fd, GAIM_INPUT_READ, login_callback, gc); - + debug_printf("Adding watch on fd\n"); + } + debug_printf("Checking State.\n"); switch (gd->sess->state) { case GG_STATE_READING_DATA: set_login_progress(gc, 2, _("Reading data")); @@ -456,9 +478,10 @@ set_login_progress(gc, 5, _("Exchanging key hash")); break; default: + debug_printf("No State found\n"); break; } - + debug_printf("gg_watch_fd\n"); if (!(e = gg_watch_fd(gd->sess))) { debug_printf("login_callback: gg_watch_fd failed - CRITICAL!\n"); hide_login_progress(gc, _("Critical error in GG library\n")); @@ -466,6 +489,37 @@ return; } + /* If we are GG_STATE_CONNECTING_GG then we still need to connect, as + we could not use proxy_connect in libgg.c */ + switch( gd->sess->state ) { + case GG_STATE_CONNECTING_GG: + { + struct in_addr ip; + char buf[256]; + + /* Remove watch on initial socket - now that we have ip and port of login server */ + gaim_input_remove(gc->inpa); + + ip.s_addr = gd->sess->server_ip; + gd->sess->fd = proxy_connect(inet_ntoa(ip), gd->sess->port, login_callback, gc); + + if (gd->sess->fd < 0) { + g_snprintf(buf, sizeof(buf), _("Connect to %s failed"), inet_ntoa(ip)); + hide_login_progress(gc, buf); + signoff(gc); + return; + } + break; + } + case GG_STATE_READING_KEY: + /* Set new watch on login server ip */ + if(gc->inpa) + gc->inpa = gaim_input_add(gd->sess->fd, GAIM_INPUT_READ, login_callback, gc); + debug_printf("Setting watch on connection with login server.\n"); + break; + }/* end switch() */ + + debug_printf("checking gg_event\n"); switch (e->type) { case GG_EVENT_NONE: /* nothing */ @@ -490,9 +544,10 @@ signoff(gc); break; default: + debug_printf("no gg_event\n"); break; } - + debug_printf("Returning from login_callback\n"); gg_free_event(e); } @@ -837,16 +892,25 @@ debug_printf("search_callback: g_slist_find error\n"); gaim_input_remove(hdata->inpa); g_free(hdata); +#ifndef _WIN32 close(source); +#else + closesocket(source); +#endif return; } webdata = NULL; len = 0; - +#ifndef _WIN32 while (read(source, &read_data, 1) > 0 || errno == EWOULDBLOCK) { if (errno == EWOULDBLOCK) { errno = 0; +#else + while (recv(source, &read_data, 1, 0) > 0 || WSAEWOULDBLOCK == WSAGetLastError() ) { + if (WSAEWOULDBLOCK == WSAGetLastError()) { + WSASetLastError(0); +#endif continue; } @@ -862,7 +926,11 @@ webdata[len] = 0; gaim_input_remove(hdata->inpa); +#ifndef _WIN32 close(source); +#else + closesocket(source); +#endif debug_printf("http_results: type %d, webdata [%s]\n", hdata->type, webdata); @@ -905,7 +973,11 @@ debug_printf("http_req_callback: g_slist_find error\n"); g_free(request); g_free(hdata); +#ifndef _WIN32 close(source); +#else + closesocket(source); +#endif return; } @@ -927,10 +999,18 @@ g_free(request); +#ifndef _WIN32 if (write(source, buf, strlen(buf)) < strlen(buf)) { +#else + if (send(source, buf, strlen(buf), 0) < strlen(buf)) { +#endif g_free(buf); g_free(hdata); +#ifndef _WIN32 close(source); +#else + closesocket(source); +#endif do_error_dialog(_("Error communicating with Gadu-Gadu server"), _("Gaim was unable to complete your request due to a problem " "communicating to the Gadu-Gadu HTTP server. Please try again " @@ -1221,7 +1301,7 @@ static struct prpl *my_protocol = NULL; -void gg_init(struct prpl *ret) +G_MODULE_EXPORT void gg_init(struct prpl *ret) { struct proto_user_opt *puo; ret->protocol = PROTO_GADUGADU; @@ -1272,7 +1352,7 @@ #ifndef STATIC -void *gaim_prpl_init(struct prpl *prpl) +G_MODULE_EXPORT void gaim_prpl_init(struct prpl *prpl) { gg_init(prpl); prpl->plug->desc.api_version = PLUGIN_API_VERSION; Index: libgg.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/gg/libgg.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- libgg.c 5 Dec 2001 09:48:56 -0000 1.6 +++ libgg.c 11 Oct 2002 03:13:59 -0000 1.7 @@ -18,23 +18,29 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <stdio.h> +#ifndef _WIN32 #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/ioctl.h> #include <sys/wait.h> -#include <sys/time.h> #include <netdb.h> +#include <pwd.h> +#else +#include <winsock.h> +#include <fcntl.h> +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <stdio.h> +#include <sys/time.h> #include <errno.h> #ifndef _AIX # include <string.h> #endif #include <stdarg.h> -#include <pwd.h> #include <time.h> #ifdef sun #include <sys/filio.h> @@ -45,12 +51,17 @@ #endif #include "libgg.h" #include "config.h" +#include "gaim.h" +#include "proxy.h" -int gg_debug_level = 0; +int gg_debug_level = (GG_DEBUG_NET | GG_DEBUG_TRAFFIC | GG_DEBUG_DUMP | GG_DEBUG_FUNCTION | GG_DEBUG_MISC); int gg_http_use_proxy = 0; int gg_http_proxy_port = 0; char *gg_http_proxy_host = NULL; +/* temp -Herman */ +static int ping_outstanding = 0; + #ifndef lint static char rcsid[] @@ -95,6 +106,7 @@ #endif } +#ifndef _WIN32 /* * gg_resolve() // funkcja wewnêtrzna * @@ -149,6 +161,7 @@ return 0; } +#endif /*!_WIN32*/ /* * gg_recv_packet() // funkcja wewnêtrzna @@ -165,6 +178,7 @@ struct gg_header h; char *buf = NULL; int ret = 0, offset, size = 0; + int sizeh = sizeof(struct gg_header); gg_debug(GG_DEBUG_FUNCTION, "** gg_recv_packet(...);\n"); @@ -174,21 +188,41 @@ } if (sess->recv_left < 1) { - while (ret != sizeof(h)) { - ret = read(sess->fd, &h, sizeof(h)); - gg_debug(GG_DEBUG_MISC, "-- header recv(..., %d) = %d\n", sizeof(h), ret); - if (ret < sizeof(h)) { + while (ret != sizeh) { +#ifndef _WIN32 + ret = read(sess->fd, &h, sizeh); + gg_debug(GG_DEBUG_MISC, "-- header recv(..., %d) = %d\n", sizeh, ret); + if (ret < sizeh) { if (errno != EINTR) { gg_debug(GG_DEBUG_MISC, "-- errno = %d (%s)\n", errno, strerror(errno)); return NULL; } } +#else + ret = recv(sess->fd, (char*)&h, sizeh, 0); + gg_debug(GG_DEBUG_MISC, "-- header recv(..., %d) = %d\n", sizeh, ret); + if (ret < sizeh) { + /* connection has been gracefully closed */ + if (ret == 0) { + gg_debug(GG_DEBUG_MISC, "Connection has been gracefully closed\n"); + WSASetLastError(WSAEDISCON); + return NULL; + } + else if (ret == SOCKET_ERROR) { + if(WSAGetLastError() != WSAEINTR) { + gg_debug(GG_DEBUG_MISC, "-- socket error = %d\n", WSAGetLastError()); + return NULL; + } + } + + } +#endif } h.type = fix32(h.type); h.length = fix32(h.length); } else { - memcpy(&h, sess->recv_buf, sizeof(h)); + memcpy(&h, sess->recv_buf, sizeh); } /* jakie¶ sensowne limity na rozmiar pakietu */ @@ -204,24 +238,29 @@ offset = sess->recv_done; buf = sess->recv_buf; } else { - if (!(buf = malloc(sizeof(h) + h.length + 1))) { + if (!(buf = malloc(sizeh + h.length + 1))) { gg_debug(GG_DEBUG_MISC, "-- not enough memory\n"); return NULL; } - memcpy(buf, &h, sizeof(h)); + memcpy(buf, &h, sizeh); offset = 0; size = h.length; } while (size > 0) { - ret = read(sess->fd, buf + sizeof(h) + offset, size); +#ifndef _WIN32 + ret = read(sess->fd, buf + sizeh + offset, size); +#else + ret = recv(sess->fd, buf + sizeh + offset, size, 0); +#endif gg_debug(GG_DEBUG_MISC, "-- body recv(..., %d) = %d\n", size, ret); if (ret > -1 && ret <= size) { offset += ret; size -= ret; } else if (ret == -1) { +#ifndef _WIN32 gg_debug(GG_DEBUG_MISC, "-- errno = %d (%s)\n", errno, strerror(errno)); if (errno == EAGAIN) { gg_debug(GG_DEBUG_MISC, "-- %d bytes received, %d left\n", offset, size); @@ -235,6 +274,13 @@ free(buf); return NULL; } +#else + gg_debug(GG_DEBUG_MISC, "-- errno = %d\n", WSAGetLastError()); + if (WSAGetLastError()!= WSAEINTR) { + free(buf); + return NULL; + } +#endif } } @@ -244,7 +290,7 @@ int i; gg_debug(GG_DEBUG_DUMP, ">> received packet (type=%.2x):", h.type); - for (i = 0; i < sizeof(h) + h.length; i++) + for (i = 0; i < sizeh + h.length; i++) gg_debug(GG_DEBUG_DUMP, " %.2x", (unsigned char) buf[i]); gg_debug(GG_DEBUG_DUMP, "\n"); } @@ -306,9 +352,14 @@ } plen = sizeof(struct gg_header) + length + payload_length; - +#ifndef _WIN32 if ((res = write(sock, tmp, plen)) < plen) { gg_debug(GG_DEBUG_MISC, "-- write() failed. res = %d, errno = %d (%s)\n", res, errno, strerror(errno)); +#else + if ((res = send(sock, tmp, plen, 0)) < plen) { + gg_debug(GG_DEBUG_MISC, "-- send() failed. res = %d, errno = %d\n", + res, (res == SOCKET_ERROR) ? WSAGetLastError() : 0); +#endif free(tmp); return -1; } @@ -317,7 +368,7 @@ return 0; } - +#ifndef _WIN32 /* * gg_login() * @@ -419,6 +470,7 @@ return sess; } +#endif /*!_WIN32*/ /* * gg_free_session() @@ -458,7 +510,11 @@ } if (sess->state != GG_STATE_CONNECTED) { +#ifndef _WIN32 errno = ENOTCONN; +#else + WSASetLastError( WSAENOTCONN ); +#endif return -1; } @@ -517,7 +573,11 @@ } if (sess->state != GG_STATE_CONNECTED) { +#ifndef _WIN32 errno = ENOTCONN; +#else + WSASetLastError( WSAENOTCONN ); +#endif return -1; } @@ -553,13 +613,24 @@ } if (sess->state != GG_STATE_CONNECTED) { +#ifndef _WIN32 errno = ENOTCONN; +#else + WSASetLastError( WSAENOTCONN ); +#endif return -1; } gg_debug(GG_DEBUG_FUNCTION, "** gg_ping(...);\n"); - - return gg_send_packet(sess->fd, GG_PING, NULL, 0, NULL, 0); + + if(ping_outstanding) { + debug_printf("Trying to send ping, when we havn't been ponged on last ping\n"); + return 1; + } + else { + ping_outstanding = 1; + return gg_send_packet(sess->fd, GG_PING, NULL, 0, NULL, 0); + } } /* @@ -605,7 +676,11 @@ } if (sess->state != GG_STATE_CONNECTED) { +#ifndef _WIN32 errno = ENOTCONN; +#else + WSASetLastError( WSAENOTCONN ); +#endif return -1; } @@ -650,7 +725,11 @@ } if (sess->state != GG_STATE_CONNECTED) { +#ifndef _WIN32 errno = ENOTCONN; +#else + WSASetLastError( WSAENOTCONN ); +#endif return -1; } @@ -682,7 +761,11 @@ } if (sess->state != GG_STATE_CONNECTED) { +#ifndef _WIN32 errno = ENOTCONN; +#else + WSASetLastError( WSAENOTCONN ); +#endif return -1; } @@ -785,7 +868,7 @@ if (h->type == GG_PONG) { gg_debug(GG_DEBUG_MISC, "-- received a pong\n"); - + ping_outstanding = 0; sess->last_pong = time(NULL); } @@ -812,7 +895,9 @@ { struct gg_event *e; int res = 0; +#ifndef _WIN32 int port; +#endif if (!sess) { errno = EFAULT; @@ -829,6 +914,9 @@ e->type = GG_EVENT_NONE; switch (sess->state) { +#ifndef _WIN32 + /* Apparantly we will never be in this state as long as we are + using proxy_connect instead of gg_login - Herman */ case GG_STATE_RESOLVING: { struct in_addr a; @@ -887,7 +975,7 @@ break; } - +#endif /* !_WIN32 */ case GG_STATE_CONNECTING: { char buf[1024]; @@ -895,10 +983,16 @@ gg_debug(GG_DEBUG_MISC, "== GG_STATE_CONNECTING\n"); - if (sess->async && (getsockopt(sess->fd, SOL_SOCKET, SO_ERROR, &res, &res_size) || res)) { + if (sess->async && (getsockopt(sess->fd, SOL_SOCKET, SO_ERROR, +#ifndef _WIN32 + &res, +#else + (char*)&res, +#endif + &res_size) || res)) { +#if 0 struct in_addr *addr = (struct in_addr*) &sess->server_ip; gg_debug(GG_DEBUG_MISC, "-- http connection failed, errno = %d (%s), trying direct connection\n", res, strerror(res)); - if ((sess->fd = gg_connect(addr, GG_DEFAULT_PORT, sess->async)) == -1) { gg_debug(GG_DEBUG_MISC, "-- connection failed, trying https connection\n"); if ((sess->fd = gg_connect(addr, GG_HTTPS_PORT, sess->async)) == -1) { @@ -913,20 +1007,26 @@ sess->state = GG_STATE_CONNECTING_GG; sess->check = GG_CHECK_WRITE; +#else + gg_debug(GG_DEBUG_MISC, "-- http connection failed, errno = %d\n", res); + e->type = GG_EVENT_CONN_FAILED; + e->event.failure = GG_FAILURE_CONNECTING; + sess->state = GG_STATE_IDLE; +#endif break; } gg_debug(GG_DEBUG_MISC, "-- http connection succeded, sending query\n"); if (gg_http_use_proxy) { - snprintf(buf, sizeof(buf) - 1, + g_snprintf(buf, sizeof(buf) - 1, "GET http://" GG_APPMSG_HOST "/appsvc/appmsg.asp?fmnumber=%lu HTTP/1.0\r\n" "Host: " GG_APPMSG_HOST "\r\n" "User-Agent: " GG_HTTP_USERAGENT "\r\n" "Pragma: no-cache\r\n" "\r\n", sess->uin); } else { - snprintf(buf, sizeof(buf) - 1, + g_snprintf(buf, sizeof(buf) - 1, "GET /appsvc/appmsg.asp?fmnumber=%lu HTTP/1.0\r\n" "Host: " GG_APPMSG_HOST "\r\n" "User-Agent: " GG_HTTP_USERAGENT "\r\n" @@ -935,10 +1035,12 @@ }; gg_debug(GG_DEBUG_MISC, "=> -----BEGIN-HTTP-QUERY-----\n%s\n=> -----END-HTTP-QUERY-----\n", buf); - +#ifndef _WIN32 if (write(sess->fd, buf, strlen(buf)) < strlen(buf)) { +#else + if (send(sess->fd, buf, strlen(buf), 0) < strlen(buf)) { +#endif gg_debug(GG_DEBUG_MISC, "-- sending query failed\n"); - errno = EIO; e->type = GG_EVENT_CONN_FAILED; e->event.failure = GG_FAILURE_WRITING; @@ -1010,8 +1112,10 @@ a.s_addr = inet_addr(host); sess->server_ip = a.s_addr; - - if ((sess->fd = gg_connect(&a, port, sess->async)) == -1) { +#if 0 + /* We need to watch this non-blocking socket so lets use proxy_connect + in gg.c - Herman */ + if((sess->fd = gg_connect(&a, port, sess->assync)) == -1) { gg_debug(GG_DEBUG_MISC, "-- connection failed, trying https connection\n"); if ((sess->fd = gg_connect(&a, GG_HTTPS_PORT, sess->async)) == -1) { gg_debug(GG_DEBUG_MISC, "-- connection failed, errno = %d (%s)\n", errno, strerror(errno)); @@ -1022,7 +1126,9 @@ break; } } - +#else + sess->port = port; +#endif sess->state = GG_STATE_CONNECTING_GG; sess->check = GG_CHECK_WRITE; @@ -1035,7 +1141,13 @@ gg_debug(GG_DEBUG_MISC, "== GG_STATE_CONNECTING_GG\n"); - if (sess->async && (getsockopt(sess->fd, SOL_SOCKET, SO_ERROR, &res, &res_size) || res)) { + if (sess->async && (getsockopt(sess->fd, SOL_SOCKET, SO_ERROR, +#ifndef _WIN32 + &res, +#else + (char*)&res, +#endif + &res_size) || res)) { struct in_addr *addr = (struct in_addr*) &sess->server_ip; gg_debug(GG_DEBUG_MISC, "-- connection failed, trying https connection\n"); @@ -1068,8 +1180,11 @@ gg_debug(GG_DEBUG_MISC, "== GG_STATE_READING_KEY\n"); if (!(h = gg_recv_packet(sess))) { +#ifndef _WIN32 gg_debug(GG_DEBUG_MISC, "-- gg_recv_packet() failed. errno = %d (%s)\n", errno, strerror(errno)); - +#else + gg_debug(GG_DEBUG_MISC, "-- gg_recv_packet() failed. errno = %d\n", WSAGetLastError()); +#endif e->type = GG_EVENT_CONN_FAILED; e->event.failure = GG_FAILURE_READING; sess->state = GG_STATE_IDLE; |
From: Rob F. <rob...@us...> - 2002-10-11 03:14:02
|
Update of /cvsroot/gaim/gaim/src/protocols/irc In directory usw-pr-cvs1:/tmp/cvs-serv28946/src/protocols/irc Modified Files: irc.c Added Files: Makefile.mingw Log Message: Yeah this will probably break a lot of shit knowing my luck. But hey, I really don't care what people thnk. --- NEW FILE: Makefile.mingw --- # # Makefile.mingw # # Description: Makefile for win32 (mingw) version of libirc # # # PATHS # INCLUDE_DIR := . GTK_TOP := ../../../../win32-dev/gtk_2_0 GAIM_TOP := ../../.. IRC_ROOT := . GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir ## ## VARIABLE DEFINITIONS ## TARGET = libirc VERSION := $(shell cat $(GAIM_TOP)/VERSION) # Compiler Options CC = gcc CFLAGS = -O2 -Werror -Wall -mno-cygwin -fnative-struct DEFINES = -DAIM_BUILDDATE=\"`date +%Y%m%d`\" \ -DAIM_BUILDTIME=\"`date +%H%M%S`\" \ -DVERSION=\"$(VERSION)\" \ -DHAVE_CONFIG_H # Static or Plugin... ifeq ($(TYPE),STATIC) DEFINES += -DSTATIC DLL_INSTALL_DIR = $(GAIM_INSTALL_DIR) else ifeq ($(TYPE),PLUGIN) DLL_INSTALL_DIR = $(GAIM_INSTALL_DIR)/plugins endif endif ## ## INCLUDE MAKEFILES ## ## ## INCLUDE PATHS ## INCLUDE_PATHS += -I$(IRC_ROOT) \ -I$(GTK_TOP)/include \ -I$(GTK_TOP)/include/gtk-2.0 \ -I$(GTK_TOP)/include/glib-2.0 \ -I$(GTK_TOP)/include/pango-1.0 \ -I$(GTK_TOP)/include/atk-1.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ -I$(GTK_TOP)/lib/gtk-2.0/include \ -I$(GAIM_TOP)/src \ -I$(GAIM_TOP)/src/win32 \ -I$(GAIM_TOP) LIB_PATHS = -L$(GTK_TOP)/lib \ -L$(GAIM_TOP)/src ## ## SOURCES, OBJECTS ## C_SRC = irc.c OBJECTS = $(C_SRC:%.c=%.o) ## ## LIBRARIES ## LIBS = -lgtk-win32-2.0 -lglib-2.0 -lgdk-win32-2.0 -lgmodule-2.0 -lgobject-2.0 -lws2_32 -lintl -lgaim # -liberty ## ## RULES ## # How to make a C file %.o: %.c $(CC) $(CFLAGS) $(DEFINES) $(INCLUDE_PATHS) -o $@ -c $< ## ## TARGET DEFINITIONS ## .PHONY: all clean all: $(TARGET).dll install: cp $(IRC_ROOT)/$(TARGET).dll $(DLL_INSTALL_DIR) ## ## BUILD Dependencies ## $(GAIM_TOP)/src/gaim.lib: $(MAKE) -C $(GAIM_TOP)/src -f Makefile.mingw gaim.lib ## ## BUILD DLL ## $(TARGET).def: $(OBJECTS) dlltool --dllname $(TARGET).dll -z $(TARGET).def \ $(OBJECTS) $(TARGET).base: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib gcc -mdll -o junk.tmp -Wl,--base-file,$@ $(OBJECTS) $(LIB_PATHS) $(LIBS) rm -rf junk.tmp $(TARGET).exp: $(TARGET).def $(TARGET).base dlltool --dllname $(TARGET).dll --base-file $(TARGET).base \ --output-exp $(TARGET).exp --def $(TARGET).def rm -rf $(TARGET).base $(TARGET).dll: $(OBJECTS) $(TARGET).exp $(GAIM_TOP)/src/gaim.lib dlltool -D $(TARGET).dll -d $(TARGET).def -l $(TARGET).lib gcc -mdll -o $(TARGET).dll $(OBJECTS) -Wl,$(TARGET).exp $(LIB_PATHS) $(LIBS) rm -rf $(TARGET).exp ## ## CLEAN RULES ## clean: rm -rf *.o rm -rf $(TARGET).dll rm -rf $(TARGET).lib rm -rf $(TARGET).def Index: irc.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/irc/irc.c,v retrieving revision 1.96 retrieving revision 1.97 diff -u -d -r1.96 -r1.97 --- irc.c 10 Oct 2002 07:00:33 -0000 1.96 +++ irc.c 11 Oct 2002 03:13:59 -0000 1.97 @@ -25,8 +25,13 @@ #include <config.h> -#include <fcntl.h> +#ifndef _WIN32 #include <unistd.h> +#else +#include <winsock.h> +#endif + +#include <fcntl.h> #include <errno.h> #include <string.h> #include <stdlib.h> @@ -39,6 +44,10 @@ #include "gaim.h" #include "proxy.h" +#ifdef _WIN32 +#include "win32dep.h" +#endif + #include "pixmaps/protocols/irc/irc_icon.xpm" #define IRC_BUF_LEN 4096 @@ -47,6 +56,10 @@ #define USEROPT_SERV 0 #define USEROPT_PORT 1 +/* for win32 compatability */ +G_MODULE_IMPORT GSList *connections; + + struct dcc_chat { struct gaim_connection *gc; @@ -64,6 +77,7 @@ char *name; int len; int watcher; + int awatcher; char ip[12]; int port; int fd; @@ -119,7 +133,11 @@ static int irc_write(int fd, char *data, int len) { debug_printf("IRC C: %s", data); +#ifndef _WIN32 return write(fd, data, len); +#else + return send(fd, data, len, 0); +#endif } static struct conversation *irc_find_chat(struct gaim_connection *gc, char *name) @@ -435,7 +453,11 @@ int n = 0, l; struct conversation *convo; debug_printf("THIS IS TOO MUCH EFFORT\n"); +#ifndef _WIN32 n = read (chat->fd, buffer, IRC_BUF_LEN); +#else + n = recv (chat->fd, buffer, IRC_BUF_LEN, 0); +#endif if (n > 0) { @@ -461,8 +483,6 @@ } static void irc_file_transfer_do(struct gaim_connection *gc, struct irc_file_transfer *ift) { - struct irc_data *id = (struct irc_data *)gc->proto_data; - /* Ok, we better be receiving some crap here boyeee */ if (transfer_in_do(ift->xfer, ift->fd, ift->name, ift->len)) { gaim_input_remove(ift->watcher); @@ -471,6 +491,19 @@ } +void irc_read_dcc_ack (gpointer data, gint source, GaimInputCondition condition) { + struct irc_file_transfer *ift = data; + struct irc_data *id = (struct irc_data *)ift->gc->proto_data; + int len; + guint32 ack; + + printf("I got here.\n"); + len = recv(source, (char *)&ack, 4, MSG_PEEK); + printf("Len is: %d\n", len); + printf("Ack is: %d\n", ack); + recv(source, (char *)&ack, 4, 0); +} + void dcc_send_callback (gpointer data, gint source, GaimInputCondition condition) { struct irc_file_transfer *ift = data; struct irc_data *id = (struct irc_data *)ift->gc->proto_data; @@ -488,6 +521,8 @@ return; } +// ift->awatcher = gaim_input_add(ift->fd, GAIM_INPUT_READ, irc_read_dcc_ack, ift); + if (transfer_out_do(ift->xfer, ift->fd, 0)) { gaim_input_remove(ift->watcher); ift->watcher = 0; @@ -1323,7 +1358,11 @@ gchar buf[1024]; gboolean off; +#ifndef _WIN32 i = read(idata->fd, buf, 1024); +#else + i = recv(idata->fd, buf, 1024, 0); +#endif if (i <= 0) { hide_login_progress_error(gc, "Read error"); signoff(gc); @@ -1374,7 +1413,11 @@ char buf[IRC_BUF_LEN]; if (!g_slist_find(connections, gc)) { +#ifndef _WIN32 close(source); +#else + closesocket(source); +#endif return; } @@ -1490,7 +1533,11 @@ if (gc->inpa) gaim_input_remove(gc->inpa); +#ifndef _WIN32 close(idata->fd); +#else + closesocket(idata->fd); +#endif g_free(gc->proto_data); } @@ -2011,7 +2058,6 @@ ift->xfer = transfer_out_add(gc, ift->sn); } - static struct irc_file_transfer *find_ift_by_xfer(struct gaim_connection *gc, struct file_transfer *xfer) { @@ -2030,7 +2076,6 @@ } static void irc_file_transfer_data_chunk(struct gaim_connection *gc, struct file_transfer *xfer, const char *data, int len) { - struct irc_data *id = (struct irc_data *)gc->proto_data; struct irc_file_transfer *ift = find_ift_by_xfer(gc, xfer); guint32 pos; @@ -2113,10 +2158,7 @@ static void irc_file_transfer_in(struct gaim_connection *gc, struct file_transfer *xfer, int offset) { - struct irc_data *id = (struct irc_data *)gc->proto_data; struct irc_file_transfer *ift = find_ift_by_xfer(gc, xfer); - struct sockaddr_in addr; - char *ip = (char *)malloc(32); ift->xfer = xfer; proxy_connect(ift->ip, ift->port, dcc_recv_callback, ift); @@ -2149,7 +2191,7 @@ chat->inpa = gaim_input_add (chat->fd, GAIM_INPUT_READ, dcc_chat_connected, chat); - snprintf (buf, sizeof buf, "\001DCC CHAT chat %s %d\001\n", + g_snprintf (buf, sizeof buf, "\001DCC CHAT chat %s %d\001\n", chat->ip_address, chat->port); irc_send_im (gc, who, buf, -1, 0); } @@ -2196,7 +2238,7 @@ static struct prpl *my_protocol = NULL; -void irc_init(struct prpl *ret) +G_MODULE_EXPORT void irc_init(struct prpl *ret) { struct proto_user_opt *puo; ret->protocol = PROTO_IRC; @@ -2240,8 +2282,7 @@ } #ifndef STATIC - -void *gaim_prpl_init(struct prpl* prpl) +G_MODULE_EXPORT void gaim_prpl_init(struct prpl* prpl) { irc_init(prpl); prpl->plug->desc.api_version = PLUGIN_API_VERSION; |
From: Rob F. <rob...@us...> - 2002-10-11 03:14:02
|
Update of /cvsroot/gaim/gaim/pixmaps In directory usw-pr-cvs1:/tmp/cvs-serv28946/pixmaps Added Files: gaim-install.ico gaim.ico Log Message: Yeah this will probably break a lot of shit knowing my luck. But hey, I really don't care what people thnk. --- NEW FILE: gaim-install.ico --- --- NEW FILE: gaim.ico --- Rr n¦ Ú ²æ ~º Ê Ö Ò ²ê ¶ê ®æ (_D±O à© |
From: Rob F. <rob...@us...> - 2002-10-11 03:14:02
|
Update of /cvsroot/gaim/gaim/po In directory usw-pr-cvs1:/tmp/cvs-serv28946/po Added Files: Makefile.mingw Log Message: Yeah this will probably break a lot of shit knowing my luck. But hey, I really don't care what people thnk. --- NEW FILE: Makefile.mingw --- # Makefile.mingw # # Description: Makefile to generate mo files # PACKAGE = gaim srcdir = . top_srcdir = .. GAIM_INSTALL_DIR = ../win32-install-dir LOCALEDIR = $(GAIM_INSTALL_DIR)/locale CC = gcc GTK_BIN = ../../win32-dev/gtk_2_0/bin GMSGFMT = $(GTK_BIN)/msgfmt MSGFMT = $(GTK_BIN)/msgfmt XGETTEXT = $(GTK_BIN)/xgettext MSGMERGE = $(GTK_BIN)/msgmerge .SUFFIXES: .SUFFIXES: .c .o .po .pot .pox .gmo .mo ## ## SOURCES, OBJECTS ## CATALOGS = bg.gmo cs.gmo da.gmo de.gmo es.gmo fi.gmo fr.gmo hu.gmo it.gmo ja.gmo ko.gmo nl.gmo pl.gmo ro.gmo ru.gmo sk.gmo sv.gmo zh_CN.gmo zh_TW.gmo POTFILES = \ ../plugins/docklet/docklet.c \ ../plugins/chatlist.c \ ../plugins/gtik.c \ ../src/protocols/gg/gg.c \ ../src/protocols/icq/gaim_icq.c \ ../src/protocols/irc/irc.c \ ../src/protocols/jabber/jabber.c \ ../src/protocols/msn/msn.c \ ../src/protocols/napster/napster.c \ ../src/protocols/oscar/oscar.c \ ../src/protocols/toc/toc.c \ ../src/protocols/yahoo/yahoo.c \ ../src/protocols/zephyr/zephyr.c \ ../src/about.c \ ../src/aim.c \ ../src/away.c \ ../src/buddy.c \ ../src/buddy_chat.c \ ../src/conversation.c \ ../src/dialogs.c \ ../src/gaimrc.c \ ../src/html.c \ ../src/module.c \ ../src/multi.c \ ../src/perl.c \ ../src/plugins.c \ ../src/prefs.c \ ../src/prpl.c \ ../src/server.c \ ../src/sound.c ## ## RULES ## .pot.pox: $(MAKE) $(PACKAGE).pot $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox .po.mo: $(MSGFMT) -o $@ $< .po.gmo: rm -f $@ && $(GMSGFMT) --statistics -o $@ $< ## ## TARGETS ## all: $(CATALOGS) $(PACKAGE).pot: $(POTFILES) POTFILES.in $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \ --add-comments --keyword=_ --keyword=N_ \ --files-from=$(srcdir)/POTFILES.in \ && test ! -f $(PACKAGE).po \ || ( rm -f $(srcdir)/$(PACKAGE).pot \ && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot ) install: all mkdir -p $(LOCALEDIR) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\.gmo$$//'`; \ dir=$(LOCALEDIR)/$$lang/LC_MESSAGES; \ mkdir -p $$dir; \ if test -r $$cat; then \ cp $$cat $$dir/$(PACKAGE).mo; \ echo "installing $$cat as $$dir/$(PACKAGE).mo"; \ else \ cp $(srcdir)/$$cat $$dir/$(PACKAGE).mo; \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(PACKAGE).mo"; \ fi; \ done clean: rm -f *.gmo *.pot *.pox |
From: Rob F. <rob...@us...> - 2002-10-11 03:14:01
|
Update of /cvsroot/gaim/gaim/sounds In directory usw-pr-cvs1:/tmp/cvs-serv28946/sounds Added Files: BuddyArrive.wav BuddyLeave.wav Makefile.mingw Receive.wav RedAlert.wav Send.wav Log Message: Yeah this will probably break a lot of shit knowing my luck. But hey, I really don't care what people thnk. --- NEW FILE: BuddyArrive.wav --- RIFF8 --- NEW FILE: BuddyLeave.wav --- RIFF ÿ<8§©Ó ,´Á<¯(E¬(4¨§Í: </[¬- 4§Û¬ÿM¯²4:I®¾I8-0®¾g§ª[E'Í¢¬²©¼ÿ¤¡8#. *¬¢çÁ§[Aºÿçg()¾¥ªÛ´/S¸¯ [Mÿ- %(4°«M28篥¢4$®£¼g¶¢¶.#""#6® ¶:&&Ū°°¯g'´¦´ºg/Á®¾Ó,ÅI,A¦¦ÉÓ¾A>´®¡ !-¸¦I4¯¶Aÿ¤¦! ¾º/ºªE* ¸©£°I®¥ÍÓ©¡²ç$$A°¤¾28²¬¨²,8A)4©¤²´E,ͨ¢º" +A¼«ª¬© EŶ$¾²MII² ¦¨Û' ÿ´º>0Iͺ¸£ª%M¥¸8(0¯¦[$'2g ¶&.Å /¤Å+$Á ¦É.6¯¯¬°Á¶ÉS´¾Ó: I¯°´I2:¦Í" ç¨Á8+Ó8 « ®A+'&Ó¶# Ó¯Û窥¦ª6)§©Á°¶, (8¸gAŧ¢£Á% ÿŬ Á,&S &*ÿ£¢g*2Ť©E &¼¦´-%6ÿ¶¤" *°-'g²¤Å( ¶²+M®§ #M¢²E<26¬°'#ç²(%ͨ£º '#.®¡Á'>«¨¥ª ç¯[80A¦°E#2 Û>Á¯¯©©É- $¡¨S(0IÛª°$ A§§[6ç¸ S(<¯¢¬¼ÓçÛÍÅ´«/ Û¦§§¡ÿ"*ÿ( E¢Á´£©¶¦«#Mç#(*+´[ º²¶ª®²ª : *ª«¬²Á¸®çg ¬6¬¶SÛººÅ²E <¢Á[:Û¶+.¥#2¥, [¡ÁE®¡©¯©A $+g¨¢°Å°¯¶¢¬: 0§ª°¾© ´¬g#´¼[[ç¶ 2 0纩¤¼ÉÿAç® §I$&4S¾¨ÿ4*6©ªÓ<('Í¥¡¬Í4%*Ó ¢°Ó:! )/.)/IͰ´´¡ ¡¥Å!0S¨®Á¾¼ç 0[Á¤¤ ç>º°°¥¢¶I"8¬¡¤¡´A.IŶ¡¬®É)/硨²Û'(ç§¥>0ÿ8#&:Sɯ´°¦ª¥¥´A"$:>ç¾ÁÁÁM/4¯£çSg-! -Ó¾/:Á¤¢É4g®¸S-,çÉɾÅ[gÉçÛ¬§´¾°©«¾48:MçEI£®¾ÅÉÛ®¤¬¥Ó!>çg®®Û۰®¡¡´ÁÅ(,$%A4/Ť¥£¾M¨¡¾ÛÉM>E4 //.º©¥I2MSS°®SÛ©º2#0ÉÅAg¯¸Û¼¼ç´¥¸EÛÁS[Å<(*% .ͺ¶«Åͯ¯ÁÉÍÛÓº¶ç<6*$)& .Å«¦®¶ÿ8>SEMÿMA6&'ÿ¦¢ªÉ<--M¶®ÁA,%#$'0Í®©¥«²°®ºÍI24MÍÛ[ÉÁS8($8MŦM*-IS[¼¸ÛI8&!+/É«:+8IIÁ¸SAM0(,( *´²gM*$IÛ缯¾g>%<°«´Á¼¸M-/4/S¾ÍŲ¸g6>MMMSMÁ¨¦º<0:EÛºgM¼¼çÛ[.**->´¬ºS>çÍI>E[ɶÁ:"%>´¤¤ÉA604EÓ¸°É:#0[´§¡¥g+)20&(6¶¨M-*0MÉÁɸ©¨ºg6.4ISS¾¥¤Á-*ççEçªÍ((.4EÿÛ¼¼I,'2[I<M¯´+!(2Mç>8ÛºÛ:--<Ű¯ª¦Û2).gºç86Û¸¾ÉE..2.:ɪ£ºISÓM0'$4¾¬º2!!/º ¦ºE.0SÅÉS2>²¯g(<¸«²¾¼§¤¸EEE46IÿÉÍ08¸°Ó>碰M<:4,)<´¬Û)&<[ÛÁ¯¨Å:+(.2:gÁçE4(&6ÿÁ¶©ªM+,6<<<66:<//IÛçÅ©«<&%&&-Aͯª¸A(!ç¦ÅM0+-242<Ó¾ÿ/,²§²¶Ó6./)'6Í´´E!*Ó²¯°¡<%(<Û²Å8(%,S´¯¬¢§[$8ż¾¾ÛgA'$8Ͱ¢E%0A[缯Å((>¯g0SA竨¸M/(/Ó´° ´A!!4[Ͱ¥¥®[+ɦ:"&.MÁ²¬«¼46¶¥£¡ ç!0[Óº²¼A&">¾¶°¥´+)EÁ®©¬Í.!'S´©º*").:Å«ÿ424<¼¦ ¢¯ÉM/!"/<¾¥¢§¼, 8¾«¡¯< )S´¨¦°g6<[çÁ°¬ªª¾4$!",[¶¬ª¯¼ÿ:2.+>¶§ ¢¬Í6)#&<ÍÓçɼ´¯Å:/6MÓ¼¯¯¼ÉÿMA0'(A¸ª¨°ÍSMA88[¸«ª¶ÓA4*%-[®£¦¯ÁS2+(,Mº¬¤£«Ó/%%+:Û¸¨¢®S+!/g°©E"%:Û¾¾ÍÛÅg848<Í© ®[, -[çÁ®¶ºç<MŸ¼¸¯¯¼[,*0A¸¨¥¦´I04EgÅ´¯¶Áÿ2(*2AÁ®¾ÉÍSAE:6ÿ¸¶²®¸ÍÛS60<E:MÍÁÁÉ:*.Û®§¦¨®´¾A'%-:EISSçÅÿ:>Í´«¨®¾É¼[-'%'8ɸ´¬¯ç6006ͪ¦«°ÉS8%&IÓŶ¼Í¼¾M8[º²«§¶g<* .A箣¨É>8-%+ÿ¶«£¥¼<.,+:Å´²´Ó4(-:Aÿ¾°¨£¶I/$ -MÛÁ²²¾ÛI-%,S´¡®ÿ+#.:AgÁ´²´Ó8.6IÉ¥§²ÿ0'+468SŦ®Ó<46Aÿ¸®´¼ÓA.(#"2ç°¡¤¸E/2Sç[Eÿ²¸[4*'*.Eº§¡¥°ÉSE>:g¸°²Å6$ /Û¬«ÅS::II>SÛ[E6($,<Û°¦¤§§©¾SE6.08:[ÅÓ:-,6縯¯¬§«¼S6,-:[Ó¼¶¾Û</+,:MÛ¼¬¥¦°ç<:gÅÓÿg[[S8-,2<Eç´¥¤´gAAIAEÿÉÅÿ2#%2Ó¡£¨°ÛA64SÍÿE>MS>-',Û¬§ª®²´¼g<>ÛÁÁÿ>4460/>ç¼¶¼ÓÓ¶ªºÛI<<::MÉÁS0,+8ÿÉ͸¨£¥²Û>>gÛSIM:0-,-I¶²¼¾¶´®¬¼ÿgÓÍg<.(,A[MIMIg´ª©§§¸[AE<>S>8MÿA8:8A͸²¯¬¯ÉÛÓggÍÉg>82/2>EMŸ¼º´¶º¶¸ÅÍÉÿ4-4AçÍA,/IÍÁ¼ÁÁ¯§©°Ág:26>><808SçÛÍɼ¶°¶ÓA:[ÓÿI:886644IçͲ¨¡ ¦¸g<882264A[SIgÓžÁ¾º¸¾ç[Ó¼º¼ÍI4/268A<8g¾¸¸´²´²°º¾¼S-*06AE>>MÛç[ɲ²´°²´²¾M402//8:>ÛÍSSɺ´®²°°Í:2224Agg[M8<;ÅÛ;®ª¬¾[MMMM>0-2>MSS[çŶ®««¶ÉçÿÿM>::ASM<8:>SÉ´¯®´¼ÁÅÛgI>:<AA88<IçÍÍŶ®¬¯¶¾ÛgME>>:842:IÛÁÁź°®¼çgççÿM>::A:A[çÿSEIÛº²¯¯¯¶¾ÉÿA0./4<MAAgçg羯¬«¯¸¼¼[008<Sg<200<ÿ¼²°®¯²²´ÓA0*(/>A>SçÓÓÍÓÓ¸®²ÉME<20:SÿÿS<<ÿÉçgÁ°¬«´Ó[[M<:AMçÛM:>[g[SÿŲ«´ºÁÿ:.+0EÿçÿçÍÉçIAMͲ¸ÍÓÓÿ[MAMÿS<:AM[EA[Á¬¥ª¸ÓgMMA84:IM[ÿg[[g[Ûº¯²ºÍgMA0,/>Ûº¾ÿESÛÉÅÉÁº¶¾gIEI<8>gÁ°´ÉM>>A>MÿŲ¯ÁÿS[g[çÿgÍÓ>6<ESçç[縲¶¾ÉÿçÍÿEES[MMMI[Û[IMͶ°´¾Í;Û8,*-EɼÅɾÁÍÛÿ[ÛÅÛSM[ÿçM8:g¼´¸¾Éç[<24E;ºÅÓÛçÿ[SgŸ¸É[IEA<:>gÅÁÉÉÁº¸ÉMA[ÓçgSMgççI<<MÛÁ¼ÁÁ¼ÉÿSMgÛçg[ÿÍÍgA826EÓ¸¶´´¾ÓÿIESgçÛÉÅÿ>0,.AÛÁ¶¯°¸ÉgE>AEgÉÉÿI<8>[çççÓ;¶ºÓg[ÿÓÅÓ[SSMIE><:Eÿº«§ÉA8EçÍÛMIÿÍçE62<Sç¾´¯¶ÉgIIgÛçgSÛÉÍÿE:A[ÿçÓž¾çA:MÛÅÅÓͺ´ÅS4.04<MçÁ´´ÁÓÛÛÍÉÛÿçÍÉÿA2.4E[ÿɺ¶¶¾ç[çÍÉÍÛÓÓS<66E[I>>[º¬©®¾ÓçgSSggçS:6:><:Iͯ©«¸ÓÿggggIMÿç[E<8<ASÿÁ´²¼Û[ÿÓçSIE[çÿM><<AMç¾°´ÍÿgÿgMESÓÁÍÿ>88EÿžÁÉÍÛÛÿÿçççççɾÁg:02AgÓçÛÉÁ¾ÉçgççÓÅÁ¾Åg>204<IgçźºÅÛgÿÉÁ¼ÁÅÓM<624>MÿÓžÁÅÅÉÍÍÉÉÉÍÛSMI>:<<<MÛżººÁÍÛçÓÅÅÓÿSIEA>::Egɺ´¶¾ÍgMMgÓÉÍÓÿgMA846EÛÁ¸º¾ÅÓççgÿÓÉÅÓgM>8<AIgÓÍž¾ÉÛÿ[SçÍÅÁÍSA<>AEMÿÓ¾ºÁÉÍÓçg[gçÓÍÛÿÿI:68>纰²ºÍgSggMSÛÅÉÛ[EEE<:[Á´¯°ÁÿMA:<[Óɼ¾çMIAEIM[Û¾¼ÍÛÓççÛçgÛžÍÿ>406>SÓ¾º¸º¾ÓÿSEA[;¼ÅgA8646IÓ¸®¶ÉgMIM[ÛżÍ[A::<:>S͸²²¸¾ç[EESgÓÉÅÍÿI:426EÛ¸®®¶¾ÓÛçSMMSÛÍÓS<644>ÿ¾°°´ºÉÿI<:IçÍÉÛM>644A纮ª©ºçA0-4IçÉÓgSSMEE[Û¼²®²¾ÿ<0/:Mͼ¸ÁÍgE:66>g¼¯¬°Ág>:<EgÉÅÉÍÛM:22>Û¸°´¸ÁÓçgSIMSgÛÉÉÿM<66Aÿɼ¶¶¸¼ÅÿMEESÿÓÿIA>:>Sÿɺ¶¶¸ºÉÿIA>E[ÿçÿSA>ESÿÓÉÁ¼¼ºÅÓÿME>AIgççÛÛgSMSÿÍÁ¼¼¾ÉÿI<<I[çÛÓÓÓÿME>>MÓ¾¶´¼ÍgIEEESçÓÍÓgSIEAIçÁ¶¶¾Û[[[SMMSçÓÍÛ[MIMSç;º¼ÉÛÿSE>>EgÍÅÅÍÿSIISÿÍÁ¾ÁÓgMIMSgçÛÛçÛçg[[[gÿÛÍÅÁÓgSMM[ggçÓÍç[SSS[gÿÓÁ¼ÉçgSMM[gÛÍÓgMIIMSçÓÁº¸¾ÍçSA>>>MÿçÛÓÛgggççÓÍÉÁÁÛ[MA>AMÿÉÅÅçggggggÿÍÅÅÍÿME>IÿÓÅÉÓÓÛgE>A[ÍÅÅÁÅÓgMISgççÿçççÿ[MM[ÛÍÅÅÅÍÛÿSMIMMgÛÍÉÍÿMEEMÿÍÅÁ¾ÁÍÿMA>AMçÍÉÍÿSIMgçÓÓÉÅÁÍÿMA>I[çÓÍÍÍÓÿMEEMgÓž¾Åç[EAISÿÓÉÉÓgIEAMÿÓÅÁÁÅÍçMIISgççÓÓÛgSSSgÿÛÍÉÁÁÛ[EAAS[ççÍÁÉÍgMII[çÉÁÅÛgSII[gÿÛÉÉÉÓgMIISgÛÓÉÉÉÛ[SMIMgÿÍÁÅÍÿMISSgÿÛÉÅÓÿSIIMgÛÉÅÁÓgMIMS[ÿÓÉÅÅÓgMIMMSgçÍÉÉÓg[S[ÿçÓÉÅÉçSEEEM[ÿÓÉÅÉÛÿg[gÿÛÓÍÍÛÿ[IEEM[çÍÅÉÛÛÿggggçÛÛÛÛçÿSMII[çÓÍÓçgggÿççÛÓÍÓÛgSEEI[ÿÛÍÉÛçÿggÿÛÓÓÓÛÿ[SMMMS[gçÛÛÛÓÓÛÍÓÛçÿg[[MIIMgçÓÍÓÓÓÓÛÛçÿ[SSgçÛçg[[gççÿççÛÛÛçgggçÛÛÛçgggg[[[gçÛÛçç --- NEW FILE: Makefile.mingw --- # Makefile for creating wave data include files (mingw win32) all: wav2h.exe hfiles wav2h.exe: gcc -c wav2h.c -o wav2h.o gcc -o wav2h.exe wav2h.o %.h: %.wav wav2h.exe ./wav2h.exe $< hfiles: BuddyArrive.h BuddyLeave.h Send.h Receive.h RedAlert.h clean: rm -rf *.o *.exe *.h --- NEW FILE: Receive.wav --- RIFF`$ ÉÛSMSÿÓç[MÿÓçE[ÿÛÛSISgçç[[ç[[[ÛÛÿSSÿÿÓ[MgÛÛMIgÓÓÿSMçÓÿSSgÿS[ççç[I[ÛÿÿS[ÛÛ[MSÿÍÿMSgÛÿ[[ÿçç[MçÛgSSçÛgSSgçÿMSgÓÛMIçÛçgSgççÿSSÓÛSMgÛç[SgçççE[ÛÛgMgÓÛSSgçÛÿ[[ÛÓgMgÓçÿS[ççç[SÿÓçS[ÛÛ[MÿççÛ[MÿÓçSMÓÍ[[[gçÛÿ[[çÓSSÍÛgS[çÛçÿSSÛÓIMÿÓçSM[ÿÛÛMMçÓÿSÿÛgS[çÿÛç[MÛÓ[IçÍÛ[M[gÛÍgI[Óÿ[gçÿSSççgÛ[SÿÓgM[ÓÍ[I[gÓÍÿISÛÓg[Ûç[Sçÿgÿÿ[[ÛçMSÛÅ[MMgçÍÛMEÿÍÿ[ÿÛ[SÿçÿÿÛgSÿÛSIÓÍçIM[çÍÓSA[ÍÛ[gÿg[gçggÛç[[çSMçÍçSISçÛÉg>MÛÓg[ÿçggç[[ÛÛg[[gSÿÉÓSASçÍÍÿIIçÍç[gçgggg[ÛÍÿ[[g[ÿÍÍSASÿÛÍçME[ÓÛMgçÿgg[SÿÓÛ[Mg[gÍÓ[IMÿÛÛÛ[E[ÓÛÿgÿçÿggSÿÍÓÿMM[gÓÍgMMgÛÓÛ[SSÛÛggÿÿçg[[[ÓÍÿSMSÿÛÓçSEgÛÛÛg[[ÿçÿ[ÿÛÿg[[[çÛÛSISgÛÍçMMSçÛÛÿg[gçggÿççg[[[çÓÛgSIÿÓÍÛSMSÿççg[ÿ[ÿ[[ÿççÿSM[çÓÓÿIISÍÍçgMSÿÛÛÿ[gÿg[[çÛÛÿ[[[ÛÛÛç[MSçÍÛ[M[[Ûçÿgÿçÿ[[ÿÛÛç[I[ÿÛÛçgSMÿÓÓgSSgÿÿÿgÿçÿSMgÓçÿgSSÿÛÛçÿ[MgÓÓÿ[[gÿçÿÿgÛçSMgÓÓÿ[SSÿÛÛÿggMSÛÓÿ[S[gÿçÿ[çÛ[M[ÛÓçgSSgÛÓggg[SÿÛçgSggÿçggÿçgMSçÓçgSSgçÛg[ÿgS[çÛgSgggÿçgÿÛçSIÿÉçgg[[ÛÛÿ[gçgSçÓgg[gggÿÿgçÛSIgÓÍg[SSÿÓç[gçgM[Óçÿgg[gçÿgÿÓgM[ÛÛÿ[S[gÛÛ[gçÿS[çÛç[g[[ççgÿçÿSMçÍç[[[gÛÛÿgÿç[SÿÛÿg[[[ÿçÿ[ÿç[SgÛÓ[[[[ÿçg[ÿçgS[ÓÛg[g[ÿçÿggÛÿS[ÓÛç[S[ÿççggÛgSSçÛÿg[[gçç[ÿçç[SçÛçgÿ[gççggÿç[SÿÛçÿ[[gçç[[ççg[gçÛÿ[[[ççÿgÿçg[gÛÛgg[gÿçg[ÿçç[[çççgg[ÿçÿgÿçg[gççÿg[gÿçg[gççgSÿÿççg[gÿçÿgggggÿçÿg[ÿççÿ[gççÿg[ÿççg[gÿçÿgggggÿÿÿgg --- NEW FILE: RedAlert.wav --- RIFFV Æ5Ë)U=W®,6/Y@¸Ò96´Ø93±*+¤£!0%¨ #Å=£¾!¨ E"²Úݦ:ªU²¤2(½¦`#§®<¥¢"§o®ØD¾Ïʲ¨'·$5Æ# ®1/@Õ¥ºó ¥"$G¾¹; *¯#O»¨ ¤$K=åÛ,¹)³Á-b¤T¯É¿¢¼1$£)° /¼¡³(¢ÉF'¥K7;¥KT/´L¬¬PEf O+&¡$¡<¥ªÔºÎ"«?º*¡õ©Ü0²,«ì'¥¡åÌ».+¡8ÔIC»Ê7͹! E-#O)¯¾&(T¯¬)+!^¥§H5=±µ8¬OM Ó'+¿¹)×"-¾¼"¬¢:QÑ)º¡Ï:±¤¡¢¶ ¶¢µÃ'a»þ#¡>¶0«.ß㿨4)²9 ,,30*$:#/Dò/® ¡$ « 8 °½ ¢b£ Ì £ ,/ª.)»ç , $³Võ ³@ë½-OC9 EiÆ7 ½Á=$§¤«¸I'¢=e1¸¼.$K>ʶ?7¼¯¡Ñ·¥¢º×£«©¸;µ§µ;¡®«³<¬©´©Qµ¨ÈM,K¦N"G'C¤<n\?°<Ö¯E³°=/Ô¤FÙªN[ÈÙVæ¬;µ¢76λÊ_¹5« 1$袻5í/.£¤)ɵ*<44·/Ò/¡LJ·9¤¨##ôªÄ°ß3õª¢²"·´ ȦQ+)B±¡-;Ó½#Ƽܤƫ:(7$¯' ?7¸ ·µ#Ô±¬" [ 9'£¯!«=+³¢7N ¬¥¨§¥áª='ªÌ ÌÆ 8¡& ' %±Ê2#*¹® ¨5Ã/²$ V'¢¦eÆg )'¬ )Ö < 5 Ü¡© - / # ÝÓ æ #2´ª¨¦./ $¬ W ¦;(-QV «&' )+ħ))%0æ§¥-¢8&3#Z¢² 7D/%7ò¿S¥d/©/*©®*"ÕE.*«#±¤L'Ô`(+Ç]$!´²²9!¥Ë-:맨1¢X'AÂ9ª¹.+{¬3¢/*3×$,Á·-(3<K#M©Ë -¡(ËF#!5¡+´Ç/(6®H½J/17¬¨E"Õ^&QI½ªW#Sç UnĵL+\ÅE§ÀH:.[©!¡11=3±¾!+9"L¤&!.¥9,./«»¨F",³²(®¨M&/¸»$/´©L /«d!I©¯:"/¨>!;¥,<1 6±â !<3¯±A+¯¨Þ&ʶ¹(Þ¦.Q¨$¾¨0F§'²«7=§)£©>*¢¸3.M*/HQ¦à½#±¾¯)¼¯¦¢,ÿ§¶-B¡Þ'Lï!â>)á//Ȥ*A·¬#é¥È¿Þ²7 %«-0¨¥) /®¢ ßÇ ÂR· >µ©Í¨ª½"ߢC5¨6*K¢%!Ý¢% !ý &k$ "Ù¡¡#!$Ø¢§!&(Ǧª9.¼ ·×.#¼¹®¦3$¿º¥ª8"Í·¡¢ZX¶½YȦ¡¬BR#« J=+§`¶-,¬(®,3»&³.4ú#¹5/7#¿?"$B,O¤}*ü¨((R°Û4ɯ#(è³Â.º!´¨Ï%¥¼¬Ë& ±¦Ô)ª£¦¾)³§¿+º¡¤ú>Ä>T¼©¡á.ªñÌ) ,-G&Ø:'¯¢+;¥¦°(¹×£Ï;¥£0¢õL¶(§îË9%0"¨F² $'î3ª7§¯;²:¤,.±. ܺ椬<Ñ@!,½ºä§¯pÈ-3±Ë죱bÂ,?¤DÒ³ÎV&I£NSH'' ʧ1C#9 µ°¹ª.9+¯@#9÷9,³(0u.Hï µª5C3Ï)!/î^81$7-¦_"(*º·¸0(< 0³©e«r.#¦ô¨ª8! 66ªµ¯ª#) *;âË¥#¿¦Eà)+¦®´Ë;'¯£È)¡.]¯²7(-¾®¾«2%1Ò¦q¦6!¨: Þ£~£)# $ ©½[§ *¦ .2ÿ´+¡'h¡#(HÑÌ8«0Å«¢ÃµEùÝMÁ£±.¼®¡& ß¼HjÌ?Ð¥¯%(#~©©'ª8'<Ä?¼Ò/-I´6 ±95+¯&§¡:=8/7Á*ë5Ï/ ª¬/w]7¨Ä'¯6>ÉJ̺<W®`,WÉÜÁe;¶µ-9ÌlÀÂ=m¯E,ÏÉK¿DÂÅ)L¯EGµqVµ9+²¼.ʬ:Tµ18¬L,§°)ö»0ܶ(ÕB+¾JI±+-±&mhE>¦*0·;ׯ!<c´È5³8(©>¦DHÞ)¸/©>R+9±?m?=(¤ ¯79,±8غ'#¬T"-¾¡ÊM¹))?¬¥*#¥,+;Ä¡Gª7-,ïÓÊÌ/'9¤¨ +:-&¼7©¡JB(/l_=9!ª'µ:5 Â6§P.KµF©¬C3¢«E;K¯¨¦«H¾@>¡=½£>Á½0ª·3mG«9Ü£¥º7ªÚ<¥2´¬-³¬9®g`¢6W¦W½»+ Ë8³ÚÁ®§±<ÃtÈ«*¸«UqpÅ2¿¯MËZå¨;Ï«KuîV¦ÜG§ZNÅD²¯+¦ÒG¾=¸§ §³>ÍCÊ¡/½£õfGY¨ÿ=£¿[tO³Ä,£²<xÒ¹¿#%ª¨A<ΰÁ)%º¬ÙdL²5$ú®ËÎÔë¼>%Ò·D¾·Ú¾5#Å®9N®´Í8#J¥ç-½¤Ã*%L§º'cº"'@«§*-§'#0¸C%© 2$2Ϫ×-¹J"/׬Ë*ÇÂ$!Ö¤l.Æ¥´- A©½/h£³4%,««*B¡³3+.¾«?9¨±/59[±Ó:³¬00_IÉÀL¹®3/ð`tÚñ¼¬D(KÂÉI>µ©U+2ѰA7²®t92FµÏ3¼©O7>:»½0È¥_/DAϺ@S©»/9Fà»NK°µ@47ÞµOC³·P=.O¯NB¯¹mJ*F<5¥±<m-8©7+ ¬5Z59ª;#¢*BJ2¦d¥*,g3ªº¹6'ë?¹½$ÆD&î^É¿)WÂ#?Û˾-<¯*4`ÏÀ4>¢²,C[OÃ8?°&=ÉPß;?¬#7ºLLDM¡«/¨Q-ü㨥" »"H¹®¨)¦¨0«¯²5¬£+¥µ¾S ¿'ª¥ÌQ$Y1®¤Öh+B¡B·¨{o6?§R»£f<5`¤C´£L?6K£M³ A5IR©qº;-÷zl»>-ëË´W#ÅG&Ó¹ÀO'ÏS$è¯È<0Ũÿ'N¬¿3/¼¨i'Dº7/ĬÕ,<²¹=6ʱÕ/?°¿6?ûÓ1:¬º.?¶Ë]C=·¹3B·ÕRGFµÁ3O¹ÝQHI¸¿6Q»qNUM»È5ò³[?Y_½Ê4T±Ö<Fn½Ç<C¿ÃL?_¿ËJVÐÝ]MXÇÒLìÎ`X\cÍÜPÚÍXSnõÕÿYÑÑOQäåìdcÍÕRSùÛÚUQËÍRTèÚà_X×Ï\UéÓßUVÏÍRIôÌØXUâÎøLUÙÏÿXlÚÙ]NøÐú]íäphhdíß}~økûëjjîäìkj~÷ír[t׿]f~ïãcZÕÔWYéåì`^ØÔ^VóÞæ_VâÑzUdÞÝk]êÚ÷^\àÔj]ïåæú[gÚá_híòçÿZ|ÜxnèssêýÿzfxÞë[dæì~þýÿþükjëûhÞÞXcÜñfjnßÐmQîÜmi~}ÞÝY]ÜåjdoÙÚWTØÖY]æåÝöUtÒ}SôÜð}bhãíkúåèvfüég_âÛu^bÞØWQÜÍà]OwÍêM\ØÓå\VæÚh_oöÙæWhéjþá{mëéûi^oæÚêZlÔâ\\uÜÔfQêÞkûm\ÜÚWbâlvåazÒnYßó_ëøhßÜe[÷äÿgi}ÝÜ`UøÙífhuÝÕeMpÕäc_øÚÜ`VìÙìa]ê×üUtÛýmþýæï^qÚì^sææé\W×Ð^VîÞãdTêÓôckòãoZ{ÙãinéémUgÖÜlgôæù_[ôÚãrgüì}hhïãç~hfkìéggæÝþ[_éÜû^zÚï]h~ëÜþ]úÜ~Zbõåéü}û}owø}}ãänfimåÜe]ÙØ]\ü}íåk~Üx\nø{üëçãt[løï÷füØä]`ýùçðiðÛóhd^òÛïzøyôë_]ìæçî\bÝíeyúòàû\oä÷zø{üëwq~gsææùgoæìjk~èÝ|YfêäîhqÜè_`pzæÝweìçd^ûçåëý}úoc|åúzèìÿ~``âÞlkìäíaZóÞú|û}ìý]içææí{úodèÞafÞèzi]xÚç^jìäôVWáÛrhxïåp^ýäøõíkj÷wmùyeíÛw\mééoföã}fzu~äueèìjöïüìndäàagäî~}d~Üz[yâÞë]dÜç^cûÞÛl_éêhmÿûæñiïåd^çÝöieîÛ{[xÜè{û}üëvd÷å÷}ü~ü}õåùesæíjjïâøeýäùhfþçîpoêèlhðå|d}æïxgjìâþfúâîleþâìl~ãûlýü|ú}þëzfzú|û}ûçïgmêé|owëçpg}ü~ýÿþÿýÿÿúptçìuo~èëmdþäêmhïç÷nhöäÿewåîik÷îøjkîïntû}ûweýëkjüþ~ü~þíõnvûÿþþÿþþþþþþþþþþþÿýÿ~ùptíø{ûÿ~û|o{ú}ýý{ìçrpù~þýÿþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ --- NEW FILE: Send.wav --- RIFF" AAÿÉÍçÿÿ[SSÿÛÛgMM[çÛg[ÿÓÛSEgÍÍgS[g[SçÛ[I[ÛÓ[AIgÛÛççgIESÛÉÉgE>SÍÅçSMÿç[MgÛç[gÛÿIE[ççgÿççSM[ÿçgÿççgSIgÍÅÓI<IÓÅÛ[[gSMÿÉÉ[MgÛçg[ÿÿÿÿÛç[IIÿÛÛgSS[ÿçg[ÛÉçIAgÓÍççÛgEAgÉÉ[MSg[gçgMIÿÍÓgIIgÛÍÓ[MMÿçggÛçSESÓÓgI[çgMIÿÓÛÿg[SSÿÛÓgSSÿÛçgSS[Ûç[MM[[[ÛÍçEASÍÅç[gÿgSgÛÛÿ[gÿ[[[ÿççÿg[gççÿgÿççgÿÛÿM[ÓÉgAEçÉÓçg[MMgÓÓÛ[SggÿçÿgggÿggggggÿçgMMÿÛÿ[[çÛgMSÿççÿçg[S[çÓÛÿ[SSÿççg[[ggççgSSçÓÿSMÿÛç[ÿÛÿSSÿÛÛÿggggggÿçÛçgS[ÿÛÛÿçÿ[gÿÛçSSÿÛÿ[[gg[gçÛÿMMÿÛÓÛÿgSgçÿçÿÿçg[gÿç[ÿçgS[gçÿ[[gÿ[[ÿÛÿ[[ÿÛç[S[ÿÛÛÿ[M[ÿçççÿ[SSÿçÿggÿÿggÿçÿ[gÿÿ[[gçÿg[gÿÿg[ggÿÿÿg[gÿÿÿÛç[Sgççÿÿÿg[gçÛÿ[Sÿçÿgggççÿÿÿÿÿÿÿÿççÿ[[gÿÿgÿÿÿg[gÿçÿgÿg[[ÿÛÿgggÿÿÿÿÿÿÿÿÿÿÿg[ggççg[gÿçÿÿÿÿggÿÿÿÿgÿÿgggççÿg[gggÿÿÿÿÿ[gÿçÿgggççÿggÿÿÿççÿ[[ÿççgÿÿÿÿgÿÿgÿÿÿÿÿÿ |
From: Rob F. <rob...@us...> - 2002-10-11 03:14:01
|
Update of /cvsroot/gaim/gaim In directory usw-pr-cvs1:/tmp/cvs-serv28946 Added Files: ChangeLog.win32 Makefile.mingw PROGRAMMING_NOTES README.mingw VERSION gaim-installer.nsi Log Message: Yeah this will probably break a lot of shit knowing my luck. But hey, I really don't care what people thnk. --- NEW FILE: ChangeLog.win32 --- version 0.60 alpha 2 (10/9/02) * Perl functionality added * PNGs work * Path issues fixed for Win9x * Added g command line flag for logging of GTK and GLIB debugging. * No more console in Win9x for glib logging (when not debugging). * URL links now work. * Plugins: autorecon, iconaway, spellchk and ticker now work. * Language translations are working. * Using GTK 2.0.6 (Some GTK bugs fixed since 2.0.3) * Gadu-Gadu works * gtkimhtml copying to clipboard works. Selecting text copies it to the clipboard. * Gaim now minimizes to the system tray. * Various other feature updates from the Gaim crew. Read ChangeLog :) version 0.60 alpha 1 (9/13/2002) * Initial alpha release --- NEW FILE: Makefile.mingw --- # Makefile.mingw # # Author: her...@ya... # Date 9/11/02 # Description: Top Makefile for win32 (mingw) port of Gaim # GAIM_SRC = ./src GAIM_PROTOS = $(GAIM_SRC)/protocols GAIM_PLUGINS = ./plugins GAIM_PIXMAPS = ./pixmaps GAIM_INSTALL_DIR = ./win32-install-dir GTK_TOP = ../win32-dev/gtk_2_0 GTK_LIBS = $(GTK_TOP)/lib PERL_TOP = ../win32-dev/perl56 OSCAR = $(GAIM_PROTOS)/oscar YAHOO = $(GAIM_PROTOS)/yahoo MSN = $(GAIM_PROTOS)/msn TOC = $(GAIM_PROTOS)/toc IRC = $(GAIM_PROTOS)/irc JABBER = $(GAIM_PROTOS)/jabber NAPSTER = $(GAIM_PROTOS)/napster GG = $(GAIM_PROTOS)/gg PO = ./po NEEDED_DLLS = $(GTK_LIBS)/libgdk-win32-2.0-0.dll \ $(GTK_LIBS)/libglib-2.0-0.dll \ $(GTK_LIBS)/libintl-1.dll \ $(GTK_LIBS)/iconv.dll \ $(GTK_LIBS)/libgmodule-2.0-0.dll \ $(GTK_LIBS)/libgtk-win32-2.0-0.dll \ $(GTK_LIBS)/libgdk_pixbuf-2.0-0.dll \ $(GTK_LIBS)/libgobject-2.0-0.dll \ $(GTK_LIBS)/libgthread-2.0-0.dll \ $(GTK_TOP)/bin/libjpeg.dll \ $(GTK_TOP)/bin/libpng.dll \ $(GTK_TOP)/bin/libtiff.dll \ $(GTK_TOP)/bin/zlib.dll \ $(GTK_LIBS)/libpango-1.0-0.dll \ $(GTK_LIBS)/libpangoft2-1.0-0.dll \ $(GTK_LIBS)/libpangowin32-1.0-0.dll \ $(GTK_LIBS)/libatk-1.0-0.dll \ $(PERL_TOP)/perl56.dll # For Gtk 2.0.3 # $(GTK_LIBS)/libjpeg6b.dll \ # $(GTK_LIBS)/libpng-3.dll \ # $(GTK_LIBS)/libtiff.dll \ # $(GTK_LIBS)/libz.dll \ # For Gtk 2.0.6 # $(GTK_TOP)/bin/libjpeg.dll \ # $(GTK_TOP)/bin/libpng.dll \ # $(GTK_TOP)/bin/libtiff.dll \ # $(GTK_TOP)/bin/zlib.dll \ PIXMAPS_DIALOGS = $(GAIM_PIXMAPS)/gaim_error.png \ $(GAIM_PIXMAPS)/gaim_info.png \ $(GAIM_PIXMAPS)/gaim_warning.png \ $(GAIM_PIXMAPS)/gaim_question.png PIXMAPS_BUTTONS = $(GAIM_PIXMAPS)/edit.png PIXMAPS = $(GAIM_PIXMAPS)/away.png \ $(GAIM_PIXMAPS)/connect.png \ $(GAIM_PIXMAPS)/msgpend.png \ $(GAIM_PIXMAPS)/msgunread.png \ $(GAIM_PIXMAPS)/offline.png \ $(GAIM_PIXMAPS)/online.png ## ## Don't forget to change STATIC_PROTO_INIT, in config.h.mingw if you ## change the status of a protocol (static/plugin) ## OSCAR_TYPE = PLUGIN YAHOO_TYPE = PLUGIN MSN_TYPE = PLUGIN TOC_TYPE = PLUGIN IRC_TYPE = PLUGIN JABBER_TYPE = PLUGIN NAPSTER_TYPE = PLUGIN GG_TYPE = PLUGIN all: cp config.h.mingw config.h $(MAKE) TYPE='$(OSCAR_TYPE)' -C $(OSCAR) -f Makefile.mingw $(MAKE) TYPE='$(YAHOO_TYPE)' -C $(YAHOO) -f Makefile.mingw $(MAKE) TYPE='$(MSN_TYPE)' -C $(MSN) -f Makefile.mingw $(MAKE) TYPE='$(TOC_TYPE)' -C $(TOC) -f Makefile.mingw $(MAKE) TYPE='$(IRC_TYPE)' -C $(IRC) -f Makefile.mingw $(MAKE) TYPE='$(JABBER_TYPE)' -C $(JABBER) -f Makefile.mingw $(MAKE) TYPE='$(GG_TYPE)' -C $(GG) -f Makefile.mingw $(MAKE) -C $(GAIM_SRC) -f Makefile.mingw $(MAKE) -C $(GAIM_PLUGINS) -f Makefile.mingw install: all mkdir -p $(GAIM_INSTALL_DIR)/plugins mkdir -p $(GAIM_INSTALL_DIR)/pixmaps/gaim/dialogs mkdir -p $(GAIM_INSTALL_DIR)/pixmaps/gaim/buttons $(MAKE) -C $(PO) -f Makefile.mingw install $(MAKE) -C $(GAIM_SRC) -f Makefile.mingw install $(MAKE) -C $(GAIM_PLUGINS) -f Makefile.mingw install $(MAKE) TYPE='$(OSCAR_TYPE)' -C $(OSCAR) -f Makefile.mingw install $(MAKE) TYPE='$(YAHOO_TYPE)' -C $(YAHOO) -f Makefile.mingw install $(MAKE) TYPE='$(MSN_TYPE)' -C $(MSN) -f Makefile.mingw install $(MAKE) TYPE='$(TOC_TYPE)' -C $(TOC) -f Makefile.mingw install $(MAKE) TYPE='$(IRC_TYPE)' -C $(IRC) -f Makefile.mingw install $(MAKE) TYPE='$(JABBER_TYPE)' -C $(JABBER) -f Makefile.mingw install $(MAKE) TYPE='$(GG_TYPE)' -C $(GG) -f Makefile.mingw install cp $(NEEDED_DLLS) $(GAIM_INSTALL_DIR) cp $(PIXMAPS_DIALOGS) $(GAIM_INSTALL_DIR)/pixmaps/gaim/dialogs cp $(PIXMAPS_BUTTONS) $(GAIM_INSTALL_DIR)/pixmaps/gaim/buttons cp $(PIXMAPS) $(GAIM_INSTALL_DIR)/pixmaps/gaim mkdir -p $(GAIM_INSTALL_DIR)/lib/gtk-2.0 cp -R $(GTK_LIBS)/gtk-2.0/2.0.0 $(GAIM_INSTALL_DIR)/lib/gtk-2.0 cp -R $(GTK_LIBS)/pango $(GAIM_INSTALL_DIR)/lib cp -R $(GTK_TOP)/etc $(GAIM_INSTALL_DIR) installer: makensis.exe gaim-installer.nsi clean: $(MAKE) -C $(PO) -f Makefile.mingw clean $(MAKE) -C $(OSCAR) -f Makefile.mingw clean $(MAKE) -C $(YAHOO) -f Makefile.mingw clean $(MAKE) -C $(MSN) -f Makefile.mingw clean $(MAKE) -C $(TOC) -f Makefile.mingw clean $(MAKE) -C $(IRC) -f Makefile.mingw clean $(MAKE) -C $(JABBER) -f Makefile.mingw clean $(MAKE) -C $(GG) -f Makefile.mingw clean $(MAKE) -C $(GAIM_SRC) -f Makefile.mingw clean $(MAKE) -C $(GAIM_PLUGINS) -f Makefile.mingw clean rm -rf config.h $(GAIM_INSTALL_DIR) rm -rf Install-Gaim*.exe --- NEW FILE: PROGRAMMING_NOTES --- Notes on keeping GAIM OS independant ------------------------------------ General ------- - Use G_DIR_SEPARATOR_S and G_DIR_SEPARATOR for paths - Use g_getenv, g_snprintf, g_vsnprintf - Use gaim_home_dir instead of g_get_home_dir or g_getenv("HOME") PLUGINS & PROTOS ---------------- - G_MODULE_EXPORT all functions which are to be accessed from outside the scope of its "dll" or "so". (E.G. gaim_plugin_init) - G_MODULE_IMPORT all global variables which are located outside your dynamic library. (E.G. connections) (Not doing this will cause "Memory Access Violations" in Win32) --- NEW FILE: README.mingw --- How to build Gaim using MinGw ============================= Set Up Build Environment ------------------------ - Install Cygwin bash shell (www.cygwin.com). - Install MinGw v1.1 (http://www.mingw.org) Make sure to read the installation instructions. Make sure to set MinGw's bin directory in your PATH (in .bash_login), before Cygwin's bin dir (so that mingw's build tools are used over cygwin's). Install LIBs, DLLs and headers used by GAIM ------------------------------------------- Assuming you have the gaim sources in ~/gaim, you will need to do the fowllowing: GTK & GLIB (v 2.0.6 as of writing) ---------------------------------- $ mkdir -p ~/win32-dev/gtk_2_0/zips Download the following from thw win32 download page at www.gtk.org to the zips dir you just created: atk-1.0.3-20020821.zip atk-dev-1.0.3-20020821.zip gettext-dev-0.10.40-20020904.zip glib-2.0.6-20020802.zip glib-dev-2.0.6-20020802.zip gtk+-2.0.6-20020921.zip gtk+-dev-2.0.6-20020921.zip libiconv-1.7-w32.bin.zip libintl-0.10.40-tml-20020904.zip libjpeg-6b-bin.zip libpng-1.2.4-1-bin.zip pango-1.0.4-20020921.zip pango-dev-1.0.4-20020921.zip tiff-3.5.7-bin.zip zlib-1.1.4-bin.zip $ cd ~/win32-dev/gtk_2_0/zips $ unzip -d .. <all zip files> $ cd .. $ cp lib/libintl-1.dll ./bin $ cd libiconv-1.7-w32.bin $ cp iconv.exe ../bin $ cp iconv.lib ../lib $ cp localcharset.dll ../lib $ cp iconv.dll ../lib $ cp iconv.dll ../bin $ cp iconv.h ../include/ $ cp libcharset.h ../include/ NOTE: If you use a more recent versions of any of these packages, you may need to move files around so that they can be found when Gaim is built. Perl56 ------ Download perl-5.6.1 from www.cpan.org. You can build perl56 yourself if you have MS Visual C++, or you can download a win32 binary distribution (I tried SiePerl successfully). In either case make sure you do the following: $ mkdir -p ~/win32-dev/perl56 Copy Perl's "CORE" directory to ~/win32-dev/perl56 as well as "perl56.dll" and "perl56.lib". Build Gaim ---------- $ cd ~/gaim $ make -f Makefile.mingw install Run Gaim -------- $ cd ~/gaim/win32-install-dir $ ./gaim.exe That's it.. Note: If you wish to build an install exe of Gaim, then you need to install NSIS from http://www.nullsoft.com/free/nsis/ making sure to place its binary dir in your PATH. Then... $ cd ~/gaim/win32-install-dir $ make -f Makefile.mingw installer Debugging --------- There is quite a good "Just In Time" debugger for MinGw: http://mefriss1.swan.ac.uk/~jfonseca/gnu-win32/software/drmingw/ Happy Gaiming... Herman Bloggs <her...@ya...> --- NEW FILE: VERSION --- 0.60a2 --- NEW FILE: gaim-installer.nsi --- ; Installer script for win32 Gaim ; Generated NSIS script file (generated by makensitemplate.phtml 0.21) ; Herman on Sep 11 02 @ 21:52 ; NOTE: this .NSI script is designed for NSIS v1.8+ Name "Gaim 0.60 alpha 2 (Win32)" OutFile "Install-Gaim0.60a2.exe" Icon .\pixmaps\gaim-install.ico ; Some default compiler settings (uncomment and change at will): ; SetCompress auto ; (can be off or force) ; SetDatablockOptimize on ; (can be off) ; CRCCheck on ; (can be off) ; AutoCloseWindow false ; (can be true for the window go away automatically at end) ; ShowInstDetails hide ; (can be show to have them shown, or nevershow to disable) ; SetDateSave off ; (can be on to have files restored to their orginal date) InstallDir "$PROGRAMFILES\Gaim" InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Gaim" "" DirShow show ; (make this hide to not let the user change it) DirText "Select the directory to install Gaim in:" Section "" ; (default section) SetOutPath "$INSTDIR" ; add files / whatever that need to be installed here. File /r .\win32-install-dir\*.* WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Gaim" "" "$INSTDIR" WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gaim" "DisplayName" "Gaim (remove only)" WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gaim" "UninstallString" '"$INSTDIR\uninst.exe"' ; write out uninstaller WriteUninstaller "$INSTDIR\uninst.exe" SectionEnd ; end of default section Section "Gaim Start Menu Group" SetOutPath "$SMPROGRAMS\Gaim" CreateShortCut "$SMPROGRAMS\Gaim\Gaim.lnk" \ "$INSTDIR\gaim.exe" CreateShortCut "$SMPROGRAMS\Gaim\Unistall.lnk" \ "$INSTDIR\uninst.exe" SectionEnd ; begin uninstall settings/section UninstallText "This will uninstall Gaim from your system" Section Uninstall ; add delete commands to delete whatever files/registry keys/etc you installed here. RMDir /r "$SMPROGRAMS\Gaim" DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Gaim" DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Gaim" RMDir /r "$INSTDIR" SectionEnd ; end of uninstall section ; eof |
From: Rob F. <rob...@us...> - 2002-10-11 03:09:28
|
Update of /cvsroot/gaim/gaim/src/protocols/jabber/win32 In directory usw-pr-cvs1:/tmp/cvs-serv28048/win32 Log Message: Directory /cvsroot/gaim/gaim/src/protocols/jabber/win32 added to the repository |
From: Rob F. <rob...@us...> - 2002-10-11 03:05:40
|
Update of /cvsroot/gaim/gaim/src/win32 In directory usw-pr-cvs1:/tmp/cvs-serv27018/win32 Log Message: Directory /cvsroot/gaim/gaim/src/win32 added to the repository |
From: Luke S. <lsc...@us...> - 2002-10-11 02:10:11
|
Update of /cvsroot/gaim/gaim/src In directory usw-pr-cvs1:/tmp/cvs-serv13874/src Modified Files: conversation.c Log Message: the proper fix to the parse error the last commit resolved. Index: conversation.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/conversation.c,v retrieving revision 1.389 retrieving revision 1.390 diff -u -d -r1.389 -r1.390 --- conversation.c 11 Oct 2002 02:05:47 -0000 1.389 +++ conversation.c 11 Oct 2002 02:10:08 -0000 1.390 @@ -839,7 +839,6 @@ { int pos; gboolean key_is_typing = TRUE; - GtkWidget *notebook = NULL; if (event->keyval == GDK_Escape) { key_is_typing = FALSE; @@ -1090,6 +1089,7 @@ } else if (((!c->is_chat && (im_options & OPT_IM_ONE_WINDOW)) || (c->is_chat && (chat_options & OPT_CHAT_ONE_WINDOW))) && (event->state & GDK_MOD1_MASK) && (event->keyval > '0') && (event->keyval <= '9')) { + GtkWidget *notebook = NULL; key_is_typing = FALSE; notebook = (c->is_chat ? chat_notebook : convo_notebook); gtk_notebook_set_page(GTK_NOTEBOOK(notebook), event->keyval - '1'); |
From: Luke S. <lsc...@us...> - 2002-10-11 02:05:49
|
Update of /cvsroot/gaim/gaim/src In directory usw-pr-cvs1:/tmp/cvs-serv12905/src Modified Files: conversation.c Log Message: you cannot declare variables in the middle of a block of code in c javabsp. Index: conversation.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/conversation.c,v retrieving revision 1.388 retrieving revision 1.389 diff -u -d -r1.388 -r1.389 --- conversation.c 11 Oct 2002 01:56:45 -0000 1.388 +++ conversation.c 11 Oct 2002 02:05:47 -0000 1.389 @@ -839,6 +839,7 @@ { int pos; gboolean key_is_typing = TRUE; + GtkWidget *notebook = NULL; if (event->keyval == GDK_Escape) { key_is_typing = FALSE; @@ -1090,7 +1091,7 @@ (c->is_chat && (chat_options & OPT_CHAT_ONE_WINDOW))) && (event->state & GDK_MOD1_MASK) && (event->keyval > '0') && (event->keyval <= '9')) { key_is_typing = FALSE; - GtkWidget *notebook = (c->is_chat ? chat_notebook : convo_notebook); + notebook = (c->is_chat ? chat_notebook : convo_notebook); gtk_notebook_set_page(GTK_NOTEBOOK(notebook), event->keyval - '1'); gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); } |
From: Luke S. <lsc...@us...> - 2002-10-11 01:56:48
|
Update of /cvsroot/gaim/gaim/src In directory usw-pr-cvs1:/tmp/cvs-serv10299/src Modified Files: conversation.c Log Message: javabsp's fix for typing notification Index: conversation.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/conversation.c,v retrieving revision 1.387 retrieving revision 1.388 diff -u -d -r1.387 -r1.388 --- conversation.c 11 Oct 2002 01:52:43 -0000 1.387 +++ conversation.c 11 Oct 2002 01:56:45 -0000 1.388 @@ -838,21 +838,27 @@ gboolean keypress_callback(GtkWidget *entry, GdkEventKey * event, struct conversation *c) { int pos; + gboolean key_is_typing = TRUE; + if (event->keyval == GDK_Escape) { + key_is_typing = FALSE; if (convo_options & OPT_CONVO_ESC_CAN_CLOSE) { gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); close_callback(c->close, c); c = NULL; } } else if (event->keyval == GDK_Page_Up) { + key_is_typing = FALSE; gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); if(!(event->state & GDK_CONTROL_MASK)) gtk_imhtml_page_up(GTK_IMHTML(c->text)); } else if (event->keyval == GDK_Page_Down) { + key_is_typing = FALSE; gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); if(!(event->state & GDK_CONTROL_MASK)) gtk_imhtml_page_down(GTK_IMHTML(c->text)); } else if ((event->keyval == GDK_F2) && (convo_options & OPT_CONVO_F2_TOGGLES)) { + key_is_typing = FALSE; gtk_imhtml_show_comments(GTK_IMHTML(c->text), !GTK_IMHTML(c->text)->comments); } else if ((event->keyval == GDK_Return) || (event->keyval == GDK_KP_Enter)) { if ((event->state & GDK_CONTROL_MASK) && (convo_options & OPT_CONVO_CTL_ENTER)) { @@ -1035,18 +1041,22 @@ } } if (event->keyval == 'l') { + key_is_typing = FALSE; gtk_imhtml_clear(GTK_IMHTML(c->text)); g_string_free(c->history, TRUE); c->history = g_string_new(""); } else if ((event->keyval == 'w') && (convo_options & OPT_CONVO_CTL_W_CLOSES)) { + key_is_typing = FALSE; gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); close_callback(c->close, c); c = NULL; return TRUE; } else if (event->keyval == 'n') { + key_is_typing = FALSE; gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); show_im_dialog(); } else if (event->keyval == 'z') { + key_is_typing = FALSE; gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); XIconifyWindow(GDK_DISPLAY(), GDK_WINDOW_XWINDOW(c->window->window), @@ -1058,12 +1068,15 @@ (c->is_chat && (chat_options & OPT_CHAT_ONE_WINDOW))) { GtkWidget *notebook = (c->is_chat ? chat_notebook : convo_notebook); if (event->keyval == '[') { + key_is_typing = FALSE; gtk_notebook_prev_page(GTK_NOTEBOOK(notebook)); gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); } else if (event->keyval == ']') { + key_is_typing = FALSE; gtk_notebook_next_page(GTK_NOTEBOOK(notebook)); gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); } else if (event->keyval == GDK_Tab) { + key_is_typing = FALSE; move_next_tab(GTK_NOTEBOOK(notebook), c->is_chat); gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); return TRUE; @@ -1076,6 +1089,7 @@ } else if (((!c->is_chat && (im_options & OPT_IM_ONE_WINDOW)) || (c->is_chat && (chat_options & OPT_CHAT_ONE_WINDOW))) && (event->state & GDK_MOD1_MASK) && (event->keyval > '0') && (event->keyval <= '9')) { + key_is_typing = FALSE; GtkWidget *notebook = (c->is_chat ? chat_notebook : convo_notebook); gtk_notebook_set_page(GTK_NOTEBOOK(notebook), event->keyval - '1'); gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); @@ -1095,7 +1109,7 @@ serv_send_typing(c->gc, c->name, NOT_TYPING); } else if (gdk_keyval_to_unicode(event->keyval) || event->keyval == GDK_BackSpace || event->keyval == GDK_Delete) { - if (strlen(txt) == 0 || (c->type_again != 0 && time(NULL) > c->type_again)) { + if (key_is_typing && (strlen(txt) == 0 || (c->type_again != 0 && time(NULL) > c->type_again))) { int timeout = serv_send_typing(c->gc, c->name, TYPING); if (timeout) c->type_again = time(NULL) + timeout; |
From: Luke S. <lsc...@us...> - 2002-10-11 01:52:46
|
Update of /cvsroot/gaim/gaim/src In directory usw-pr-cvs1:/tmp/cvs-serv9323/src Modified Files: conversation.c Log Message: apparently i wasn't up to date Index: conversation.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/conversation.c,v retrieving revision 1.386 retrieving revision 1.387 diff -u -d -r1.386 -r1.387 --- conversation.c 9 Oct 2002 05:45:19 -0000 1.386 +++ conversation.c 11 Oct 2002 01:52:43 -0000 1.387 @@ -846,10 +846,12 @@ } } else if (event->keyval == GDK_Page_Up) { gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); - gtk_imhtml_page_up(GTK_IMHTML(c->text)); + if(!(event->state & GDK_CONTROL_MASK)) + gtk_imhtml_page_up(GTK_IMHTML(c->text)); } else if (event->keyval == GDK_Page_Down) { gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); - gtk_imhtml_page_down(GTK_IMHTML(c->text)); + if(!(event->state & GDK_CONTROL_MASK)) + gtk_imhtml_page_down(GTK_IMHTML(c->text)); } else if ((event->keyval == GDK_F2) && (convo_options & OPT_CONVO_F2_TOGGLES)) { gtk_imhtml_show_comments(GTK_IMHTML(c->text), !GTK_IMHTML(c->text)->comments); } else if ((event->keyval == GDK_Return) || (event->keyval == GDK_KP_Enter)) { |
From: Luke S. <lsc...@us...> - 2002-10-11 01:47:30
|
Update of /cvsroot/gaim/gaim In directory usw-pr-cvs1:/tmp/cvs-serv8050 Modified Files: ChangeLog Log Message: my changelog entry didn't commit last time Index: ChangeLog =================================================================== RCS file: /cvsroot/gaim/gaim/ChangeLog,v retrieving revision 1.558 retrieving revision 1.559 diff -u -d -r1.558 -r1.559 --- ChangeLog 10 Oct 2002 16:02:40 -0000 1.558 +++ ChangeLog 11 Oct 2002 01:47:27 -0000 1.559 @@ -57,7 +57,8 @@ Reisner) * Nice Oscar changes--mostly internal (Thanks Mark Doliner) * event_del_conversation for plugins (Thanks Bill Tompkins) - * Code cleanups and fixes (Thanks Federico Mena Quintero) + * Code cleanups and fixes (Thanks: Federico Mena Quintero, + Ka-Hing Cheung) * aim:// URI's supported with gaim-remote command * Quit Gaim remotely with gaim-remote (Thanks John Silvestri) * Don't auto-login if an existing Gaim session is already |
From: Luke S. <lsc...@us...> - 2002-10-11 00:54:27
|
Update of /cvsroot/gaim/gaim/src In directory usw-pr-cvs1:/tmp/cvs-serv25003/src Modified Files: Tag: gtk1-stable conversation.c Log Message: and sync this tree as well Index: conversation.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/conversation.c,v retrieving revision 1.358.2.4 retrieving revision 1.358.2.5 diff -u -d -r1.358.2.4 -r1.358.2.5 --- conversation.c 21 Sep 2002 20:03:43 -0000 1.358.2.4 +++ conversation.c 11 Oct 2002 00:54:24 -0000 1.358.2.5 @@ -837,10 +837,12 @@ } } else if (event->keyval == GDK_Page_Up) { gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); - gtk_imhtml_page_up(GTK_IMHTML(c->text)); + if(!(event->state & GDK_CONTROL_MASK)) + gtk_imhtml_page_up(GTK_IMHTML(c->text)); } else if (event->keyval == GDK_Page_Down) { gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); - gtk_imhtml_page_down(GTK_IMHTML(c->text)); + if(!(event->state & GDK_CONTROL_MASK)) + gtk_imhtml_page_down(GTK_IMHTML(c->text)); } else if ((event->keyval == GDK_F2) && (convo_options & OPT_CONVO_F2_TOGGLES)) { gtk_imhtml_show_comments(GTK_IMHTML(c->text), !GTK_IMHTML(c->text)->comments); } else if ((event->keyval == GDK_Return) || (event->keyval == GDK_KP_Enter)) { |
From: Sean E. <sea...@us...> - 2002-10-10 19:42:42
|
Update of /cvsroot/gaim/web/htdocs/sean In directory usw-pr-cvs1:/tmp/cvs-serv31011 Modified Files: gtkimhtml2.diff Log Message: resyncing gtkimhtm2.diff Index: gtkimhtml2.diff =================================================================== RCS file: /cvsroot/gaim/web/htdocs/sean/gtkimhtml2.diff,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gtkimhtml2.diff 9 Oct 2002 05:43:57 -0000 1.1 +++ gtkimhtml2.diff 10 Oct 2002 19:42:38 -0000 1.2 @@ -1,28 +1,10 @@ -? compile -? gtkimhtml2.diff -Index: src/conversation.c -=================================================================== -RCS file: /cvsroot/gaim/gaim/src/conversation.c,v -retrieving revision 1.385 -diff -u -r1.385 conversation.c ---- src/conversation.c 6 Oct 2002 07:56:14 -0000 1.385 -+++ src/conversation.c 9 Oct 2002 05:38:26 -0000 -@@ -2876,8 +2876,6 @@ - text = gtk_imhtml_new(NULL, NULL); - c->text = text; - gtk_container_add(GTK_CONTAINER(sw), text); -- GTK_LAYOUT(text)->hadjustment->step_increment = 10.0; -- GTK_LAYOUT(text)->vadjustment->step_increment = 10.0; - if (convo_options & OPT_CONVO_SHOW_TIME) - gtk_imhtml_show_comments(GTK_IMHTML(text), TRUE); - gaim_setup_imhtml(text); Index: src/gtkimhtml.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/gtkimhtml.c,v retrieving revision 1.120 diff -u -r1.120 gtkimhtml.c --- src/gtkimhtml.c 14 Sep 2002 03:17:04 -0000 1.120 -+++ src/gtkimhtml.c 9 Oct 2002 05:38:26 -0000 ++++ src/gtkimhtml.c 10 Oct 2002 19:40:55 -0000 @@ -25,7 +25,6 @@ #include "gtkimhtml.h" #include <X11/Xlib.h> @@ -3750,7 +3732,7 @@ retrieving revision 1.17 diff -u -r1.17 gtkimhtml.h --- src/gtkimhtml.h 29 Aug 2002 01:47:14 -0000 1.17 -+++ src/gtkimhtml.h 9 Oct 2002 05:38:26 -0000 ++++ src/gtkimhtml.h 10 Oct 2002 19:40:58 -0000 @@ -23,7 +23,7 @@ #define __GTK_IMHTML_H |
From: Rob F. <rob...@us...> - 2002-10-10 16:02:47
|
Update of /cvsroot/gaim/gaim In directory usw-pr-cvs1:/tmp/cvs-serv10574 Modified Files: ChangeLog Log Message: oh ho ho Index: ChangeLog =================================================================== RCS file: /cvsroot/gaim/gaim/ChangeLog,v retrieving revision 1.557 retrieving revision 1.558 diff -u -d -r1.557 -r1.558 --- ChangeLog 10 Oct 2002 06:54:08 -0000 1.557 +++ ChangeLog 10 Oct 2002 16:02:40 -0000 1.558 @@ -82,6 +82,7 @@ (Thanks Mark Doliner) * Improved typing notification support for Jabber and Yahoo! (Thanks Nathan Walp) + * Generic File Transfer PRPL interface (Thanks William T. Mahan) * DCC File Send / Receive support for IRC version 0.59 (06/24/2002): |
From: Rob F. <rob...@us...> - 2002-10-10 07:00:38
|
Update of /cvsroot/gaim/gaim/src/protocols/irc In directory usw-pr-cvs1:/tmp/cvs-serv28320 Modified Files: irc.c Log Message: so i wont forget. Index: irc.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/irc/irc.c,v retrieving revision 1.95 retrieving revision 1.96 diff -u -d -r1.95 -r1.96 --- irc.c 10 Oct 2002 06:54:08 -0000 1.95 +++ irc.c 10 Oct 2002 07:00:33 -0000 1.96 @@ -2038,7 +2038,8 @@ pos = htonl(ift->cur); write(ift->fd, (char *)&pos, 4); -// printf("Cheap-O Progress Bar (%s) %d of %d: %2.0f\%\n", ift->name, ift->cur, ift->len, ((float)ift->cur/(float)ift->len) * 100); + // FIXME: You should check to verify that they received the data when + // you are sending a file ... } static void irc_file_transfer_cancel (struct gaim_connection *gc, struct file_transfer *xfer) { |
From: Rob F. <rob...@us...> - 2002-10-10 06:54:11
|
Update of /cvsroot/gaim/gaim/src/protocols/irc In directory usw-pr-cvs1:/tmp/cvs-serv26425/src/protocols/irc Modified Files: irc.c Log Message: I haven't tested this thoroughly, but neither does Sean before he commits his code. Index: irc.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/irc/irc.c,v retrieving revision 1.94 retrieving revision 1.95 diff -u -d -r1.94 -r1.95 --- irc.c 9 Oct 2002 06:28:55 -0000 1.94 +++ irc.c 10 Oct 2002 06:54:08 -0000 1.95 @@ -471,13 +471,33 @@ } -void dcc_recv_callback (gpointer data, gint source, GaimInputCondition condition) { +void dcc_send_callback (gpointer data, gint source, GaimInputCondition condition) { struct irc_file_transfer *ift = data; + struct irc_data *id = (struct irc_data *)ift->gc->proto_data; + struct sockaddr_in addr; + int len = sizeof(addr); + + addr.sin_family = AF_INET; + addr.sin_port = htons(ift->port); + addr.sin_addr.s_addr = INADDR_ANY; - ift->fd = source; + ift->fd = accept(ift->fd, (struct sockaddr *)&addr, &len); + if (!ift->fd) { + /* FIXME: Handle this gracefully XXX */ + printf("Something bad happened here, bubba!"); + return; + } + + if (transfer_out_do(ift->xfer, ift->fd, 0)) { + gaim_input_remove(ift->watcher); + ift->watcher = 0; + } +} - printf("WELL, we should be doing something then, should we not?\n"); +void dcc_recv_callback (gpointer data, gint source, GaimInputCondition condition) { + struct irc_file_transfer *ift = data; + ift->fd = source; irc_file_transfer_do(ift->gc, ift); } @@ -1975,11 +1995,19 @@ static void irc_ask_send_file(struct gaim_connection *gc, char *destsn) { struct irc_data *id = (struct irc_data *)gc->proto_data; struct irc_file_transfer *ift = g_new0(struct irc_file_transfer, 1); + char *localip = (char *)malloc(12); + + if (getlocalip(localip) == -1) { + free(localip); + return; + } ift->type = IFT_SENDFILE_OUT; ift->sn = g_strdup(destsn); ift->gc = gc; + snprintf(ift->ip, sizeof(ift->ip), "%s", localip); id->file_transfers = g_slist_append(id->file_transfers, ift); + ift->xfer = transfer_out_add(gc, ift->sn); } @@ -2010,7 +2038,7 @@ pos = htonl(ift->cur); write(ift->fd, (char *)&pos, 4); - printf("Cheap-O Progress Bar (%s) %d of %d: %2.0f\%\n", ift->name, ift->cur, ift->len, ((float)ift->cur/(float)ift->len) * 100); +// printf("Cheap-O Progress Bar (%s) %d of %d: %2.0f\%\n", ift->name, ift->cur, ift->len, ((float)ift->cur/(float)ift->len) * 100); } static void irc_file_transfer_cancel (struct gaim_connection *gc, struct file_transfer *xfer) { @@ -2054,6 +2082,33 @@ g_free(ift); } +static void irc_file_transfer_out (struct gaim_connection *gc, struct file_transfer *xfer, const char *name, int totfiles, int totsize) { + struct irc_data *id = (struct irc_data *)gc->proto_data; + struct irc_file_transfer *ift = find_ift_by_xfer(gc, xfer); + struct sockaddr_in addr; + char buf[IRC_BUF_LEN]; + int len; + + + ift->fd = socket (AF_INET, SOCK_STREAM, 0); + addr.sin_family = AF_INET; + addr.sin_port = 0; + addr.sin_addr.s_addr = INADDR_ANY; + bind (ift->fd, (struct sockaddr *) &addr, sizeof(addr)); + listen(ift->fd, 1); + + len = sizeof(addr); + getsockname (ift->fd, (struct sockaddr *) &addr, &len); + + ift->port = ntohs(addr.sin_port); + + ift->watcher = gaim_input_add (ift->fd, GAIM_INPUT_READ, dcc_send_callback, ift); + + snprintf(buf, sizeof(buf), "\001DCC SEND %s %s %d %d\001\n", name, ift->ip, ift->port, totsize); + printf("Trying: %s\n", buf); + irc_send_im (gc, ift->sn, buf, -1, 0); +} + static void irc_file_transfer_in(struct gaim_connection *gc, struct file_transfer *xfer, int offset) { @@ -2063,8 +2118,6 @@ char *ip = (char *)malloc(32); ift->xfer = xfer; - printf("You, I should be getting a file or some shit, hehe\n"); - printf("Connecting to: %s %d\n", ift->ip, ift->port); proxy_connect(ift->ip, ift->port, dcc_recv_callback, ift); } @@ -2131,13 +2184,11 @@ pbm->gc = gc; m = g_list_append(m, pbm); -/* pbm = g_new0(struct proto_buddy_menu, 1); pbm->label = _("DCC Send"); pbm->callback = irc_ask_send_file; pbm->gc = gc; m = g_list_append(m, pbm); -*/ return m; } @@ -2166,7 +2217,7 @@ ret->buddy_menu = irc_buddy_menu; ret->chat_invite = irc_chat_invite; ret->convo_closed = irc_convo_closed; - ret->file_transfer_out = NULL; /* Implement me */ + ret->file_transfer_out = irc_file_transfer_out; ret->file_transfer_in = irc_file_transfer_in; ret->file_transfer_data_chunk = irc_file_transfer_data_chunk; ret->file_transfer_done = irc_file_transfer_done; |
From: Rob F. <rob...@us...> - 2002-10-10 06:54:11
|
Update of /cvsroot/gaim/gaim In directory usw-pr-cvs1:/tmp/cvs-serv26425 Modified Files: ChangeLog Log Message: I haven't tested this thoroughly, but neither does Sean before he commits his code. Index: ChangeLog =================================================================== RCS file: /cvsroot/gaim/gaim/ChangeLog,v retrieving revision 1.556 retrieving revision 1.557 diff -u -d -r1.556 -r1.557 --- ChangeLog 9 Oct 2002 06:17:05 -0000 1.556 +++ ChangeLog 10 Oct 2002 06:54:08 -0000 1.557 @@ -82,7 +82,7 @@ (Thanks Mark Doliner) * Improved typing notification support for Jabber and Yahoo! (Thanks Nathan Walp) - * DCC File Receive support for IRC + * DCC File Send / Receive support for IRC version 0.59 (06/24/2002): * Hungarian translation added (Thanks, Sutto Zoltan) |
From: Rob F. <rob...@us...> - 2002-10-10 05:57:10
|
Update of /cvsroot/gaim/gaim/src In directory usw-pr-cvs1:/tmp/cvs-serv10713 Modified Files: ft.c Log Message: Give a totsize of -1 if you want the filesize to be unknown upon asking. Index: ft.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/ft.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- ft.c 9 Oct 2002 05:19:45 -0000 1.3 +++ ft.c 10 Oct 2002 05:57:07 -0000 1.4 @@ -72,6 +72,8 @@ int bytesleft; }; + + static int ft_choose_file(gpointer a, struct file_transfer *xfer); static void ft_cancel(gpointer w, struct file_transfer *xfer); static void ft_delete(struct file_transfer *xfer); @@ -100,6 +102,7 @@ struct file_transfer *xfer = ft_new(FILE_TRANSFER_TYPE_RECEIVE, gc, who); char *buf; + char *sizebuf; static const char *sizestr[4] = { "bytes", "KB", "MB", "GB" }; float sizemag = (float)totsize; int szindex = 0; @@ -115,14 +118,21 @@ szindex++; } - if (xfer->totfiles == 1) - buf = g_strdup_printf(_("%s requests that %s accept a file: %s (%.3g %s)"), - who, xfer->gc->username, initname, - sizemag, sizestr[szindex]); + if (totsize == -1) + sizebuf = g_strdup_printf(_("Unkown")); else - buf = g_strdup_printf(_("%s requests that %s accept %d files: %s (%.3g %s)"), + sizebuf = g_strdup_printf("%.3g %s", sizemag, sizestr[szindex]); + + if (xfer->totfiles == 1) { + buf = g_strdup_printf(_("%s requests that %s accept a file: %s (%s)"), + who, xfer->gc->username, initname, sizebuf); + } else { + buf = g_strdup_printf(_("%s requests that %s accept %d files: %s (%s)"), who, xfer->gc->username, xfer->totfiles, - initname, sizemag, sizestr[szindex]); + initname, sizebuf); + } + + g_free(sizebuf); if (msg) { char *newmsg = g_strconcat(buf, ": ", msg, NULL); |
From: Rob F. <rob...@us...> - 2002-10-10 02:21:21
|
Update of /cvsroot/gaim/web/inc In directory usw-pr-cvs1:/tmp/cvs-serv11679 Modified Files: html.inc.normal.php Log Message: oops2 Index: html.inc.normal.php =================================================================== RCS file: /cvsroot/gaim/web/inc/html.inc.normal.php,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- html.inc.normal.php 10 Oct 2002 01:25:30 -0000 1.4 +++ html.inc.normal.php 10 Oct 2002 02:21:18 -0000 1.5 @@ -120,7 +120,7 @@ <a href="/cvs.php#nightly">Nightlies:</a> <small>[<a href="/gaim-CVS.tar.gz">tarball</a>, <a href="/gaim-CVS.i386.rpm">RPM</a>] <br /> - <a href="http://sourceforge.net/project/showfiles.php?group_id=235">Other Packages)</a> </small> <br /> + <a href="http://sourceforge.net/project/showfiles.php?group_id=235">Other Packages</a> </small> <br /> <?php end_font() ?> </td> </tr> |
From: Rob F. <rob...@us...> - 2002-10-10 01:27:33
|
Update of /cvsroot/gaim/web/htdocs In directory usw-pr-cvs1:/tmp/cvs-serv28900/htdocs Modified Files: news.txt Log Message: yo Index: news.txt =================================================================== RCS file: /cvsroot/gaim/web/htdocs/news.txt,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- news.txt 10 Oct 2002 01:24:22 -0000 1.7 +++ news.txt 10 Oct 2002 01:27:30 -0000 1.8 @@ -1,6 +1,7 @@ v0.60.0-alpha2 released for Win32! October 09th, 2002 - 9:15PM EDT -The second <b>alpha</b> release of the Win32 preview of Gaim 0.60.0 has been released. This release includes perl support, Gadu-Gadu, and language translations. Highlighting text in the conversation window copies it to the windows clipboard. Support for minimizing to the system tray has been added, as well as support for the windows 'default browser.' + +The second <b>alpha</b> release of the <a href="http://sourceforge.net/project/showfiles.php?group_id=235&release_id=115460">Win32 preview</a> of Gaim 0.60.0 has been released. This release includes perl support, Gadu-Gadu, and language translations. Highlighting text in the conversation window copies it to the windows clipboard. Support for minimizing to the system tray has been added, as well as support for the windows 'default browser.' <B><I>We recommend that you uninstall the previous version of the win32 gaim (0.60.0-alpha1) before installing this new version.</I></B> # v0.59.4 released! Run for your lives! |
From: Rob F. <rob...@us...> - 2002-10-10 01:25:32
|
Update of /cvsroot/gaim/web/inc In directory usw-pr-cvs1:/tmp/cvs-serv28498/inc Modified Files: html.inc.normal.php Log Message: That looked ugly Index: html.inc.normal.php =================================================================== RCS file: /cvsroot/gaim/web/inc/html.inc.normal.php,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- html.inc.normal.php 10 Oct 2002 01:24:23 -0000 1.3 +++ html.inc.normal.php 10 Oct 2002 01:25:30 -0000 1.4 @@ -120,7 +120,7 @@ <a href="/cvs.php#nightly">Nightlies:</a> <small>[<a href="/gaim-CVS.tar.gz">tarball</a>, <a href="/gaim-CVS.i386.rpm">RPM</a>] <br /> - <a href="http://sourceforge.net/project/showfiles.php?group_id=235">Other Packages (Inc. Win32)</a> </small> <br /> + <a href="http://sourceforge.net/project/showfiles.php?group_id=235">Other Packages)</a> </small> <br /> <?php end_font() ?> </td> </tr> |
From: Rob F. <rob...@us...> - 2002-10-10 01:24:27
|
Update of /cvsroot/gaim/web/htdocs In directory usw-pr-cvs1:/tmp/cvs-serv28218/htdocs Modified Files: news.txt Log Message: la la la la la Index: news.txt =================================================================== RCS file: /cvsroot/gaim/web/htdocs/news.txt,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- news.txt 7 Oct 2002 00:32:30 -0000 1.6 +++ news.txt 10 Oct 2002 01:24:22 -0000 1.7 @@ -1,3 +1,8 @@ +v0.60.0-alpha2 released for Win32! +October 09th, 2002 - 9:15PM EDT +The second <b>alpha</b> release of the Win32 preview of Gaim 0.60.0 has been released. This release includes perl support, Gadu-Gadu, and language translations. Highlighting text in the conversation window copies it to the windows clipboard. Support for minimizing to the system tray has been added, as well as support for the windows 'default browser.' +<B><I>We recommend that you uninstall the previous version of the win32 gaim (0.60.0-alpha1) before installing this new version.</I></B> +# v0.59.4 released! Run for your lives! October 06th, 2002 - 7:45PM EDT We've released the latest and greatest of bug fixes for the stable tree. There aren't very many changes in this release. We mostly let it out to hold everyone over while we work on Gaim v0.60. We think you'll really enjoy it when we're finished. As always, see the <a href="ChangeLog">ChangeLog</a> if you have any questions. |