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.
391 lines
8.8 KiB
391 lines
8.8 KiB
/*++
|
|
|
|
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
|
|
// );
|
|
//
|
|
|
|
|