changeset 10867:5727afad0fb8

[gaim-migrate @ 12553] sf patch #991208, from Arun A Tharuvai "Here's a patch, against current CVS, to build and compile zephyr on Windows, with, or without Kerberos 4 Authentication. In order to be built (and run) with Kerberos 4 authentication, the Kerberos for Windows SDK (version 2.6.3 is the current version) (licensed under the MIT license) and runtimes, both available from http://web.mit.edu/kerberos/www/dist/index.html#KFW2.6.3 Also, USE_KRB4 should be set to true in the attached Makefile.mingw As on the UNIX side, an external 'zhm' binary needs to run for zephyr to work. Source and a win32 executable (using code from gaim's libzephyr, and also MIT's zephyr distribution), can be found at http://web.mit.edu/aatharuv/www/zhm-windows.html" I decided not to make zephyr compiled by default in Windows. If you want to compile it, I think you you can modify the root Makefile.mingw or cd to the src/protocols/zephyr/ directory and run "make -f Makefile.mingw" using make from mingw committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Mon, 25 Apr 2005 01:53:01 +0000
parents f38bda97f981
children 4a56b48dbaa6
files src/protocols/zephyr/Makefile.mingw src/protocols/zephyr/ZAsyncLocate.c src/protocols/zephyr/ZGetSender.c src/protocols/zephyr/ZGetWGPort.c src/protocols/zephyr/ZInit.c src/protocols/zephyr/ZLocations.c src/protocols/zephyr/ZMkAuth.c src/protocols/zephyr/ZOpenPort.c src/protocols/zephyr/ZSendPkt.c src/protocols/zephyr/ZVariables.c src/protocols/zephyr/ZWait4Not.c src/protocols/zephyr/ZhmStat.c src/protocols/zephyr/Zinternal.c src/protocols/zephyr/internal.h src/protocols/zephyr/sysdep.h src/protocols/zephyr/zephyr.c src/protocols/zephyr/zephyr.h
diffstat 17 files changed, 466 insertions(+), 55 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/zephyr/Makefile.mingw	Mon Apr 25 01:53:01 2005 +0000
@@ -0,0 +1,204 @@
+#
+# Makefile.mingw
+#
+# Description: Makefile for win32 (mingw) version of libzephyr
+#
+
+#
+# PATHS
+#
+ 
+INCLUDE_DIR :=		.
+GTK_TOP :=		../../../../win32-dev/gtk_2_0
+GAIM_TOP :=		../../..
+ZEPHYR_ROOT :=		.
+KRB4_TOP :=             ../../../../win32-dev/kfw-2.6.3-final.fixed
+GAIM_INSTALL_DIR :=	$(GAIM_TOP)/win32-install-dir
+
+USE_KRB4 := false
+
+##
+## VARIABLE DEFINITIONS
+##
+
+TARGET = libzephyr
+
+# Compiler Options
+
+CFLAGS =
+
+DEFINES =
+
+# 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
+
+DEFINES += -DWIN32 -DKRB5_SYSTYPES__ 
+
+ifeq ($(USE_KRB4),true)
+  DEFINES += -DZEPHYR_USES_KERBEROS
+endif
+
+##
+## INCLUDE  MAKEFILES
+##
+
+include $(GAIM_TOP)/src/win32/global.mak
+
+##
+## INCLUDE PATHS
+##
+
+INCLUDE_PATHS +=	-I$(ZEPHYR_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)
+
+ifeq ($(USE_KRB4), true)
+   INCLUDE_PATHS += -I$(KRB4_TOP)/inc/krb4
+endif
+
+LIB_PATHS =		-L$(GTK_TOP)/lib \
+			-L$(GAIM_TOP)/src
+
+ifeq ($(USE_KRB4), true)
+  LIB_PATHS+=-L$(KRB4_TOP)/lib/i386
+endif
+
+##
+##  SOURCES, OBJECTS
+##
+
+C_SRC =			ZAsyncLocate.c \
+			ZCkAuth.c \
+			ZCkIfNot.c \
+			ZClosePort.c \
+			ZCmpUID.c \
+			ZCmpUIDP.c \
+ZFlsLocs.c \
+ZFlsSubs.c \
+ZFmtAuth.c \
+ZFmtList.c \
+ZFmtNotice.c \
+ZFmtRaw.c \
+ZFmtRawLst.c \
+ZFmtSmRLst.c \
+ZFmtSmRaw.c \
+ZFreeNot.c \
+ZGetLocs.c \
+ZGetSender.c \
+ZGetSubs.c \
+ZGetWGPort.c \
+ZIfNotice.c \
+ZInit.c \
+ZLocations.c \
+ZMakeAscii.c \
+ZMkAuth.c \
+ZNewLocU.c \
+ZOpenPort.c \
+ZParseNot.c \
+ZPeekIfNot.c \
+ZPeekNot.c \
+ZPeekPkt.c \
+ZPending.c \
+ZReadAscii.c \
+ZRecvNot.c \
+ZRecvPkt.c \
+ZRetSubs.c \
+ZSendList.c \
+ZSendNot.c \
+ZSendPkt.c \
+ZSendRLst.c \
+ZSendRaw.c \
+ZSetDest.c \
+ZSetFD.c \
+ZSetSrv.c \
+ZSubs.c \
+ZVariables.c \
+ZWait4Not.c \
+ZhmStat.c \
+Zinternal.c \
+error_message.c \
+et_name.c \
+init_et.c \
+zephyr_err.c \
+zephyr.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
+
+ifeq ($(USE_KRB4),true) 
+  LIBS+= -lkrbv4w32 
+endif
+
+##
+## 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 $(ZEPHYR_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).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib
+	$(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--enable-stdcall-fixup -Wl,--out-implib,$(TARGET).lib -o $(TARGET).dll
+
+
+##
+## CLEAN RULES
+##
+
+clean:
+	rm -rf *.o
+	rm -rf $(TARGET).dll
+	rm -rf $(TARGET).lib
--- a/src/protocols/zephyr/ZAsyncLocate.c	Mon Apr 25 00:31:24 2005 +0000
+++ b/src/protocols/zephyr/ZAsyncLocate.c	Mon Apr 25 01:53:01 2005 +0000
@@ -4,7 +4,7 @@
  *	Created by:	Marc Horowitz
  *
  *	$Source$
- *	$Author: chipx86 $
+ *	$Author: thekingant $
  *
  *	Copyright (c) 1990,1991 by the Massachusetts Institute of Technology.
  *	For copying and distribution information, see the file
@@ -15,12 +15,12 @@
 #include "internal.h"
 
 #ifndef lint
-static const char rcsid_ZAsyncLocate_c[] = "$Id: ZAsyncLocate.c 9553 2004-04-24 09:00:37Z chipx86 $";
+static const char rcsid_ZAsyncLocate_c[] = "$Id: ZAsyncLocate.c 12553 2005-04-25 01:53:01Z thekingant $";
 #endif
 
 Code_t ZRequestLocations(user, zald, kind, auth)
      const char *user;
-     register ZAsyncLocateData_t *zald;
+     ZAsyncLocateData_t *zald;
      ZNotice_Kind_t kind;	/* UNSAFE, UNACKED, or ACKED */
      Z_AuthProc auth;
 {
@@ -60,8 +60,8 @@
 }
 
 Code_t ZParseLocations(notice,zald,nlocs,user)
-     register ZNotice_t *notice;
-     register ZAsyncLocateData_t *zald;
+     ZNotice_t *notice;
+     ZAsyncLocateData_t *zald;
      int *nlocs;
      char **user;
 {
@@ -160,7 +160,7 @@
 }
 
 void ZFreeALD(zald)
-     register ZAsyncLocateData_t *zald;
+     ZAsyncLocateData_t *zald;
 {
    if (!zald) return;
 
--- a/src/protocols/zephyr/ZGetSender.c	Mon Apr 25 00:31:24 2005 +0000
+++ b/src/protocols/zephyr/ZGetSender.c	Mon Apr 25 01:53:01 2005 +0000
@@ -4,7 +4,7 @@
  *	Created by:	Robert French
  *
  *	$Source$
- *	$Author: lschiere $
+ *	$Author: thekingant $
  *
  *	Copyright (c) 1987, 1991 by the Massachusetts Institute of Technology.
  *	For copying and distribution information, see the file
@@ -16,10 +16,12 @@
 
 #ifndef lint
 static const char rcsid_ZGetSender_c[] =
-    "$Id: ZGetSender.c 10997 2004-09-18 22:25:12Z lschiere $";
+    "$Id: ZGetSender.c 12553 2005-04-25 01:53:01Z thekingant $";
 #endif
 
+#ifndef WIN32
 #include <pwd.h>
+#endif
 
 char *ZGetSender()
 {
@@ -27,10 +29,15 @@
 #ifdef ZEPHYR_USES_KERBEROS
     char pname[ANAME_SZ], pinst[INST_SZ], prealm[REALM_SZ];
     static char sender[ANAME_SZ+INST_SZ+REALM_SZ+3] = "";
+	long int kerror;
 #else
     static char sender[128] = "";
 #endif
 
+#ifdef WIN32
+	unsigned long sender_size = 127;
+#endif
+
     /* Return it if already cached */
 
     /*    if (*sender)
@@ -38,19 +45,26 @@
     */
 
 #ifdef ZEPHYR_USES_KERBEROS
-    if (krb_get_tf_fullname((char *)TKT_FILE, pname, pinst, prealm) == KSUCCESS)
+	if ((kerror = krb_get_tf_fullname((char *)TKT_FILE, pname, pinst, prealm)) == KSUCCESS)
     {
 	(void) sprintf(sender, "%s%s%s@%s", pname, (pinst[0]?".":""),
 		       pinst, prealm);
 	return (sender);
+    } else {
+	sprintf(sender,"%s@%s",(username?username:"unknown"),__Zephyr_realm);
+	return (sender);
     }
 #endif
 
     /* XXX a uid_t is a u_short (now),  but getpwuid
      * wants an int. AARGH! */
+#ifdef WIN32
+    GetUserName(sender, &sender_size);
+#else
     pw = getpwuid((int) getuid());
     if (!pw)
 	return ("unknown");
     (void) sprintf(sender, "%s@%s", pw->pw_name, __Zephyr_realm);
+#endif
     return (sender);
 }
--- a/src/protocols/zephyr/ZGetWGPort.c	Mon Apr 25 00:31:24 2005 +0000
+++ b/src/protocols/zephyr/ZGetWGPort.c	Mon Apr 25 01:53:01 2005 +0000
@@ -4,7 +4,7 @@
  *	Created by:	Robert French
  *
  *	$Source$
- *	$Author: datallah $
+ *	$Author: thekingant $
  *
  *	Copyright (c) 1987 by the Massachusetts Institute of Technology.
  *	For copying and distribution information, see the file
@@ -23,10 +23,18 @@
     char *envptr, name[128];
     FILE *fp;
     int wgport;
-	
+#ifdef WIN32
+    long int buffsize= 128;
+    char tempdir[buffsize];
+#endif	
     envptr = getenv("WGFILE");
     if (!envptr) {
+#ifdef WIN32
+         GetTempPath(buffsize,tempdir);
+         GetTempFileName(tempdir,"wg.",0,name);
+#else
 	(void) sprintf(name, "/tmp/wg.%d", getuid());
+#endif
 	envptr = name;
     } 
     if (!(fp = fopen(envptr, "r")))
--- a/src/protocols/zephyr/ZInit.c	Mon Apr 25 00:31:24 2005 +0000
+++ b/src/protocols/zephyr/ZInit.c	Mon Apr 25 01:53:01 2005 +0000
@@ -4,7 +4,7 @@
  *	Created by:	Robert French
  *
  *	$Source$
- *	$Author: chipx86 $
+ *	$Author: thekingant $
  *
  *	Copyright (c) 1987, 1991 by the Massachusetts Institute of Technology.
  *	For copying and distribution information, see the file
@@ -17,13 +17,23 @@
     "$Zephyr: /afs/athena.mit.edu/astaff/project/zephyr/src/lib/RCS/ZInitialize.c,v 1.17 89/05/30 18:11:25 jtkohl Exp $";
 #endif
 
+#ifdef ZEPHYR_USES_KERBEROS
+#ifdef WIN32
+
+#else
+#include <krb_err.h>
+#endif
+#endif
+
 #include "internal.h"
 
+#ifdef WIN32
+#include <winsock2.h>
+#else
 #include <sys/socket.h>
-#ifdef ZEPHYR_USES_KERBEROS
-#include <krb_err.h>
 #endif
 
+
 #ifndef INADDR_NONE
 #define INADDR_NONE 0xffffffff
 #endif
@@ -43,7 +53,7 @@
     int krbval;
     char d1[ANAME_SZ], d2[INST_SZ];
 
-    initialize_krb_error_table();
+    /*    initialize_krb_error_table(); */
 #endif
 
     initialize_zeph_error_table();
--- a/src/protocols/zephyr/ZLocations.c	Mon Apr 25 00:31:24 2005 +0000
+++ b/src/protocols/zephyr/ZLocations.c	Mon Apr 25 01:53:01 2005 +0000
@@ -20,7 +20,9 @@
 
 #include "internal.h"
 
+#ifndef WIN32
 #include <pwd.h>
+#endif
 
 extern char *getenv();
 extern int errno;
@@ -55,11 +57,14 @@
     int retval;
     time_t ourtime;
     ZNotice_t notice, retnotice;
-    char *bptr[3], *p;
+    char *bptr[3];
 #ifndef X_DISPLAY_MISSING
     char *display;
 #endif
+#ifndef WIN32
     char *ttyp;
+    char *p;
+#endif
     struct hostent *hent;
     short wg_port = ZGetWGPort();
 
@@ -95,6 +100,9 @@
 		    mytty[sizeof(mytty)-1] = '\0';
 	    } else {
 #endif
+#ifdef WIN32
+              	    strcpy(mytty,"WinGaim");
+#else
 		    ttyp = ttyname(0);
 		    if (ttyp && *ttyp) {
 			p = strchr(ttyp + 1, '/');
@@ -102,6 +110,7 @@
 		    } else {
 			strcpy(mytty, "unknown");
 		    }
+#endif
 #ifndef X_DISPLAY_MISSING
 	    }
 #endif
--- a/src/protocols/zephyr/ZMkAuth.c	Mon Apr 25 00:31:24 2005 +0000
+++ b/src/protocols/zephyr/ZMkAuth.c	Mon Apr 25 01:53:01 2005 +0000
@@ -4,22 +4,30 @@
  *	Created by:	Robert French
  *
  *	$Source$
- *	$Author: chipx86 $
+ *	$Author: thekingant $
  *
  *	Copyright (c) 1987 by the Massachusetts Institute of Technology.
  *	For copying and distribution information, see the file
  *	"mit-copyright.h". 
  */
-/* $Id: ZMkAuth.c 9554 2004-04-24 09:02:28Z chipx86 $ */
+/* $Id: ZMkAuth.c 12553 2005-04-25 01:53:01Z thekingant $ */
 
 #include "internal.h"
 
 #ifndef lint
-static const char rcsid_ZMakeAuthentication_c[] = "$Id: ZMkAuth.c 9554 2004-04-24 09:02:28Z chipx86 $";
+static const char rcsid_ZMakeAuthentication_c[] = "$Id: ZMkAuth.c 12553 2005-04-25 01:53:01Z thekingant $";
+#endif
+
+#ifndef ERROR_TABLE_BASE_krb
+#define ERROR_TABLE_BASE_krb (39525376L)
 #endif
 
 #ifdef ZEPHYR_USES_KERBEROS
+#ifdef WIN32
+
+#else
 #include <krb_err.h>
+#endif
 static long last_authent_time = 0L;
 static KTEXT_ST last_authent;
 #endif
--- a/src/protocols/zephyr/ZOpenPort.c	Mon Apr 25 00:31:24 2005 +0000
+++ b/src/protocols/zephyr/ZOpenPort.c	Mon Apr 25 01:53:01 2005 +0000
@@ -4,7 +4,7 @@
  *	Created by:	Robert French
  *
  *	$Source$
- *	$Author: chipx86 $
+ *	$Author: thekingant $
  *
  *	Copyright (c) 1987 by the Massachusetts Institute of Technology.
  *	For copying and distribution information, see the file
@@ -17,7 +17,11 @@
 #endif
 
 #include "internal.h"
+#ifdef WIN32
+#include <winsock2.h>
+#else
 #include <sys/socket.h>
+#endif
 
 Code_t ZOpenPort(port)
     unsigned short *port;
--- a/src/protocols/zephyr/ZSendPkt.c	Mon Apr 25 00:31:24 2005 +0000
+++ b/src/protocols/zephyr/ZSendPkt.c	Mon Apr 25 01:53:01 2005 +0000
@@ -4,7 +4,7 @@
  *	Created by:	Robert French
  *
  *	$Source$
- *	$Author: chipx86 $
+ *	$Author: thekingant $
  *
  *	Copyright (c) 1987,1991 by the Massachusetts Institute of Technology.
  *	For copying and distribution information, see the file
@@ -18,8 +18,11 @@
 #endif
 
 #include "internal.h"
+#ifdef WIN32
+#include <winsock.h>
+#else
 #include <sys/socket.h>
-
+#endif
 static int wait_for_hmack();
 
 Code_t ZSendPacket(packet, len, waitforack)
--- a/src/protocols/zephyr/ZVariables.c	Mon Apr 25 00:31:24 2005 +0000
+++ b/src/protocols/zephyr/ZVariables.c	Mon Apr 25 01:53:01 2005 +0000
@@ -5,7 +5,7 @@
  *	Created by:	Robert French
  *
  *	$Source$
- *	$Author: nosnilmot $
+ *	$Author: thekingant $
  *
  *	Copyright (c) 1987 by the Massachusetts Institute of Technology.
  *	For copying and distribution information, see the file
@@ -21,7 +21,9 @@
 #include "util.h"
 
 #include <ctype.h>
+#ifndef WIN32
 #include <pwd.h>
+#endif
 
 static int get_localvarfile __P((char *bfr));
 static char *get_varval __P((char *fn, char *val));
@@ -38,7 +40,11 @@
     if ((ret = get_varval(varfile, var)) != ZERR_NONE)
 	return (ret);
 
+#ifdef WIN32
+    sprintf(varfile, "C:\\zephyr\\zephyr.var");
+#else
     sprintf(varfile, "%s/zephyr.vars", CONFDIR);
+#endif
     return (get_varval(varfile, var));
 }
 
@@ -116,17 +122,26 @@
     char *bfr;
 {
     const char *envptr;
+#ifndef WIN32
     struct passwd *pwd;
-
     envptr = gaim_home_dir();
+#else
+    envptr = getenv("HOME");
+    if (!envptr)
+        envptr = getenv("HOMEPATH");
+    if (!envptr) 
+        envptr = "C:\\";
+#endif
     if (envptr)
 	(void) strcpy(bfr, envptr);
     else {
+#ifndef WIN32
 	if (!(pwd = getpwuid((int) getuid()))) {
 	    fprintf(stderr, "Zephyr internal failure: Can't find your entry in /etc/passwd\n");
 	    return (1);
 	}
 	(void) strcpy(bfr, pwd->pw_dir);
+#endif
     }
 
     (void) strcat(bfr, "/");
@@ -174,7 +189,9 @@
     while (*cp && !isspace(*cp) && (*cp != '='))
 	cp++;
 
+#ifndef WIN32
 #define max(a,b) ((a > b) ? (a) : (b))
+#endif
 
     if (strncasecmp(bfr, var, max(strlen(var),cp - bfr)))
 	return(0);			/* var is not the var in
--- a/src/protocols/zephyr/ZWait4Not.c	Mon Apr 25 00:31:24 2005 +0000
+++ b/src/protocols/zephyr/ZWait4Not.c	Mon Apr 25 01:53:01 2005 +0000
@@ -5,7 +5,7 @@
  *	Created by:	<Joe Random Hacker>
  *
  *	$Source$
- *	$Author: chipx86 $
+ *	$Author: thekingant $
  *
  *	Copyright (c) 1991 by the Massachusetts Institute of Technology.
  *	For copying and distribution information, see the file
@@ -19,7 +19,27 @@
 #endif
 
 #include "internal.h"
+
+#ifdef WIN32
+#include <winsock2.h>
+
+#ifndef ZEPHYR_USES_KERBEROS
+static int  gettimeofday(struct timeval* tv, struct timezone* tz){
+     union {
+     long long ns100; /*time since 1 Jan 1601 in 100ns units */
+       FILETIME ft;
+     } _now;
+
+     GetSystemTimeAsFileTime( &(_now.ft) );
+     tv->tv_usec=(long)((_now.ns100 / 10LL) % 1000000LL );
+     tv->tv_sec= (long)((_now.ns100-(116444736000000000LL))/10000000LL);
+     return 0;
+   }
+#endif
+
+#else
 #include <sys/socket.h>
+#endif
 
 Code_t Z_WaitForNotice (notice, pred, arg, timeout)
      ZNotice_t *notice;
@@ -43,7 +63,7 @@
   FD_ZERO (&fdmask);
   tv.tv_sec = timeout;
   tv.tv_usec = 0;
-  gettimeofday (&t0, (struct timezone *) 0);
+  gettimeofday (&t0, (struct timezone *)NULL);
   t0.tv_sec += timeout;
   while (1) {
     FD_SET (fd, &fdmask);
@@ -58,7 +78,7 @@
       if (retval != ZERR_NONOTICE) /* includes ZERR_NONE */
 	return retval;
     }
-    gettimeofday (&tv, (struct timezone *) 0);
+    gettimeofday (&tv, (struct timezone *) NULL);
     tv.tv_usec = t0.tv_usec - tv.tv_usec;
     if (tv.tv_usec < 0) {
       tv.tv_usec += 1000000;
--- a/src/protocols/zephyr/ZhmStat.c	Mon Apr 25 00:31:24 2005 +0000
+++ b/src/protocols/zephyr/ZhmStat.c	Mon Apr 25 01:53:01 2005 +0000
@@ -3,7 +3,7 @@
  *
  *      Created by:     Marc Horowitz
  *
- *      $Id: ZhmStat.c 9554 2004-04-24 09:02:28Z chipx86 $
+ *      $Id: ZhmStat.c 12553 2005-04-25 01:53:01Z thekingant $
  *
  *      Copyright (c) 1996 by the Massachusetts Institute of Technology.
  *      For copying and distribution information, see the file
@@ -11,7 +11,12 @@
  */
 
 #include "internal.h"
+
+#ifdef WIN32
+#include <winsock2.h>
+#else
 #include <sys/socket.h>
+#endif
 
 #ifndef INADDR_LOOPBACK
 #define INADDR_LOOPBACK 0x7f000001
--- a/src/protocols/zephyr/Zinternal.c	Mon Apr 25 00:31:24 2005 +0000
+++ b/src/protocols/zephyr/Zinternal.c	Mon Apr 25 01:53:01 2005 +0000
@@ -4,7 +4,7 @@
  *	Created by:	Robert French
  *
  *	$Source$
- *	$Author: chipx86 $
+ *	$Author: thekingant $
  *
  *	Copyright (c) 1987,1988,1991 by the Massachusetts Institute of
  *	Technology.
@@ -14,13 +14,32 @@
 /* $Header$ */
 
 #include "internal.h"
+#ifdef WIN32
+#include <winsock2.h>
+
+#ifndef ZEPHYR_USES_KERBEROS
+   int gettimeofday(struct timeval* p, struct timezone* tz ){
+     union {
+       long long ns100; /*time since 1 Jan 1601 in 100ns units */
+       FILETIME ft;
+     } _now;
+
+     GetSystemTimeAsFileTime( &(_now.ft) );
+     p->tv_usec=(long)((_now.ns100 / 10LL) % 1000000LL );
+     p->tv_sec= (long)((_now.ns100-(116444736000000000LL))/10000000LL);
+     return 0;
+   }
+#endif 
+
+#else
 #include <arpa/inet.h>
 #include <sys/socket.h>
 #include <utmp.h>
+#endif
 
 #ifndef lint
 static const char rcsid_Zinternal_c[] =
-  "$Id: Zinternal.c 9554 2004-04-24 09:02:28Z chipx86 $";
+  "$Id: Zinternal.c 12553 2005-04-25 01:53:01Z thekingant $";
 static const char copyright[] =
   "Copyright (c) 1987,1988,1991 by the Massachusetts Institute of Technology.";
 #endif
--- a/src/protocols/zephyr/internal.h	Mon Apr 25 00:31:24 2005 +0000
+++ b/src/protocols/zephyr/internal.h	Mon Apr 25 01:53:01 2005 +0000
@@ -1,10 +1,31 @@
 
 #ifndef __INTERNAL_H__
 #define __INTERNAL_H__
+#if 0
+struct timezone {
+	int tz_minuteswest;
+	int tz_dsttime;
+};
+#endif
 
 #include <sysdep.h>
-#include <zephyr/zephyr.h>
+
+#include <zephyr.h>
+#ifndef WIN32
 #include <netdb.h>
+#endif
+
+
+
+#ifdef WIN32
+
+#ifndef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN 512
+#endif
+
+#define ETIMEDOUT WSAETIMEDOUT
+#define EADDRINUSE WSAEADDRINUSE
+#endif
 
 #ifdef ZEPHYR_USES_HESIOD
 #include <hesiod.h>
--- a/src/protocols/zephyr/sysdep.h	Mon Apr 25 00:31:24 2005 +0000
+++ b/src/protocols/zephyr/sysdep.h	Mon Apr 25 01:53:01 2005 +0000
@@ -4,7 +4,7 @@
  *	Created by:	Greg Hudson
  *
  *	$Source$
- *	$Author: warmenhoven $
+ *	$Author: thekingant $
  *	$Zephyr: /mit/zephyr/src/include/zephyr/RCS/zephyr_conf.h,v 1.8 90/12/21 17:40:40 raeburn Exp $
  *
  *	Copyright (c) 1988,1991 by the Massachusetts Institute of Technology.
@@ -21,7 +21,10 @@
 #include <ctype.h>
 #include <time.h>
 #include <signal.h>
+#ifndef WIN32
 #include <syslog.h>
+#endif
+
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/param.h>
@@ -163,15 +166,21 @@
 /* Kerberos compatibility. */
 #ifdef ZEPHYR_USES_KERBEROS
 # include <krb.h>
+#ifdef WIN32
+
+#else
 # include <krb_err.h>
+#endif /* WIN32 */
 # include <des.h>
+#ifndef WIN32
 # ifndef HAVE_KRB_GET_ERR_TEXT
 #  define krb_get_err_text(n)	krb_err_txt[n]
 # endif
+#endif /* WIN32 */
 # ifndef HAVE_KRB_LOG
 #  define krb_log		log
 # endif
-#endif
+#endif /* ZEPHYR_USES_KERBEROS */
 
 #ifdef HAVE_SYS_UIO_H
 # include <sys/uio.h>
--- a/src/protocols/zephyr/zephyr.c	Mon Apr 25 00:31:24 2005 +0000
+++ b/src/protocols/zephyr/zephyr.c	Mon Apr 25 01:53:01 2005 +0000
@@ -143,6 +143,9 @@
 					return;\
 				}
 
+#ifdef WIN32
+extern const char *username;
+#endif
 
 Code_t zephyr_subscribe_to(zephyr_account* zephyr, char* class, char *instance, char *recipient, char* galaxy) {
 
@@ -203,16 +206,16 @@
 /* just for debugging */
 static void handle_unknown(ZNotice_t notice)
 {
-	gaim_debug(GAIM_DEBUG_MISC, "zephyr","z_packet: %s\n", notice.z_packet);
-	gaim_debug(GAIM_DEBUG_MISC, "zephyr","z_version: %s\n", notice.z_version);
-	gaim_debug(GAIM_DEBUG_MISC, "zephyr","z_kind: %d\n", (int)(notice.z_kind));
-	gaim_debug(GAIM_DEBUG_MISC, "zephyr","z_class: %s\n", notice.z_class);
-	gaim_debug(GAIM_DEBUG_MISC, "zephyr","z_class_inst: %s\n", notice.z_class_inst);
-	gaim_debug(GAIM_DEBUG_MISC, "zephyr","z_opcode: %s\n", notice.z_opcode);
-	gaim_debug(GAIM_DEBUG_MISC, "zephyr","z_sender: %s\n", notice.z_sender);
-	gaim_debug(GAIM_DEBUG_MISC, "zephyr","z_recipient: %s\n", notice.z_recipient);
-	gaim_debug(GAIM_DEBUG_MISC, "zephyr","z_message: %s\n", notice.z_message);
-	gaim_debug(GAIM_DEBUG_MISC, "zephyr","z_message_len: %d\n", notice.z_message_len);
+	gaim_debug_error("zephyr","z_packet: %s\n", notice.z_packet);
+	gaim_debug_error("zephyr","z_version: %s\n", notice.z_version);
+	gaim_debug_error("zephyr","z_kind: %d\n", (int)(notice.z_kind));
+	gaim_debug_error("zephyr","z_class: %s\n", notice.z_class);
+	gaim_debug_error("zephyr","z_class_inst: %s\n", notice.z_class_inst);
+	gaim_debug_error("zephyr","z_opcode: %s\n", notice.z_opcode);
+	gaim_debug_error("zephyr","z_sender: %s\n", notice.z_sender);
+	gaim_debug_error("zephyr","z_recipient: %s\n", notice.z_recipient);
+	gaim_debug_error("zephyr","z_message: %s\n", notice.z_message);
+	gaim_debug_error("zephyr","z_message_len: %d\n", notice.z_message_len);
 }
 
 
@@ -325,7 +328,7 @@
 	} else {
 		utf8 = g_convert(string, len, "UTF-8", zephyr->encoding, NULL, NULL, &err);
 		if (err) {
-			gaim_debug(GAIM_DEBUG_ERROR, "zephyr", "recv conversion error: %s\n", err->message);
+			gaim_debug_error("zephyr", "recv conversion error: %s\n", err->message);
 			utf8 = g_strdup(_("(There was an error converting this message.	 Check the 'Encoding' option in the Account Editor)"));
 			g_error_free(err);
 		}
@@ -846,7 +849,7 @@
 			send_inst = g_strdup_printf("%s %s",sendertmp,notice.z_class_inst);					
 			send_inst_utf8 = zephyr_recv_convert(gc,send_inst, strlen(send_inst));
 			if (!send_inst_utf8) {
-				gaim_debug(GAIM_DEBUG_ERROR, "zephyr","send_inst %s became null\n", send_inst);
+				gaim_debug_error("zephyr","send_inst %s became null\n", send_inst);
 				send_inst_utf8 = "malformed instance";
 			}
 
@@ -1196,6 +1199,46 @@
 	return TRUE;
 }
 
+#ifdef WIN32
+
+static gint check_loc(gpointer_data)
+{
+        GaimBlistNode *gnode, *cnode, *bnode;
+        ZLocations_t locations;
+        int numlocs;
+        int one = 1;
+
+	for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) {
+		if (!GAIM_BLIST_NODE_IS_GROUP(gnode))
+			continue;
+		for (cnode = gnode->child; cnode; cnode = cnode->next) {
+			if (!GAIM_BLIST_NODE_IS_CONTACT(cnode))
+				continue;
+			for (bnode = cnode->child; bnode; bnode = bnode->next) {
+				GaimBuddy *b = (GaimBuddy *) bnode;
+
+				if (!GAIM_BLIST_NODE_IS_BUDDY(bnode))
+					continue;
+				if (b->account->gc == zgc) {
+					char *chk;
+                                        chk = local_zephyr_normalize(b->name);
+                                        ZLocateUser(chk,&numlocs, ZAUTH);
+                                        if (numlocs) {
+                                                int i;
+                                                for(i=0;i<numlocs;i++) {
+                                                        ZGetLocations(&locations,&one);
+                                                        serv_got_update(zgc,b->name,1,0,0,0,0);
+                                                }
+                                        }
+                                }
+                        }
+                }
+        }
+        return TRUE;
+}
+
+#else
+
 static gint check_loc(gpointer data)
 {
 	GaimBlistNode *gnode, *cnode, *bnode;
@@ -1261,6 +1304,8 @@
 	return TRUE;
 }
 
+#endif /* WIN32 */
+
 static char *get_exposure_level()
 {
 	/* XXX add real error reporting */
@@ -1297,14 +1342,14 @@
 	struct hostent *hent;
 	
 	if (gethostname(zephyr->ourhost, sizeof(zephyr->ourhost)) == -1) {
-		gaim_debug(GAIM_DEBUG_ERROR, "zephyr", "unable to retrieve hostname, %%host%% and %%canon%% will be wrong in subscriptions and have been set to unknown\n");
+		gaim_debug_error("zephyr", "unable to retrieve hostname, %%host%% and %%canon%% will be wrong in subscriptions and have been set to unknown\n");
 		g_strlcpy(zephyr->ourhost, "unknown", sizeof(zephyr->ourhost));
 		g_strlcpy(zephyr->ourhostcanon, "unknown", sizeof(zephyr->ourhostcanon));
 		return;
 	}
 	
 	if (!(hent = gethostbyname(zephyr->ourhost))) {
-		gaim_debug(GAIM_DEBUG_ERROR,"zephyr", "unable to resolve hostname, %%canon%% will be wrong in subscriptions.and has been set to the value of %%host%%, %s\n",zephyr->ourhost);
+		gaim_debug_error("zephyr", "unable to resolve hostname, %%canon%% will be wrong in subscriptions.and has been set to the value of %%host%%, %s\n",zephyr->ourhost);
 		g_strlcpy(zephyr->ourhostcanon, zephyr->ourhost, sizeof(zephyr->ourhostcanon));
 		return;
 	}
@@ -1395,7 +1440,7 @@
 
 					if (zephyr_subscribe_to(zephyr,z_class, z_instance, recip,z_galaxy) != ZERR_NONE) {
 
-						gaim_debug(GAIM_DEBUG_ERROR, "zephyr", "Couldn't subscribe to %s, %s, %s\n", z_class,z_instance,recip);
+						gaim_debug_error("zephyr", "Couldn't subscribe to %s, %s, %s\n", z_class,z_instance,recip);
 					}
 
 					zephyr->subscrips = g_slist_append(zephyr->subscrips, new_triple(zephyr,z_class,z_instance,recip));
@@ -1474,6 +1519,9 @@
 	read_zsubs = gaim_account_get_bool(gc->account,"read_zsubs",TRUE);
 	exposure = (gchar *)gaim_account_get_string(gc->account, "exposure_level", EXPOSE_REALMVIS); 
 
+#ifdef WIN32
+	username = gaim_account_get_username(account);
+#endif
 	gc->flags |= GAIM_CONNECTION_HTML | GAIM_CONNECTION_NO_BGCOLOR | GAIM_CONNECTION_NO_URLDESC;
 	gc->proto_data = zephyr=g_new0(zephyr_account,1); 
 
@@ -2105,7 +2153,7 @@
 static const char *zephyr_normalize(const GaimAccount * account, const char *orig)
 {
 	/* returns the string you gave it. Maybe this function shouldn't be here */
-	char * buf = g_malloc0(80);
+	static char buf[80];
 	/*	gaim_debug_error("zephyr","entering zephyr_normalize\n"); */
 
 	if (!g_ascii_strcasecmp(orig, "")) {
@@ -2691,19 +2739,19 @@
 		title = g_strdup_printf("Server subscriptions for %s", zephyr->username);
 		
 		if (zephyr->port == 0) {
-			gaim_debug(GAIM_DEBUG_ERROR,"zephyr", "error while retrieving port");
+			gaim_debug_error("zephyr", "error while retrieving port");
 			return;
 		} 
 		if ((retval = ZRetrieveSubscriptions(zephyr->port,&nsubs)) != ZERR_NONE) {
 			/* XXX better error handling */
-			gaim_debug(GAIM_DEBUG_ERROR,"zephyr", "error while retrieving subscriptions from server");
+			gaim_debug_error("zephyr", "error while retrieving subscriptions from server");
 			return;
 		}
 		for(i=0;i<nsubs;i++) {
 			one = 1;
 			if ((retval = ZGetSubscriptions(&subs,&one)) != ZERR_NONE) {
 				/* XXX better error handling */
-				gaim_debug(GAIM_DEBUG_ERROR,"zephyr", "error while retrieving individual subscription");
+				gaim_debug_error("zephyr", "error while retrieving individual subscription");
 				return;
 			}
 			g_string_append_printf(subout, "Class %s Instance %s Recipient %s<br>",
--- a/src/protocols/zephyr/zephyr.h	Mon Apr 25 00:31:24 2005 +0000
+++ b/src/protocols/zephyr/zephyr.h	Mon Apr 25 01:53:01 2005 +0000
@@ -5,7 +5,7 @@
  *
  *	$Source$
  *	$Author: thekingant $
- *	$Id: zephyr.h 8088 2003-11-11 07:08:13Z thekingant $
+ *	$Id: zephyr.h 12553 2005-04-25 01:53:01Z thekingant $
  *
  *	Copyright (c) 1987,1988,1991 by the Massachusetts Institute of
  *	Technology. For copying and distribution information, see the
@@ -20,11 +20,13 @@
 #include <sys/types.h>
 #include <sys/time.h>
 
-#include <zephyr/zephyr_err.h>
+#include <zephyr_err.h>
 
 #ifndef IPPROTO_MAX	/* Make sure not already included */
+#ifndef WIN32
 #include <netinet/in.h>
 #endif
+#endif
 
 /* Use __STDC__ to guess whether we can use stdarg, prototypes, and const.
  * This is a public header file, so autoconf can't help us here. */
@@ -37,6 +39,16 @@
 # define ZCONST
 #endif
 
+#ifdef WIN32
+/* this really should be uint32_t */
+/*typedef unsigned int in_addr_t;
+struct in_addr
+{
+  in_addr_t s_addr;
+}; */
+#include <winsock2.h>
+#endif
+
 /* Service names */
 #define	HM_SVCNAME		"zephyr-hm"
 #define HM_SRV_SVCNAME		"zephyr-hm-srv"
@@ -243,7 +255,7 @@
 #define ZERR_NONE		0
 
 /* Hostmanager wait time (in secs) */
-#define HM_TIMEOUT		10
+#define HM_TIMEOUT		1
 
 /* Server wait time (in secs) */
 #define	SRV_TIMEOUT		30