Pure Java Client for Quic

977 views
Skip to first unread message

Vinoth Chandar

unread,
Apr 6, 2017, 2:28:27 PM4/6/17
to QUIC Prototype Protocol Discussion group
Hi all,  

Been playing with QUIC/Cronet on Android, integrating this under the okhttp library. One thing, that could be nice is to have a clean java client for quic, without requiring the Android Context object to be passed in (Creating Android Context needs emulator or device IIUC), which means okhttp has to depend on android :) . This also has other nice benefits such as much simpler testing and dev setup. Would it be a useful thing to pursue?

I took a look at the JavaCronetEngine & such classes inside Cronet and they just seem to be picking off user agent or loading jars out the context object..  With a few API changes, this seems totally doable, just wanted to get feedback before attempting this.. 

- Vinoth 

Ferenc Fejes

unread,
Apr 6, 2017, 3:01:01 PM4/6/17
to QUIC Prototype Protocol Discussion group
Hi Vinoth.

I faced with the same problem recently and cant find anyone who do that before. But I gratefully ask if you can do it, please share with us! 

Thanks,
Ferenc

Vinoth Chandar

unread,
Apr 6, 2017, 8:13:09 PM4/6/17
to QUIC Prototype Protocol Discussion group
Absolutely, happy to share.. 

I ll get started on this, once I get some validation from one of the project maintainers as well :) , so we know if there was a reason to require a context, that we are missing

Vinoth Chandar

unread,
Apr 11, 2017, 2:36:52 PM4/11/17
to QUIC Prototype Protocol Discussion group
There is actually much more than just the Context object from Android, that is used inside cronet. 

root@quic_ubuntu_server:/machome/mobilecode/chromium/src/components/cronet/android# grep -R "import android" java api
java/src/org/chromium/net/impl/BidirectionalStreamBuilderImpl.java:import android.annotation.SuppressLint;
java/src/org/chromium/net/impl/CronetEngineBase.java:import android.support.annotation.IntDef;
java/src/org/chromium/net/impl/CronetEngineBuilderImpl.java:import android.content.Context;
java/src/org/chromium/net/impl/CronetEngineBuilderImpl.java:import android.support.annotation.IntDef;
java/src/org/chromium/net/impl/CronetEngineBuilderImpl.java:import android.support.annotation.VisibleForTesting;
java/src/org/chromium/net/impl/CronetLibraryLoader.java:import android.content.Context;
java/src/org/chromium/net/impl/CronetLibraryLoader.java:import android.os.Handler;
java/src/org/chromium/net/impl/CronetLibraryLoader.java:import android.os.Looper;
java/src/org/chromium/net/impl/CronetMetrics.java:import android.support.annotation.Nullable;
java/src/org/chromium/net/impl/CronetUploadDataStream.java:import android.annotation.SuppressLint;
java/src/org/chromium/net/impl/CronetUrlRequestContext.java:import android.os.ConditionVariable;
java/src/org/chromium/net/impl/CronetUrlRequestContext.java:import android.os.Handler;
java/src/org/chromium/net/impl/CronetUrlRequestContext.java:import android.os.Looper;
java/src/org/chromium/net/impl/CronetUrlRequestContext.java:import android.os.Process;
java/src/org/chromium/net/impl/JavaCronetEngineBuilderImpl.java:import android.content.Context;
java/src/org/chromium/net/impl/JavaCronetProvider.java:import android.content.Context;
java/src/org/chromium/net/impl/JavaUrlRequest.java:import android.annotation.SuppressLint;
java/src/org/chromium/net/impl/JavaUrlRequest.java:import android.annotation.TargetApi;
java/src/org/chromium/net/impl/JavaUrlRequest.java:import android.net.TrafficStats;
java/src/org/chromium/net/impl/JavaUrlRequest.java:import android.os.Build;
java/src/org/chromium/net/impl/JavaUrlRequest.java:import android.util.Log;
java/src/org/chromium/net/impl/NativeCronetEngineBuilderImpl.java:import android.content.Context;
java/src/org/chromium/net/impl/NativeCronetProvider.java:import android.content.Context;
java/src/org/chromium/net/impl/RequestFinishedInfoImpl.java:import android.support.annotation.IntDef;
java/src/org/chromium/net/impl/RequestFinishedInfoImpl.java:import android.support.annotation.Nullable;
java/src/org/chromium/net/impl/UrlRequestBase.java:import android.support.annotation.IntDef;
java/src/org/chromium/net/impl/UrlRequestBuilderImpl.java:import android.annotation.SuppressLint;
java/src/org/chromium/net/impl/UrlRequestBuilderImpl.java:import android.util.Log;
java/src/org/chromium/net/impl/UrlRequestBuilderImpl.java:import android.util.Pair;
java/src/org/chromium/net/impl/UserAgent.java:import android.content.Context;
java/src/org/chromium/net/impl/UserAgent.java:import android.content.pm.PackageInfo;
java/src/org/chromium/net/impl/UserAgent.java:import android.content.pm.PackageManager;
java/src/org/chromium/net/impl/UserAgent.java:import android.content.pm.PackageManager.NameNotFoundException;
java/src/org/chromium/net/impl/UserAgent.java:import android.os.Build;
java/src/org/chromium/net/urlconnection/CronetHttpURLConnection.java:import android.util.Pair;
api/src/org/chromium/net/BidirectionalStream.java:import android.annotation.SuppressLint;
api/src/org/chromium/net/CronetEngine.java:import android.content.Context;
api/src/org/chromium/net/CronetEngine.java:import android.net.http.HttpResponseCache;
api/src/org/chromium/net/CronetEngine.java:import android.support.annotation.VisibleForTesting;
api/src/org/chromium/net/CronetProvider.java:import android.content.Context;
api/src/org/chromium/net/CronetProvider.java:import android.util.Log;
api/src/org/chromium/net/ExperimentalCronetEngine.java:import android.content.Context;
api/src/org/chromium/net/ExperimentalCronetEngine.java:import android.support.annotation.VisibleForTesting;
api/src/org/chromium/net/RequestFinishedInfo.java:import android.support.annotation.Nullable;
api/src/org/chromium/net/UploadDataProviders.java:import android.os.ParcelFileDescriptor;
root@quic_ubuntu_server:/machome/mobilecode/chromium/src/components/cronet/android#

So might not be as simple, as I first thought.. 

Vinoth Chandar

unread,
Apr 28, 2017, 6:05:11 PM4/28/17
to QUIC Prototype Protocol Discussion group
Ping.. any advice on this?? 
Reply all
Reply to author
Forward
0 new messages