Index: pkg/mdns/lib/src/native_protocol_client.dart |
diff --git a/pkg/mdns/lib/src/native_protocol_client.dart b/pkg/mdns/lib/src/native_protocol_client.dart |
deleted file mode 100644 |
index 23854300ee9281e44c4dac70c3755474579346bb..0000000000000000000000000000000000000000 |
--- a/pkg/mdns/lib/src/native_protocol_client.dart |
+++ /dev/null |
@@ -1,93 +0,0 @@ |
-// Copyright (c) 2015, the Fletch project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE.md file. |
- |
-library mdns.src.native_protocol_client; |
- |
-import 'dart:async'; |
-import 'dart:collection'; |
-import 'dart:io'; |
- |
-import 'package:mdns/mdns.dart'; |
-import 'package:mdns/src/constants.dart'; |
-import 'package:mdns/src/lookup_resolver.dart'; |
-import 'package:mdns/src/packet.dart'; |
- |
-// Implementation of mDNS client using the native protocol. |
-class NativeProtocolMDnsClient implements MDnsClient { |
- bool _starting = false; |
- bool _started = false; |
- RawDatagramSocket _incoming; |
- final List<RawDatagramSocket> _sockets = <RawDatagramSocket>[]; |
- final LookupResolver _resolver = new LookupResolver(); |
- |
- /// Start the mDNS client. |
- Future start() async { |
- if (_started && _starting) { |
- throw new StateError('mDNS client already started'); |
- } |
- _starting = true; |
- |
- // Listen on all addresses. |
- _incoming = await RawDatagramSocket.bind( |
- InternetAddress.ANY_IP_V4, mDnsPort, reuseAddress: true); |
- |
- // Find all network interfaces with an IPv4 address. |
- var interfaces = |
- await NetworkInterface.list(type: InternetAddressType.IP_V4); |
- for (NetworkInterface interface in interfaces) { |
- // Create a socket for sending on each adapter. |
- var socket = await RawDatagramSocket.bind( |
- interface.addresses[0], mDnsPort, reuseAddress: true); |
- _sockets.add(socket); |
- |
- // Join multicast on this interface. |
- _incoming.joinMulticast(mDnsAddress, interface); |
- } |
- _incoming.listen(_handleIncoming); |
- |
- _starting = false; |
- _started = true; |
- } |
- |
- void stop() { |
- if (!_started) return; |
- if (_starting) { |
- throw new StateError('Cannot stop mDNS client wile it is starting'); |
- } |
- |
- _sockets.forEach((socket) => socket.close()); |
- _incoming.close(); |
- |
- _started = false; |
- } |
- |
- Future<InternetAddress> lookup( |
- String hostname, {Duration timeout: const Duration(seconds: 5)}) { |
- if (!_started) { |
- throw new StateError('mDNS client is not started'); |
- } |
- |
- // Add the pending request before sending the query. |
- var future = _resolver.addPendingRequest(hostname, timeout); |
- |
- // Send the request on all interfaces. |
- List<int> packet = encodeMDnsQuery(hostname); |
- for (int i = 0; i < _sockets.length; i++) { |
- _sockets[i].send(packet, mDnsAddress, mDnsPort); |
- } |
- |
- return future; |
- } |
- |
- // Process incoming datagrams. |
- _handleIncoming(event) { |
- if (event == RawSocketEvent.READ) { |
- var data = _incoming.receive(); |
- var response = decodeMDnsResponse(data.data); |
- if (response != null) { |
- _resolver.handleResponse(response); |
- } |
- } |
- } |
-} |