* mtcpnet.c - MacTCP interface
*/
+#if !TARGET_API_MAC_CARBON
+
#include <MacTypes.h>
#include <Devices.h>
#include <Endian.h>
typedef STACK_UPP_TYPE(AddrToStrProcPtr) AddrToStrUPP;
enum { uppAddrToStrProcInfo = kCStackBased
| RESULT_SIZE(SIZE_CODE(sizeof(OSErr)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned long)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(char *)))
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(UInt32)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(unsigned long)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(char *)))
};
#define InvokeAddrToStrUPP(selector, addr, addrStr, userUPP) \
CALL_THREE_PARAMETER_UPP((userUPP), uppAddrToStrProcInfo, (selector),\
static int mactcp_write_oob(Socket, char const*, int);
static void mactcp_set_private_ptr(Socket, void *);
static void *mactcp_get_private_ptr(Socket);
-static char *mactcp_socket_error(Socket);
+static const char *mactcp_socket_error(Socket);
static void mactcp_set_frozen(Socket, int);
static void mactcp_recv(Actual_Socket s, size_t len);
static ResultUPP mactcp_lookupdone_upp;
-SockAddr mactcp_namelookup(char *host, char **canonicalname)
+SockAddr mactcp_namelookup(char const *host, char **canonicalname)
{
- SockAddr ret = smalloc(sizeof(struct SockAddr_tag));
+ SockAddr ret = snew(struct SockAddr_tag);
OSErr err;
volatile int done = FALSE;
char *realhost;
+ int realhostlen;
/* Clear the structure. */
memset(ret, 0, sizeof(struct SockAddr_tag));
if (mactcp_lookupdone_upp == NULL)
mactcp_lookupdone_upp = NewResultUPP(&mactcp_lookupdone);
- err = StrToAddr(host, &ret->hostinfo, mactcp_lookupdone_upp,
+ /* Casting away const -- hope StrToAddr is sensible */
+ err = StrToAddr((char *)host, &ret->hostinfo, mactcp_lookupdone_upp,
(char *)&done);
/*
* PuTTY expects DNS lookups to be synchronous (see bug
continue;
ret->resolved = TRUE;
- if (ret->hostinfo.rtnCode == noErr)
+ if (ret->hostinfo.rtnCode == noErr) {
realhost = ret->hostinfo.cname;
- else
+ /* MacTCP puts trailing dots on canonical names. */
+ realhostlen = strlen(realhost);
+ if (realhost[realhostlen - 1] == '.')
+ realhost[realhostlen - 1] = '\0';
+ } else
realhost = "";
- *canonicalname = smalloc(1+strlen(realhost));
+ *canonicalname = snewn(1 + strlen(realhost), char);
strcpy(*canonicalname, realhost);
return ret;
}
*donep = TRUE;
}
-SockAddr mactcp_nonamelookup(char *host)
+SockAddr mactcp_nonamelookup(char const *host)
{
- SockAddr ret = smalloc(sizeof(struct SockAddr_tag));
+ SockAddr ret = snew(struct SockAddr_tag);
ret->resolved = FALSE;
ret->hostinfo.rtnCode = noErr;
static TCPNotifyUPP mactcp_asr_upp;
Socket mactcp_new(SockAddr addr, int port, int privport, int oobinline,
- int nodelay, Plug plug)
+ int nodelay, int keepalive, Plug plug)
{
static struct socket_function_table fn_table = {
mactcp_plug,
/*
* Create Socket structure.
*/
- ret = smalloc(sizeof(struct Socket_tag));
+ ret = snew(struct Socket_tag);
ret->s = 0;
ret->fn = &fn_table;
ret->err = noErr;
GetCurrentProcess(&mactcp.self);
pb.ioCRefNum = mactcp.refnum;
pb.csCode = TCPCreate;
- pb.csParam.create.rcvBuff = smalloc(buflen);
+ pb.csParam.create.rcvBuff = snewn(buflen, char);
pb.csParam.create.rcvBuffLen = buflen;
pb.csParam.create.notifyProc = mactcp_asr_upp;
pb.csParam.create.userDataPtr = (Ptr)ret;
ret->next->prev = &ret->next;
mactcp.socklist = ret;
+ sk_addr_free(addr); /* don't need this anymore */
+
return (Socket)ret;
}
Socket mactcp_newlistener(char *srcaddr, int port, Plug plug,
- int local_host_only)
+ int local_host_only, int address_family)
{
fatalbox("mactcp_newlistener");
}
}
-static char *mactcp_socket_error(Socket sock)
+static const char *mactcp_socket_error(Socket sock)
{
static char buf[64];
Actual_Socket s = (Actual_Socket) sock;
return noErr;
}
-/* MacTCP doesn't have a services database. */
-int net_service_lookup(char *service)
-{
-
- return 0;
-}
-
+#endif
/*
* Local Variables: