From 6993486b4394e4d3f65b88d595a79e8c79820b0e Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Fri, 24 Jan 2003 00:25:33 +0000 Subject: [PATCH] Redesign the macnet.c infrastructure, largely so as to avoid using Gestalt(), which didn't detect the MacTCP emulation in Owen's Open Transport. [originally from svn r2703] --- mac/mac.c | 24 +------- mac/mac.h | 4 +- mac/macnet.c | 158 ++++++++++++++++++++++++++++----------------------- 3 files changed, 93 insertions(+), 93 deletions(-) diff --git a/mac/mac.c b/mac/mac.c index 3ae34aa1..76d202af 100644 --- a/mac/mac.c +++ b/mac/mac.c @@ -1,4 +1,4 @@ -/* $Id: mac.c,v 1.35 2003/01/23 22:57:43 ben Exp $ */ +/* $Id: mac.c,v 1.36 2003/01/24 00:25:33 ben Exp $ */ /* * Copyright (c) 1999 Ben Harris * All rights reserved. @@ -172,22 +172,7 @@ static void mac_startup(void) { DisposeHandle((Handle)ti); } -#if 0 /* OpenTransport? */ - if (Gestalt(gestaltOpenTpt, &mac_gestalts.otptattr) != noErr || - (mac_gestalts.otptattr & gestaltOpenTptTCPPresentMask) == 0 || - ot_init() != noErr) -#endif - mac_gestalts.otptattr = 0; - if (mac_gestalts.otptattr == 0) { - /* 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; - } - } else - mac_gestalts.mtcpvers = 0; + sk_init(); /* We've been tested with the Appearance Manager */ if (mac_gestalts.apprvers != 0) @@ -254,10 +239,7 @@ static void mac_eventloop(void) { mac_event(&event); if (borednow) cleanup_exit(0); - if (mac_gestalts.mtcpvers != 0) - mactcp_poll(); - if (mac_gestalts.otptattr != 0) - ot_poll(); + sk_poll(); mac_pollterm(); } DisposeRgn(cursrgn); diff --git a/mac/mac.h b/mac/mac.h index 42d54c61..5e29c50f 100644 --- a/mac/mac.h +++ b/mac/mac.h @@ -28,8 +28,6 @@ struct mac_gestalts { long windattr; long encvvers; /* TEC version (from TECGetInfo()) */ long uncvattr; /* Unicode Converter attributes (frem TECGetInfo()) */ - long mtcpvers; - long otptattr; }; extern struct mac_gestalts mac_gestalts; @@ -112,6 +110,8 @@ extern void *open_settings_r_fsp(FSSpec *); extern void *open_settings_w_fsp(FSSpec *); /* from macucs.c */ extern void init_ucs(Session *); +/* from macnet.c */ +extern void sk_poll(void); /* from mtcpnet.c */ extern OSErr mactcp_init(void); extern void mactcp_cleanup(void); diff --git a/mac/macnet.c b/mac/macnet.c index 0e21fc81..34d68852 100644 --- a/mac/macnet.c +++ b/mac/macnet.c @@ -2,6 +2,52 @@ #include "network.h" #include "mac.h" +struct macnet_stack { + SockAddr (*namelookup)(char const *, char **); + SockAddr (*nonamelookup)(char const *); + void (*getaddr)(SockAddr, char *, int); + int (*hostname_is_local)(char *); + int (*address_is_local)(SockAddr); + int (*addrtype)(SockAddr); + void (*addrcopy)(SockAddr, char *); + void (*addr_free)(SockAddr); + Socket (*skregister)(void *, Plug); /* "register" is a reserved word */ + Socket (*new)(SockAddr, int, int, int, int, Plug); + Socket (*newlistener)(char *, int, Plug, int); + char *(*addr_error)(SockAddr); + void (*poll)(void); + void (*cleanup)(void); +}; + +static struct macnet_stack *stack; + +static struct macnet_stack ot = { + ot_namelookup, ot_nonamelookup, ot_getaddr, ot_hostname_is_local, + ot_address_is_local, ot_addrtype, ot_addrcopy, ot_addr_free, + ot_register, ot_new, ot_newlistener, ot_addr_error, ot_poll, ot_cleanup +}; + +static struct macnet_stack mactcp = { + mactcp_namelookup, mactcp_nonamelookup, mactcp_getaddr, + mactcp_hostname_is_local, mactcp_address_is_local, mactcp_addrtype, + mactcp_addrcopy, mactcp_addr_free, mactcp_register, mactcp_new, + mactcp_newlistener, mactcp_addr_error, mactcp_poll, mactcp_cleanup +}; + +void sk_init(void) +{ + +#if 0 + if (ot_init() == noErr) + stack = &ot; + else +#endif + if (mactcp_init() == noErr) + stack = &mactcp; + else + stack = NULL; +} + /* * Network functions exported to the world. These choose whether to call * MacTCP or OpenTransport and behave accordingly. @@ -9,32 +55,24 @@ SockAddr sk_namelookup(char const *host, char **canonicalname) { - if (mac_gestalts.otptattr != 0) - return ot_namelookup(host, canonicalname); - else if (mac_gestalts.mtcpvers != 0) - return mactcp_namelookup(host, canonicalname); - else - return NULL; + if (stack != NULL) + return stack->namelookup(host, canonicalname); + return NULL; } SockAddr sk_nonamelookup(char const *host) { - if (mac_gestalts.otptattr != 0) - return ot_nonamelookup(host); - else if (mac_gestalts.mtcpvers != 0) - return mactcp_nonamelookup(host); - else - return NULL; + if (stack != NULL) + return stack->nonamelookup(host); + return NULL; } void sk_getaddr(SockAddr addr, char *buf, int buflen) { - if (mac_gestalts.otptattr != 0) - ot_getaddr(addr, buf, buflen); - else if (mac_gestalts.mtcpvers != 0) - mactcp_getaddr(addr, buf, buflen); + if (stack != NULL) + stack->getaddr(addr, buf, buflen); else *buf = '\0'; } @@ -42,106 +80,86 @@ void sk_getaddr(SockAddr addr, char *buf, int buflen) int sk_hostname_is_local(char *name) { - if (mac_gestalts.otptattr != 0) - return ot_hostname_is_local(name); - else if (mac_gestalts.mtcpvers != 0) - return mactcp_hostname_is_local(name); - else - return 0; + if (stack != NULL) + return stack->hostname_is_local(name); + return 0; } int sk_address_is_local(SockAddr addr) { - if (mac_gestalts.otptattr != 0) - return ot_address_is_local(addr); - else if (mac_gestalts.mtcpvers != 0) - return mactcp_address_is_local(addr); - else - return 0; + if (stack != NULL) + return stack->address_is_local(addr); + return 0; } int sk_addrtype(SockAddr addr) { - if (mac_gestalts.otptattr != 0) - return ot_addrtype(addr); - else if (mac_gestalts.mtcpvers != 0) - return mactcp_addrtype(addr); - else - return 0; + if (stack != NULL) + return stack->addrtype(addr); + return 0; } void sk_addrcopy(SockAddr addr, char *buf) { - if (mac_gestalts.otptattr != 0) - ot_addrcopy(addr, buf); - else if (mac_gestalts.mtcpvers != 0) - mactcp_addrcopy(addr, buf); + if (stack != NULL) + stack->addrcopy(addr, buf); } void sk_addr_free(SockAddr addr) { - if (mac_gestalts.otptattr != 0) - ot_addr_free(addr); - else if (mac_gestalts.mtcpvers != 0) - mactcp_addr_free(addr); + if (stack != NULL) + stack->addr_free(addr); } Socket sk_register(void *sock, Plug plug) { - if (mac_gestalts.otptattr != 0) - return ot_register(sock, plug); - else if (mac_gestalts.mtcpvers != 0) - return mactcp_register(sock, plug); - else - return NULL; + if (stack != NULL) + return stack->skregister(sock, plug); + return NULL; } Socket sk_new(SockAddr addr, int port, int privport, int oobinline, int nodelay, Plug plug) { - if (mac_gestalts.otptattr != 0) - return ot_new(addr, port, privport, oobinline, nodelay, plug); - else if (mac_gestalts.mtcpvers != 0) - return mactcp_new(addr, port, privport, oobinline, nodelay, plug); - else - return NULL; + if (stack != NULL) + return stack->new(addr, port, privport, oobinline, nodelay, plug); + return NULL; } Socket sk_newlistener(char *srcaddr, int port, Plug plug, int local_host_only) { - if (mac_gestalts.otptattr != 0) - return ot_newlistener(srcaddr, port, plug, local_host_only); - else if (mac_gestalts.mtcpvers != 0) - return mactcp_newlistener(srcaddr, port, plug, local_host_only); - else - return NULL; + if (stack != NULL) + return stack->newlistener(srcaddr, port, plug, local_host_only); + return NULL; } char *sk_addr_error(SockAddr addr) { - if (mac_gestalts.otptattr != 0) - return ot_addr_error(addr); - else if (mac_gestalts.mtcpvers != 0) - return mactcp_addr_error(addr); - else - return "No TCP/IP stack installed"; + if (stack != NULL) + return stack->addr_error(addr); + return "No TCP/IP stack installed"; +} + +void sk_poll(void) +{ + + if (stack != NULL) + stack->poll(); } void sk_cleanup(void) { - if (mac_gestalts.otptattr != 0) - ot_cleanup(); - else if (mac_gestalts.mtcpvers != 0) - mactcp_cleanup(); + if (stack != NULL) + stack->cleanup(); } /*