Improved DNS server structure

This commit is contained in:
PeratX 2017-06-04 15:48:46 +08:00
parent 5a8fd1ee82
commit b9ff5188f4
18 changed files with 172 additions and 142 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -53,6 +53,7 @@
<img width="185" height="55" src="cutedns_logo.png"> <img width="185" height="55" src="cutedns_logo.png">
<br> <br>
<br> <br>
<img width="100" height="100" src="favicon.ico"><br>
<div style="font-size: 25px;"><a href="http://puredns.cn">Pure DNS</a></div> <div style="font-size: 25px;"><a href="http://puredns.cn">Pure DNS</a></div>
<br> <br>
<div style="font-size: 25px;"><a href="https://aixyz.com">AIXYZ DNS</a></div> <div style="font-size: 25px;"><a href="https://aixyz.com">AIXYZ DNS</a></div>
@ -69,8 +70,7 @@
<br> <br>
<div style="font-size: 10px; color: gray;"> <div style="font-size: 10px; color: gray;">
This program is free software: you can redistribute it and/or modify<br> This program is free software: you can redistribute it and/or modify<br>
it under the terms of the GNU General Public License as it under the terms of the GNU General Public License as published by<br>
published by<br>
the Free Software Foundation, either version 3 of the License, or<br> the Free Software Foundation, either version 3 of the License, or<br>
(at your option) any later version.<br> (at your option) any later version.<br>
<br> <br>

View File

@ -53,6 +53,7 @@
<img width="185" height="55" src="cutedns_logo.png"> <img width="185" height="55" src="cutedns_logo.png">
<br> <br>
<br> <br>
<img width="100" height="100" src="favicon.ico"><br>
<div style="font-size: 25px;"><a href="http://puredns.cn">Pure DNS</a></div> <div style="font-size: 25px;"><a href="http://puredns.cn">Pure DNS</a></div>
<br> <br>
<div style="font-size: 25px;"><a href="https://aixyz.com">AIXYZ DNS</a></div> <div style="font-size: 25px;"><a href="https://aixyz.com">AIXYZ DNS</a></div>
@ -69,8 +70,7 @@
<br> <br>
<div style="font-size: 10px; color: gray;"> <div style="font-size: 10px; color: gray;">
This program is free software: you can redistribute it and/or modify<br> This program is free software: you can redistribute it and/or modify<br>
it under the terms of the GNU General Public License as it under the terms of the GNU General Public License as published by<br>
published by<br>
the Free Software Foundation, either version 3 of the License, or<br> the Free Software Foundation, either version 3 of the License, or<br>
(at your option) any later version.<br> (at your option) any later version.<br>
<br> <br>

View File

@ -19,7 +19,11 @@ import com.google.gson.JsonParseException;
import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonReader;
import org.itxtech.daedalus.activity.MainActivity; import org.itxtech.daedalus.activity.MainActivity;
import org.itxtech.daedalus.service.DaedalusVpnService; import org.itxtech.daedalus.service.DaedalusVpnService;
import org.itxtech.daedalus.util.*; import org.itxtech.daedalus.util.Configurations;
import org.itxtech.daedalus.util.Logger;
import org.itxtech.daedalus.util.Rule;
import org.itxtech.daedalus.util.RulesResolver;
import org.itxtech.daedalus.util.server.DNSServer;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
@ -49,12 +53,12 @@ public class Daedalus extends Application {
private static final String SHORTCUT_ID_ACTIVATE = "shortcut_activate"; private static final String SHORTCUT_ID_ACTIVATE = "shortcut_activate";
public static final List<DnsServer> DNS_SERVERS = new ArrayList<DnsServer>() {{ public static final List<DNSServer> DNS_SERVERS = new ArrayList<DNSServer>() {{
add(new DnsServer("115.159.220.214", R.string.server_puredns_east_china)); add(new DNSServer("115.159.220.214", R.string.server_puredns_east_china));
add(new DnsServer("123.207.137.88", R.string.server_puredns_north_china)); add(new DNSServer("123.207.137.88", R.string.server_puredns_north_china));
add(new DnsServer("115.159.146.99", R.string.server_aixyz_east_china)); add(new DNSServer("115.159.146.99", R.string.server_aixyz_east_china));
add(new DnsServer("123.206.21.48", R.string.server_aixyz_south_china)); add(new DNSServer("123.206.21.48", R.string.server_aixyz_south_china));
add(new DnsServer("119.29.105.234", R.string.server_cutedns_south_china)); add(new DNSServer("119.29.105.234", R.string.server_cutedns_south_china));
}}; }};
public static final List<Rule> RULES = new ArrayList<Rule>() {{ public static final List<Rule> RULES = new ArrayList<Rule>() {{

View File

@ -26,7 +26,7 @@ import org.itxtech.daedalus.Daedalus;
import org.itxtech.daedalus.R; import org.itxtech.daedalus.R;
import org.itxtech.daedalus.fragment.*; import org.itxtech.daedalus.fragment.*;
import org.itxtech.daedalus.service.DaedalusVpnService; import org.itxtech.daedalus.service.DaedalusVpnService;
import org.itxtech.daedalus.util.DnsServerHelper; import org.itxtech.daedalus.util.server.DNSServerHelper;
/** /**
* Daedalus Project * Daedalus Project
@ -175,8 +175,8 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
public void onActivityResult(int request, int result, Intent data) { public void onActivityResult(int request, int result, Intent data) {
if (result == Activity.RESULT_OK) { if (result == Activity.RESULT_OK) {
DaedalusVpnService.primaryServer = DnsServerHelper.getAddressById(DnsServerHelper.getPrimary()); DaedalusVpnService.primaryServer = DNSServerHelper.getAddressById(DNSServerHelper.getPrimary());
DaedalusVpnService.secondaryServer = DnsServerHelper.getAddressById(DnsServerHelper.getSecondary()); DaedalusVpnService.secondaryServer = DNSServerHelper.getAddressById(DNSServerHelper.getSecondary());
Daedalus.getInstance().startService(Daedalus.getInstance().getServiceIntent().setAction(DaedalusVpnService.ACTION_ACTIVATE)); Daedalus.getInstance().startService(Daedalus.getInstance().getServiceIntent().setAction(DaedalusVpnService.ACTION_ACTIVATE));

View File

@ -13,8 +13,8 @@ import android.view.ViewGroup;
import org.itxtech.daedalus.Daedalus; import org.itxtech.daedalus.Daedalus;
import org.itxtech.daedalus.R; import org.itxtech.daedalus.R;
import org.itxtech.daedalus.activity.ConfigActivity; import org.itxtech.daedalus.activity.ConfigActivity;
import org.itxtech.daedalus.util.CustomDnsServer; import org.itxtech.daedalus.util.server.CustomDNSServer;
import org.itxtech.daedalus.util.DnsServer; import org.itxtech.daedalus.util.server.DNSServer;
/** /**
* Daedalus Project * Daedalus Project
@ -70,7 +70,7 @@ public class DnsServerConfigFragment extends ConfigFragment {
index = intent.getIntExtra(ConfigActivity.LAUNCH_ACTION_ID, ConfigActivity.ID_NONE); index = intent.getIntExtra(ConfigActivity.LAUNCH_ACTION_ID, ConfigActivity.ID_NONE);
if (index != ConfigActivity.ID_NONE) { if (index != ConfigActivity.ID_NONE) {
CustomDnsServer server = Daedalus.configurations.getCustomDnsServers().get(index); CustomDNSServer server = Daedalus.configurations.getCustomDNSServers().get(index);
serverName.setText(server.getName()); serverName.setText(server.getName());
serverName.setSummary(server.getName()); serverName.setSummary(server.getName());
serverAddress.setText(server.getAddress()); serverAddress.setText(server.getAddress());
@ -80,7 +80,7 @@ public class DnsServerConfigFragment extends ConfigFragment {
} else { } else {
serverName.setText(""); serverName.setText("");
serverAddress.setText(""); serverAddress.setText("");
String port = String.valueOf(DnsServer.DNS_SERVER_DEFAULT_PORT); String port = String.valueOf(DNSServer.DNS_SERVER_DEFAULT_PORT);
serverPort.setText(port); serverPort.setText(port);
serverPort.setSummary(port); serverPort.setSummary(port);
} }
@ -104,9 +104,9 @@ public class DnsServerConfigFragment extends ConfigFragment {
} }
if (index == ConfigActivity.ID_NONE) { if (index == ConfigActivity.ID_NONE) {
Daedalus.configurations.getCustomDnsServers().add(new CustomDnsServer(serverName, serverAddress, Integer.parseInt(serverPort))); Daedalus.configurations.getCustomDNSServers().add(new CustomDNSServer(serverName, serverAddress, Integer.parseInt(serverPort)));
} else { } else {
CustomDnsServer server = Daedalus.configurations.getCustomDnsServers().get(index); CustomDNSServer server = Daedalus.configurations.getCustomDNSServers().get(index);
server.setName(serverName); server.setName(serverName);
server.setAddress(serverAddress); server.setAddress(serverAddress);
server.setPort(Integer.parseInt(serverPort)); server.setPort(Integer.parseInt(serverPort));
@ -120,7 +120,7 @@ public class DnsServerConfigFragment extends ConfigFragment {
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
Daedalus.configurations.getCustomDnsServers().remove(index); Daedalus.configurations.getCustomDNSServers().remove(index);
getActivity().finish(); getActivity().finish();
} }
}) })

View File

@ -14,8 +14,8 @@ import android.widget.TextView;
import org.itxtech.daedalus.Daedalus; import org.itxtech.daedalus.Daedalus;
import org.itxtech.daedalus.R; import org.itxtech.daedalus.R;
import org.itxtech.daedalus.activity.ConfigActivity; import org.itxtech.daedalus.activity.ConfigActivity;
import org.itxtech.daedalus.util.CustomDnsServer; import org.itxtech.daedalus.util.server.CustomDNSServer;
import org.itxtech.daedalus.util.DnsServerHelper; import org.itxtech.daedalus.util.server.DNSServerHelper;
/** /**
* Daedalus Project * Daedalus Project
@ -30,7 +30,7 @@ import org.itxtech.daedalus.util.DnsServerHelper;
*/ */
public class DnsServersFragment extends ToolbarFragment { public class DnsServersFragment extends ToolbarFragment {
private DnsServersFragment.DnsServerAdapter adapter; private DnsServersFragment.DnsServerAdapter adapter;
private CustomDnsServer server = null; private CustomDNSServer server = null;
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@ -45,8 +45,8 @@ public class DnsServersFragment extends ToolbarFragment {
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
if (viewHolder instanceof ViewHolder) { if (viewHolder instanceof ViewHolder) {
int index = ((ViewHolder) viewHolder).getIndex(); int index = ((ViewHolder) viewHolder).getIndex();
if (index < Daedalus.configurations.getCustomDnsServers().size() && if (index < Daedalus.configurations.getCustomDNSServers().size() &&
DnsServerHelper.isInUsing(Daedalus.configurations.getCustomDnsServers().get(index))) { DNSServerHelper.isInUsing(Daedalus.configurations.getCustomDNSServers().get(index))) {
return 0; return 0;
} }
} }
@ -61,8 +61,8 @@ public class DnsServersFragment extends ToolbarFragment {
@Override @Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getAdapterPosition(); int position = viewHolder.getAdapterPosition();
server = Daedalus.configurations.getCustomDnsServers().get(position); server = Daedalus.configurations.getCustomDNSServers().get(position);
Daedalus.configurations.getCustomDnsServers().remove(position); Daedalus.configurations.getCustomDNSServers().remove(position);
Snackbar.make(view, R.string.action_removed, Snackbar.LENGTH_LONG) Snackbar.make(view, R.string.action_removed, Snackbar.LENGTH_LONG)
.setAction(R.string.action_undo, new SnackbarClickListener(position)).show(); .setAction(R.string.action_undo, new SnackbarClickListener(position)).show();
adapter.notifyItemRemoved(position); adapter.notifyItemRemoved(position);
@ -98,7 +98,7 @@ public class DnsServersFragment extends ToolbarFragment {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Daedalus.configurations.getCustomDnsServers().add(position, server); Daedalus.configurations.getCustomDNSServers().add(position, server);
adapter.notifyItemInserted(position); adapter.notifyItemInserted(position);
} }
} }
@ -122,7 +122,7 @@ public class DnsServersFragment extends ToolbarFragment {
private class DnsServerAdapter extends RecyclerView.Adapter<ViewHolder> { private class DnsServerAdapter extends RecyclerView.Adapter<ViewHolder> {
@Override @Override
public void onBindViewHolder(ViewHolder holder, int position) { public void onBindViewHolder(ViewHolder holder, int position) {
CustomDnsServer server = Daedalus.configurations.getCustomDnsServers().get(position); CustomDNSServer server = Daedalus.configurations.getCustomDNSServers().get(position);
holder.setIndex(position); holder.setIndex(position);
holder.textViewName.setText(server.getName()); holder.textViewName.setText(server.getName());
holder.textViewAddress.setText(server.getAddress() + ":" + server.getPort()); holder.textViewAddress.setText(server.getAddress() + ":" + server.getPort());
@ -130,7 +130,7 @@ public class DnsServersFragment extends ToolbarFragment {
@Override @Override
public int getItemCount() { public int getItemCount() {
return Daedalus.configurations.getCustomDnsServers().size(); return Daedalus.configurations.getCustomDNSServers().size();
} }
@Override @Override
@ -162,7 +162,7 @@ public class DnsServersFragment extends ToolbarFragment {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (!DnsServerHelper.isInUsing(Daedalus.configurations.getCustomDnsServers().get(index))) { if (!DNSServerHelper.isInUsing(Daedalus.configurations.getCustomDNSServers().get(index))) {
Daedalus.getInstance().startActivity(new Intent(Daedalus.getInstance(), ConfigActivity.class) Daedalus.getInstance().startActivity(new Intent(Daedalus.getInstance(), ConfigActivity.class)
.putExtra(ConfigActivity.LAUNCH_ACTION_ID, index) .putExtra(ConfigActivity.LAUNCH_ACTION_ID, index)
.putExtra(ConfigActivity.LAUNCH_ACTION_FRAGMENT, ConfigActivity.LAUNCH_FRAGMENT_DNS_SERVER) .putExtra(ConfigActivity.LAUNCH_ACTION_FRAGMENT, ConfigActivity.LAUNCH_FRAGMENT_DNS_SERVER)

View File

@ -16,8 +16,9 @@ import de.measite.minidns.Record;
import de.measite.minidns.source.NetworkDataSource; import de.measite.minidns.source.NetworkDataSource;
import org.itxtech.daedalus.Daedalus; import org.itxtech.daedalus.Daedalus;
import org.itxtech.daedalus.R; import org.itxtech.daedalus.R;
import org.itxtech.daedalus.util.DnsServerHelper;
import org.itxtech.daedalus.util.Logger; import org.itxtech.daedalus.util.Logger;
import org.itxtech.daedalus.util.server.AbstractDNSServer;
import org.itxtech.daedalus.util.server.DNSServerHelper;
import java.io.IOException; import java.io.IOException;
import java.net.InetAddress; import java.net.InetAddress;
@ -46,17 +47,13 @@ public class DnsTestFragment extends ToolbarFragment {
this.type = type; this.type = type;
} }
private String getName() {
return name;
}
private Record.TYPE getType() { private Record.TYPE getType() {
return type; return type;
} }
@Override @Override
public String toString() { public String toString() {
return getName(); return name;
} }
} }
@ -71,9 +68,9 @@ public class DnsTestFragment extends ToolbarFragment {
final TextView textViewTestInfo = (TextView) view.findViewById(R.id.textView_test_info); final TextView textViewTestInfo = (TextView) view.findViewById(R.id.textView_test_info);
final Spinner spinnerServerChoice = (Spinner) view.findViewById(R.id.spinner_server_choice); final Spinner spinnerServerChoice = (Spinner) view.findViewById(R.id.spinner_server_choice);
ArrayAdapter spinnerArrayAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, DnsServerHelper.getNames(Daedalus.getInstance())); ArrayAdapter spinnerArrayAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, DNSServerHelper.getAllServers());
spinnerServerChoice.setAdapter(spinnerArrayAdapter); spinnerServerChoice.setAdapter(spinnerArrayAdapter);
spinnerServerChoice.setSelection(DnsServerHelper.getPosition(DnsServerHelper.getPrimary())); spinnerServerChoice.setSelection(DNSServerHelper.getPosition(DNSServerHelper.getPrimary()));
ArrayList<Type> types = new ArrayList<Type>() {{ ArrayList<Type> types = new ArrayList<Type>() {{
add(new Type("A", Record.TYPE.A)); add(new Type("A", Record.TYPE.A));
@ -101,21 +98,21 @@ public class DnsTestFragment extends ToolbarFragment {
ArrayAdapter<Type> typeAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, types); ArrayAdapter<Type> typeAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, types);
spinnerType.setAdapter(typeAdapter); spinnerType.setAdapter(typeAdapter);
final AutoCompleteTextView textViewTestUrl = (AutoCompleteTextView) view.findViewById(R.id.autoCompleteTextView_test_url); final AutoCompleteTextView textViewTestDomain = (AutoCompleteTextView) view.findViewById(R.id.autoCompleteTextView_test_url);
ArrayAdapter autoCompleteArrayAdapter = new ArrayAdapter<>(Daedalus.getInstance(), android.R.layout.simple_list_item_1, Daedalus.DEFAULT_TEST_DOMAINS); ArrayAdapter autoCompleteArrayAdapter = new ArrayAdapter<>(Daedalus.getInstance(), android.R.layout.simple_list_item_1, Daedalus.DEFAULT_TEST_DOMAINS);
textViewTestUrl.setAdapter(autoCompleteArrayAdapter); textViewTestDomain.setAdapter(autoCompleteArrayAdapter);
mRunnable = new Runnable() { mRunnable = new Runnable() {
@Override @Override
public void run() { public void run() {
try { try {
String testDomain = textViewTestUrl.getText().toString(); String testDomain = textViewTestDomain.getText().toString();
if (testDomain.equals("")) { if (testDomain.equals("")) {
testDomain = Daedalus.DEFAULT_TEST_DOMAINS[0]; testDomain = Daedalus.DEFAULT_TEST_DOMAINS[0];
} }
StringBuilder testText = new StringBuilder(); StringBuilder testText = new StringBuilder();
ArrayList<String> dnsServers = new ArrayList<String>() {{ ArrayList<String> dnsServers = new ArrayList<String>() {{
add(DnsServerHelper.getAddressByDescription(Daedalus.getInstance(), spinnerServerChoice.getSelectedItem().toString())); add(((AbstractDNSServer) spinnerServerChoice.getSelectedItem()).getAddress());
String servers = Daedalus.getPrefs().getString("dns_test_servers", ""); String servers = Daedalus.getPrefs().getString("dns_test_servers", "");
if (!servers.equals("")) { if (!servers.equals("")) {
addAll(Arrays.asList(servers.split(","))); addAll(Arrays.asList(servers.split(",")));
@ -134,7 +131,7 @@ public class DnsTestFragment extends ToolbarFragment {
private StringBuilder testServer(DNSQuery dnsQuery, Record.TYPE type, String server, String domain, StringBuilder testText) { private StringBuilder testServer(DNSQuery dnsQuery, Record.TYPE type, String server, String domain, StringBuilder testText) {
Logger.debug("Testing DNS " + server); Logger.debug("Testing DNS server" + server);
testText.append(getString(R.string.test_domain)).append(" ").append(domain).append("\n").append(getString(R.string.test_dns_server)).append(" ").append(server); testText.append(getString(R.string.test_domain)).append(" ").append(domain).append("\n").append(getString(R.string.test_dns_server)).append(" ").append(server);
mHandler.obtainMessage(DnsTestHandler.MSG_DISPLAY_STATUS, testText.toString()).sendToTarget(); mHandler.obtainMessage(DnsTestHandler.MSG_DISPLAY_STATUS, testText.toString()).sendToTarget();

View File

@ -9,7 +9,7 @@ import android.support.design.widget.Snackbar;
import android.view.View; import android.view.View;
import org.itxtech.daedalus.Daedalus; import org.itxtech.daedalus.Daedalus;
import org.itxtech.daedalus.R; import org.itxtech.daedalus.R;
import org.itxtech.daedalus.util.DnsServerHelper; import org.itxtech.daedalus.util.server.DNSServerHelper;
/** /**
* Daedalus Project * Daedalus Project
@ -29,20 +29,20 @@ public class GlobalConfigFragment extends PreferenceFragment {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Daedalus.getPrefs().edit() Daedalus.getPrefs().edit()
.putString("primary_server", DnsServerHelper.getPrimary()) .putString("primary_server", DNSServerHelper.getPrimary())
.putString("secondary_server", DnsServerHelper.getSecondary()) .putString("secondary_server", DNSServerHelper.getSecondary())
.apply(); .apply();
addPreferencesFromResource(R.xml.perf_settings); addPreferencesFromResource(R.xml.perf_settings);
ListPreference primaryServer = (ListPreference) findPreference("primary_server"); ListPreference primaryServer = (ListPreference) findPreference("primary_server");
primaryServer.setEntries(DnsServerHelper.getNames(Daedalus.getInstance())); primaryServer.setEntries(DNSServerHelper.getNames(Daedalus.getInstance()));
primaryServer.setEntryValues(DnsServerHelper.getIds()); primaryServer.setEntryValues(DNSServerHelper.getIds());
primaryServer.setSummary(DnsServerHelper.getDescription(primaryServer.getValue(), Daedalus.getInstance())); primaryServer.setSummary(DNSServerHelper.getDescription(primaryServer.getValue(), Daedalus.getInstance()));
primaryServer.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { primaryServer.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary(DnsServerHelper.getDescription((String) newValue, Daedalus.getInstance())); preference.setSummary(DNSServerHelper.getDescription((String) newValue, Daedalus.getInstance()));
Snackbar.make(getView(), R.string.notice_need_restart, Snackbar.LENGTH_LONG) Snackbar.make(getView(), R.string.notice_need_restart, Snackbar.LENGTH_LONG)
.setAction("Action", null).show(); .setAction("Action", null).show();
return true; return true;
@ -50,13 +50,13 @@ public class GlobalConfigFragment extends PreferenceFragment {
}); });
ListPreference secondaryServer = (ListPreference) findPreference("secondary_server"); ListPreference secondaryServer = (ListPreference) findPreference("secondary_server");
secondaryServer.setEntries(DnsServerHelper.getNames(Daedalus.getInstance())); secondaryServer.setEntries(DNSServerHelper.getNames(Daedalus.getInstance()));
secondaryServer.setEntryValues(DnsServerHelper.getIds()); secondaryServer.setEntryValues(DNSServerHelper.getIds());
secondaryServer.setSummary(DnsServerHelper.getDescription(secondaryServer.getValue(), Daedalus.getInstance())); secondaryServer.setSummary(DNSServerHelper.getDescription(secondaryServer.getValue(), Daedalus.getInstance()));
secondaryServer.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { secondaryServer.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary(DnsServerHelper.getDescription((String) newValue, Daedalus.getInstance())); preference.setSummary(DNSServerHelper.getDescription((String) newValue, Daedalus.getInstance()));
Snackbar.make(getView(), R.string.notice_need_restart, Snackbar.LENGTH_LONG) Snackbar.make(getView(), R.string.notice_need_restart, Snackbar.LENGTH_LONG)
.setAction("Action", null).show(); .setAction("Action", null).show();
return true; return true;

View File

@ -9,8 +9,8 @@ import android.system.OsConstants;
import android.system.StructPollfd; import android.system.StructPollfd;
import android.util.Log; import android.util.Log;
import org.itxtech.daedalus.service.DaedalusVpnService; import org.itxtech.daedalus.service.DaedalusVpnService;
import org.itxtech.daedalus.util.DnsServerHelper;
import org.itxtech.daedalus.util.Logger; import org.itxtech.daedalus.util.Logger;
import org.itxtech.daedalus.util.server.DNSServerHelper;
import org.pcap4j.packet.IpPacket; import org.pcap4j.packet.IpPacket;
import java.io.*; import java.io.*;
@ -136,7 +136,7 @@ public class TcpDnsProvider extends UdpDnsProvider {
service.protect(dnsSocket); service.protect(dnsSocket);
SocketAddress address = new InetSocketAddress(outPacket.getAddress(), DnsServerHelper.getPortOrDefault(outPacket.getAddress(), outPacket.getPort())); SocketAddress address = new InetSocketAddress(outPacket.getAddress(), DNSServerHelper.getPortOrDefault(outPacket.getAddress(), outPacket.getPort()));
dnsSocket.connect(address, 5000); dnsSocket.connect(address, 5000);
dnsSocket.setSoTimeout(5000); dnsSocket.setSoTimeout(5000);
Logger.info("TcpDnsProvider: Sending DNS query request"); Logger.info("TcpDnsProvider: Sending DNS query request");

View File

@ -13,9 +13,9 @@ import de.measite.minidns.Record;
import de.measite.minidns.record.A; import de.measite.minidns.record.A;
import de.measite.minidns.util.InetAddressUtil; import de.measite.minidns.util.InetAddressUtil;
import org.itxtech.daedalus.service.DaedalusVpnService; import org.itxtech.daedalus.service.DaedalusVpnService;
import org.itxtech.daedalus.util.DnsServerHelper;
import org.itxtech.daedalus.util.Logger; import org.itxtech.daedalus.util.Logger;
import org.itxtech.daedalus.util.RulesResolver; import org.itxtech.daedalus.util.RulesResolver;
import org.itxtech.daedalus.util.server.DNSServerHelper;
import org.pcap4j.packet.*; import org.pcap4j.packet.*;
import org.pcap4j.packet.factory.PacketFactoryPropertiesLoader; import org.pcap4j.packet.factory.PacketFactoryPropertiesLoader;
import org.pcap4j.util.PropertiesLoader; import org.pcap4j.util.PropertiesLoader;
@ -325,7 +325,7 @@ public class UdpDnsProvider extends DnsProvider {
// the gateway to reduce the RTT. For further details, please see // the gateway to reduce the RTT. For further details, please see
// https://bugzilla.mozilla.org/show_bug.cgi?id=888268 // https://bugzilla.mozilla.org/show_bug.cgi?id=888268
DatagramPacket outPacket = new DatagramPacket(new byte[0], 0, 0, destAddr, DatagramPacket outPacket = new DatagramPacket(new byte[0], 0, 0, destAddr,
DnsServerHelper.getPortOrDefault(destAddr, parsedUdp.getHeader().getDstPort().valueAsInt())); DNSServerHelper.getPortOrDefault(destAddr, parsedUdp.getHeader().getDstPort().valueAsInt()));
forwardPacket(outPacket, null); forwardPacket(outPacket, null);
return; return;
} }
@ -363,7 +363,7 @@ public class UdpDnsProvider extends DnsProvider {
} else { } else {
Logger.info("DnsProvider: Resolving " + dnsQueryName + " Sending to " + destAddr); Logger.info("DnsProvider: Resolving " + dnsQueryName + " Sending to " + destAddr);
DatagramPacket outPacket = new DatagramPacket(dnsRawData, 0, dnsRawData.length, destAddr, DatagramPacket outPacket = new DatagramPacket(dnsRawData, 0, dnsRawData.length, destAddr,
DnsServerHelper.getPortOrDefault(destAddr, parsedUdp.getHeader().getDstPort().valueAsInt())); DNSServerHelper.getPortOrDefault(destAddr, parsedUdp.getHeader().getDstPort().valueAsInt()));
forwardPacket(outPacket, parsedPacket); forwardPacket(outPacket, parsedPacket);
} }
} catch (Exception e) { } catch (Exception e) {

View File

@ -6,8 +6,8 @@ import android.content.Intent;
import android.net.VpnService; import android.net.VpnService;
import org.itxtech.daedalus.Daedalus; import org.itxtech.daedalus.Daedalus;
import org.itxtech.daedalus.service.DaedalusVpnService; import org.itxtech.daedalus.service.DaedalusVpnService;
import org.itxtech.daedalus.util.DnsServerHelper;
import org.itxtech.daedalus.util.Logger; import org.itxtech.daedalus.util.Logger;
import org.itxtech.daedalus.util.server.DNSServerHelper;
/** /**
* Daedalus Project * Daedalus Project
@ -30,8 +30,8 @@ public class BootBroadcastReceiver extends BroadcastReceiver {
context.startActivity(vIntent); context.startActivity(vIntent);
} }
DaedalusVpnService.primaryServer = DnsServerHelper.getAddressById(DnsServerHelper.getPrimary()); DaedalusVpnService.primaryServer = DNSServerHelper.getAddressById(DNSServerHelper.getPrimary());
DaedalusVpnService.secondaryServer = DnsServerHelper.getAddressById(DnsServerHelper.getSecondary()); DaedalusVpnService.secondaryServer = DNSServerHelper.getAddressById(DNSServerHelper.getSecondary());
context.startService((new Intent(context, DaedalusVpnService.class)).setAction(DaedalusVpnService.ACTION_ACTIVATE)); context.startService((new Intent(context, DaedalusVpnService.class)).setAction(DaedalusVpnService.ACTION_ACTIVATE));

View File

@ -18,9 +18,9 @@ import org.itxtech.daedalus.provider.DnsProvider;
import org.itxtech.daedalus.provider.TcpDnsProvider; import org.itxtech.daedalus.provider.TcpDnsProvider;
import org.itxtech.daedalus.provider.UdpDnsProvider; import org.itxtech.daedalus.provider.UdpDnsProvider;
import org.itxtech.daedalus.receiver.StatusBarBroadcastReceiver; import org.itxtech.daedalus.receiver.StatusBarBroadcastReceiver;
import org.itxtech.daedalus.util.DnsServerHelper;
import org.itxtech.daedalus.util.Logger; import org.itxtech.daedalus.util.Logger;
import org.itxtech.daedalus.util.RulesResolver; import org.itxtech.daedalus.util.RulesResolver;
import org.itxtech.daedalus.util.server.DNSServerHelper;
import java.net.InetAddress; import java.net.InetAddress;
import java.util.HashMap; import java.util.HashMap;
@ -101,7 +101,7 @@ public class DaedalusVpnService extends VpnService implements Runnable {
} }
Daedalus.initHostsResolver(); Daedalus.initHostsResolver();
DnsServerHelper.buildPortCache(); DNSServerHelper.buildPortCache();
if (this.mThread == null) { if (this.mThread == null) {
this.mThread = new Thread(this, "DaedalusVpn"); this.mThread = new Thread(this, "DaedalusVpn");
@ -157,7 +157,7 @@ public class DaedalusVpnService extends VpnService implements Runnable {
if (shouldRefresh) { if (shouldRefresh) {
RulesResolver.clear(); RulesResolver.clear();
DnsServerHelper.clearPortCache(); DNSServerHelper.clearPortCache();
Logger.info("Daedalus VPN service has stopped"); Logger.info("Daedalus VPN service has stopped");
} }

View File

@ -3,6 +3,7 @@ package org.itxtech.daedalus.util;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonReader;
import org.itxtech.daedalus.Daedalus; import org.itxtech.daedalus.Daedalus;
import org.itxtech.daedalus.util.server.CustomDNSServer;
import java.io.File; import java.io.File;
import java.io.FileReader; import java.io.FileReader;
@ -26,7 +27,7 @@ public class Configurations {
private static File file; private static File file;
private ArrayList<CustomDnsServer> customDnsServers; private ArrayList<CustomDNSServer> customDNSServers;
private ArrayList<Rule> hostsRules; private ArrayList<Rule> hostsRules;
private ArrayList<Rule> dnsmasqRules; private ArrayList<Rule> dnsmasqRules;
@ -36,7 +37,7 @@ public class Configurations {
private long activateCounter; private long activateCounter;
int getNextDnsId() { public int getNextDnsId() {
if (totalDnsId < CUSTOM_ID_START) { if (totalDnsId < CUSTOM_ID_START) {
totalDnsId = CUSTOM_ID_START; totalDnsId = CUSTOM_ID_START;
} }
@ -58,11 +59,11 @@ public class Configurations {
this.activateCounter = activateCounter; this.activateCounter = activateCounter;
} }
public ArrayList<CustomDnsServer> getCustomDnsServers() { public ArrayList<CustomDNSServer> getCustomDNSServers() {
if (customDnsServers == null) { if (customDNSServers == null) {
customDnsServers = new ArrayList<>(); customDNSServers = new ArrayList<>();
} }
return customDnsServers; return customDNSServers;
} }
public ArrayList<Rule> getHostsRules() { public ArrayList<Rule> getHostsRules() {

View File

@ -0,0 +1,47 @@
package org.itxtech.daedalus.util.server;
/**
* Daedalus Project
*
* @author iTX Technologies
* @link https://itxtech.org
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*/
abstract public class AbstractDNSServer {
public static final int DNS_SERVER_DEFAULT_PORT = 53;
protected String address;
protected int port;
public AbstractDNSServer(String address, int port) {
this.address = address;
this.port = port;
}
public void setAddress(String address) {
this.address = address;
}
public void setPort(int port) {
this.port = port;
}
public String getAddress() {
return address;
}
public int getPort() {
return port;
}
public abstract String getName();
@Override
public String toString() {
return getName();
}
}

View File

@ -1,4 +1,4 @@
package org.itxtech.daedalus.util; package org.itxtech.daedalus.util.server;
import org.itxtech.daedalus.Daedalus; import org.itxtech.daedalus.Daedalus;
@ -13,16 +13,13 @@ import org.itxtech.daedalus.Daedalus;
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
*/ */
public class CustomDnsServer { public class CustomDNSServer extends AbstractDNSServer {
private String name; private String name;
private String address;
private int port;
private String id; private String id;
public CustomDnsServer(String name, String address, int port) { public CustomDNSServer(String name, String address, int port) {
super(address, port);
this.name = name; this.name = name;
this.address = address;
this.port = port;
this.id = String.valueOf(Daedalus.configurations.getNextDnsId()); this.id = String.valueOf(Daedalus.configurations.getNextDnsId());
} }
@ -38,23 +35,7 @@ public class CustomDnsServer {
return name; return name;
} }
public String getAddress() {
return address;
}
public int getPort() {
return port;
}
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
public void setAddress(String address) {
this.address = address;
}
public void setPort(int port) {
this.port = port;
}
} }

View File

@ -1,6 +1,7 @@
package org.itxtech.daedalus.util; package org.itxtech.daedalus.util.server;
import android.content.Context; import android.content.Context;
import org.itxtech.daedalus.Daedalus;
/** /**
* Daedalus Project * Daedalus Project
@ -13,41 +14,33 @@ import android.content.Context;
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
*/ */
public class DnsServer { public class DNSServer extends AbstractDNSServer {
public static int DNS_SERVER_DEFAULT_PORT = 53;
private static int totalId = 0; private static int totalId = 0;
private String id; private String id;
private String address;
private int port;
private int description = 0; private int description = 0;
public DnsServer(String address, int description, int port) { public DNSServer(String address, int description, int port) {
super(address, port);
this.id = String.valueOf(totalId++); this.id = String.valueOf(totalId++);
this.address = address;
this.description = description; this.description = description;
this.port = port;
} }
public DnsServer(String address, int description) { public DNSServer(String address, int description) {
this(address, description, DNS_SERVER_DEFAULT_PORT); this(address, description, DNS_SERVER_DEFAULT_PORT);
} }
public int getPort() {
return port;
}
public String getId() { public String getId() {
return id; return id;
} }
public String getAddress() {
return address;
}
public String getStringDescription(Context context) { public String getStringDescription(Context context) {
return context.getResources().getString(description); return context.getResources().getString(description);
} }
@Override
public String getName() {
return getStringDescription(Daedalus.getInstance());
}
} }

View File

@ -1,4 +1,4 @@
package org.itxtech.daedalus.util; package org.itxtech.daedalus.util.server;
import android.content.Context; import android.content.Context;
import org.itxtech.daedalus.Daedalus; import org.itxtech.daedalus.Daedalus;
@ -18,7 +18,7 @@ import java.util.HashMap;
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
*/ */
public class DnsServerHelper { public class DNSServerHelper {
private static HashMap<String, Integer> portCache = null; private static HashMap<String, Integer> portCache = null;
public static void clearPortCache() { public static void clearPortCache() {
@ -27,11 +27,11 @@ public class DnsServerHelper {
public static void buildPortCache() { public static void buildPortCache() {
portCache = new HashMap<>(); portCache = new HashMap<>();
for (DnsServer server : Daedalus.DNS_SERVERS) { for (DNSServer server : Daedalus.DNS_SERVERS) {
portCache.put(server.getAddress(), server.getPort()); portCache.put(server.getAddress(), server.getPort());
} }
for (CustomDnsServer server : Daedalus.configurations.getCustomDnsServers()) { for (CustomDNSServer server : Daedalus.configurations.getCustomDNSServers()) {
portCache.put(server.getAddress(), server.getPort()); portCache.put(server.getAddress(), server.getPort());
} }
@ -53,8 +53,8 @@ public class DnsServerHelper {
return intId; return intId;
} }
for (int i = 0; i < Daedalus.configurations.getCustomDnsServers().size(); i++) { for (int i = 0; i < Daedalus.configurations.getCustomDNSServers().size(); i++) {
if (Daedalus.configurations.getCustomDnsServers().get(i).getId().equals(id)) { if (Daedalus.configurations.getCustomDNSServers().get(i).getId().equals(id)) {
return i + Daedalus.DNS_SERVERS.size(); return i + Daedalus.DNS_SERVERS.size();
} }
} }
@ -62,18 +62,18 @@ public class DnsServerHelper {
} }
public static String getPrimary() { public static String getPrimary() {
return String.valueOf(DnsServerHelper.checkServerId(Integer.parseInt(Daedalus.getPrefs().getString("primary_server", "0")))); return String.valueOf(DNSServerHelper.checkServerId(Integer.parseInt(Daedalus.getPrefs().getString("primary_server", "0"))));
} }
public static String getSecondary() { public static String getSecondary() {
return String.valueOf(DnsServerHelper.checkServerId(Integer.parseInt(Daedalus.getPrefs().getString("secondary_server", "1")))); return String.valueOf(DNSServerHelper.checkServerId(Integer.parseInt(Daedalus.getPrefs().getString("secondary_server", "1"))));
} }
private static int checkServerId(int id) { private static int checkServerId(int id) {
if (id < (Daedalus.DNS_SERVERS.size() - 1)) { if (id < (Daedalus.DNS_SERVERS.size() - 1)) {
return id; return id;
} }
for (CustomDnsServer server : Daedalus.configurations.getCustomDnsServers()) { for (CustomDNSServer server : Daedalus.configurations.getCustomDNSServers()) {
if (server.getId().equals(String.valueOf(id))) { if (server.getId().equals(String.valueOf(id))) {
return id; return id;
} }
@ -82,28 +82,28 @@ public class DnsServerHelper {
} }
public static String getAddressById(String id) { public static String getAddressById(String id) {
for (DnsServer server : Daedalus.DNS_SERVERS) { for (DNSServer server : Daedalus.DNS_SERVERS) {
if (server.getId().equals(id)) { if (server.getId().equals(id)) {
return server.getAddress(); return server.getAddress();
} }
} }
for (CustomDnsServer customDnsServer : Daedalus.configurations.getCustomDnsServers()) { for (CustomDNSServer customDNSServer : Daedalus.configurations.getCustomDNSServers()) {
if (customDnsServer.getId().equals(id)) { if (customDNSServer.getId().equals(id)) {
return customDnsServer.getAddress(); return customDNSServer.getAddress();
} }
} }
return Daedalus.DNS_SERVERS.get(0).getAddress(); return Daedalus.DNS_SERVERS.get(0).getAddress();
} }
public static String getAddressByDescription(Context context, String description) { public static String getAddressByDescription(Context context, String description) {
for (DnsServer server : Daedalus.DNS_SERVERS) { for (DNSServer server : Daedalus.DNS_SERVERS) {
if (server.getStringDescription(context).equals(description)) { if (server.getStringDescription(context).equals(description)) {
return server.getAddress(); return server.getAddress();
} }
} }
for (CustomDnsServer customDnsServer : Daedalus.configurations.getCustomDnsServers()) { for (CustomDNSServer customDNSServer : Daedalus.configurations.getCustomDNSServers()) {
if (customDnsServer.getName().equals(description)) { if (customDNSServer.getName().equals(description)) {
return customDnsServer.getAddress(); return customDNSServer.getAddress();
} }
} }
return Daedalus.DNS_SERVERS.get(0).getAddress(); return Daedalus.DNS_SERVERS.get(0).getAddress();
@ -111,11 +111,11 @@ public class DnsServerHelper {
public static String[] getIds() { public static String[] getIds() {
ArrayList<String> servers = new ArrayList<>(Daedalus.DNS_SERVERS.size()); ArrayList<String> servers = new ArrayList<>(Daedalus.DNS_SERVERS.size());
for (DnsServer server : Daedalus.DNS_SERVERS) { for (DNSServer server : Daedalus.DNS_SERVERS) {
servers.add(server.getId()); servers.add(server.getId());
} }
for (CustomDnsServer customDnsServer : Daedalus.configurations.getCustomDnsServers()) { for (CustomDNSServer customDNSServer : Daedalus.configurations.getCustomDNSServers()) {
servers.add(customDnsServer.getId()); servers.add(customDNSServer.getId());
} }
String[] stringServers = new String[Daedalus.DNS_SERVERS.size()]; String[] stringServers = new String[Daedalus.DNS_SERVERS.size()];
return servers.toArray(stringServers); return servers.toArray(stringServers);
@ -123,31 +123,38 @@ public class DnsServerHelper {
public static String[] getNames(Context context) { public static String[] getNames(Context context) {
ArrayList<String> servers = new ArrayList<>(Daedalus.DNS_SERVERS.size()); ArrayList<String> servers = new ArrayList<>(Daedalus.DNS_SERVERS.size());
for (DnsServer server : Daedalus.DNS_SERVERS) { for (DNSServer server : Daedalus.DNS_SERVERS) {
servers.add(server.getStringDescription(context)); servers.add(server.getStringDescription(context));
} }
for (CustomDnsServer customDnsServer : Daedalus.configurations.getCustomDnsServers()) { for (CustomDNSServer customDNSServer : Daedalus.configurations.getCustomDNSServers()) {
servers.add(customDnsServer.getName()); servers.add(customDNSServer.getName());
} }
String[] stringServers = new String[Daedalus.DNS_SERVERS.size()]; String[] stringServers = new String[Daedalus.DNS_SERVERS.size()];
return servers.toArray(stringServers); return servers.toArray(stringServers);
} }
public static ArrayList<AbstractDNSServer> getAllServers() {
ArrayList<AbstractDNSServer> servers = new ArrayList<>(Daedalus.DNS_SERVERS.size());
servers.addAll(Daedalus.DNS_SERVERS);
servers.addAll(Daedalus.configurations.getCustomDNSServers());
return servers;
}
public static String getDescription(String id, Context context) { public static String getDescription(String id, Context context) {
for (DnsServer server : Daedalus.DNS_SERVERS) { for (DNSServer server : Daedalus.DNS_SERVERS) {
if (server.getId().equals(id)) { if (server.getId().equals(id)) {
return server.getStringDescription(context); return server.getStringDescription(context);
} }
} }
for (CustomDnsServer customDnsServer : Daedalus.configurations.getCustomDnsServers()) { for (CustomDNSServer customDNSServer : Daedalus.configurations.getCustomDNSServers()) {
if (customDnsServer.getId().equals(id)) { if (customDNSServer.getId().equals(id)) {
return customDnsServer.getName(); return customDNSServer.getName();
} }
} }
return Daedalus.DNS_SERVERS.get(0).getStringDescription(context); return Daedalus.DNS_SERVERS.get(0).getStringDescription(context);
} }
public static boolean isInUsing(CustomDnsServer server) { public static boolean isInUsing(CustomDNSServer server) {
return Daedalus.getInstance().isServiceActivated() && (server.getId().equals(getPrimary()) || server.getId().equals(getSecondary())); return Daedalus.getInstance().isServiceActivated() && (server.getId().equals(getPrimary()) || server.getId().equals(getSecondary()));
} }
} }