WINMISC = misc version winstore settings tree234 winnet proxy cmdline
+ windefs winmisc
UXMISC = misc version uxstore settings tree234 uxnet proxy cmdline
-MACMISC = misc version macstore settings tree234 mtcpnet proxy
+MACMISC = misc version macstore settings tree234 macnet mtcpnet proxy
# Character set library, for use in pterm.
CHARSET = sbcsdat slookup sbcs utf8 toucs fromucs xenc mimeenc macenc
-/* $Id: mac.c,v 1.23 2003/01/10 18:33:35 simon Exp $ */
+/* $Id: mac.c,v 1.24 2003/01/11 19:43:59 ben Exp $ */
/*
* Copyright (c) 1999 Ben Harris
* All rights reserved.
mac_gestalts.uncvattr = (*ti)->tecUnicodeConverterFeatures;
DisposeHandle((Handle)ti);
}
-
- mactcp_init();
+ /* MacTCP? */
+ if (Gestalt(FOUR_CHAR_CODE('mtcp'), &mac_gestalts.mtcpvers) != noErr)
+ mac_gestalts.mtcpvers = 0;
+ if (mac_gestalts.mtcpvers > 0) {
+ if (mactcp_init() != noErr)
+ mac_gestalts.mtcpvers = 0;
+ }
/* We've been tested with the Appearance Manager */
if (mac_gestalts.apprvers != 0)
mac_adjustcursor(cursrgn);
if (gotevent)
mac_event(&event);
- mactcp_poll();
+ if (mac_gestalts.mtcpvers != 0)
+ mactcp_poll();
mac_pollterm();
}
DisposeRgn(cursrgn);
if (mac_gestalts.encvvers != 0)
TerminateUnicodeConverter();
#endif
- mactcp_shutdown();
+ if (mac_gestalts.mtcpvers != 0)
+ mactcp_shutdown();
exit(status);
}
long windattr;
long encvvers; /* TEC version (from TECGetInfo()) */
long uncvattr; /* Unicode Converter attributes (frem TECGetInfo()) */
+ long mtcpvers;
};
extern struct mac_gestalts mac_gestalts;
extern OSErr mactcp_init(void);
extern void mactcp_shutdown(void);
extern void mactcp_poll(void);
+extern SockAddr mactcp_namelookup(char *, char **);
+extern SockAddr mactcp_nonamelookup(char *);
+extern void mactcp_getaddr(SockAddr, char *, int);
+extern int mactcp_hostname_is_local(char *);
+extern int mactcp_address_is_local(SockAddr);
+extern int mactcp_addrtype(SockAddr);
+extern void mactcp_addrcopy(SockAddr, char *);
+extern void mactcp_addr_free(SockAddr);
+extern Socket mactcp_register(void *, Plug);
+extern Socket mactcp_new(SockAddr addr, int, int, int, int, Plug);
+extern Socket mactcp_newlistener(char *, int, Plug, int);
+extern char *mactcp_addr_error(SockAddr);
#endif
--- /dev/null
+#include "putty.h"
+#include "network.h"
+#include "mac.h"
+
+/*
+ * Network functions exported to the world. These choose whether to call
+ * MacTCP or OpenTransport and behave accordingly.
+ */
+SockAddr sk_namelookup(char *host, char **canonicalname)
+{
+
+ if (mac_gestalts.mtcpvers != 0)
+ return mactcp_namelookup(host, canonicalname);
+ else
+ return NULL;
+}
+
+SockAddr sk_nonamelookup(char *host)
+{
+
+ if (mac_gestalts.mtcpvers != 0)
+ return mactcp_nonamelookup(host);
+ else
+ return NULL;
+}
+
+void sk_getaddr(SockAddr addr, char *buf, int buflen)
+{
+
+ if (mac_gestalts.mtcpvers != 0)
+ mactcp_getaddr(addr, buf, buflen);
+ else
+ *buf = '\0';
+}
+
+int sk_hostname_is_local(char *name)
+{
+
+ if (mac_gestalts.mtcpvers != 0)
+ return mactcp_hostname_is_local(name);
+ else
+ return 0;
+}
+
+int sk_address_is_local(SockAddr addr)
+{
+
+ if (mac_gestalts.mtcpvers != 0)
+ return mactcp_address_is_local(addr);
+ else
+ return 0;
+}
+
+int sk_addrtype(SockAddr addr)
+{
+
+ if (mac_gestalts.mtcpvers != 0)
+ return mactcp_addrtype(addr);
+ else
+ return 0;
+}
+
+void sk_addrcopy(SockAddr addr, char *buf)
+{
+
+ if (mac_gestalts.mtcpvers != 0)
+ mactcp_addrcopy(addr, buf);
+}
+
+void sk_addr_free(SockAddr addr)
+{
+
+ if (mac_gestalts.mtcpvers != 0)
+ mactcp_addr_free(addr);
+}
+
+Socket sk_register(void *sock, Plug plug)
+{
+
+ if (mac_gestalts.mtcpvers != 0)
+ return mactcp_register(sock, plug);
+ else
+ return NULL;
+}
+
+Socket sk_new(SockAddr addr, int port, int privport, int oobinline,
+ int nodelay, Plug plug)
+{
+
+ if (mac_gestalts.mtcpvers != 0)
+ return mactcp_new(addr, port, privport, oobinline, nodelay, plug);
+ else
+ return NULL;
+}
+
+Socket sk_newlistener(char *srcaddr, int port, Plug plug, int local_host_only)
+{
+
+ if (mac_gestalts.mtcpvers != 0)
+ return mactcp_newlistener(srcaddr, port, plug, local_host_only);
+ else
+ return NULL;
+}
+
+char *sk_addr_error(SockAddr addr)
+{
+
+ if (mac_gestalts.mtcpvers != 0)
+ return mactcp_addr_error(addr);
+ else
+ return "No TCP/IP stack installed";
+}
+
+/*
+ * Local Variables:
+ * c-file-style: "simon"
+ * End:
+ */
+
static ResultUPP mactcp_lookupdone_upp;
-SockAddr sk_namelookup(char *host, char **canonicalname)
+SockAddr mactcp_namelookup(char *host, char **canonicalname)
{
SockAddr ret = smalloc(sizeof(struct SockAddr_tag));
OSErr err;
*donep = TRUE;
}
-SockAddr sk_nonamelookup(char *host)
+SockAddr mactcp_nonamelookup(char *host)
{
SockAddr ret = smalloc(sizeof(struct SockAddr_tag));
return ret;
}
-void sk_getaddr(SockAddr addr, char *buf, int buflen)
+void mactcp_getaddr(SockAddr addr, char *buf, int buflen)
{
char mybuf[16];
OSErr err;
/* I think "local" here really means "loopback" */
-int sk_hostname_is_local(char *name)
+int mactcp_hostname_is_local(char *name)
{
return !strcmp(name, "localhost");
}
-int sk_address_is_local(SockAddr addr)
+int mactcp_address_is_local(SockAddr addr)
{
int i;
return FALSE;
}
-int sk_addrtype(SockAddr addr)
+int mactcp_addrtype(SockAddr addr)
{
if (addr->resolved)
return ADDRTYPE_NAME;
}
-void sk_addrcopy(SockAddr addr, char *buf)
+void mactcp_addrcopy(SockAddr addr, char *buf)
{
/* XXX only return first address */
memcpy(buf, &addr->hostinfo.addr[0], 4);
}
-void sk_addr_free(SockAddr addr)
+void mactcp_addr_free(SockAddr addr)
{
sfree(addr);
static void mactcp_flush(Socket s)
{
- fatalbox("sk_tcp_flush");
+ fatalbox("mactcp_flush");
}
-Socket sk_register(void *sock, Plug plug)
+Socket mactcp_register(void *sock, Plug plug)
{
- fatalbox("sk_register");
+ fatalbox("mactcp_register");
}
static TCPNotifyUPP mactcp_asr_upp;
-Socket sk_new(SockAddr addr, int port, int privport, int oobinline,
+Socket mactcp_new(SockAddr addr, int port, int privport, int oobinline,
int nodelay, Plug plug)
{
static struct socket_function_table fn_table = {
return (Socket)ret;
}
-Socket sk_newlistener(char *srcaddr, int port, Plug plug, int local_host_only)
+Socket mactcp_newlistener(char *srcaddr, int port, Plug plug,
+ int local_host_only)
{
- fatalbox("sk_newlistener");
+ fatalbox("mactcp_newlistener");
}
static void mactcp_close(Socket sock)
}
/*
- * Special error values are returned from sk_namelookup and sk_new
- * if there's a problem. These functions extract an error message,
- * or return NULL if there's no problem.
+ * Special error values are returned from mactcp_namelookup and
+ * mactcp_new if there's a problem. These functions extract an error
+ * message, or return NULL if there's no problem.
*/
-char *sk_addr_error(SockAddr addr)
+char *mactcp_addr_error(SockAddr addr)
{
static char buf[64];