/*++ 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 #include // 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);