Index: net/dns/mdns_client_impl.h |
diff --git a/net/dns/mdns_client_impl.h b/net/dns/mdns_client_impl.h |
deleted file mode 100644 |
index 4ed85f24ac7404b1dafc7411a12ef171f0e49090..0000000000000000000000000000000000000000 |
--- a/net/dns/mdns_client_impl.h |
+++ /dev/null |
@@ -1,308 +0,0 @@ |
-// 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 NET_DNS_MDNS_CLIENT_IMPL_H_ |
-#define NET_DNS_MDNS_CLIENT_IMPL_H_ |
- |
-#include <map> |
-#include <string> |
-#include <utility> |
-#include <vector> |
- |
-#include "base/cancelable_callback.h" |
-#include "base/memory/scoped_vector.h" |
-#include "base/observer_list.h" |
-#include "net/base/io_buffer.h" |
-#include "net/base/ip_endpoint.h" |
-#include "net/dns/mdns_cache.h" |
-#include "net/dns/mdns_client.h" |
-#include "net/udp/datagram_server_socket.h" |
-#include "net/udp/udp_server_socket.h" |
-#include "net/udp/udp_socket.h" |
- |
-namespace net { |
- |
-class MDnsSocketFactoryImpl : public MDnsSocketFactory { |
- public: |
- MDnsSocketFactoryImpl() {}; |
- ~MDnsSocketFactoryImpl() override{}; |
- |
- void CreateSockets(ScopedVector<DatagramServerSocket>* sockets) override; |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(MDnsSocketFactoryImpl); |
-}; |
- |
-// A connection to the network for multicast DNS clients. It reads data into |
-// DnsResponse objects and alerts the delegate that a packet has been received. |
-class NET_EXPORT_PRIVATE MDnsConnection { |
- public: |
- class Delegate { |
- public: |
- // Handle an mDNS packet buffered in |response| with a size of |bytes_read|. |
- virtual void HandlePacket(DnsResponse* response, int bytes_read) = 0; |
- virtual void OnConnectionError(int error) = 0; |
- virtual ~Delegate() {} |
- }; |
- |
- explicit MDnsConnection(MDnsConnection::Delegate* delegate); |
- virtual ~MDnsConnection(); |
- |
- // Both methods return true if at least one of the socket handlers succeeded. |
- bool Init(MDnsSocketFactory* socket_factory); |
- void Send(const scoped_refptr<IOBuffer>& buffer, unsigned size); |
- |
- private: |
- class SocketHandler { |
- public: |
- SocketHandler(scoped_ptr<DatagramServerSocket> socket, |
- MDnsConnection* connection); |
- ~SocketHandler(); |
- |
- int Start(); |
- void Send(const scoped_refptr<IOBuffer>& buffer, unsigned size); |
- |
- private: |
- int DoLoop(int rv); |
- void OnDatagramReceived(int rv); |
- |
- // Callback for when sending a query has finished. |
- void SendDone(int rv); |
- |
- scoped_ptr<DatagramServerSocket> socket_; |
- MDnsConnection* connection_; |
- IPEndPoint recv_addr_; |
- DnsResponse response_; |
- IPEndPoint multicast_addr_; |
- bool send_in_progress_; |
- std::queue<std::pair<scoped_refptr<IOBuffer>, unsigned> > send_queue_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SocketHandler); |
- }; |
- |
- // Callback for handling a datagram being received on either ipv4 or ipv6. |
- void OnDatagramReceived(DnsResponse* response, |
- const IPEndPoint& recv_addr, |
- int bytes_read); |
- |
- void PostOnError(SocketHandler* loop, int rv); |
- void OnError(int rv); |
- |
- // Only socket handlers which successfully bound and started are kept. |
- ScopedVector<SocketHandler> socket_handlers_; |
- |
- Delegate* delegate_; |
- |
- base::WeakPtrFactory<MDnsConnection> weak_ptr_factory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MDnsConnection); |
-}; |
- |
-class MDnsListenerImpl; |
- |
-class NET_EXPORT_PRIVATE MDnsClientImpl : public MDnsClient { |
- public: |
- // The core object exists while the MDnsClient is listening, and is deleted |
- // whenever the number of listeners reaches zero. The deletion happens |
- // asychronously, so destroying the last listener does not immediately |
- // invalidate the core. |
- class Core : public base::SupportsWeakPtr<Core>, MDnsConnection::Delegate { |
- public: |
- Core(); |
- ~Core() override; |
- |
- // Initialize the core. Returns true on success. |
- bool Init(MDnsSocketFactory* socket_factory); |
- |
- // Send a query with a specific rrtype and name. Returns true on success. |
- bool SendQuery(uint16 rrtype, std::string name); |
- |
- // Add/remove a listener to the list of listeners. |
- void AddListener(MDnsListenerImpl* listener); |
- void RemoveListener(MDnsListenerImpl* listener); |
- |
- // Query the cache for records of a specific type and name. |
- void QueryCache(uint16 rrtype, const std::string& name, |
- std::vector<const RecordParsed*>* records) const; |
- |
- // Parse the response and alert relevant listeners. |
- void HandlePacket(DnsResponse* response, int bytes_read) override; |
- |
- void OnConnectionError(int error) override; |
- |
- private: |
- typedef std::pair<std::string, uint16> ListenerKey; |
- typedef std::map<ListenerKey, ObserverList<MDnsListenerImpl>* > |
- ListenerMap; |
- |
- // Alert listeners of an update to the cache. |
- void AlertListeners(MDnsCache::UpdateType update_type, |
- const ListenerKey& key, const RecordParsed* record); |
- |
- // Schedule a cache cleanup to a specific time, cancelling other cleanups. |
- void ScheduleCleanup(base::Time cleanup); |
- |
- // Clean up the cache and schedule a new cleanup. |
- void DoCleanup(); |
- |
- // Callback for when a record is removed from the cache. |
- void OnRecordRemoved(const RecordParsed* record); |
- |
- void NotifyNsecRecord(const RecordParsed* record); |
- |
- // Delete and erase the observer list for |key|. Only deletes the observer |
- // list if is empty. |
- void CleanupObserverList(const ListenerKey& key); |
- |
- ListenerMap listeners_; |
- |
- MDnsCache cache_; |
- |
- base::CancelableClosure cleanup_callback_; |
- base::Time scheduled_cleanup_; |
- |
- scoped_ptr<MDnsConnection> connection_; |
- |
- DISALLOW_COPY_AND_ASSIGN(Core); |
- }; |
- |
- MDnsClientImpl(); |
- ~MDnsClientImpl() override; |
- |
- // MDnsClient implementation: |
- scoped_ptr<MDnsListener> CreateListener( |
- uint16 rrtype, |
- const std::string& name, |
- MDnsListener::Delegate* delegate) override; |
- |
- scoped_ptr<MDnsTransaction> CreateTransaction( |
- uint16 rrtype, |
- const std::string& name, |
- int flags, |
- const MDnsTransaction::ResultCallback& callback) override; |
- |
- bool StartListening(MDnsSocketFactory* socket_factory) override; |
- void StopListening() override; |
- bool IsListening() const override; |
- |
- Core* core() { return core_.get(); } |
- |
- private: |
- scoped_ptr<Core> core_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MDnsClientImpl); |
-}; |
- |
-class MDnsListenerImpl : public MDnsListener, |
- public base::SupportsWeakPtr<MDnsListenerImpl> { |
- public: |
- MDnsListenerImpl(uint16 rrtype, |
- const std::string& name, |
- MDnsListener::Delegate* delegate, |
- MDnsClientImpl* client); |
- |
- ~MDnsListenerImpl() override; |
- |
- // MDnsListener implementation: |
- bool Start() override; |
- |
- // Actively refresh any received records. |
- void SetActiveRefresh(bool active_refresh) override; |
- |
- const std::string& GetName() const override; |
- |
- uint16 GetType() const override; |
- |
- MDnsListener::Delegate* delegate() { return delegate_; } |
- |
- // Alert the delegate of a record update. |
- void HandleRecordUpdate(MDnsCache::UpdateType update_type, |
- const RecordParsed* record_parsed); |
- |
- // Alert the delegate of the existence of an Nsec record. |
- void AlertNsecRecord(); |
- |
- private: |
- void ScheduleNextRefresh(); |
- void DoRefresh(); |
- |
- uint16 rrtype_; |
- std::string name_; |
- MDnsClientImpl* client_; |
- MDnsListener::Delegate* delegate_; |
- |
- base::Time last_update_; |
- uint32 ttl_; |
- bool started_; |
- bool active_refresh_; |
- |
- base::CancelableClosure next_refresh_; |
- DISALLOW_COPY_AND_ASSIGN(MDnsListenerImpl); |
-}; |
- |
-class MDnsTransactionImpl : public base::SupportsWeakPtr<MDnsTransactionImpl>, |
- public MDnsTransaction, |
- public MDnsListener::Delegate { |
- public: |
- MDnsTransactionImpl(uint16 rrtype, |
- const std::string& name, |
- int flags, |
- const MDnsTransaction::ResultCallback& callback, |
- MDnsClientImpl* client); |
- ~MDnsTransactionImpl() override; |
- |
- // MDnsTransaction implementation: |
- bool Start() override; |
- |
- const std::string& GetName() const override; |
- uint16 GetType() const override; |
- |
- // MDnsListener::Delegate implementation: |
- void OnRecordUpdate(MDnsListener::UpdateType update, |
- const RecordParsed* record) override; |
- void OnNsecRecord(const std::string& name, unsigned type) override; |
- |
- void OnCachePurged() override; |
- |
- private: |
- bool is_active() { return !callback_.is_null(); } |
- |
- void Reset(); |
- |
- // Trigger the callback and reset all related variables. |
- void TriggerCallback(MDnsTransaction::Result result, |
- const RecordParsed* record); |
- |
- // Internal callback for when a cache record is found. |
- void CacheRecordFound(const RecordParsed* record); |
- |
- // Signal the transactionis over and release all related resources. |
- void SignalTransactionOver(); |
- |
- // Reads records from the cache and calls the callback for every |
- // record read. |
- void ServeRecordsFromCache(); |
- |
- // Send a query to the network and set up a timeout to time out the |
- // transaction. Returns false if it fails to start listening on the network |
- // or if it fails to send a query. |
- bool QueryAndListen(); |
- |
- uint16 rrtype_; |
- std::string name_; |
- MDnsTransaction::ResultCallback callback_; |
- |
- scoped_ptr<MDnsListener> listener_; |
- base::CancelableCallback<void()> timeout_; |
- |
- MDnsClientImpl* client_; |
- |
- bool started_; |
- int flags_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MDnsTransactionImpl); |
-}; |
- |
-} // namespace net |
-#endif // NET_DNS_MDNS_CLIENT_IMPL_H_ |