Colin's const-fixing Patch Of Death. Seems to build fine on Windows
[u/mdw/putty] / mac / macnet.c
CommitLineData
deed9e25 1#include "putty.h"
2#include "network.h"
3#include "mac.h"
4
f6fc0010 5struct macnet_stack {
6 SockAddr (*namelookup)(char const *, char **);
7 SockAddr (*nonamelookup)(char const *);
8 void (*getaddr)(SockAddr, char *, int);
9 int (*hostname_is_local)(char *);
10 int (*address_is_local)(SockAddr);
11 int (*addrtype)(SockAddr);
12 void (*addrcopy)(SockAddr, char *);
13 void (*addr_free)(SockAddr);
14 Socket (*skregister)(void *, Plug); /* "register" is a reserved word */
15 Socket (*new)(SockAddr, int, int, int, int, Plug);
16 Socket (*newlistener)(char *, int, Plug, int);
17 char *(*addr_error)(SockAddr);
18 void (*poll)(void);
19 void (*cleanup)(void);
20};
21
22static struct macnet_stack *stack;
23
24static struct macnet_stack ot = {
25 ot_namelookup, ot_nonamelookup, ot_getaddr, ot_hostname_is_local,
26 ot_address_is_local, ot_addrtype, ot_addrcopy, ot_addr_free,
27 ot_register, ot_new, ot_newlistener, ot_addr_error, ot_poll, ot_cleanup
28};
29
b2859f7a 30#if !TARGET_API_MAC_CARBON
f6fc0010 31static struct macnet_stack mactcp = {
32 mactcp_namelookup, mactcp_nonamelookup, mactcp_getaddr,
33 mactcp_hostname_is_local, mactcp_address_is_local, mactcp_addrtype,
34 mactcp_addrcopy, mactcp_addr_free, mactcp_register, mactcp_new,
35 mactcp_newlistener, mactcp_addr_error, mactcp_poll, mactcp_cleanup
36};
b2859f7a 37#endif
f6fc0010 38
39void sk_init(void)
40{
41
42#if 0
43 if (ot_init() == noErr)
44 stack = &ot;
45 else
46#endif
b2859f7a 47#if !TARGET_API_MAC_CARBON
f6fc0010 48 if (mactcp_init() == noErr)
49 stack = &mactcp;
50 else
b2859f7a 51#endif
f6fc0010 52 stack = NULL;
53}
54
deed9e25 55/*
56 * Network functions exported to the world. These choose whether to call
57 * MacTCP or OpenTransport and behave accordingly.
58 */
2e96d504 59SockAddr sk_namelookup(char const *host, char **canonicalname)
deed9e25 60{
61
f6fc0010 62 if (stack != NULL)
63 return stack->namelookup(host, canonicalname);
64 return NULL;
deed9e25 65}
66
2e96d504 67SockAddr sk_nonamelookup(char const *host)
deed9e25 68{
69
f6fc0010 70 if (stack != NULL)
71 return stack->nonamelookup(host);
72 return NULL;
deed9e25 73}
74
75void sk_getaddr(SockAddr addr, char *buf, int buflen)
76{
77
f6fc0010 78 if (stack != NULL)
79 stack->getaddr(addr, buf, buflen);
deed9e25 80 else
81 *buf = '\0';
82}
83
84int sk_hostname_is_local(char *name)
85{
86
f6fc0010 87 if (stack != NULL)
88 return stack->hostname_is_local(name);
89 return 0;
deed9e25 90}
91
92int sk_address_is_local(SockAddr addr)
93{
94
f6fc0010 95 if (stack != NULL)
96 return stack->address_is_local(addr);
97 return 0;
deed9e25 98}
99
100int sk_addrtype(SockAddr addr)
101{
102
f6fc0010 103 if (stack != NULL)
104 return stack->addrtype(addr);
105 return 0;
deed9e25 106}
107
108void sk_addrcopy(SockAddr addr, char *buf)
109{
110
f6fc0010 111 if (stack != NULL)
112 stack->addrcopy(addr, buf);
deed9e25 113}
114
115void sk_addr_free(SockAddr addr)
116{
117
f6fc0010 118 if (stack != NULL)
119 stack->addr_free(addr);
deed9e25 120}
121
122Socket sk_register(void *sock, Plug plug)
123{
124
f6fc0010 125 if (stack != NULL)
126 return stack->skregister(sock, plug);
127 return NULL;
deed9e25 128}
129
130Socket sk_new(SockAddr addr, int port, int privport, int oobinline,
131 int nodelay, Plug plug)
132{
133
f6fc0010 134 if (stack != NULL)
135 return stack->new(addr, port, privport, oobinline, nodelay, plug);
136 return NULL;
deed9e25 137}
138
139Socket sk_newlistener(char *srcaddr, int port, Plug plug, int local_host_only)
140{
141
f6fc0010 142 if (stack != NULL)
143 return stack->newlistener(srcaddr, port, plug, local_host_only);
144 return NULL;
deed9e25 145}
146
cbe2d68f 147const char *sk_addr_error(SockAddr addr)
deed9e25 148{
149
f6fc0010 150 if (stack != NULL)
151 return stack->addr_error(addr);
152 return "No TCP/IP stack installed";
153}
154
155void sk_poll(void)
156{
157
158 if (stack != NULL)
159 stack->poll();
deed9e25 160}
161
27a3458f 162void sk_cleanup(void)
163{
164
f6fc0010 165 if (stack != NULL)
166 stack->cleanup();
27a3458f 167}
168
ebb7ac45 169/* We should use Internet Config here. */
170int net_service_lookup(char *service)
171{
172
173 return 0;
174}
175
176
deed9e25 177/*
178 * Local Variables:
179 * c-file-style: "simon"
180 * End:
181 */
182