1
0
mirror of https://github.com/etesync/android synced 2024-11-25 17:38:13 +00:00

TLS/SNI support, proxy support

* SNI now works for proxied connections, too
* "Cannot verify hostname" message removed and split into two localized messages: one for unknown certificates, the other for hostname mismatch
This commit is contained in:
R Hirner 2014-12-28 16:33:45 +01:00
parent 6f5748c464
commit 897ede7582
6 changed files with 114 additions and 901 deletions

View File

@ -1,79 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="at.bitfire.davdroid"
android:versionCode="47"
android:versionName="0.6.8" android:installLocation="internalOnly">
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:process=":sync" >
<service
android:name=".syncadapter.AccountAuthenticatorService"
android:exported="false" >
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
<meta-data
android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/account_authenticator" />
</service>
<service
android:name=".syncadapter.ContactsSyncAdapterService"
android:exported="true" >
<intent-filter>
<action android:name="android.content.SyncAdapter" />
</intent-filter>
<meta-data
android:name="android.content.SyncAdapter"
android:resource="@xml/sync_contacts" />
<meta-data
android:name="android.provider.CONTACTS_STRUCTURE"
android:resource="@xml/contacts" />
</service>
<service
android:name=".syncadapter.CalendarsSyncAdapterService"
android:exported="true" >
<intent-filter>
<action android:name="android.content.SyncAdapter" />
</intent-filter>
<meta-data
android:name="android.content.SyncAdapter"
android:resource="@xml/sync_calendars" />
</service>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".syncadapter.AddAccountActivity"
android:excludeFromRecents="true" >
</activity>
<activity
android:name=".syncadapter.GeneralSettingsActivity" >
</activity>
</application>
</manifest>

View File

@ -20,11 +20,17 @@ import android.view.ViewGroup;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.Toast; import android.widget.Toast;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.http.HttpException; import org.apache.http.HttpException;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.security.cert.CertPathValidatorException;
import java.security.cert.CertificateException;
import javax.net.ssl.SSLHandshakeException;
import javax.net.ssl.SSLPeerUnverifiedException;
import at.bitfire.davdroid.R; import at.bitfire.davdroid.R;
import at.bitfire.davdroid.resource.DavResourceFinder; import at.bitfire.davdroid.resource.DavResourceFinder;
@ -113,8 +119,14 @@ public class QueryServerDialogFragment extends DialogFragment implements LoaderC
finder.findResources(serverInfo); finder.findResources(serverInfo);
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
serverInfo.setErrorMessage(getContext().getString(R.string.exception_uri_syntax, e.getMessage())); serverInfo.setErrorMessage(getContext().getString(R.string.exception_uri_syntax, e.getMessage()));
} catch (IOException e) { } catch (IOException e) {
// general message
serverInfo.setErrorMessage(getContext().getString(R.string.exception_io, e.getLocalizedMessage())); serverInfo.setErrorMessage(getContext().getString(R.string.exception_io, e.getLocalizedMessage()));
// overwrite by more specific message, if possible
if (ExceptionUtils.indexOfType(e, CertPathValidatorException.class) != -1)
serverInfo.setErrorMessage(getContext().getString(R.string.exception_cert_path_validation, e.getMessage()));
else if (ExceptionUtils.indexOfType(e, SSLPeerUnverifiedException.class) != -1)
serverInfo.setErrorMessage(getContext().getString(R.string.exception_peer_unverified, e.getMessage()));
} catch (HttpException e) { } catch (HttpException e) {
Log.e(TAG, "HTTP error while querying server info", e); Log.e(TAG, "HTTP error while querying server info", e);
serverInfo.setErrorMessage(getContext().getString(R.string.exception_http, e.getLocalizedMessage())); serverInfo.setErrorMessage(getContext().getString(R.string.exception_http, e.getLocalizedMessage()));

View File

@ -13,6 +13,7 @@ import android.net.SSLCertificateSocketFactory;
import android.os.Build; import android.os.Build;
import android.util.Log; import android.util.Log;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpHost; import org.apache.http.HttpHost;
import org.apache.http.conn.socket.LayeredConnectionSocketFactory; import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
@ -23,129 +24,128 @@ import java.io.IOException;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.Socket; import java.net.Socket;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertPathValidatorException;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import javax.net.ssl.HandshakeCompletedEvent;
import javax.net.ssl.HandshakeCompletedListener;
import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLPeerUnverifiedException; import javax.net.ssl.SSLPeerUnverifiedException;
import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
public class TlsSniSocketFactory implements LayeredConnectionSocketFactory { public class TlsSniSocketFactory implements LayeredConnectionSocketFactory {
private static final String TAG = "davdroid.SNISocketFactory"; private static final String TAG = "davdroid.SNISocketFactory";
public final static TlsSniSocketFactory INSTANCE = new TlsSniSocketFactory(); public final static TlsSniSocketFactory INSTANCE = new TlsSniSocketFactory();
private final static SSLCertificateSocketFactory sslSocketFactory = private final static SSLSocketFactory sslSocketFactory = (SSLSocketFactory)SSLSocketFactory.getDefault();
(SSLCertificateSocketFactory)SSLCertificateSocketFactory.getDefault(0); private final static HostnameVerifier hostnameVerifier = HttpsURLConnection.getDefaultHostnameVerifier();
private final static HostnameVerifier hostnameVerifier = new BrowserCompatHostnameVerifierHC4();
/* /*
For SSL connections without HTTP(S) proxy: For TLS connections without HTTPS (CONNECT) proxy:
1) createSocket() is called 1) socket = createSocket() is called
2) connectSocket() is called which creates a new SSL connection 2) connectSocket(socket) is called which creates a new TLS connection (but no handshake yet)
2a) SNI is set up, and then 3) reasonable encryption settings are applied to socket
2b) the connection is established, hands are shaken and certificate/host name are verified 4) SNI is set up for socket
5) handshake and certificate/host name verification
Layered sockets are used with HTTP(S) proxies: Layered sockets are used with HTTPS (CONNECT) proxies:
1) a new plain socket is created by the HTTP library 1) plain = createSocket() is called
2) the plain socket is connected to http://proxy:8080 2) the plain socket is connected to http://proxy:8080
3) a CONNECT request is sent to the proxy and the response is parsed 3) a CONNECT request is sent to the proxy and the response is parsed
4) now, createLayeredSocket() is called which wraps an SSL socket around the proxy connection, 4) socket = createLayeredSocket(plain) is called to "upgrade" the plain connection to a TLS connection (but no handshake yet)
doing all the set-up and verfication 5) SNI is set up for socket
4a) Because SSLSocket.createSocket(socket, ...) always does a handshake without allowing 6) handshake and certificate/host name verification
to set up SNI before, *** SNI is not available for layered connections *** (unless
active by Android's defaults, which it isn't at the moment).
*/ */
@Override @Override
public Socket createSocket(HttpContext context) throws IOException { public Socket createSocket(HttpContext context) throws IOException {
SSLSocket ssl = (SSLSocket)sslSocketFactory.createSocket(); return sslSocketFactory.createSocket();
setReasonableEncryption(ssl);
return ssl;
} }
@Override @Override
public Socket connectSocket(int timeout, Socket plain, HttpHost host, InetSocketAddress remoteAddr, InetSocketAddress localAddr, HttpContext context) throws IOException { public Socket connectSocket(int timeout, Socket sock, HttpHost host, InetSocketAddress remoteAddr, InetSocketAddress localAddr, HttpContext context) throws IOException {
Log.d(TAG, "Preparing direct SSL connection (without proxy) to " + host); Log.d(TAG, "Preparing direct TLS connection to " + host);
final SSLSocket socket = (SSLSocket)((sock != null) ? sock : createSocket(context));
// we'll rather use an SSLSocket directly connectAndVerify(socket, host.getHostName());
plain.close(); return socket;
// create a plain SSL socket, but don't do hostname/certificate verification yet
SSLSocket ssl = (SSLSocket)sslSocketFactory.createSocket(remoteAddr.getAddress(), host.getPort());
setReasonableEncryption(ssl);
// connect, set SNI, shake hands, verify, print connection info
connectWithSNI(ssl, host.getHostName());
return ssl;
} }
@Override @Override
public Socket createLayeredSocket(Socket plain, String host, int port, HttpContext context) throws IOException, UnknownHostException { public Socket createLayeredSocket(Socket plain, String host, int port, HttpContext context) throws IOException {
Log.d(TAG, "Preparing layered SSL connection (over proxy) to " + host); Log.d(TAG, "Preparing proxied TLS connection to " + host);
final SSLSocket socket = (SSLSocket)sslSocketFactory.createSocket(plain, host, port, true);
// create a layered SSL socket, but don't do hostname/certificate verification yet connectAndVerify(socket, host);
SSLSocket ssl = (SSLSocket)sslSocketFactory.createSocket(plain, host, port, true); return socket;
setReasonableEncryption(ssl);
// already connected, but verify host name again and print some connection info
Log.w(TAG, "Setting SNI/TLSv1.2 will silently fail because the handshake is already done");
connectWithSNI(ssl, host);
return ssl;
} }
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) /**
private void connectWithSNI(SSLSocket ssl, String host) throws SSLPeerUnverifiedException { * Establishes a connection to an unconnected SSLSocket:
// - set SNI host name * - prepare socket
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { * - set SNI host name
Log.d(TAG, "Using documented SNI with host name " + host); * - verify host name
sslSocketFactory.setHostname(ssl, host); * - verify certificate
} else { * @param socket unconnected SSLSocket
Log.d(TAG, "No documented SNI support on Android <4.2, trying with reflection"); * @param host host name for SNI
try { * @throws SSLPeerUnverifiedException
java.lang.reflect.Method setHostnameMethod = ssl.getClass().getMethod("setHostname", String.class); */
setHostnameMethod.invoke(ssl, host); private void connectAndVerify(SSLSocket socket, String host) throws IOException, SSLPeerUnverifiedException {
} catch (Exception e) { // prepare socket (set encryption etc.)
Log.w(TAG, "SNI not useable", e); prepareSSLSocket(socket);
}
} // set SNI hostname
setSniHostname(socket, host);
// TLS handshake
socket.startHandshake();
// verify hostname and certificate // verify hostname and certificate
SSLSession session = ssl.getSession(); SSLSession session = socket.getSession();
if (!hostnameVerifier.verify(host, session)) if (!hostnameVerifier.verify(host, session))
throw new SSLPeerUnverifiedException("Cannot verify hostname: " + host); throw new SSLPeerUnverifiedException(host);
Log.d(TAG, "Established " + session.getProtocol() + " connection with " + session.getPeerHost() + Log.d(TAG, "Established " + session.getProtocol() + " connection with " + session.getPeerHost() +
" using " + session.getCipherSuite()); " using " + session.getCipherSuite());
} }
/**
* Prepares a TLS/SSL connetion socket by:
* - setting the default TrustManager (as we have created an "insecure" connection to avoid handshake problems before)
* - setting reasonable TLS protocol versions
* - setting reasonable cipher suites (if required)
* @param socket unconnected SSLSocket to prepare
*/
@SuppressLint("DefaultLocale") @SuppressLint("DefaultLocale")
private void setReasonableEncryption(SSLSocket ssl) { private void prepareSSLSocket(SSLSocket socket) {
// set reasonable SSL/TLS settings before the handshake
// Android 5.0+ (API level21) provides reasonable default settings // Android 5.0+ (API level21) provides reasonable default settings
// but it still allows SSLv3 // but it still allows SSLv3
// https://developer.android.com/about/versions/android-5.0-changes.html#ssl // https://developer.android.com/about/versions/android-5.0-changes.html#ssl
// - enable all supported protocols (enables TLSv1.1 and TLSv1.2 on Android <5.0, if available) /* set reasonable protocol versions */
// - enable all supported protocols (enables TLSv1.1 and TLSv1.2 on Android <5.0)
// - remove all SSL versions (especially SSLv3) because they're insecure now // - remove all SSL versions (especially SSLv3) because they're insecure now
List<String> protocols = new LinkedList<String>(); List<String> protocols = new LinkedList<String>();
for (String protocol : ssl.getSupportedProtocols()) for (String protocol : socket.getSupportedProtocols())
if (!protocol.toUpperCase().contains("SSL")) if (!protocol.toUpperCase().contains("SSL"))
protocols.add(protocol); protocols.add(protocol);
Log.v(TAG, "Setting allowed TLS protocols: " + StringUtils.join(protocols, ", ")); Log.v(TAG, "Setting allowed TLS protocols: " + StringUtils.join(protocols, ", "));
ssl.setEnabledProtocols(protocols.toArray(new String[0])); socket.setEnabledProtocols(protocols.toArray(new String[0]));
if (android.os.Build.VERSION.SDK_INT < 21) { /* set reasonable cipher suites */
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
// choose secure cipher suites // choose secure cipher suites
List<String> allowedCiphers = Arrays.asList(new String[] { List<String> allowedCiphers = Arrays.asList(new String[] {
// allowed secure ciphers according to NIST.SP.800-52r1.pdf Section 3.3.1 (see docs directory) // allowed secure ciphers according to NIST.SP.800-52r1.pdf Section 3.3.1 (see docs directory)
@ -168,7 +168,7 @@ public class TlsSniSocketFactory implements LayeredConnectionSocketFactory {
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
}); });
List<String> availableCiphers = Arrays.asList(ssl.getSupportedCipherSuites()); List<String> availableCiphers = Arrays.asList(socket.getSupportedCipherSuites());
// preferred ciphers = allowed Ciphers \ availableCiphers // preferred ciphers = allowed Ciphers \ availableCiphers
HashSet<String> preferredCiphers = new HashSet<String>(allowedCiphers); HashSet<String> preferredCiphers = new HashSet<String>(allowedCiphers);
@ -179,10 +179,27 @@ public class TlsSniSocketFactory implements LayeredConnectionSocketFactory {
// but I guess for the security level of DAVdroid, disabling of insecure // but I guess for the security level of DAVdroid, disabling of insecure
// ciphers should be a server-side task // ciphers should be a server-side task
HashSet<String> enabledCiphers = preferredCiphers; HashSet<String> enabledCiphers = preferredCiphers;
enabledCiphers.addAll(new HashSet<String>(Arrays.asList(ssl.getEnabledCipherSuites()))); enabledCiphers.addAll(new HashSet<String>(Arrays.asList(socket.getEnabledCipherSuites())));
Log.v(TAG, "Setting allowed TLS ciphers: " + StringUtils.join(enabledCiphers, ", ")); Log.v(TAG, "Setting allowed TLS ciphers: " + StringUtils.join(enabledCiphers, ", "));
ssl.setEnabledCipherSuites(enabledCiphers.toArray(new String[0])); socket.setEnabledCipherSuites(enabledCiphers.toArray(new String[0]));
}
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void setSniHostname(SSLSocket socket, String hostName) {
// set SNI host name
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && sslSocketFactory instanceof SSLCertificateSocketFactory) {
Log.d(TAG, "Using documented SNI with host name " + hostName);
((SSLCertificateSocketFactory)sslSocketFactory).setHostname(socket, hostName);
} else {
Log.d(TAG, "No documented SNI support on Android <4.2, trying reflection method with host name " + hostName);
try {
java.lang.reflect.Method setHostnameMethod = socket.getClass().getMethod("setHostname", String.class);
setHostnameMethod.invoke(socket, hostName);
} catch (Exception e) {
Log.w(TAG, "SNI not useable", e);
}
} }
} }

View File

@ -5,10 +5,12 @@
<string name="davdroid_website">DAVdroid-Website</string> <string name="davdroid_website">DAVdroid-Website</string>
<string name="next">Weiter</string> <string name="next">Weiter</string>
<string name="help">Hilfe</string> <string name="help">Hilfe</string>
<string name="exception_cert_path_validation">Nicht vertrauenswürdiges Zertifikat in der Zertifikatskette (siehe FAQ)</string>
<string name="exception_http">HTTP-Fehler: %s</string> <string name="exception_http">HTTP-Fehler: %s</string>
<string name="exception_incapable_resource">Fehlende Server-Unterstützung: %s</string> <string name="exception_incapable_resource">Fehlende Server-Unterstützung: %s</string>
<string name="exception_io">E/A-Fehler: %s</string> <string name="exception_io">E/A-Fehler: %s</string>
<string name="exception_peer_unverified">Zertifikat ist nicht für \"%s\" ausgestellt</string>
<string name="exception_uri_syntax">URI ungültig: %s</string> <string name="exception_uri_syntax">URI ungültig: %s</string>
<!-- MainActivity --> <!-- MainActivity -->

View File

@ -7,10 +7,12 @@
<string name="davdroid_website">DAVdroid Web site</string> <string name="davdroid_website">DAVdroid Web site</string>
<string name="next">Next</string> <string name="next">Next</string>
<string name="help">Help</string> <string name="help">Help</string>
<string name="exception_cert_path_validation">Untrusted certificate in certificate path. See FAQ for more info.</string>
<string name="exception_http">HTTP error: %s</string> <string name="exception_http">HTTP error: %s</string>
<string name="exception_incapable_resource">Missing capabilities: %s</string> <string name="exception_incapable_resource">Missing capabilities: %s</string>
<string name="exception_io">I/O error: %s</string> <string name="exception_io">I/O error: %s</string>
<string name="exception_peer_unverified">Certificate not issued for \"%s\"</string>
<string name="exception_uri_syntax">Invalid URI: %s</string> <string name="exception_uri_syntax">Invalid URI: %s</string>
<!-- MainActivity --> <!-- MainActivity -->

View File

@ -1,741 +0,0 @@
ECLIPSE ANDROID PROJECT IMPORT SUMMARY
======================================
Ignored Files:
--------------
The following files were *not* copied into the new Gradle project; you
should evaluate whether these are still needed in your project and if
so manually move them:
* .gitignore
* .idea/
* .idea/.name
* .idea/compiler.xml
* .idea/copyright/
* .idea/copyright/profiles_settings.xml
* .idea/davdroid.iml
* .idea/encodings.xml
* .idea/misc.xml
* .idea/modules.xml
* .idea/scopes/
* .idea/scopes/scope_settings.xml
* .idea/vcs.xml
* .idea/workspace.xml
* CONTRIBUTING.md
* COPYING
* README.md
* build.xml
* compile-libs/
* compile-libs/lombok.jar
* doc/
* doc/NIST.SP.800-52r1.pdf
* doc/how_davdroid_works.svgz
* doc/javadoc/
* doc/javadoc/allclasses-frame.html
* doc/javadoc/allclasses-noframe.html
* doc/javadoc/at/
* doc/javadoc/at/bitfire/
* doc/javadoc/at/bitfire/davdroid/
* doc/javadoc/at/bitfire/davdroid/ArrayUtils.html
* doc/javadoc/at/bitfire/davdroid/Constants.html
* doc/javadoc/at/bitfire/davdroid/MainActivity.html
* doc/javadoc/at/bitfire/davdroid/URIUtils.html
* doc/javadoc/at/bitfire/davdroid/class-use/
* doc/javadoc/at/bitfire/davdroid/class-use/ArrayUtils.html
* doc/javadoc/at/bitfire/davdroid/class-use/Constants.html
* doc/javadoc/at/bitfire/davdroid/class-use/MainActivity.html
* doc/javadoc/at/bitfire/davdroid/class-use/URIUtils.html
* doc/javadoc/at/bitfire/davdroid/package-frame.html
* doc/javadoc/at/bitfire/davdroid/package-summary.html
* doc/javadoc/at/bitfire/davdroid/package-tree.html
* doc/javadoc/at/bitfire/davdroid/package-use.html
* doc/javadoc/at/bitfire/davdroid/resource/
* doc/javadoc/at/bitfire/davdroid/resource/CalDavCalendar.html
* doc/javadoc/at/bitfire/davdroid/resource/CardDavAddressBook.html
* doc/javadoc/at/bitfire/davdroid/resource/Contact.html
* doc/javadoc/at/bitfire/davdroid/resource/Event.html
* doc/javadoc/at/bitfire/davdroid/resource/InvalidResourceException.html
* doc/javadoc/at/bitfire/davdroid/resource/LocalAddressBook.html
* doc/javadoc/at/bitfire/davdroid/resource/LocalCalendar.html
* doc/javadoc/at/bitfire/davdroid/resource/LocalCollection.html
* doc/javadoc/at/bitfire/davdroid/resource/LocalStorageException.html
* doc/javadoc/at/bitfire/davdroid/resource/RecordNotFoundException.html
* doc/javadoc/at/bitfire/davdroid/resource/RemoteCollection.html
* doc/javadoc/at/bitfire/davdroid/resource/Resource.html
* doc/javadoc/at/bitfire/davdroid/resource/class-use/
* doc/javadoc/at/bitfire/davdroid/resource/class-use/CalDavCalendar.html
* doc/javadoc/at/bitfire/davdroid/resource/class-use/CardDavAddressBook.html
* doc/javadoc/at/bitfire/davdroid/resource/class-use/Contact.html
* doc/javadoc/at/bitfire/davdroid/resource/class-use/Event.html
* doc/javadoc/at/bitfire/davdroid/resource/class-use/InvalidResourceException.html
* doc/javadoc/at/bitfire/davdroid/resource/class-use/LocalAddressBook.html
* doc/javadoc/at/bitfire/davdroid/resource/class-use/LocalCalendar.html
* doc/javadoc/at/bitfire/davdroid/resource/class-use/LocalCollection.html
* doc/javadoc/at/bitfire/davdroid/resource/class-use/LocalStorageException.html
* doc/javadoc/at/bitfire/davdroid/resource/class-use/RecordNotFoundException.html
* doc/javadoc/at/bitfire/davdroid/resource/class-use/RemoteCollection.html
* doc/javadoc/at/bitfire/davdroid/resource/class-use/Resource.html
* doc/javadoc/at/bitfire/davdroid/resource/package-frame.html
* doc/javadoc/at/bitfire/davdroid/resource/package-summary.html
* doc/javadoc/at/bitfire/davdroid/resource/package-tree.html
* doc/javadoc/at/bitfire/davdroid/resource/package-use.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/
* doc/javadoc/at/bitfire/davdroid/syncadapter/AccountAuthenticatorService.AccountAuthenticator.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/AccountAuthenticatorService.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/AccountDetailsFragment.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/AccountSettings.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/AddAccountActivity.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/CalendarsSyncAdapterService.SyncAdapter.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/CalendarsSyncAdapterService.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/ContactsSyncAdapterService.ContactsSyncAdapter.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/ContactsSyncAdapterService.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/DavSyncAdapter.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/EnterCredentialsFragment.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/GeneralSettingsActivity.GeneralSettingsFragment.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/GeneralSettingsActivity.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/QueryServerDialogFragment.ServerInfoLoader.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/QueryServerDialogFragment.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/SelectCollectionsAdapter.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/SelectCollectionsFragment.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/ServerInfo.ResourceInfo.Type.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/ServerInfo.ResourceInfo.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/ServerInfo.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/SyncManager.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/WebDavResourceAdapter.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/AccountAuthenticatorService.AccountAuthenticator.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/AccountAuthenticatorService.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/AccountDetailsFragment.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/AccountSettings.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/AddAccountActivity.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/CalendarsSyncAdapterService.SyncAdapter.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/CalendarsSyncAdapterService.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/ContactsSyncAdapterService.ContactsSyncAdapter.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/ContactsSyncAdapterService.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/DavSyncAdapter.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/EnterCredentialsFragment.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/GeneralSettingsActivity.GeneralSettingsFragment.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/GeneralSettingsActivity.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/QueryServerDialogFragment.ServerInfoLoader.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/QueryServerDialogFragment.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/SelectCollectionsAdapter.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/SelectCollectionsFragment.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/ServerInfo.ResourceInfo.Type.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/ServerInfo.ResourceInfo.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/ServerInfo.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/SyncManager.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/class-use/WebDavResourceAdapter.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/package-frame.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/package-summary.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/package-tree.html
* doc/javadoc/at/bitfire/davdroid/syncadapter/package-use.html
* doc/javadoc/at/bitfire/davdroid/webdav/
* doc/javadoc/at/bitfire/davdroid/webdav/DavAddressbookMultiget.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavCalendarMultiget.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavException.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavHref.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavHttpClient.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavHttpRequestRetryHandler.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavIncapableException.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavMultiget.Type.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavMultiget.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavMultistatus.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavNoContentException.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavNoMultiStatusException.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavAddressbookHomeSet.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavCalendarHomeSet.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavCurrentUserPrincipal.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropAddressData.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropAddressbookDescription.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropCalendarColor.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropCalendarData.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropCalendarDescription.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropCalendarTimezone.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropComp.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropDisplayName.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropGetCTag.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropGetETag.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropPrivilege.PrivAll.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropPrivilege.PrivBind.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropPrivilege.PrivUnbind.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropPrivilege.PrivWrite.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropPrivilege.PrivWriteContent.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropPrivilege.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropResourceType.Addressbook.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropResourceType.Calendar.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.DavPropResourceType.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavProp.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavPropfind.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavPropstat.html
* doc/javadoc/at/bitfire/davdroid/webdav/DavResponse.html
* doc/javadoc/at/bitfire/davdroid/webdav/HttpException.html
* doc/javadoc/at/bitfire/davdroid/webdav/HttpPropfind.Mode.html
* doc/javadoc/at/bitfire/davdroid/webdav/HttpPropfind.html
* doc/javadoc/at/bitfire/davdroid/webdav/HttpReport.html
* doc/javadoc/at/bitfire/davdroid/webdav/NotFoundException.html
* doc/javadoc/at/bitfire/davdroid/webdav/PreconditionFailedException.html
* doc/javadoc/at/bitfire/davdroid/webdav/TlsSniSocketFactory.html
* doc/javadoc/at/bitfire/davdroid/webdav/WebDavResource.Property.html
* doc/javadoc/at/bitfire/davdroid/webdav/WebDavResource.PutMode.html
* doc/javadoc/at/bitfire/davdroid/webdav/WebDavResource.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavAddressbookMultiget.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavCalendarMultiget.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavException.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavHref.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavHttpClient.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavHttpRequestRetryHandler.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavIncapableException.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavMultiget.Type.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavMultiget.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavMultistatus.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavNoContentException.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavNoMultiStatusException.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavAddressbookHomeSet.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavCalendarHomeSet.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavCurrentUserPrincipal.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropAddressData.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropAddressbookDescription.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropCalendarColor.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropCalendarData.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropCalendarDescription.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropCalendarTimezone.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropComp.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropDisplayName.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropGetCTag.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropGetETag.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropPrivilege.PrivAll.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropPrivilege.PrivBind.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropPrivilege.PrivUnbind.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropPrivilege.PrivWrite.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropPrivilege.PrivWriteContent.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropPrivilege.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropResourceType.Addressbook.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropResourceType.Calendar.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.DavPropResourceType.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavProp.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavPropfind.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavPropstat.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/DavResponse.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/HttpException.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/HttpPropfind.Mode.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/HttpPropfind.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/HttpReport.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/NotFoundException.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/PreconditionFailedException.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/TlsSniSocketFactory.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/WebDavResource.Property.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/WebDavResource.PutMode.html
* doc/javadoc/at/bitfire/davdroid/webdav/class-use/WebDavResource.html
* doc/javadoc/at/bitfire/davdroid/webdav/package-frame.html
* doc/javadoc/at/bitfire/davdroid/webdav/package-summary.html
* doc/javadoc/at/bitfire/davdroid/webdav/package-tree.html
* doc/javadoc/at/bitfire/davdroid/webdav/package-use.html
* doc/javadoc/constant-values.html
* doc/javadoc/deprecated-list.html
* doc/javadoc/help-doc.html
* doc/javadoc/index-files/
* doc/javadoc/index-files/index-1.html
* doc/javadoc/index-files/index-10.html
* doc/javadoc/index-files/index-11.html
* doc/javadoc/index-files/index-12.html
* doc/javadoc/index-files/index-13.html
* doc/javadoc/index-files/index-14.html
* doc/javadoc/index-files/index-15.html
* doc/javadoc/index-files/index-16.html
* doc/javadoc/index-files/index-17.html
* doc/javadoc/index-files/index-18.html
* doc/javadoc/index-files/index-19.html
* doc/javadoc/index-files/index-2.html
* doc/javadoc/index-files/index-20.html
* doc/javadoc/index-files/index-21.html
* doc/javadoc/index-files/index-22.html
* doc/javadoc/index-files/index-23.html
* doc/javadoc/index-files/index-24.html
* doc/javadoc/index-files/index-3.html
* doc/javadoc/index-files/index-4.html
* doc/javadoc/index-files/index-5.html
* doc/javadoc/index-files/index-6.html
* doc/javadoc/index-files/index-7.html
* doc/javadoc/index-files/index-8.html
* doc/javadoc/index-files/index-9.html
* doc/javadoc/index.html
* doc/javadoc/overview-frame.html
* doc/javadoc/overview-summary.html
* doc/javadoc/overview-tree.html
* doc/javadoc/package-list
* doc/javadoc/resources/
* doc/javadoc/resources/background.gif
* doc/javadoc/resources/tab.gif
* doc/javadoc/resources/titlebar.gif
* doc/javadoc/resources/titlebar_end.gif
* doc/javadoc/serialized-form.html
* doc/javadoc/stylesheet.css
* doc/rfc3744-webdav-access-control-protocol.txt
* doc/rfc4791-caldav.txt
* doc/rfc4918-webdav.txt
* doc/rfc5397-webdav-current-principal-extension.txt
* doc/rfc5785-well-known-uris.txt
* doc/rfc6352-carddav.txt
* doc/rfc6764-caldav-carddav-service-discovery.txt
* eclipse-libs/
* eclipse-libs/lombok-api.jar
* private/
* private/contacts2.db
* proguard-project.txt
* proguard/
* proguard/dump.txt
* proguard/mapping.txt
* proguard/seeds.txt
* proguard/usage.txt
* target/
* target/davdroid-0.1.apk
* target/davdroid-0.2-alpha.apk
* target/davdroid-0.3-alpha.apk
* target/davdroid_0_3_3_alpha.apk
* target/davdroid_0_3_4_alpha.apk
* target/davdroid_0_3_5_alpha.apk
* target/davdroid_0_3_6_alpha.apk
* target/davdroid_0_3_7_alpha.apk
* target/davdroid_0_3_8_alpha.apk
* target/davdroid_0_4_1_alpha.apk
* target/davdroid_0_4_2_alpha.apk
* target/davdroid_0_4_3_alpha.apk
* target/davdroid_0_4_4_alpha.apk
* target/davdroid_0_4_alpha.apk
* target/davdroid_0_5_10.apk
* target/davdroid_0_5_10_1.apk
* target/davdroid_0_5_10_2.apk
* target/davdroid_0_5_11.apk
* target/davdroid_0_5_12.apk
* target/davdroid_0_5_13.apk
* target/davdroid_0_5_14.apk
* target/davdroid_0_5_1_alpha.apk
* target/davdroid_0_5_2_alpha.apk
* target/davdroid_0_5_3_alpha.apk
* target/davdroid_0_5_4_alpha.apk
* target/davdroid_0_5_5_alpha.apk
* target/davdroid_0_5_6_alpha.apk
* target/davdroid_0_5_7_alpha.apk
* target/davdroid_0_5_8.apk
* target/davdroid_0_5_8_1.apk
* target/davdroid_0_5_9.apk
* target/davdroid_0_5_alpha.apk
* target/davdroid_0_6.apk
* target/davdroid_0_6_1.apk
* target/davdroid_0_6_2.apk
* target/davdroid_0_6_3.apk
* target/davdroid_0_6_4.apk
* target/davdroid_0_6_5.apk
* target/davdroid_0_6_6.apk
* target/davdroid_0_6_7.apk
* target/davdroid_0_6_7_1.apk
* target/davdroid_0_6_8.apk
* test/
* test/.classpath
* test/.project
* test/.settings/
* test/.settings/org.eclipse.jdt.core.prefs
* test/assets/
* test/assets/all-day-0sec.ics
* test/assets/all-day-10days.ics
* test/assets/all-day-1day.ics
* test/assets/event-on-that-day.ics
* test/assets/impp.vcf
* test/assets/invalid-unknown-properties.vcf
* test/assets/reference.vcf
* test/assets/test.random
* test/assets/vcard3-sample1.vcf
* test/assets/vienna-evolution.ics
* test/bin/
* test/bin/AndroidManifest.xml
* test/bin/classes.dex
* test/bin/classes/
* test/bin/classes/at/
* test/bin/classes/at/bitfire/
* test/bin/classes/at/bitfire/davdroid/
* test/bin/classes/at/bitfire/davdroid/resource/
* test/bin/classes/at/bitfire/davdroid/resource/test/
* test/bin/classes/at/bitfire/davdroid/resource/test/ContactTest.class
* test/bin/classes/at/bitfire/davdroid/resource/test/EventTest.class
* test/bin/classes/at/bitfire/davdroid/resource/test/LocalCalendarTest.class
* test/bin/classes/at/bitfire/davdroid/syncadapter/
* test/bin/classes/at/bitfire/davdroid/syncadapter/DavResourceFinderTest.class
* test/bin/classes/at/bitfire/davdroid/test/
* test/bin/classes/at/bitfire/davdroid/test/ArrayUtilsTest.class
* test/bin/classes/at/bitfire/davdroid/test/BuildConfig.class
* test/bin/classes/at/bitfire/davdroid/test/Constants.class
* test/bin/classes/at/bitfire/davdroid/test/ContactTest.class
* test/bin/classes/at/bitfire/davdroid/test/R$attr.class
* test/bin/classes/at/bitfire/davdroid/test/R$drawable.class
* test/bin/classes/at/bitfire/davdroid/test/R$string.class
* test/bin/classes/at/bitfire/davdroid/test/R.class
* test/bin/classes/at/bitfire/davdroid/test/URLUtilsTest.class
* test/bin/classes/at/bitfire/davdroid/webdav/
* test/bin/classes/at/bitfire/davdroid/webdav/DavRedirectStrategyTest.class
* test/bin/classes/at/bitfire/davdroid/webdav/TlsSniSocketFactoryTest.class
* test/bin/classes/at/bitfire/davdroid/webdav/WebDavResourceTest.class
* test/bin/davdroidTest.apk
* test/bin/res/
* test/bin/res/crunch/
* test/bin/res/crunch/drawable-hdpi/
* test/bin/res/crunch/drawable-hdpi/ic_launcher.png
* test/bin/res/crunch/drawable-ldpi/
* test/bin/res/crunch/drawable-ldpi/ic_launcher.png
* test/bin/res/crunch/drawable-mdpi/
* test/bin/res/crunch/drawable-mdpi/ic_launcher.png
* test/bin/res/crunch/drawable-xhdpi/
* test/bin/res/crunch/drawable-xhdpi/ic_launcher.png
* test/bin/resources.ap_
* test/gen/
* test/gen/at/
* test/gen/at/bitfire/
* test/gen/at/bitfire/davdroid/
* test/gen/at/bitfire/davdroid/test/
* test/gen/at/bitfire/davdroid/test/BuildConfig.java
* test/gen/at/bitfire/davdroid/test/R.java
* test/proguard-project.txt
* test/project.properties
* test/robohydra/
* test/robohydra/.gitignore
* test/robohydra/davdroid.conf
* test/robohydra/node_modules/
* test/robohydra/node_modules/.bin/
* test/robohydra/node_modules/robohydra/
* test/robohydra/node_modules/robohydra/.npmignore
* test/robohydra/node_modules/robohydra/ChangeLog
* test/robohydra/node_modules/robohydra/LICENSE
* test/robohydra/node_modules/robohydra/README.md
* test/robohydra/node_modules/robohydra/bin/
* test/robohydra/node_modules/robohydra/bin/robohydra.js
* test/robohydra/node_modules/robohydra/bin/robohydra.js
* test/robohydra/node_modules/robohydra/examples/
* test/robohydra/node_modules/robohydra/examples/README.md
* test/robohydra/node_modules/robohydra/examples/custom-types.conf
* test/robohydra/node_modules/robohydra/examples/delayed-proxy.conf
* test/robohydra/node_modules/robohydra/examples/empty-https.conf
* test/robohydra/node_modules/robohydra/examples/empty.conf
* test/robohydra/node_modules/robohydra/examples/external-scenarios.conf
* test/robohydra/node_modules/robohydra/examples/just-scenarios.conf
* test/robohydra/node_modules/robohydra/examples/plugins/
* test/robohydra/node_modules/robohydra/examples/plugins/basic-scenario/
* test/robohydra/node_modules/robohydra/examples/plugins/basic-scenario/index.js
* test/robohydra/node_modules/robohydra/examples/plugins/custom-types/
* test/robohydra/node_modules/robohydra/examples/plugins/custom-types/index.js
* test/robohydra/node_modules/robohydra/examples/plugins/delayed-proxy/
* test/robohydra/node_modules/robohydra/examples/plugins/delayed-proxy/index.js
* test/robohydra/node_modules/robohydra/examples/plugins/external-scenarios/
* test/robohydra/node_modules/robohydra/examples/plugins/external-scenarios/fixtures/
* test/robohydra/node_modules/robohydra/examples/plugins/external-scenarios/fixtures/etc/
* test/robohydra/node_modules/robohydra/examples/plugins/external-scenarios/fixtures/etc/passwd
* test/robohydra/node_modules/robohydra/examples/plugins/external-scenarios/fixtures/tada.png
* test/robohydra/node_modules/robohydra/examples/plugins/external-scenarios/index.js
* test/robohydra/node_modules/robohydra/examples/plugins/external-scenarios/scenarios/
* test/robohydra/node_modules/robohydra/examples/plugins/external-scenarios/scenarios/externalScenarioExample.js
* test/robohydra/node_modules/robohydra/examples/plugins/request-finder/
* test/robohydra/node_modules/robohydra/examples/plugins/request-finder/index.js
* test/robohydra/node_modules/robohydra/examples/plugins/simple-filtering/
* test/robohydra/node_modules/robohydra/examples/plugins/simple-filtering/index.js
* test/robohydra/node_modules/robohydra/examples/plugins/simple-i18n/
* test/robohydra/node_modules/robohydra/examples/plugins/simple-i18n/index.js
* test/robohydra/node_modules/robohydra/examples/plugins/simple-streaming/
* test/robohydra/node_modules/robohydra/examples/plugins/simple-streaming/index.js
* test/robohydra/node_modules/robohydra/examples/plugins/simple-summoner/
* test/robohydra/node_modules/robohydra/examples/plugins/simple-summoner/index.js
* test/robohydra/node_modules/robohydra/examples/request-finder.conf
* test/robohydra/node_modules/robohydra/examples/simple-filtering.conf
* test/robohydra/node_modules/robohydra/examples/simple-i18n.conf
* test/robohydra/node_modules/robohydra/examples/simple-i18n/
* test/robohydra/node_modules/robohydra/examples/simple-i18n/foo.en.html
* test/robohydra/node_modules/robohydra/examples/simple-i18n/foo.es.html
* test/robohydra/node_modules/robohydra/examples/simple-i18n/foo.html
* test/robohydra/node_modules/robohydra/examples/simple-i18n/just-french.fr.html
* test/robohydra/node_modules/robohydra/examples/simple-streaming.conf
* test/robohydra/node_modules/robohydra/examples/simple-summoner.conf
* test/robohydra/node_modules/robohydra/examples/test-cert.pem
* test/robohydra/node_modules/robohydra/examples/test-key.pem
* test/robohydra/node_modules/robohydra/lib/
* test/robohydra/node_modules/robohydra/lib/exceptions.js
* test/robohydra/node_modules/robohydra/lib/heads.js
* test/robohydra/node_modules/robohydra/lib/plugins/
* test/robohydra/node_modules/robohydra/lib/plugins/admin.js
* test/robohydra/node_modules/robohydra/lib/plugins/static/
* test/robohydra/node_modules/robohydra/lib/plugins/static/css/
* test/robohydra/node_modules/robohydra/lib/plugins/static/css/lipstick.css
* test/robohydra/node_modules/robohydra/lib/plugins/static/css/robohydra.css
* test/robohydra/node_modules/robohydra/lib/plugins/static/favicon.ico
* test/robohydra/node_modules/robohydra/lib/plugins/static/img/
* test/robohydra/node_modules/robohydra/lib/plugins/static/img/glyphicons-halflings-white.png
* test/robohydra/node_modules/robohydra/lib/plugins/static/img/glyphicons-halflings.png
* test/robohydra/node_modules/robohydra/lib/plugins/static/img/robohydra.png
* test/robohydra/node_modules/robohydra/lib/plugins/static/js/
* test/robohydra/node_modules/robohydra/lib/plugins/static/js/robohydra.js
* test/robohydra/node_modules/robohydra/lib/plugins/templates/
* test/robohydra/node_modules/robohydra/lib/plugins/templates/_header.ejs
* test/robohydra/node_modules/robohydra/lib/plugins/templates/_scenario-result.ejs
* test/robohydra/node_modules/robohydra/lib/plugins/templates/index.ejs
* test/robohydra/node_modules/robohydra/lib/plugins/templates/layout-main.ejs
* test/robohydra/node_modules/robohydra/lib/plugins/templates/scenario-instructions.ejs
* test/robohydra/node_modules/robohydra/lib/plugins/templates/scenarios.ejs
* test/robohydra/node_modules/robohydra/lib/robohydra.js
* test/robohydra/node_modules/robohydra/lib/robohydrasummoner.js
* test/robohydra/node_modules/robohydra/lib/utils.js
* test/robohydra/node_modules/robohydra/node_modules/
* test/robohydra/node_modules/robohydra/node_modules/.bin/
* test/robohydra/node_modules/robohydra/node_modules/commander/
* test/robohydra/node_modules/robohydra/node_modules/commander/Readme.md
* test/robohydra/node_modules/robohydra/node_modules/commander/index.js
* test/robohydra/node_modules/robohydra/node_modules/commander/package.json
* test/robohydra/node_modules/robohydra/node_modules/ejs/
* test/robohydra/node_modules/robohydra/node_modules/ejs/.gitmodules
* test/robohydra/node_modules/robohydra/node_modules/ejs/.npmignore
* test/robohydra/node_modules/robohydra/node_modules/ejs/.travis.yml
* test/robohydra/node_modules/robohydra/node_modules/ejs/History.md
* test/robohydra/node_modules/robohydra/node_modules/ejs/Makefile
* test/robohydra/node_modules/robohydra/node_modules/ejs/Readme.md
* test/robohydra/node_modules/robohydra/node_modules/ejs/benchmark.js
* test/robohydra/node_modules/robohydra/node_modules/ejs/ejs.js
* test/robohydra/node_modules/robohydra/node_modules/ejs/ejs.min.js
* test/robohydra/node_modules/robohydra/node_modules/ejs/examples/
* test/robohydra/node_modules/robohydra/node_modules/ejs/examples/client.html
* test/robohydra/node_modules/robohydra/node_modules/ejs/examples/functions.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/examples/functions.js
* test/robohydra/node_modules/robohydra/node_modules/ejs/examples/list.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/examples/list.js
* test/robohydra/node_modules/robohydra/node_modules/ejs/index.js
* test/robohydra/node_modules/robohydra/node_modules/ejs/lib/
* test/robohydra/node_modules/robohydra/node_modules/ejs/lib/ejs.js
* test/robohydra/node_modules/robohydra/node_modules/ejs/lib/filters.js
* test/robohydra/node_modules/robohydra/node_modules/ejs/lib/utils.js
* test/robohydra/node_modules/robohydra/node_modules/ejs/package.json
* test/robohydra/node_modules/robohydra/node_modules/ejs/support/
* test/robohydra/node_modules/robohydra/node_modules/ejs/support/compile.js
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/ejs.js
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/backslash.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/backslash.html
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/comments.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/comments.html
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/double-quote.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/double-quote.html
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/error.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/error.out
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/fail.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/include.css.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/include.css.html
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/include.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/include.html
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/includes/
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/includes/menu-item.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/includes/menu/
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/includes/menu/item.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/menu.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/menu.html
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/messed.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/messed.html
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/newlines.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/newlines.html
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/no.newlines.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/no.newlines.html
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/para.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/pet.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/single-quote.ejs
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/single-quote.html
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/style.css
* test/robohydra/node_modules/robohydra/node_modules/ejs/test/fixtures/user.ejs
* test/robohydra/node_modules/robohydra/node_modules/markdown/
* test/robohydra/node_modules/robohydra/node_modules/markdown/.npmignore
* test/robohydra/node_modules/robohydra/node_modules/markdown/.travis.yml
* test/robohydra/node_modules/robohydra/node_modules/markdown/Changes.markdown
* test/robohydra/node_modules/robohydra/node_modules/markdown/README.markdown
* test/robohydra/node_modules/robohydra/node_modules/markdown/bin/
* test/robohydra/node_modules/robohydra/node_modules/markdown/bin/md2html.js
* test/robohydra/node_modules/robohydra/node_modules/markdown/bin/md2html.js
* test/robohydra/node_modules/robohydra/node_modules/markdown/lib/
* test/robohydra/node_modules/robohydra/node_modules/markdown/lib/index.js
* test/robohydra/node_modules/robohydra/node_modules/markdown/lib/markdown.js
* test/robohydra/node_modules/robohydra/node_modules/markdown/markdown-js.sublime-project
* test/robohydra/node_modules/robohydra/node_modules/markdown/markdown-js.sublime-workspace
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/.bin/
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/.npmignore
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/LICENSE
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/README.md
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/bin/
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/bin/nopt.js
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/bin/nopt.js
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/examples/
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/examples/my-program.js
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/lib/
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/lib/nopt.js
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/node_modules/
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/node_modules/abbrev/
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/node_modules/abbrev/LICENSE
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/node_modules/abbrev/README.md
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/node_modules/abbrev/lib/
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/node_modules/abbrev/lib/abbrev.js
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/node_modules/abbrev/package.json
* test/robohydra/node_modules/robohydra/node_modules/markdown/node_modules/nopt/package.json
* test/robohydra/node_modules/robohydra/node_modules/markdown/package.json
* test/robohydra/node_modules/robohydra/node_modules/markdown/seed.yml
* test/robohydra/node_modules/robohydra/node_modules/mime/
* test/robohydra/node_modules/robohydra/node_modules/mime/LICENSE
* test/robohydra/node_modules/robohydra/node_modules/mime/README.md
* test/robohydra/node_modules/robohydra/node_modules/mime/mime.js
* test/robohydra/node_modules/robohydra/node_modules/mime/package.json
* test/robohydra/node_modules/robohydra/node_modules/mime/test.js
* test/robohydra/node_modules/robohydra/node_modules/mime/types/
* test/robohydra/node_modules/robohydra/node_modules/mime/types/mime.types
* test/robohydra/node_modules/robohydra/node_modules/mime/types/node.types
* test/robohydra/node_modules/robohydra/node_modules/qs/
* test/robohydra/node_modules/robohydra/node_modules/qs/.gitmodules
* test/robohydra/node_modules/robohydra/node_modules/qs/.npmignore
* test/robohydra/node_modules/robohydra/node_modules/qs/Readme.md
* test/robohydra/node_modules/robohydra/node_modules/qs/index.js
* test/robohydra/node_modules/robohydra/node_modules/qs/package.json
* test/robohydra/node_modules/robohydra/package.json
* test/robohydra/node_modules/robohydra/plugins/
* test/robohydra/node_modules/robohydra/plugins/README.md
* test/robohydra/node_modules/robohydra/plugins/frontend-dev-proxy/
* test/robohydra/node_modules/robohydra/plugins/frontend-dev-proxy/index.js
* test/robohydra/node_modules/robohydra/plugins/logger/
* test/robohydra/node_modules/robohydra/plugins/logger/index.js
* test/robohydra/node_modules/robohydra/plugins/no-caching/
* test/robohydra/node_modules/robohydra/plugins/no-caching/index.js
* test/robohydra/node_modules/robohydra/plugins/replayer/
* test/robohydra/node_modules/robohydra/plugins/replayer/index.js
* test/robohydra/node_modules/robohydra/test/
* test/robohydra/node_modules/robohydra/test/adminhead-test.js
* test/robohydra/node_modules/robohydra/test/buster.js
* test/robohydra/node_modules/robohydra/test/fixture-module-fs/
* test/robohydra/node_modules/robohydra/test/fixture-module-fs/usr/
* test/robohydra/node_modules/robohydra/test/fixture-module-fs/usr/local/
* test/robohydra/node_modules/robohydra/test/fixture-module-fs/usr/local/share/
* test/robohydra/node_modules/robohydra/test/fixture-module-fs/usr/local/share/robohydra/
* test/robohydra/node_modules/robohydra/test/fixture-module-fs/usr/local/share/robohydra/plugins/
* test/robohydra/node_modules/robohydra/test/fixture-module-fs/usr/local/share/robohydra/plugins/simple-fixtures/
* test/robohydra/node_modules/robohydra/test/fixture-module-fs/usr/local/share/robohydra/plugins/simple-fixtures/fixtures/
* test/robohydra/node_modules/robohydra/test/fixture-module-fs/usr/local/share/robohydra/plugins/simple-fixtures/fixtures/basic.txt
* test/robohydra/node_modules/robohydra/test/fixture-module-fs/usr/local/share/robohydra/plugins/simple-fixtures/fixtures/etc/
* test/robohydra/node_modules/robohydra/test/fixture-module-fs/usr/local/share/robohydra/plugins/simple-fixtures/fixtures/etc/passwd
* test/robohydra/node_modules/robohydra/test/fixture-module-fs/usr/local/share/robohydra/plugins/simple-fixtures/fixtures/non-ascii.txt
* test/robohydra/node_modules/robohydra/test/fixture-module-fs/usr/local/share/robohydra/plugins/simple-fixtures/index.js
* test/robohydra/node_modules/robohydra/test/fixture-module-fs/usr/local/share/robohydra/plugins/simple-fixtures/tests/
* test/robohydra/node_modules/robohydra/test/fixture-module-fs/usr/local/share/robohydra/plugins/simple-fixtures/tests/fixtureLoader.js
* test/robohydra/node_modules/robohydra/test/head-test.js
* test/robohydra/node_modules/robohydra/test/helpers.js
* test/robohydra/node_modules/robohydra/test/plugin-fs/
* test/robohydra/node_modules/robohydra/test/plugin-fs/opt/
* test/robohydra/node_modules/robohydra/test/plugin-fs/opt/project/
* test/robohydra/node_modules/robohydra/test/plugin-fs/opt/project/robohydra-plugins/
* test/robohydra/node_modules/robohydra/test/plugin-fs/opt/project/robohydra-plugins/definedtwice/
* test/robohydra/node_modules/robohydra/test/plugin-fs/opt/project/robohydra-plugins/definedtwice/index.js
* test/robohydra/node_modules/robohydra/test/plugin-fs/opt/robohydra/
* test/robohydra/node_modules/robohydra/test/plugin-fs/opt/robohydra/plugins/
* test/robohydra/node_modules/robohydra/test/plugin-fs/opt/robohydra/plugins/customloadpath/
* test/robohydra/node_modules/robohydra/test/plugin-fs/opt/robohydra/plugins/customloadpath/index.js
* test/robohydra/node_modules/robohydra/test/plugin-fs/opt/robohydra/plugins/definedtwice/
* test/robohydra/node_modules/robohydra/test/plugin-fs/opt/robohydra/plugins/definedtwice/index.js
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/local/
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/local/share/
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/local/share/robohydra/
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/local/share/robohydra/plugins/
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/local/share/robohydra/plugins/definedtwice/
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/local/share/robohydra/plugins/definedtwice/index.js
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/share/
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/share/robohydra/
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/share/robohydra/plugins/
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/share/robohydra/plugins/definedtwice/
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/share/robohydra/plugins/definedtwice/index.js
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/share/robohydra/plugins/right-robohydra-test/
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/share/robohydra/plugins/right-robohydra-test/index.js
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/share/robohydra/plugins/simple-authenticator/
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/share/robohydra/plugins/simple-authenticator/index.js
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/share/robohydra/plugins/simple/
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/share/robohydra/plugins/simple/index.js
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/share/robohydra/plugins/url-query-authenticator/
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/share/robohydra/plugins/url-query-authenticator/index.js
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/share/robohydra/plugins/wrong-fixed-picker/
* test/robohydra/node_modules/robohydra/test/plugin-fs/usr/share/robohydra/plugins/wrong-fixed-picker/index.js
* test/robohydra/node_modules/robohydra/test/plugins/
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-conflicting-names/
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-conflicting-names/index.js
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-conflicting-names/scenarios/
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-conflicting-names/scenarios/duplicateTestName.js
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-headless/
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-headless/index.js
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-headless/scenarios/
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-headless/scenarios/firstTest.js
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-headless/scenarios/secondTest.js
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-mixed/
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-mixed/index.js
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-mixed/scenarios/
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-mixed/scenarios/external.js
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-simple/
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-simple/index.js
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-simple/scenarios/
* test/robohydra/node_modules/robohydra/test/plugins/external-scenarios-simple/scenarios/firstScenario.js
* test/robohydra/node_modules/robohydra/test/plugins/simple-fixtures/
* test/robohydra/node_modules/robohydra/test/plugins/simple-fixtures/fixtures/
* test/robohydra/node_modules/robohydra/test/plugins/simple-fixtures/fixtures/basic.txt
* test/robohydra/node_modules/robohydra/test/plugins/simple-fixtures/fixtures/etc/
* test/robohydra/node_modules/robohydra/test/plugins/simple-fixtures/fixtures/etc/passwd
* test/robohydra/node_modules/robohydra/test/plugins/simple-fixtures/fixtures/non-ascii.txt
* test/robohydra/node_modules/robohydra/test/plugins/simple-fixtures/index.js
* test/robohydra/node_modules/robohydra/test/plugins/simple-fixtures/scenarios/
* test/robohydra/node_modules/robohydra/test/plugins/simple-fixtures/scenarios/fixtureLoader.js
* test/robohydra/node_modules/robohydra/test/robohydra-test.js
* test/robohydra/node_modules/robohydra/test/robohydrasummoner-test.js
* test/robohydra/plugins/
* test/robohydra/plugins/assets/
* test/robohydra/plugins/assets/index.js
* test/robohydra/plugins/dav-invalid/
* test/robohydra/plugins/dav-invalid/index.js
* test/robohydra/plugins/dav/
* test/robohydra/plugins/dav/index.js
* test/robohydra/plugins/headdav.js
* test/robohydra/plugins/redirect/
* test/robohydra/plugins/redirect/index.js
* test/robohydra/plugins/simple.js
* test/robohydra/run.sh
Moved Files:
------------
Android Gradle projects use a different directory structure than ADT
Eclipse projects. Here's how the projects were restructured:
* AndroidManifest.xml => app/src/main/AndroidManifest.xml
* assets/ => app/src/main/assets/
* libs/backport-util-concurrent-3.1.jar => app/libs/backport-util-concurrent-3.1.jar
* libs/commons-codec-1.8.jar => app/libs/commons-codec-1.8.jar
* libs/commons-io-2.4.jar => app/libs/commons-io-2.4.jar
* libs/commons-lang-2.6.jar => app/libs/commons-lang-2.6.jar
* libs/commons-logging-1.1.3.jar => app/libs/commons-logging-1.1.3.jar
* libs/ez-vcard-0.9.6.jar => app/libs/ez-vcard-0.9.6.jar
* libs/httpclientandroidlib-1.2.1.jar => app/libs/httpclientandroidlib-1.2.1.jar
* libs/ical4j-1.0.6-davdroid141027.jar => app/libs/ical4j-1.0.6-davdroid141027.jar
* libs/org.xbill.dns_2.1.6.jar => app/libs/org.xbill.dns_2.1.6.jar
* libs/simple-xml-2.7.jar => app/libs/simple-xml-2.7.jar
* lint.xml => app/lint.xml
* res/ => app/src/main/res/
* src/ => app/src/main/java/
* test/res/ => app/src/androidTest/res/
* test/src/ => app/src/androidTest/java/
Next Steps:
-----------
You can now build the project. The Gradle project needs network
connectivity to download dependencies.
Bugs:
-----
If for some reason your project does not build, and you determine that
it is due to a bug or limitation of the Eclipse to Gradle importer,
please file a bug at http://b.android.com with category
Component-Tools.
(This import summary is for your information only, and can be deleted
after import once you are satisfied with the results.)