summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2011-07-01 09:19:49 (GMT)
committerKevin Smith <git@kismith.co.uk>2011-07-01 09:19:49 (GMT)
commit2da71a8a85486a494343f1662d64fb5ae5a2a44e (patch)
tree23992f9f2a00bac23b345e5c2cc9c1194efc25be /src/com/isode/stroke/network/PlatformDomainNameResolver.java
downloadstroke-2da71a8a85486a494343f1662d64fb5ae5a2a44e.zip
stroke-2da71a8a85486a494343f1662d64fb5ae5a2a44e.tar.bz2
Initial import
Diffstat (limited to 'src/com/isode/stroke/network/PlatformDomainNameResolver.java')
-rw-r--r--src/com/isode/stroke/network/PlatformDomainNameResolver.java103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/com/isode/stroke/network/PlatformDomainNameResolver.java b/src/com/isode/stroke/network/PlatformDomainNameResolver.java
new file mode 100644
index 0000000..50d0e11
--- /dev/null
+++ b/src/com/isode/stroke/network/PlatformDomainNameResolver.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2010, Isode Limited, London, England.
+ * All rights reserved.
+ */
+/*
+ * Copyright (c) 2010, Remko Tron¨on.
+ * All rights reserved.
+ */
+
+package com.isode.stroke.network;
+
+import com.isode.stroke.eventloop.EventLoop;
+import com.isode.stroke.eventloop.EventOwner;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Collection;
+
+
+public class PlatformDomainNameResolver extends DomainNameResolver {
+
+ private class AddressQuery extends DomainNameAddressQuery implements EventOwner {
+ AddressQuery(String host, EventLoop eventLoop) {
+ hostname = host;
+ this.eventLoop = eventLoop;
+ //FIXME: port asyncDNS
+// thread = null;
+// safeToJoin = false;
+ }
+
+ public void run() {
+ //FIXME: port asyncDNS
+ Collection<HostAddress> results = new ArrayList<HostAddress>();
+ try {
+ results.add(new HostAddress(InetAddress.getByName(hostname)));
+ } catch (UnknownHostException ex) {
+
+ }
+ onResult.emit(results, results.isEmpty() ? new DomainNameResolveError() : null);
+
+// safeToJoin = false;
+// thread = new boost::thread(boost::bind(&AddressQuery::doRun, shared_from_this()));
+ }
+// FIXME: Port async DNS.
+// void doRun() {
+// //std::cout << "PlatformDomainNameResolver::doRun()" << std::endl;
+// boost::asio::ip::tcp::resolver resolver(ioService);
+// boost::asio::ip::tcp::resolver::query query(hostname.getUTF8String(), "5222");
+// try {
+// //std::cout << "PlatformDomainNameResolver::doRun(): Resolving" << std::endl;
+// boost::asio::ip::tcp::resolver::iterator endpointIterator = resolver.resolve(query);
+// //std::cout << "PlatformDomainNameResolver::doRun(): Resolved" << std::endl;
+// if (endpointIterator == boost::asio::ip::tcp::resolver::iterator()) {
+// //std::cout << "PlatformDomainNameResolver::doRun(): Error 1" << std::endl;
+// emitError();
+// }
+// else {
+// std::vector<HostAddress> results;
+// for ( ; endpointIterator != boost::asio::ip::tcp::resolver::iterator(); ++endpointIterator) {
+// boost::asio::ip::address address = (*endpointIterator).endpoint().address();
+// results.push_back(address.is_v4() ? HostAddress(&address.to_v4().to_bytes()[0], 4) : HostAddress(&address.to_v6().to_bytes()[0], 16));
+// }
+//
+// //std::cout << "PlatformDomainNameResolver::doRun(): Success" << std::endl;
+// eventLoop->postEvent(
+// boost::bind(boost::ref(onResult), results, boost::optional<DomainNameResolveError>()),
+// shared_from_this());
+// }
+// }
+// catch (...) {
+// //std::cout << "PlatformDomainNameResolver::doRun(): Error 2" << std::endl;
+// emitError();
+// }
+// safeToJoin = true;
+// }
+//
+// void emitError() {
+// eventLoop->postEvent(boost::bind(boost::ref(onResult), std::vector<HostAddress>(), boost::optional<DomainNameResolveError>(DomainNameResolveError())), shared_from_this());
+// }
+//
+// boost::asio::io_service ioService;
+ String hostname;
+ EventLoop eventLoop;
+// boost::thread* thread;
+// bool safeToJoin;
+ }
+
+ public PlatformDomainNameResolver(EventLoop eventLoop) {
+ this.eventLoop = eventLoop;
+ }
+
+ @Override
+ public DomainNameServiceQuery createServiceQuery(String name) {
+ return new PlatformDomainNameServiceQuery(getNormalized(name), eventLoop);
+ }
+
+ @Override
+ public DomainNameAddressQuery createAddressQuery(String name) {
+ return new AddressQuery(getNormalized(name), eventLoop);
+ }
+
+ private final EventLoop eventLoop;
+}