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