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.
191 lines
5.6 KiB
191 lines
5.6 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);
|
|
|
|
#ifdef HTTPS_ACCESS_TYPE
|
|
#define FLAGS_PARAMS_CONNECT_BASE_USE_SSL 0x1
|
|
/*This is the base class from which Params_connect and PArams_MultiConnect are derived*/
|
|
typedef struct tagParamsConnectBase{
|
|
DWORD dwSslFlags; /*Flags for SSL*/
|
|
} ParamsConnectBase;
|
|
#endif
|
|
|
|
struct Params_Connect {
|
|
#ifdef HTTPS_ACCESS_TYPE
|
|
ParamsConnectBase paramsConnectBase; /*This should be 1st member*/
|
|
#endif
|
|
int socket;
|
|
SockA address;
|
|
int * pStatus; /* Where to put status return */
|
|
#ifdef UNIX
|
|
void *x_info; /* pointer to private struct bout X stuff */
|
|
#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 {
|
|
#ifdef HTTPS_ACCESS_TYPE
|
|
ParamsConnectBase paramsConnectBase; /*This should be 1st member*/
|
|
#endif
|
|
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 */
|
|
const char * pszHost;
|
|
|
|
|
|
/* 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 */
|
|
int nTries; /* retries */
|
|
#ifdef FEATURE_KEEPALIVE
|
|
DWORD c_time; /* time when connect started */
|
|
#endif
|
|
#ifdef UNIX
|
|
void *x_info; /* pointer to private struct bout X stuff */
|
|
#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
|
|
#ifdef FEATURE_KEEPALIVE
|
|
DWORD r_time; /* time when read started */
|
|
#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 */
|
|
|
|
DWORD dwFlags;
|
|
unsigned long *puiRequestFlags;
|
|
|
|
/* 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
|
|
};
|
|
|
|
#define FLAGS_NET_SEND_IS_SSL 0x0001 // this is an SSL connection
|
|
#define FLAGS_NET_SEND_IS_DOC 0x0002 // this is a page download
|
|
#define FLAGS_NET_SEND_DOING_SEND 0x0004 // we're sending something
|
|
#define FLAGS_NET_SEND_ABORT 0x0008 // abort the send
|
|
#define FLAGS_NET_SEND_DUP 0x0010 // theres a dlg already running for this
|
|
#define FLAGS_NET_SEND_WARNING_GIV 0x0020
|
|
|
|
|
|
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_KEEPALIVE
|
|
/* If socket is keep alive socket, then don't really close, but leave open for
|
|
future connects. If not keep alive then close.
|
|
We don't bother with an async version of
|
|
this because it should be fast enough. */
|
|
void Net_KeepAlive(int socket);
|
|
|
|
/* Returns TRUE iff socket is a keep alive socket. */
|
|
BOOL Net_IsKeepAlive(int socket);
|
|
|
|
/* Close all keep alive sockets that are not currently in use and have not
|
|
been accessed in a while. if bForce, close all free regardless. */
|
|
void Net_CloseUnusedKeepAlive(BOOL bForce );
|
|
|
|
/* Declares that we are starting retrieval of mime data on keep alive connection. */
|
|
void Net_OpenKeepAlive(int socket, int content_length);
|
|
|
|
/* Updates number of bytes of mime data currently received via keep alive
|
|
connection */
|
|
void Net_KeepAliveProgress(int socket, int received_bytes);
|
|
#endif
|
|
|