Windows2000/private/inet/wininet/inc/resolver.h
2020-09-30 17:12:32 +02:00

252 lines
7.7 KiB
C

/*++
Copyright (c) 1994 Microsoft Corporation
Module Name:
resolver.h
Abstract:
Definitions etc. for Berkeley resolver
Author:
Richard L Firth (rfirth) 15-Jun-1996
Revision History:
15-Jun-1996 rfirth
Created
*/
// includes
#include <nameser.h>
#include <resolv.h>
// manifests
#if PACKETSZ > 1024
#define MAXPACKET PACKETSZ
#else
#define MAXPACKET 1024
#endif
#define DBG_RESOLVER DBG_SOCKETS
#define DBG_VXD_IO DBG_SOCKETS
#define DLL_PRINT(x) DEBUG_PRINT(SOCKETS, INFO, x)
#define WS_PRINT(x) DEBUG_PRINT(SOCKETS, INFO, x)
#define WS_ASSERT INET_ASSERT
#define DLL_ASSERT INET_ASSERT
// macros
#ifndef unix
#define bcopy(s, d, c) memcpy((u_char *)(d), (u_char *)(s), (c))
#define bzero(d, l) memset((d), '\0', (l))
#endif /* unix */
#define bcmp(s1, s2, l) memcmp((s1), (s2), (l))
#define IS_DGRAM_SOCK(type) (((type) == SOCK_DGRAM) || ((type) == SOCK_RAW))
// types
typedef union {
HEADER hdr;
unsigned char buf[MAXPACKET];
} querybuf;
typedef union {
long al;
char ac;
} align;
//extern char VTCPPARM[];
//extern char NTCPPARM[];
//extern char TCPPARM[];
//extern char TTCPPARM[];
#ifndef unix
typedef long daddr_t;
typedef char FAR * caddr_t;
struct iovec {
caddr_t iov_base;
int iov_len;
};
struct uio {
struct iovec *uio_iov;
int uio_iovcnt;
int uio_offset;
int uio_segflg;
int uio_resid;
};
enum uio_rw { UIO_READ, UIO_WRITE };
#endif /* unix */
/*
* Segment flag values (should be enum).
*/
#define UIO_USERSPACE 0 /* from user data space */
#define UIO_SYSSPACE 1 /* from system space */
#define UIO_USERISPACE 2 /* from user I space */
#define MAXALIASES 35
#define MAXADDRS 35
#define HOSTDB_SIZE (_MAX_PATH + 7) // 7 == strlen("\\hosts") + 1
#define PROTODB_SIZE (_MAX_PATH + 10)
#define SERVDB_SIZE (_MAX_PATH + 10)
typedef struct _WINSOCK_TLS_DATA {
char * GETHOST_h_addr_ptrs[MAXADDRS + 1];
struct hostent GETHOST_host;
char * GETHOST_host_aliases[MAXALIASES];
char GETHOST_hostbuf[BUFSIZ + 1];
//struct in_addr GETHOST_host_addr;
//char GETHOST_HOSTDB[HOSTDB_SIZE];
//FILE *GETHOST_hostf;
//char GETHOST_hostaddr[MAXADDRS];
//char *GETHOST_host_addrs[2];
//int GETHOST_stayopen;
//char GETPROTO_PROTODB[PROTODB_SIZE];
//FILE *GETPROTO_protof;
//char GETPROTO_line[BUFSIZ+1];
//struct protoent GETPROTO_proto;
//char *GETPROTO_proto_aliases[MAXALIASES];
//int GETPROTO_stayopen;
//char GETSERV_SERVDB[SERVDB_SIZE];
//FILE *GETSERV_servf;
//char GETSERV_line[BUFSIZ+1];
//struct servent GETSERV_serv;
//char *GETSERV_serv_aliases[MAXALIASES];
//int GETSERV_stayopen;
struct state R_INIT__res;
//char INTOA_Buffer[18];
//CSOCKET * DnrSocketHandle;
//BOOLEAN IsBlocking;
BOOLEAN IoCancelled;
//BOOLEAN ProcessingGetXByY;
BOOLEAN GetXByYCancelled;
//BOOLEAN EnableWinsNameResolution;
//BOOLEAN DisableWinsNameResolution;
//SOCKET SocketHandle;
//PBLOCKING_HOOK BlockingHook;
//HANDLE EventHandle;
//ULONG CreateOptions;
INT DnrErrorCode;
//#if DBG
// ULONG IndentLevel;
//#endif
} WINSOCK_TLS_DATA, * LPWINSOCK_TLS_DATA;
//extern DWORD SockTlsSlot;
//#define ACCESS_THREAD_DATA(a, file) \
// (((LPWINSOCK_TLS_DATA)TlsGetValue( SockTlsSlot ))-> \
// ## file ## _ ## a )
#define ACCESS_THREAD_DATA(a, file) (lpResolverInfo->file ## _ ## a)
#define _h_addr_ptrs ACCESS_THREAD_DATA(h_addr_ptrs, GETHOST)
#define _host ACCESS_THREAD_DATA(host, GETHOST)
#define _host_aliases ACCESS_THREAD_DATA(host_aliases, GETHOST)
#define _hostbuf ACCESS_THREAD_DATA(hostbuf, GETHOST)
#define _host_addr ACCESS_THREAD_DATA(host_addr, GETHOST)
//#define HOSTDB ACCESS_THREAD_DATA(HOSTDB, GETHOST)
//#define hostf ACCESS_THREAD_DATA(hostf, GETHOST)
//#define hostaddr ACCESS_THREAD_DATA(hostaddr, GETHOST)
//#define host_addrs ACCESS_THREAD_DATA(host_addrs, GETHOST)
//#define stayopen ACCESS_THREAD_DATA(stayopen, GETHOST)
#define _res ACCESS_THREAD_DATA( _res, R_INIT )
//#define SockThreadProcessingGetXByY lpResolverInfo->ProcessingGetXByY
#define SockThreadGetXByYCancelled lpResolverInfo->GetXByYCancelled
#define SockDnrSocket lpResolverInfo->DnrSocketHandle
#define SockThreadDnrErrorCode lpResolverInfo->DnrErrorCode
//#define SockThreadIsBlocking ( ((LPWINSOCK_TLS_DATA)TlsGetValue( SockTlsSlot ))->IsBlocking )
//#define SockThreadIoCancelled ( ((LPWINSOCK_TLS_DATA)TlsGetValue( SockTlsSlot ))->IoCancelled )
//#define SockThreadProcessingGetXByY ( ((LPWINSOCK_TLS_DATA)TlsGetValue( SockTlsSlot ))->ProcessingGetXByY )
//#define SockThreadGetXByYCancelled ( ((LPWINSOCK_TLS_DATA)TlsGetValue( SockTlsSlot ))->GetXByYCancelled )
//#define SockThreadSocketHandle ( ((LPWINSOCK_TLS_DATA)TlsGetValue( SockTlsSlot ))->SocketHandle )
//#define SockThreadBlockingHook ( ((LPWINSOCK_TLS_DATA)TlsGetValue( SockTlsSlot ))->BlockingHook )
//#define SockThreadEvent ( ((LPWINSOCK_TLS_DATA)TlsGetValue( SockTlsSlot ))->EventHandle )
//#define SockDnrSocket ( ((LPWINSOCK_TLS_DATA)TlsGetValue( SockTlsSlot ))->DnrSocketHandle )
//#define SockEnableWinsNameResolution ( ((LPWINSOCK_TLS_DATA)TlsGetValue( SockTlsSlot ))->EnableWinsNameResolution )
//#define SockDisableWinsNameResolution ( ((LPWINSOCK_TLS_DATA)TlsGetValue( SockTlsSlot ))->DisableWinsNameResolution )
//#define SockCreateOptions ( ((LPWINSOCK_TLS_DATA)TlsGetValue( SockTlsSlot ))->CreateOptions )
//#define SockThreadDnrErrorCode ( ((LPWINSOCK_TLS_DATA)TlsGetValue( SockTlsSlot ))->DnrErrorCode )
#define LPSOCK_THREAD LPWINSOCK_TLS_DATA
#define GET_THREAD_DATA(p) p = InternetGetResolverInfo()
//#define I_SetLastError SetLastError
#define DllAllocMem(n) ALLOCATE_MEMORY(LMEM_FIXED, n)
#define DllFreeMem FREE_MEMORY
// well-known DHCP VxD ID (from netvxd.h)
#define VDHCP_Device_ID 0x049A
// prototypes
int
dn_expand(
IN unsigned char *msg,
IN unsigned char *eomorig,
IN unsigned char *comp_dn,
OUT unsigned char *exp_dn,
IN int length
);
static
int
dn_find(
unsigned char *exp_dn,
unsigned char *msg,
unsigned char **dnptrs,
unsigned char **lastdnptr
);
int dn_skipname(unsigned char *comp_dn, unsigned char *eom);
void fp_query(char *msg, FILE *file);
//int gethostname(OUT char *name, IN int namelen);
void p_query(char *msg);
extern void putshort(u_short s, u_char *msgp);
void putlong(u_long l, u_char *msgp);
void _res_close(void);
//DWORD
//sendv(
// CSOCKET * s, /* socket descriptor */
// struct iovec *iov, /* array of vectors */
// int iovcnt /* size of array */
// );
//int strcasecmp(char *s1, char *s2);
//int strncasecmp(char *s1, char *s2, int n);
//struct hostent * myhostent (void);
//struct hostent * localhostent (void);
//struct hostent * dnshostent (void);
//BOOL querydnsaddrs (IN LPDWORD *Array, IN PVOID Buffer);
//DWORD BytesInHostent (PHOSTENT Hostent);
//DWORD CopyHostentToBuffer (char FAR *Buffer, int BufferLength, PHOSTENT Hostent);
//struct hostent * _gethtbyname (IN char *name);
BOOL OkToUseInternetAsyncGetHostByName(VOID);
LPHOSTENT InternetAsyncGetHostByName(IN LPSTR lpszHostName, OUT LPDWORD lpdwTtl);
LPWINSOCK_TLS_DATA InternetGetResolverInfo(VOID);
LPHOSTENT
getanswer(
OUT querybuf *answer,
OUT int *ttl,
IN int anslen,
IN int iquery
);
//ULONG SockNbtResolveName (IN PCHAR Name);
//PHOSTENT QueryHostentCache (IN LPSTR Name OPTIONAL, IN DWORD IpAddress OPTIONAL);
//FILE * SockOpenNetworkDataBase(IN char *Database, OUT char *Pathname, IN int PathnameLen, IN char *OpenFlags);