macnet.c
来自「大名鼎鼎的远程登录软件putty的Symbian版源码」· C语言 代码 · 共 184 行
C
184 行
#include "putty.h"#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, 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};#if !TARGET_API_MAC_CARBONstatic 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};#endifvoid sk_init(void){#if 0 if (ot_init() == noErr) stack = &ot; else#endif#if !TARGET_API_MAC_CARBON if (mactcp_init() == noErr) stack = &mactcp; else#endif stack = NULL;}/* * Network functions exported to the world. These choose whether to call * MacTCP or OpenTransport and behave accordingly. */SockAddr sk_namelookup(char const *host, char **canonicalname){ if (stack != NULL) return stack->namelookup(host, canonicalname); return NULL;}SockAddr sk_nonamelookup(char const *host){ if (stack != NULL) return stack->nonamelookup(host); return NULL;}void sk_getaddr(SockAddr addr, char *buf, int buflen){ if (stack != NULL) stack->getaddr(addr, buf, buflen); else *buf = '\0';}int sk_hostname_is_local(char *name){ if (stack != NULL) return stack->hostname_is_local(name); return 0;}int sk_address_is_local(SockAddr addr){ if (stack != NULL) return stack->address_is_local(addr); return 0;}int sk_addrtype(SockAddr addr){ if (stack != NULL) return stack->addrtype(addr); return 0;}void sk_addrcopy(SockAddr addr, char *buf){ if (stack != NULL) stack->addrcopy(addr, buf);}void sk_addr_free(SockAddr addr){ if (stack != NULL) stack->addr_free(addr);}Socket sk_register(void *sock, Plug plug){ if (stack != NULL) return stack->skregister(sock, plug); return NULL;}Socket sk_new(SockAddr addr, int port, int privport, int oobinline, int nodelay, int keepalive, Plug plug){ if (stack != NULL) return stack->new(addr, port, privport, oobinline, nodelay, keepalive, plug); return NULL;}Socket sk_newlistener(char *srcaddr, int port, Plug plug, int local_host_only){ if (stack != NULL) return stack->newlistener(srcaddr, port, plug, local_host_only); return NULL;}const char *sk_addr_error(SockAddr addr){ 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 (stack != NULL) stack->cleanup();}/* We should use Internet Config here. */int net_service_lookup(char *service){ return 0;}/* * Local Variables: * c-file-style: "simon" * End: */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?