2015-08-16 10:45:01 +08:00
|
|
|
#ifndef __MY_RFC1035_INCLUDE_H__
|
|
|
|
#define __MY_RFC1035_INCLUDE_H__
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "stdlib/acl_define.h"
|
|
|
|
#ifdef ACL_UNIX
|
|
|
|
#include <netinet/in.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* rfc1035 - DNS */
|
|
|
|
#define RFC1035_MAXHOSTNAMESZ 256
|
|
|
|
|
|
|
|
typedef struct rfc1035_rr {
|
|
|
|
char name[RFC1035_MAXHOSTNAMESZ];
|
|
|
|
unsigned short type;
|
|
|
|
unsigned short tclass; /* class */
|
|
|
|
unsigned int ttl;
|
|
|
|
unsigned short rdlength;
|
|
|
|
char *rdata;
|
|
|
|
} rfc1035_rr;
|
|
|
|
|
|
|
|
typedef struct rfc1035_query {
|
|
|
|
char name[RFC1035_MAXHOSTNAMESZ];
|
|
|
|
unsigned short qtype;
|
|
|
|
unsigned short qclass;
|
|
|
|
} rfc1035_query;
|
|
|
|
|
|
|
|
typedef struct rfc1035_message {
|
|
|
|
unsigned short id;
|
|
|
|
unsigned int qr:1;
|
|
|
|
unsigned int opcode:4;
|
|
|
|
unsigned int aa:1;
|
|
|
|
unsigned int tc:1;
|
|
|
|
unsigned int rd:1;
|
|
|
|
unsigned int ra:1;
|
|
|
|
unsigned int rcode:4;
|
|
|
|
unsigned short qdcount;
|
|
|
|
unsigned short ancount;
|
|
|
|
unsigned short nscount;
|
|
|
|
unsigned short arcount;
|
|
|
|
rfc1035_query *query;
|
|
|
|
rfc1035_rr *answer;
|
|
|
|
} rfc1035_message;
|
|
|
|
|
|
|
|
const char *rfc1035Strerror(int errnum);
|
|
|
|
ssize_t rfc1035BuildAQuery(const char *hostname, char *buf, size_t sz,
|
|
|
|
unsigned short qid, rfc1035_query * query);
|
|
|
|
ssize_t rfc1035BuildPTRQuery(const struct in_addr, char *buf, size_t sz,
|
|
|
|
unsigned short qid, rfc1035_query * query);
|
|
|
|
void rfc1035SetQueryID(char *, unsigned short qid);
|
|
|
|
int rfc1035MessageUnpack(const char *buf, size_t sz,
|
|
|
|
rfc1035_message ** answer);
|
|
|
|
int rfc1035QueryCompare(const rfc1035_query *, const rfc1035_query *);
|
|
|
|
void rfc1035MessageDestroy(rfc1035_message * message);
|
|
|
|
ssize_t rfc1035BuildAReply(const char *hostname, const ACL_ARGV *ip_argv,
|
|
|
|
const char *dnsname, const char *dns_ip,
|
|
|
|
unsigned short qid, char *buf, size_t sz);
|
|
|
|
|
|
|
|
extern int rfc1035_errno;
|
|
|
|
extern const char *rfc1035_error_message;
|
|
|
|
|
|
|
|
#define RFC1035_TYPE_A 1
|
|
|
|
#define RFC1035_TYPE_NS 2
|
|
|
|
#define RFC1035_TYPE_CNAME 5
|
|
|
|
#define RFC1035_TYPE_PTR 12
|
|
|
|
#define RFC1035_TYPE_AAAA 28
|
|
|
|
#define RFC1035_CLASS_IN 1
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|