mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
5.0 KiB
161 lines
5.0 KiB
/*
|
|
Enhanced NCSA Mosaic from Spyglass
|
|
"Guitar"
|
|
|
|
Copyright 1994 Spyglass, Inc.
|
|
All Rights Reserved
|
|
|
|
Author(s):
|
|
Jim Seidman [email protected]
|
|
*/
|
|
|
|
#define SOCKET_MESSAGE (WM_USER+400)
|
|
#define TASK_MESSAGE (WM_USER+401)
|
|
|
|
#define MAX_ADDRESSES 8 /* Most addresses we'll recognize for a host */
|
|
|
|
struct MultiAddress {
|
|
short nCount; /* Number of addresses for host */
|
|
short nLastUsed; /* Last address used (0 through nCount-1) */
|
|
unsigned long aAddrs[MAX_ADDRESSES]; /* Actual addresses */
|
|
};
|
|
|
|
void Net_Init(void);
|
|
|
|
struct Params_Connect {
|
|
int socket;
|
|
SockA address;
|
|
int * pStatus; /* Where to put status return */
|
|
#ifdef UNIX
|
|
void *x_info; /* pointer to private struct bout X stuff */
|
|
#endif
|
|
#ifdef FEATURE_SOCKS_LOW_LEVEL
|
|
BOOL bUseSocksProxy; /* This item requires us to use the SOCKS proxy */
|
|
#endif
|
|
};
|
|
int Net_Connect_Async(struct Mwin *tw, int nState, void **ppInfo);
|
|
|
|
/* Connect to a site, using all the possible addresses. Note that
|
|
this function creates its own socket, so it doesn't need to be
|
|
preceeded by a Net_Socket call. If it fails, *pSocket = 0 */
|
|
struct Params_MultiConnect {
|
|
int * pSocket; /* Place to store socket id */
|
|
struct MultiAddress *pAddress;
|
|
unsigned short nPort;
|
|
int * pStatus; /* Where to put status return */
|
|
unsigned long * pWhere; /* Where to put actual address connected to - may be NULL */
|
|
|
|
/* Used internally */
|
|
#ifdef MAC
|
|
int ndx; /* Local socket array index */
|
|
#else
|
|
SockA soc_address;
|
|
#endif
|
|
short nFirst; /* First address tried */
|
|
short nCurrent; /* Current address we're trying */
|
|
int nTimeOut; /* Time to try each address */
|
|
#ifdef UNIX
|
|
void *x_info; /* pointer to private struct bout X stuff */
|
|
#endif
|
|
#ifdef FEATURE_SOCKS_LOW_LEVEL
|
|
BOOL bUseSocksProxy; /* This item requires us to use the SOCKS proxy */
|
|
#endif
|
|
};
|
|
int Net_MultiConnect_Async(struct Mwin *tw, int nState, void **ppInfo);
|
|
|
|
|
|
struct Params_Recv {
|
|
int socket;
|
|
#ifdef UNIX
|
|
char * pBuf;
|
|
#else
|
|
void * pBuf;
|
|
#endif
|
|
int nBufLen;
|
|
int * pStatus; /* Where to put status return */
|
|
#ifdef UNIX
|
|
void *x_info; /* pointer to private struct bout X stuff */
|
|
#endif
|
|
};
|
|
int Net_Recv_Async(struct Mwin *tw, int nState, void **ppInfo);
|
|
|
|
/* Note: the buffer provided must not be an automatic variable,
|
|
otherwise it'll disappear before the send happens! The buffer
|
|
is not freed by this function.
|
|
|
|
Also note: this function differs from the standard send()
|
|
call in that it guarantees that all of the data will be
|
|
sent, even if nBufLen is greater than the size of the
|
|
TCP window. That is, there will never be residual data
|
|
requiring a second send call. */
|
|
struct Params_Send {
|
|
int socket;
|
|
#ifdef UNIX
|
|
const char *pBuf;
|
|
#else
|
|
const void *pBuf;
|
|
#endif
|
|
int nBufLen;
|
|
int * pStatus; /* Where to put status return */
|
|
|
|
/* Used internally by routine */
|
|
#ifdef MAC
|
|
struct wdsEntry *pwds;
|
|
#else
|
|
int nTotalSent;
|
|
#endif
|
|
#ifdef UNIX
|
|
void *x_info; /* pointer to private struct bout X stuff */
|
|
#endif
|
|
};
|
|
int Net_Send_Async(struct Mwin *tw, int nState, void **ppInfo);
|
|
|
|
struct Params_MultiGetHostByName {
|
|
const char * szHost;
|
|
struct MultiAddress * pDest; /* Caller-allocated buffer to receive result */
|
|
int * pStatus; /* Where to put status return */
|
|
|
|
/* Used internally by routine */
|
|
void * pTempBuf;
|
|
#ifdef WIN32
|
|
HANDLE hTask;
|
|
#endif
|
|
};
|
|
int Net_MultiGetHostByName_Async(struct Mwin *tw, int nState, void **ppInfo);
|
|
|
|
/* Close the socket. We don't bother with an async version of
|
|
this because it should be fast enough. */
|
|
void Net_Close(int socket);
|
|
|
|
/* Get a socket appropriate for use with the asynchronous network calls. */
|
|
int Net_Socket(int af, int type, int protocol);
|
|
|
|
/* Flush all of the data sitting on the socket and confirm that it's still open.
|
|
If the function returns 0, it indicates that the connection is still open.
|
|
A return of -1 indicates that the connection has been closed by the other
|
|
side. */
|
|
int Net_FlushSocket(int socket);
|
|
|
|
|
|
|
|
#ifdef FEATURE_ASYNC_ACCEPT
|
|
struct Params_Accept {
|
|
int socket; /* IN */
|
|
int timeout; /* IN */ /* mille-seconds */
|
|
SockA *address; /* OUT */
|
|
int *addrlen; /* IN/OUT */ sizeof address */
|
|
int *pStatus; /* OUT */ /* Where to put status return */
|
|
#ifdef UNIX
|
|
void *x_info; /* pointer to private struct bout X stuff */
|
|
#endif
|
|
};
|
|
|
|
int Net_Accept_Async(struct Mwin *tw, int nState, void **ppInfo);
|
|
|
|
int Net_Bind(int s, const struct sockaddr *name, int namelen);
|
|
int Net_Listen (int sd, int backlog);
|
|
|
|
#ifdef FEATURE_SOCKS_LOW_LEVEL
|
|
int Net_Socks_Init(char *app_class);
|
|
#endif
|
|
#endif /* FEATURE_ASYNC_ACCEPT */
|