Index: cloud_print/gcp20/prototype/dns_sd.h |
diff --git a/cloud_print/gcp20/prototype/dns_sd.h b/cloud_print/gcp20/prototype/dns_sd.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9d007d4d0225325c01ca95df9ab1fa8e2e7a0575 |
--- /dev/null |
+++ b/cloud_print/gcp20/prototype/dns_sd.h |
@@ -0,0 +1,81 @@ |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef GCP20_PROTOTYPE_DNS_SD_H_ |
+#define GCP20_PROTOTYPE_DNS_SD_H_ |
+ |
+#include <vector> |
+ |
+#include "net/udp/udp_socket.h" |
+ |
+// Class for sending multicast announcements, receiving queries and answering on |
+// them. Client should call |ProccessMessages| periodically to make server work. |
gene
2013/06/06 00:13:51
Add a ProcessMessage() function, make it NOTIMPLEM
maksymb
2013/06/06 01:52:46
Done.
|
+class DnsSd { |
+ public: |
+ // Constructs unstarted server. |
+ DnsSd(); |
+ |
+ // Stops server. |
+ ~DnsSd(); |
+ |
+ // Starts the server. Returns |true| if server works. Also sends |
+ // announcement. |
+ bool Start(); |
+ |
+ // Sends announcement if server works. |
+ void Update(); |
+ |
+ // Stops server with announcement. |
+ void Shutdown(); |
+ |
+ // Returns |true| if server works. |
+ bool is_online() { return is_online_; } |
+ |
+ private: |
+ // Binds a socket to multicast address. Returns |true| on success. |
+ bool BindSocket(); |
+ |
+ // Sends announcement. |
+ void SendAnnouncement(uint32 ttl); |
+ |
+ // Returns |true| if server received some questions. |
+ bool CheckPendingQueries(); |
+ |
+ // Sets the header of DNS packet after adding all of necessary queries and |
+ // answers. |
+ void UpdateHeader(bool is_question, std::vector<uint8>* message); |
+ |
+ // Appends answer on SRV query at the end of |message|. |
+ void AppendSrv(uint32 ttl, std::vector<uint8>* message); |
+ |
+ // Appends answer on PTR query at the end of |message|. |
+ void AppendPtr(uint32 ttl, std::vector<uint8>* message); |
+ |
+ // Appends answer on TXT query at the end of |message|. |
+ void AppendTxt(uint32 ttl, std::vector<uint8>* message); |
+ |
+ // Appends answer on A query at the end of |message|. |
+ void AppendA(uint32 ttl, std::vector<uint8>* message); |
+ |
+ |
+ // Stores |true| if server was started. |
+ bool is_online_; |
+ |
+ // Stores socket to multicast address. |
+ scoped_ptr<net::UDPSocket> socket_; |
+ |
+ // Stores multicast address end point. |
+ net::IPEndPoint multicast_address_; |
+ |
+ |
+ // Stores number of question in current DNS packet. |
+ uint16 question_count_; |
+ |
+ // Stores number of answers in current DNS packet. |
+ uint16 answers_count_; |
+}; |
gene
2013/06/06 00:13:51
add chrome macro to disable copy contructor
maksymb
2013/06/06 01:52:46
Do you mean DISALLOW_COPY_AND_ASSIGN? Then done.
|
+ |
+ |
+#endif // GCP20_PROTOTYPE_DNS_SD_H_ |
+ |