⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dns.h

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 H
字号:
/*
 * FILENAME: dns.h
 *
 * Copyright 1997- 2000 By InterNiche Technologies Inc. All rights reserved
 *
 * DNS defines for NetPort IP stack.
 *
 * MODULE: INET
 *
 *
 * PORTABLE: yes
 */


#ifndef _DNS_H_
#define  _DNS_H_  1

/* set defaults of DNS variables, may override in ipport.h */

#ifndef MAXDNSNAME
#define  MAXDNSNAME     256   /* max length of name including domain */
#endif

#ifndef MAXDNSENTRY
#define  MAXDNSENTRY    6     /* MAX entries in DNS table */
#endif

#ifndef MAXDNSUDP
#define  MAXDNSUDP      512   /* MAX allowable UDP size */
#endif

#ifndef MAXDNSSERVERS
#define  MAXDNSSERVERS  3     /* MAX number of servers to try */
#endif

#ifndef MAXDNSADDRS
#define  MAXDNSADDRS    10    /* MAX IP addresses to return via gethostbyname() */
#endif

#ifdef DNS_CLIENT_UPDT
#define  DNS_UPDT        5    /* Op code for UPDATE request               */
#define  DNS_TYPE_AUTHNS 2    /* Type value for Authoritative name server */
#endif /* DNS_CLIENT_UPDT */

/* basic internal structure of a client DNS entry. */

struct dns_querys
{
   ulong send_time;     /* ctick when last request was sent/received */
   ulong expire_time;   /* second (local) when this data expires */
   unshort  tries;      /* retry count */
   unshort  lport;      /* local (client) UDP port, for verification */
   unshort  id;         /* ID of request, 0 == unused entry. */
   int      replies;    /* number of replys to current request */
   ip_addr  ipaddr_list[MAXDNSADDRS];  /* IP addresses (net endian) */
   int      err;        /* last ENP_ error if, if any */
   int      rcode;      /* last response code if replys > 1 */
   char     dns_name[MAXDNSNAME];   /* name asked for (usually w/domain) */
   char     dns_alias[MAXDNSNAME];  /* name from reply */

#ifdef DNS_CLIENT_UPDT
   char     dns_soa[MAXDNSNAME];    /* name of authoritative server */
   char     type;                   /* type of request */
   char     filler;
   ip_addr  h_add_ipaddr;  /* IN- add this ip address for host name in zone */
   u_long   h_ttl;         /* IN- time-to-live field for UPDATE packet */
   char     h_z_name[MAXDNSNAME];   /* IN- zone name for UPDATE packet */
#endif /* DNS_CLIENT_UPDT */
};

/* static table for actual queries. Non-zero dhc_conn means entry is active. */
extern   struct dns_querys dns_qs[MAXDNSENTRY];

/* pending requests, can be used as a flag to spin dnsc_check() task */
extern   unsigned    dnsc_active;

/* DNS client statistics: */
extern   ulong    dnsc_errors;   /* protocol/implementation runtime errors */
extern   ulong    dnsc_requests; /* requests sent */
extern   ulong    dnsc_OK;       /* OK replys received */
extern   ulong    dnsc_unks;     /* error (unknown) replys received */
extern   ulong    dnsc_tmos;     /* timeouts */


/* DNS operational parameters which can be set at run time */
extern   ip_addr  dns_servers[MAXDNSSERVERS];

#ifdef   DNS_CLIENT_UPDT
extern   char     soa_mname[MAXDNSNAME];
#endif    /* DNS_CLIENT_UPDT */

extern   unsigned dns_firsttry;  /* time to first retry, in seconds */
extern   unsigned dns_trys;      /* max number of retrys */




/* header format of a DNS packet over UDP */
START_PACKED_STRUCT(dns_hdr)
   unshort  id;         /* 16 bit unique query ID */
   unshort  flags;      /* various bit fields, see below */
   unshort  qdcount;    /* entries in the question field */
   unshort  ancount;    /* resource records in the answer field */
   unshort  nscount;    /* name server resource records */
   unshort  arcount;    /* resource records in the additional records */
END_PACKED_STRUCT(dns_hdr)

#define  DNS_PORT    53    /* DNS reserved port on UDP */

/* DNS header flags field defines */
#define  DNSF_QR     0x8000   /* query (0), or response (1) */
#define  DNSF_OPMASK 0x7800   /* 4 bit opcode kinds of query, 0==standard */
#define  DNSF_AA     0x0400   /* set if Authoritive Answers */
#define  DNSF_TC     0x0200   /* set if truncated message */
#define  DNSF_RD     0x0100   /* Recursion Desired bit */
#define  DNSF_RA     0x0080   /* Recursion Allowed bit */
#define  DNSF_Z      0x0070   /* 3 reserved bits, must be zero */
#define  DNSF_RCMASK 0x000F   /* Response Code mask */

/* Reponse Code values: */
#define  DNSRC_OK       0     /* good response */
#define  DNSRC_EFORMAT  1     /* Format error */
#define  DNSRC_ESERVER  2     /* Server Error */
#define  DNSRC_ENAME    3     /* Name error */
#define  DNSRC_EIMP     4     /* Not Implemented on server */
#define  DNSRC_EREFUSE  5     /* Server refused operation */

#ifdef DNS_CLIENT_UPDT

/* Error codes used within Dynamic DNS Update operation */
#define  DNSRC_EDOMAIN  6     /* Some name that ought not to exist, exists */
#define  DNSRC_ERRSET   7     /* Some RRset that ought not to exist, exists*/
#define  DNSRC_ENRRSET  8     /* Some RRset that ought to exist, does not */
#define  DNSRC_NOTAUTH  9     /* Server is not authoritative for the zone */
                              /* named in the zone section */
#define  DNSRC_NOTZONE  10    /* A name used within the Update section */
                              /* is not within the zone denoted        */

#endif /* DNS_CLIENT_UPDT */

/* DNS client external entry points: */
int   dns_query(char * name, ip_addr * ip);     /* start a DNS query */
int   dns_lookup(ip_addr * ip, char * name);    /* check query status */
void  dnsc_check(void); /* spin once a second to drive retrys & timeouts */

/* flags for in_reshost(); */
#define  RH_VERBOSE     0x01  /* do informational printfs   */
#define  RH_BLOCK       0x02  /* block with call to tk_yield()  */
int   in_reshost(char * host, ip_addr * address, int flags);

/* Description of data base entry for a single host.  */
struct hostent
{
   char *   h_name;        /* Official name of host. */
   char **h_aliases;       /* Alias list.  */
   int   h_addrtype;       /* Host address type.  */
   int   h_length;         /* Length of address.  */
   char **h_addr_list;     /* List of addresses from name server.  */
#define  h_addr   h_addr_list[0] /* Address, for backward compatibility.  */

#ifdef DNS_CLIENT_UPDT
   char *   h_z_name;      /* IN- zone name for UPDATE packet */
   ip_addr  h_add_ipaddr;  /* IN- add this ip address for host name in zone */
   u_long   h_ttl;         /* IN- time-to-live field for UPDATE packet */
   int      h_rcode;       /* OUT- response code from UPDATE packet */
#endif /* DNS_CLIENT_UPDT */
};

/* Return entry from host data base for host with NAME. This could be 
 * in sockcall.h but is here because a non-TCP used may want DNS. 
 */
#ifdef DNS_CLIENT_UPDT
struct hostent *  gethostbyname (char * name, char type);
#else
struct hostent *  gethostbyname(char * name);
#endif /* DNS_CLIENT_UPDT */

#endif   /* _DNS_H_ */


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -