[tor-commits] [snowflake-mobile/master] Added retrofit related interfaces, services

cohosh at torproject.org cohosh at torproject.org
Tue Jun 16 14:34:48 UTC 2020


commit cc9b845b8f4e7b175016c3c13009da7649a68f79
Author: Hashik Donthineni <HashikDonthineni at gmail.com>
Date:   Tue Jun 9 14:23:56 2020 +0530

    Added retrofit related interfaces, services
---
 .../torproject/snowflake/MyPersistentService.java  | 12 +++++--
 .../org/torproject/snowflake/pojo/AnsResponse.java | 27 ++++++++++++++
 .../org/torproject/snowflake/pojo/AnswerBody.java  | 41 +++++++++++++++++++++
 .../torproject/snowflake/pojo/AnswerBodySDP.java   | 35 ++++++++++++++++++
 .../snowflake/pojo/OfferRequestBody.java           | 20 +++++++++++
 .../snowflake/pojo/SDPOfferResponse.java           | 42 ++++++++++++++++++++++
 .../snowflake/services/GetOfferService.java        | 15 ++++++++
 .../snowflake/services/RetroServiceGenerator.java  | 36 +++++++++++++++++++
 .../snowflake/services/SendAnswerService.java      | 15 ++++++++
 9 files changed, 240 insertions(+), 3 deletions(-)

diff --git a/app/src/main/java/org/torproject/snowflake/MyPersistentService.java b/app/src/main/java/org/torproject/snowflake/MyPersistentService.java
index 2a7c52d..4484a72 100644
--- a/app/src/main/java/org/torproject/snowflake/MyPersistentService.java
+++ b/app/src/main/java/org/torproject/snowflake/MyPersistentService.java
@@ -14,6 +14,8 @@ import androidx.annotation.Nullable;
 
 import org.torproject.snowflake.constants.ForegroundServiceConstants;
 import org.torproject.snowflake.interfaces.PeerConnectionObserverCallback;
+import org.torproject.snowflake.pojo.OfferRequestBody;
+import org.torproject.snowflake.pojo.SDPOfferResponse;
 import org.webrtc.DataChannel;
 import org.webrtc.PeerConnection;
 import org.webrtc.PeerConnectionFactory;
@@ -23,6 +25,10 @@ import java.nio.charset.Charset;
 import java.util.LinkedList;
 import java.util.List;
 
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.schedulers.Schedulers;
+
 /**
  * Main Snowflake implementation of foreground service to relay data in the background.
  */
@@ -181,7 +187,7 @@ public class MyPersistentService extends Service {
     private void startWebRTCConnection() {
         initializePeerConnectionFactory(); //Android Specific, you can Ignore.
         mainPeerConnection = createPeerConnection(factory); //Creating New Peer Connection.
-        //TODO: Fetch Offer from broker.
+        //TODO: Fetch offer from broker
     }
 
     /**
@@ -239,7 +245,7 @@ public class MyPersistentService extends Service {
             @Override
             public void iceConnectionFailed() {
                 Log.d(TAG, "iceConnectionFailed: ");
-                //Figuring out with trac ticket.
+                //TODO: Figuring out with trac ticket.
             }
 
             @Override
@@ -251,5 +257,5 @@ public class MyPersistentService extends Service {
         Log.d(TAG, "createPeerConnection: Finished creating peer connection.");
         return factory.createPeerConnection(rtcConfiguration, pcObserver);
     }
-    /////////////////////////////////////
+    /////////////// Network Calls ////////////////////////
 }
diff --git a/app/src/main/java/org/torproject/snowflake/pojo/AnsResponse.java b/app/src/main/java/org/torproject/snowflake/pojo/AnsResponse.java
new file mode 100644
index 0000000..9e5d8ac
--- /dev/null
+++ b/app/src/main/java/org/torproject/snowflake/pojo/AnsResponse.java
@@ -0,0 +1,27 @@
+package org.torproject.snowflake.pojo;
+
+import com.google.gson.annotations.SerializedName;
+
+/*If the client retrieved the answer: HTTP 200 OK
+
+        {
+        Status: "success"
+        }
+If the client left: HTTP 200 OK
+        {
+        Status: "client gone"
+        }
+3) If the request is malformed: HTTP 400 BadRequest*/
+
+public class AnsResponse {
+    @SerializedName("Status")
+    private String status;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+}
diff --git a/app/src/main/java/org/torproject/snowflake/pojo/AnswerBody.java b/app/src/main/java/org/torproject/snowflake/pojo/AnswerBody.java
new file mode 100644
index 0000000..d657880
--- /dev/null
+++ b/app/src/main/java/org/torproject/snowflake/pojo/AnswerBody.java
@@ -0,0 +1,41 @@
+package org.torproject.snowflake.pojo;
+
+import com.google.gson.annotations.SerializedName;
+
+/*{
+  Sid: [generated session id of proxy],
+  Version: 1.1,
+  Answer:
+  {
+    type: answer,
+    sdp: [WebRTC SDP]
+ }*/
+public class AnswerBody {
+    @SerializedName("Version")
+    private final String VERSION = "1.1";
+    @SerializedName("Sid")
+    private String sid;
+    @SerializedName("Answer")
+    private String answerBodySDP;
+
+    public AnswerBody(String s, String sdp) {
+        sid = s;
+        answerBodySDP = sdp;
+    }
+
+    public String getSid() {
+        return sid;
+    }
+
+    public void setSid(String sid) {
+        this.sid = sid;
+    }
+
+    public String getAnswerBodySDP() {
+        return answerBodySDP;
+    }
+
+    public void setAnswerBodySDP(String answerBodySDP) {
+        this.answerBodySDP = answerBodySDP;
+    }
+}
diff --git a/app/src/main/java/org/torproject/snowflake/pojo/AnswerBodySDP.java b/app/src/main/java/org/torproject/snowflake/pojo/AnswerBodySDP.java
new file mode 100644
index 0000000..d111e57
--- /dev/null
+++ b/app/src/main/java/org/torproject/snowflake/pojo/AnswerBodySDP.java
@@ -0,0 +1,35 @@
+package org.torproject.snowflake.pojo;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/*SDP answer from AnswerBody.java
+Answer:
+{
+    type: answer,
+    sdp: [WebRTC SDP]
+}
+*/
+public class AnswerBodySDP {
+    private final String TYPE = "answer";
+    private String sdp;
+
+    public String getSdp() {
+        return sdp;
+    }
+
+    public void setSdp(String sdp) {
+        this.sdp = sdp;
+    }
+
+    public String toString(){
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.put("type", TYPE);
+            jsonObject.put("sdp", sdp);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        return jsonObject.toString();
+    }
+}
diff --git a/app/src/main/java/org/torproject/snowflake/pojo/OfferRequestBody.java b/app/src/main/java/org/torproject/snowflake/pojo/OfferRequestBody.java
new file mode 100644
index 0000000..ccc01ff
--- /dev/null
+++ b/app/src/main/java/org/torproject/snowflake/pojo/OfferRequestBody.java
@@ -0,0 +1,20 @@
+package org.torproject.snowflake.pojo;
+
+import com.google.gson.annotations.SerializedName;
+
+/*{
+  Sid: [generated session id of proxy],
+  Version: 1.1,
+  Type: "mobile"
+}*/
+public class OfferRequestBody {
+    private String sid;
+    @SerializedName("Version")
+    private final String VERSION = "1.1";
+    @SerializedName("Type")
+    private final String TYPE = "mobile";
+
+    public OfferRequestBody(String sid){
+        this.sid = sid;
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/torproject/snowflake/pojo/SDPOfferResponse.java b/app/src/main/java/org/torproject/snowflake/pojo/SDPOfferResponse.java
new file mode 100644
index 0000000..4b86c23
--- /dev/null
+++ b/app/src/main/java/org/torproject/snowflake/pojo/SDPOfferResponse.java
@@ -0,0 +1,42 @@
+package org.torproject.snowflake.pojo;
+
+import com.google.gson.annotations.SerializedName;
+
+/*If a client is matched:
+HTTP 200 OK
+{
+  Status: "client match",
+  {
+    type: offer,
+    sdp: [WebRTC SDP]
+  }
+}
+
+If a client is not matched:
+HTTP 200 OK
+{
+    Status: "no match"
+}*/
+public class SDPOfferResponse {
+    @SerializedName("Status")
+    private String status;
+
+    @SerializedName("Offer")
+    private String offer;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getOffer() {
+        return offer;
+    }
+
+    public void setOffer(String offer) {
+        this.offer = offer;
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/torproject/snowflake/services/GetOfferService.java b/app/src/main/java/org/torproject/snowflake/services/GetOfferService.java
new file mode 100644
index 0000000..317bcc5
--- /dev/null
+++ b/app/src/main/java/org/torproject/snowflake/services/GetOfferService.java
@@ -0,0 +1,15 @@
+package org.torproject.snowflake.services;
+
+import org.torproject.snowflake.pojo.OfferRequestBody;
+import org.torproject.snowflake.pojo.SDPOfferResponse;
+
+import io.reactivex.rxjava3.core.Observable;
+import retrofit2.http.Body;
+import retrofit2.http.Headers;
+import retrofit2.http.POST;
+
+public interface GetOfferService {
+    @POST("proxy")
+    @Headers({"Content-type: application/json", "Host: 10.0.2.2:8080"})
+    Observable<SDPOfferResponse> getOffer(@Body OfferRequestBody body);
+}
diff --git a/app/src/main/java/org/torproject/snowflake/services/RetroServiceGenerator.java b/app/src/main/java/org/torproject/snowflake/services/RetroServiceGenerator.java
new file mode 100644
index 0000000..74f1d9d
--- /dev/null
+++ b/app/src/main/java/org/torproject/snowflake/services/RetroServiceGenerator.java
@@ -0,0 +1,36 @@
+package org.torproject.snowflake.services;
+
+import org.torproject.snowflake.BuildConfig;
+import org.torproject.snowflake.GlobalApplication;
+
+import hu.akarnokd.rxjava3.retrofit.RxJava3CallAdapterFactory;
+import okhttp3.OkHttpClient;
+import okhttp3.logging.HttpLoggingInterceptor;
+import retrofit2.Retrofit;
+import retrofit2.converter.gson.GsonConverterFactory;
+
+public class RetroServiceGenerator {
+    public static <S> S createService(
+            Class<S> serviceClass) {
+
+        Retrofit.Builder builder =
+                new Retrofit.Builder()
+                        .baseUrl(GlobalApplication.getBrokerUrl())
+                        .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
+                        .addConverterFactory(GsonConverterFactory.create());
+
+        OkHttpClient.Builder httpClient =
+                new OkHttpClient.Builder();
+
+        if (BuildConfig.DEBUG) {
+            HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
+            interceptor.level(HttpLoggingInterceptor.Level.BODY);
+            httpClient.addInterceptor(interceptor);
+        }
+
+        builder.client(httpClient.build());
+        Retrofit retrofit = builder.build();
+
+        return retrofit.create(serviceClass);
+    }
+}
diff --git a/app/src/main/java/org/torproject/snowflake/services/SendAnswerService.java b/app/src/main/java/org/torproject/snowflake/services/SendAnswerService.java
new file mode 100644
index 0000000..8d2f153
--- /dev/null
+++ b/app/src/main/java/org/torproject/snowflake/services/SendAnswerService.java
@@ -0,0 +1,15 @@
+package org.torproject.snowflake.services;
+
+import org.torproject.snowflake.pojo.AnsResponse;
+import org.torproject.snowflake.pojo.AnswerBody;
+
+import io.reactivex.rxjava3.core.Observable;
+import retrofit2.http.Body;
+import retrofit2.http.Headers;
+import retrofit2.http.POST;
+
+public interface SendAnswerService {
+    @POST("answer")
+    @Headers({"Content-type: application/json", "Host: 10.0.2.2:8080"})
+    Observable<AnsResponse> sendAnswer(@Body AnswerBody body);
+}





More information about the tor-commits mailing list