📄 mydns.h
字号:
DNS_QTYPE_ANY = 255, /* Any */#if ALIAS_ENABLED DNS_QTYPE_ALIAS = 500, /* Extension - David Phillips, alias patch */#endif} dns_qtype_t;typedef enum /* DNS opcode types */{ DNS_OPCODE_UNKNOWN = -1, /* Unknown */ DNS_OPCODE_QUERY = 0, /* Query (RFC 1035) */ DNS_OPCODE_IQUERY = 1, /* Inverse query (RFC 1035) */ DNS_OPCODE_STATUS = 2, /* Status request (RFC 1035) */ DNS_OPCODE_NOTIFY = 4, /* Notify request (RFC 1996) */ DNS_OPCODE_UPDATE = 5, /* Update request (RFC 2136) */} dns_opcode_t;/* Return codes */typedef enum{ DNS_RCODE_UNKNOWN = -1, /* Unknown */ DNS_RCODE_NOERROR = 0, /* No error (RFC 1035) */ DNS_RCODE_FORMERR = 1, /* Format error (RFC 1035) */ DNS_RCODE_SERVFAIL = 2, /* Server failure (RFC 1035) */ DNS_RCODE_NXDOMAIN = 3, /* Nonexistent domain (RFC 1035) */ DNS_RCODE_NOTIMP = 4, /* Not implemented (RFC 1035) */ DNS_RCODE_REFUSED = 5, /* Query refused (RFC 1035) */ DNS_RCODE_YXDOMAIN = 6, /* Name exists when it should not (RFC 2136) */ DNS_RCODE_YXRRSET = 7, /* RR set exists when it should not (RFC 2136) */ DNS_RCODE_NXRRSET = 8, /* RR set that should exist does not (RFC 2136) */ DNS_RCODE_NOTAUTH = 9, /* Server not authoritative for zone (RFC 2136) */ DNS_RCODE_NOTZONE = 10, /* Name not contained in zone (RFC 2136) */ /* Codes that can't fit in 4 bits are found in OPT (RFC 2671), TSIG (RFC 2845), and TKEY (RFC 2930) RRs */ /* RFC 2671 says that rcode 16 is BADVERS ("Bad OPT version"). This conlicts with RFC 2845. RFC 2845 seems like best current practice. */ DNS_RCODE_BADSIG = 16, /* TSIG signature failure (RFC 2845) */ DNS_RCODE_BADKEY = 17, /* Key not recognized (RFC 2845) */ DNS_RCODE_BADTIME = 18, /* Signature out of time window (RFC 2845) */ DNS_RCODE_BADMODE = 19, /* Bad TKEY mode (RFC 2930) */ DNS_RCODE_BADNAME = 20, /* Duplicate key name (RFC 2930) */ DNS_RCODE_BADALG = 21, /* Algorithm not supported (RFC 2930) */} dns_rcode_t;/* The record types */typedef enum _dns_rrtype_t /* DNS record types (for MyDNS) */{ DNS_RRTYPE_SOA, DNS_RRTYPE_RR} dns_rrtype_t;typedef enum _datasection_t /* Sections in reply */{ QUESTION = 0, ANSWER, AUTHORITY, ADDITIONAL} datasection_t;/*** Structures describing each record type*/typedef struct _mydns_soa /* `soa' table data (zones of authority) */{ uint32_t id; char origin[DNS_MAXNAMELEN + 1]; char ns[DNS_MAXNAMELEN + 1]; char mbox[DNS_MAXNAMELEN + 1]; uint32_t serial; uint32_t refresh; uint32_t retry; uint32_t expire; uint32_t minimum; uint32_t ttl; struct _mydns_soa *next;} MYDNS_SOA;typedef struct _mydns_rr /* `rr' table data (resource records) */{ uint32_t id; uint32_t zone; char name[DNS_MAXNAMELEN + 1]; dns_qtype_t type; dns_class_t class; char data[DNS_MAXNAMELEN * 2 + 2]; uint32_t aux; uint32_t ttl;#if ALIAS_ENABLED int alias;#endif /* This data used by SRV records only - parsed (and removed) from "data" */ uint16_t srv_weight, srv_port; /* For RP records, this points to the "txt" part of the data, which is preceded by a NUL */ char rp_txt[DNS_MAXNAMELEN + 1]; /* Data for NAPTR records: */ /* This is potentially a lot of data. I'm a little unclear from the RFC on what the maximum length of some of these fields are, so I'm just making them big for now. Hopefully these extra fields won't take up too much extra memory in the cache, slowing down the mere mortals who don't use NAPTR -- these fields add over 700 bytes to this structure */ uint16_t naptr_order; uint16_t naptr_pref; char naptr_flags[8]; char naptr_service[DNS_MAXNAMELEN + 1]; char naptr_regex[DNS_MAXNAMELEN + 1]; char naptr_replacement[DNS_MAXNAMELEN + 1]; struct _mydns_rr *next;} MYDNS_RR;/* sql.c */#if USE_PGSQLtypedef PGconn SQL;typedef unsigned char ** SQL_ROW;typedef struct _sql_res { PGresult *result; int tuples; int fields; int current_tuple; SQL_ROW current_row;} SQL_RES;#elsetypedef MYSQL SQL;typedef MYSQL_RES SQL_RES;typedef MYSQL_ROW SQL_ROW;#endif/* ip.c */extern uint32_t mydns_revstr_ip4(char *);extern int mydns_extract_arpa(char *, uint8_t ip[]);/* question.c */extern char *dns_make_question(uint16_t id, dns_qtype_t qtype, char *name, int rd, size_t *length);/* rr.c */extern long mydns_rr_count(SQL *);extern void mydns_set_rr_table_name(char *);extern void mydns_set_rr_where_clause(char *);extern dns_qtype_t mydns_rr_get_type(char *);extern MYDNS_RR *mydns_rr_parse(SQL_ROW, const char *);extern int mydns_rr_load(SQL *, MYDNS_RR **, uint32_t, dns_qtype_t, char *, char *, const char*);extern MYDNS_RR *mydns_rr_dup(MYDNS_RR *, int);extern size_t mydns_rr_size(MYDNS_RR *);extern void _mydns_rr_free(MYDNS_RR *);#define mydns_rr_free(p) if ((p)) _mydns_rr_free((p)), (p) = NULL/* soa.c */extern long mydns_soa_count(SQL *);extern void mydns_set_soa_table_name(char *);extern void mydns_set_soa_where_clause(char *);extern MYDNS_SOA *mydns_soa_parse(SQL_ROW);extern int mydns_soa_load(SQL *, MYDNS_SOA **, char *,int);extern int mydns_soa_make(SQL *, MYDNS_SOA **, unsigned char *, unsigned char *);extern MYDNS_SOA *mydns_soa_dup(MYDNS_SOA *, int);extern size_t mydns_soa_size(MYDNS_SOA *);extern void _mydns_soa_free(MYDNS_SOA *);#define mydns_soa_free(p) if ((p)) _mydns_soa_free((p)), (p) = NULL/* sql.c */extern SQL *sql;extern void sql_open(char *user, char *password, char *host, char *database);extern void sql_reopen(void);extern void _sql_close(SQL *);#define sql_close(p) if ((p)) _sql_close((p)), (p) = NULLextern int sql_nrquery(SQL *, const char *query, size_t querylen);extern SQL_RES *sql_query(SQL *, const char *query, size_t querylen);extern SQL_RES *sql_queryf(SQL *, const char *, ...) __printflike(2,3);extern long sql_count(SQL *, const char *, ...) __printflike(2,3);extern SQL_ROW sql_getrow(SQL_RES *res);extern void sql_escstr(SQL *, char *, char *, size_t);extern void _sql_free(SQL_RES *res);extern long sql_num_rows(SQL_RES *res);extern int sql_istable(SQL *, const char *);extern int sql_iscolumn(SQL *, const char *, const char *);#define sql_free(p) if ((p)) _sql_free((p)), (p) = NULL/* str.c */extern char *mydns_qtype_str(dns_qtype_t);extern char *mydns_class_str(dns_class_t);extern char *mydns_opcode_str(dns_opcode_t);extern char *mydns_rcode_str(dns_rcode_t);extern char *mydns_section_str(datasection_t);extern int hinfo_parse(char *, char *, char *, size_t);/* unencode.c */extern char *name_unencode(char *, size_t, char *, char *, size_t);#endif /* !_MYDNS_H *//* vi:set ts=3: */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -