aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRene Treffer <treffer+github@measite.de>2014-06-08 15:37:40 +0200
committerRene Treffer <treffer+github@measite.de>2014-06-08 15:37:40 +0200
commitf66c0db63f0c0b65ad59ac1a8aaadc1cbaf40761 (patch)
treed8f8364ccd928865b04056cdf3ac2c77812a5fa7
parent152be6eb1a22da8cebe24ac4ee05b487936c9f2a (diff)
parent52807fe7c415e9977cd2d7191b7e1251c9216256 (diff)
Merge pull request #3 from Flowdalic/androidagnostic
Make minidns Android agnostic
-rw-r--r--AndroidManifest.xml13
-rw-r--r--README.md2
-rw-r--r--build.gradle154
-rw-r--r--build.xml92
-rw-r--r--proguard-project.txt0
-rw-r--r--project.properties2
-rw-r--r--src/main/java/de/measite/minidns/Client.java (renamed from src/de/measite/minidns/Client.java)42
-rw-r--r--src/main/java/de/measite/minidns/DNSMessage.java (renamed from src/de/measite/minidns/DNSMessage.java)0
-rw-r--r--src/main/java/de/measite/minidns/Question.java (renamed from src/de/measite/minidns/Question.java)0
-rw-r--r--src/main/java/de/measite/minidns/Record.java (renamed from src/de/measite/minidns/Record.java)0
-rw-r--r--src/main/java/de/measite/minidns/record/A.java (renamed from src/de/measite/minidns/record/A.java)0
-rw-r--r--src/main/java/de/measite/minidns/record/AAAA.java (renamed from src/de/measite/minidns/record/AAAA.java)0
-rw-r--r--src/main/java/de/measite/minidns/record/CNAME.java (renamed from src/de/measite/minidns/record/CNAME.java)0
-rw-r--r--src/main/java/de/measite/minidns/record/Data.java (renamed from src/de/measite/minidns/record/Data.java)0
-rw-r--r--src/main/java/de/measite/minidns/record/NS.java (renamed from src/de/measite/minidns/record/NS.java)0
-rw-r--r--src/main/java/de/measite/minidns/record/SRV.java (renamed from src/de/measite/minidns/record/SRV.java)0
-rw-r--r--src/main/java/de/measite/minidns/util/NameUtil.java (renamed from src/de/measite/minidns/util/NameUtil.java)0
17 files changed, 146 insertions, 159 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
deleted file mode 100644
index 6c9477d9..00000000
--- a/AndroidManifest.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="de.measite.minidns"
- android:versionCode="1"
- android:versionName="1.0" >
-
- <uses-sdk
- android:minSdkVersion="9"
- android:targetSdkVersion="19" />
-
- <application/>
-
-</manifest>
diff --git a/README.md b/README.md
index 99ba78b3..3c1417a1 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
MiniDNS
-------
-MiniDNS is a minial dns client library for android. It can parse a basic set
+MiniDNS is a minimal dns client library for android. It can parse a basic set
of resource records (A, AAAA, NS, SRV) and is easy to use and extend.
This library is not intended to be used as a DNS server. You might want to
diff --git a/build.gradle b/build.gradle
index ae9c7693..7cf46718 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,34 +1,126 @@
-buildscript {
- repositories {
- mavenCentral()
- }
-
- dependencies {
- classpath 'com.android.tools.build:gradle:0.9.0'
- }
+apply plugin: 'java'
+apply plugin: 'eclipse'
+apply plugin: 'maven'
+apply plugin: 'osgi'
+apply plugin: 'signing'
+
+ext {
+ shortVersion = '0.1'
+ isSnapshot = true
+ gitCommit = getGitCommit()
+ isReleaseVersion = !shortVersion
+ sonatypeCredentialsAvailable = project.hasProperty('sonatypeUsername') && project.hasProperty('sonatypePassword')
+ signingRequired = isReleaseVersion
+ sonatypeSnapshotUrl = 'https://oss.sonatype.org/content/repositories/snapshots'
+ sonatypeStagingUrl = 'https://oss.sonatype.org/service/local/staging/deploy/maven2'
+ buildDate = (new java.text.SimpleDateFormat("yyyy-MM-dd")).format(new Date())
+}
+
+group = 'de.measite.minidns'
+description = "A minimal DNS client library with support for A, AAAA, NS and SRV records"
+sourceCompatibility = 1.7
+version = shortVersion
+if (isSnapshot) {
+ version += '-SNAPSHOT'
+}
+
+jar {
+ manifest {
+ instruction 'Implementation-GitRevision:', project.ext.gitCommit
+ }
+}
+
+gradle.taskGraph.whenReady { taskGraph ->
+ if (signingRequired
+ && taskGraph.allTasks.any { it instanceof Sign }) {
+ // Use Java 6's console to read from the console (no good for a CI environment)
+ Console console = System.console()
+ console.printf '\n\nWe have to sign some things in this build.\n\nPlease enter your signing details.\n\n'
+ def password = console.readPassword('GnuPG Private Key Password: ')
+
+ allprojects { ext.'signing.password' = password }
+
+ console.printf '\nThanks.\n\n'
+ }
}
-apply plugin: 'android-library'
-
-android {
- compileSdkVersion 19
- buildToolsVersion '19.0.3'
-
- // NOTE: We are using the old folder structure to also support Eclipse
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifest.xml'
- java.srcDirs = ['src']
- resources.srcDirs = ['src']
- aidl.srcDirs = ['src']
- renderscript.srcDirs = ['src']
- res.srcDirs = ['res']
- assets.srcDirs = ['assets']
- }
- }
-
- // Do not abort build if lint finds errors
- lintOptions {
- abortOnError false
- }
+uploadArchives {
+ repositories {
+ mavenDeployer {
+ if (signingRequired) {
+ beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
+ }
+ repository(url: project.sonatypeStagingUrl) {
+ if (sonatypeCredentialsAvailable) {
+ authentication(userName: sonatypeUsername, password: sonatypePassword)
+ }
+ }
+ snapshotRepository(url: project.sonatypeSnapshotUrl) {
+ if (sonatypeCredentialsAvailable) {
+ authentication(userName: sonatypeUsername, password: sonatypePassword)
+ }
+ }
+
+ pom.project {
+ name 'minidns'
+ packaging 'jar'
+ inceptionYear '2014'
+ url 'https://github.com/rtreffer/minidns'
+ description project.description
+
+ issueManagement {
+ system 'GitHub'
+ url 'https://github.com/rtreffer/minidns/issues'
+ }
+
+ distributionManagement {
+ snapshotRepository {
+ id 'minidns.snapshot'
+ url project.sonatypeSnapshotUrl
+ }
+ }
+
+ scm {
+ url 'https://github.com/rtreffer/minidns'
+ connection 'scm:git:https://github.com/rtreffer/minidns.git'
+ developerConnection 'scm:git:https://github.com/rtreffer/minidns.git'
+ }
+
+ licenses {
+ license {
+ name 'The Apache Software License, Version 2.0'
+ url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
+ distribution 'repo'
+ }
+ }
+
+ developers {
+ developer {
+ id 'rtreffer'
+ name 'Rene Treffer'
+ }
+ developer {
+ id 'flow'
+ name 'Florian Schmaus'
+ email 'flow@geekplace.eu'
+ }
+ }
+ }
+ }
+ }
+ signing {
+ required { signingRequired }
+ sign configurations.archives
+ }
+}
+
+def getGitCommit() {
+ def dotGit = new File("$projectDir/.git")
+ if (!dotGit.isDirectory()) return 'non-git build'
+
+ def cmd = 'git describe --all --dirty=+'
+ def proc = cmd.execute()
+ def gitCommit = proc.text.trim()
+ assert !gitCommit.isEmpty()
+ gitCommit
}
diff --git a/build.xml b/build.xml
deleted file mode 100644
index e10480a0..00000000
--- a/build.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="minidns-library" default="help">
-
- <!-- The local.properties file is created and updated by the 'android' tool.
-It contains the path to the SDK. It should *NOT* be checked into
-Version Control Systems. -->
- <property file="local.properties" />
-
- <!-- The ant.properties file can be created by you. It is only edited by the
-'android' tool to add properties to it.
-This is the place to change some Ant specific build properties.
-Here are some properties you may want to change/update:
-
-source.dir
-The name of the source directory. Default is 'src'.
-out.dir
-The name of the output directory. Default is 'bin'.
-
-For other overridable properties, look at the beginning of the rules
-files in the SDK, at tools/ant/build.xml
-
-Properties related to the SDK location or the project target should
-be updated using the 'android' tool with the 'update' action.
-
-This file is an integral part of the build system for your
-application and should be checked into Version Control Systems.
-
--->
- <property file="ant.properties" />
-
- <!-- if sdk.dir was not set from one of the property file, then
-get it from the ANDROID_HOME env var.
-This must be done before we load project.properties since
-the proguard config can use sdk.dir -->
- <property environment="env" />
- <condition property="sdk.dir" value="${env.ANDROID_HOME}">
- <isset property="env.ANDROID_HOME" />
- </condition>
-
- <!-- The project.properties file is created and updated by the 'android'
-tool, as well as ADT.
-
-This contains project specific properties such as project target, and library
-dependencies. Lower level build properties are stored in ant.properties
-(or in .classpath for Eclipse projects).
-
-This file is an integral part of the build system for your
-application and should be checked into Version Control Systems. -->
- <loadproperties srcFile="project.properties" />
-
- <!-- quick check on sdk.dir -->
- <fail
- message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
- unless="sdk.dir"
- />
-
- <!--
-Import per project custom build rules if present at the root of the project.
-This is the place to put custom intermediary targets such as:
--pre-build
--pre-compile
--post-compile (This is typically used for code obfuscation.
-Compiled code location: ${out.classes.absolute.dir}
-If this is not done in place, override ${out.dex.input.absolute.dir})
--post-package
--post-build
--pre-clean
--->
- <import file="custom_rules.xml" optional="true" />
-
- <!-- Import the actual build file.
-
-To customize existing targets, there are two options:
-- Customize only one target:
-- copy/paste the target into this file, *before* the
-<import> task.
-- customize it to your needs.
-- Customize the whole content of build.xml
-- copy/paste the content of the rules files (minus the top node)
-into this file, replacing the <import> task.
-- customize to your needs.
-
-***********************
-****** IMPORTANT ******
-***********************
-In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
-in order to avoid having your file be overridden by tools such as "android update project"
--->
- <!-- version-tag: 1 -->
- <import file="${sdk.dir}/tools/ant/build.xml" />
-
-</project>
diff --git a/proguard-project.txt b/proguard-project.txt
deleted file mode 100644
index e69de29b..00000000
--- a/proguard-project.txt
+++ /dev/null
diff --git a/project.properties b/project.properties
deleted file mode 100644
index 9e86aa64..00000000
--- a/project.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-target=android-19
-android.library=true
diff --git a/src/de/measite/minidns/Client.java b/src/main/java/de/measite/minidns/Client.java
index 8bc75d01..cad3902a 100644
--- a/src/de/measite/minidns/Client.java
+++ b/src/main/java/de/measite/minidns/Client.java
@@ -14,8 +14,9 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Random;
+import java.util.logging.Level;
+import java.util.logging.Logger;
-import android.util.Log;
import de.measite.minidns.Record.CLASS;
import de.measite.minidns.Record.TYPE;
@@ -25,6 +26,8 @@ import de.measite.minidns.Record.TYPE;
*/
public class Client {
+ private static final Logger LOGGER = Logger.getLogger(Client.class.getName());
+
/**
* The internal random class for sequence generation.
*/
@@ -129,18 +132,19 @@ public class Client {
message.setRecursionDesired(true);
message.setId(random.nextInt());
byte[] buf = message.toArray();
- DatagramSocket socket = new DatagramSocket();
- DatagramPacket packet = new DatagramPacket(
- buf, buf.length, InetAddress.getByName(host), port);
- socket.setSoTimeout(timeout);
- socket.send(packet);
- packet = new DatagramPacket(new byte[bufferSize], bufferSize);
- socket.receive(packet);
- DNSMessage dnsMessage = DNSMessage.parse(packet.getData());
- if (dnsMessage.getId() != message.getId()) {
- return null;
+ try (DatagramSocket socket = new DatagramSocket()) {
+ DatagramPacket packet = new DatagramPacket(buf, buf.length,
+ InetAddress.getByName(host), port);
+ socket.setSoTimeout(timeout);
+ socket.send(packet);
+ packet = new DatagramPacket(new byte[bufferSize], bufferSize);
+ socket.receive(packet);
+ DNSMessage dnsMessage = DNSMessage.parse(packet.getData());
+ if (dnsMessage.getId() != message.getId()) {
+ return null;
+ }
+ return dnsMessage;
}
- return dnsMessage;
}
/**
@@ -165,6 +169,7 @@ public class Client {
}
}
} catch (IOException ioe) {
+ LOGGER.log(Level.FINE, "IOException in query", ioe);
}
}
return null;
@@ -177,22 +182,19 @@ public class Client {
public String[] findDNS() {
String[] result = findDNSByReflection();
if (result != null) {
- Log.d("minidns/client",
- "Got DNS servers via reflection: " + Arrays.toString(result));
+ LOGGER.fine("Got DNS servers via reflection: " + Arrays.toString(result));
return result;
}
result = findDNSByExec();
if (result != null) {
- Log.d("minidns/client",
- "Got DNS servers via exec: " + Arrays.toString(result));
+ LOGGER.fine("Got DNS servers via exec: " + Arrays.toString(result));
return result;
}
// fallback for ipv4 and ipv6 connectivity
// see https://developers.google.com/speed/public-dns/docs/using
- Log.d("minidns/client",
- "No DNS found? Using fallback [8.8.8.8, [2001:4860:4860::8888]]");
+ LOGGER.fine("No DNS found? Using fallback [8.8.8.8, [2001:4860:4860::8888]]");
return new String[]{"8.8.8.8", "[2001:4860:4860::8888]"};
}
@@ -238,7 +240,7 @@ public class Client {
return server.toArray(new String[server.size()]);
}
} catch (IOException e) {
- e.printStackTrace();
+ LOGGER.log(Level.WARNING, "Exception in findDNSByExec", e);
}
return null;
}
@@ -283,7 +285,7 @@ public class Client {
}
} catch (Exception e) {
// we might trigger some problems this way
- e.printStackTrace();
+ LOGGER.log(Level.WARNING, "Exception in findDNSByReflection", e);
}
return null;
}
diff --git a/src/de/measite/minidns/DNSMessage.java b/src/main/java/de/measite/minidns/DNSMessage.java
index 14c8f04b..14c8f04b 100644
--- a/src/de/measite/minidns/DNSMessage.java
+++ b/src/main/java/de/measite/minidns/DNSMessage.java
diff --git a/src/de/measite/minidns/Question.java b/src/main/java/de/measite/minidns/Question.java
index 9d1e3f56..9d1e3f56 100644
--- a/src/de/measite/minidns/Question.java
+++ b/src/main/java/de/measite/minidns/Question.java
diff --git a/src/de/measite/minidns/Record.java b/src/main/java/de/measite/minidns/Record.java
index fb0b5d5f..fb0b5d5f 100644
--- a/src/de/measite/minidns/Record.java
+++ b/src/main/java/de/measite/minidns/Record.java
diff --git a/src/de/measite/minidns/record/A.java b/src/main/java/de/measite/minidns/record/A.java
index a85a7af0..a85a7af0 100644
--- a/src/de/measite/minidns/record/A.java
+++ b/src/main/java/de/measite/minidns/record/A.java
diff --git a/src/de/measite/minidns/record/AAAA.java b/src/main/java/de/measite/minidns/record/AAAA.java
index d89147b2..d89147b2 100644
--- a/src/de/measite/minidns/record/AAAA.java
+++ b/src/main/java/de/measite/minidns/record/AAAA.java
diff --git a/src/de/measite/minidns/record/CNAME.java b/src/main/java/de/measite/minidns/record/CNAME.java
index 4657b4a5..4657b4a5 100644
--- a/src/de/measite/minidns/record/CNAME.java
+++ b/src/main/java/de/measite/minidns/record/CNAME.java
diff --git a/src/de/measite/minidns/record/Data.java b/src/main/java/de/measite/minidns/record/Data.java
index 9cb80374..9cb80374 100644
--- a/src/de/measite/minidns/record/Data.java
+++ b/src/main/java/de/measite/minidns/record/Data.java
diff --git a/src/de/measite/minidns/record/NS.java b/src/main/java/de/measite/minidns/record/NS.java
index bf07e8c4..bf07e8c4 100644
--- a/src/de/measite/minidns/record/NS.java
+++ b/src/main/java/de/measite/minidns/record/NS.java
diff --git a/src/de/measite/minidns/record/SRV.java b/src/main/java/de/measite/minidns/record/SRV.java
index 32b70c4d..32b70c4d 100644
--- a/src/de/measite/minidns/record/SRV.java
+++ b/src/main/java/de/measite/minidns/record/SRV.java
diff --git a/src/de/measite/minidns/util/NameUtil.java b/src/main/java/de/measite/minidns/util/NameUtil.java
index 91a6649d..91a6649d 100644
--- a/src/de/measite/minidns/util/NameUtil.java
+++ b/src/main/java/de/measite/minidns/util/NameUtil.java