resolv.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /* resolv.h: DNS Resolver
  2. *
  3. * Copyright (C) 1998 Kenneth Albanowski <kjahds@kjahds.com>,
  4. * The Silver Hammer Group, Ltd.
  5. *
  6. * This library is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Library General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 2 of the License, or (at your option) any later version.
  10. */
  11. #ifndef _RESOLV_H_
  12. #define _RESOLV_H_
  13. #include <features.h>
  14. #include <sys/param.h>
  15. #if (!defined(BSD)) || (BSD < 199306)
  16. # include <sys/bitypes.h>
  17. #else
  18. # include <sys/types.h>
  19. #endif
  20. #include <stdio.h>
  21. #include <netinet/in.h>
  22. __BEGIN_DECLS
  23. struct resolv_header {
  24. int id;
  25. int qr,opcode,aa,tc,rd,ra,rcode;
  26. int qdcount;
  27. int ancount;
  28. int nscount;
  29. int arcount;
  30. };
  31. struct resolv_question {
  32. char * dotted;
  33. int qtype;
  34. int qclass;
  35. };
  36. struct resolv_answer {
  37. char * dotted;
  38. int atype;
  39. int aclass;
  40. int ttl;
  41. int rdlength;
  42. unsigned char * rdata;
  43. int rdoffset;
  44. };
  45. int encode_header(struct resolv_header * h, unsigned char * dest, int maxlen);
  46. int decode_header(unsigned char * data, struct resolv_header * h);
  47. int encode_dotted(const char * dotted, unsigned char * dest, int maxlen);
  48. int decode_dotted(const unsigned char * message, int offset,
  49. char * dest, int maxlen);
  50. int length_dotted(const unsigned char * message, int offset);
  51. int encode_question(struct resolv_question * q,
  52. unsigned char * dest, int maxlen);
  53. int decode_question(unsigned char * message, int offset,
  54. struct resolv_question * q);
  55. int length_question(unsigned char * message, int offset);
  56. int encode_answer(struct resolv_answer * a,
  57. unsigned char * dest, int maxlen);
  58. int decode_answer(unsigned char * message, int offset,
  59. struct resolv_answer * a);
  60. const char * resolve_name(const char * name, int mailbox);
  61. int encode_packet(struct resolv_header * h,
  62. struct resolv_question ** q,
  63. struct resolv_answer ** an,
  64. struct resolv_answer ** ns,
  65. struct resolv_answer ** ar,
  66. unsigned char * dest, int maxlen);
  67. int decode_packet(unsigned char * data, struct resolv_header * h);
  68. extern int open_nameservers(void);
  69. extern void close_nameservers(void);
  70. extern struct hostent * gethostbyname(const char * name);
  71. extern struct hostent * gethostbyaddr(const char * addr, int len, int type);
  72. extern int res_init(void);
  73. extern int res_query(const char *dname, int class, int type,
  74. unsigned char *answer, int anslen);
  75. __END_DECLS
  76. #endif /*_RESOLV_H_*/