message_entry.h 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // Copyright (C) 2010 Internet Systems Consortium, Inc. ("ISC")
  2. //
  3. // Permission to use, copy, modify, and/or distribute this software for any
  4. // purpose with or without fee is hereby granted, provided that the above
  5. // copyright notice and this permission notice appear in all copies.
  6. //
  7. // THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
  8. // REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  9. // AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
  10. // INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  11. // LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  12. // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  13. // PERFORMANCE OF THIS SOFTWARE.
  14. // $Id$
  15. #ifndef __MESSAGE_ENTRY_H
  16. #define __MESSAGE_ENTRY_H
  17. #include <vector>
  18. #include <dns/message.h>
  19. #include <nsas/nsas_entry.h>
  20. #include <nsas/fetchable.h>
  21. using namespace isc::nsas;
  22. namespace isc {
  23. namespace cache {
  24. class RRsetEntry;
  25. class RRsetCache;
  26. class MessageEntry : public NsasEntry<MessageEntry>,
  27. public Fetchable
  28. {
  29. public:
  30. /// \brief Initialize the message entry object with one dns
  31. /// message.
  32. /// \param message The message used to initialize MessageEntry.
  33. /// \param rrset_cache the pointer of RRsetCache. When one message
  34. /// entry is created, some new rrset entries may be created/updated
  35. /// if they doesn't exist in the rrset cache.
  36. MessageEntry(const isc::dns::Message& message,
  37. boost::shared_ptr<RRsetCache> rrset_cache);
  38. /// \brief generate one dns message according
  39. /// the rrsets information of the message.
  40. /// \param response generated dns message.
  41. /// \param time_now set the ttl of each rrset in the message
  42. /// as "expire_time - time_now" (expire_time is the
  43. /// expiration time of the rrset).
  44. /// \param query_header the query message header.
  45. void generateMessage(const time_t& time_now,
  46. const uint16_t query_header,
  47. isc::dns::Message& response);
  48. protected:
  49. // Initialize the message entry with dns message.
  50. void initMessageEntry(const isc::dns::Message& message);
  51. private:
  52. time_t expire_time_; // Expiration time of the message.
  53. std::string query_name_; // query name of the message.
  54. uint16_t query_class_; // query class of the message.
  55. uint16_t query_type_; // query type of message.
  56. uint16_t query_header; // query header of the message.
  57. uint16_t query_count_; // query count in query section.
  58. uint16_t answer_count_; // rrset count in answer section.
  59. uint16_t authority_count_; // rrset count in authority section.
  60. uint16_t addition_count_; // rrset count in addition section.
  61. std::vector<boost::shared_ptr<RRsetEntry*> > rrsets_;
  62. boost::shared_ptr<RRsetCache> rrset_cache_;
  63. };
  64. } // namespace cache
  65. } // namespace isc
  66. #endif // __MESSAGE_ENTRY_H