[tor-commits] [snowflake-mobile/master] Randomly generated Sid

cohosh at torproject.org cohosh at torproject.org
Tue Jun 23 14:45:13 UTC 2020


commit 5c2800b4804f3bbb04a2d3e4cb9ad787c15f8a12
Author: Hashik Donthineni <HashikDonthineni at gmail.com>
Date:   Fri Jun 19 16:45:43 2020 +0530

    Randomly generated Sid
---
 .../torproject/snowflake/MyPersistentService.java  | 28 ++++++++-----
 .../java/org/torproject/snowflake/SIDHelper.java   | 47 ++++++++++++++++++++++
 .../snowflake/exceptions/EmptySIDException.java    | 13 ++++++
 3 files changed, 78 insertions(+), 10 deletions(-)

diff --git a/app/src/main/java/org/torproject/snowflake/MyPersistentService.java b/app/src/main/java/org/torproject/snowflake/MyPersistentService.java
index b888700..b3d9649 100644
--- a/app/src/main/java/org/torproject/snowflake/MyPersistentService.java
+++ b/app/src/main/java/org/torproject/snowflake/MyPersistentService.java
@@ -17,6 +17,7 @@ import androidx.annotation.Nullable;
 import org.json.JSONException;
 import org.torproject.snowflake.constants.BrokerConstants;
 import org.torproject.snowflake.constants.ForegroundServiceConstants;
+import org.torproject.snowflake.exceptions.EmptySIDException;
 import org.torproject.snowflake.interfaces.PeerConnectionObserverCallback;
 import org.torproject.snowflake.pojo.AnsResponse;
 import org.torproject.snowflake.pojo.AnswerBody;
@@ -58,6 +59,7 @@ public class MyPersistentService extends Service {
     private CompositeDisposable compositeDisposable;
     private NotificationManager mNotificationManager;
     private boolean isConnectionAlive;
+    private SIDHelper sidHelper;
 
     @Nullable
     @Override
@@ -92,6 +94,7 @@ public class MyPersistentService extends Service {
 
         mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
         isConnectionAlive = false;
+        sidHelper = SIDHelper.getInstance();
         compositeDisposable = new CompositeDisposable();
         sharedPreferences = getSharedPreferences(getString(R.string.sharedpreference_file), MODE_PRIVATE); //Assigning the shared preferences
         Notification notification = createPersistentNotification(false, null);
@@ -340,7 +343,7 @@ public class MyPersistentService extends Service {
             Log.d(TAG, "fetchOffer: Fetching offer from broker.");
             ///Retrofit call
             final GetOfferService getOfferService = RetroServiceGenerator.createService(GetOfferService.class);
-            Observable<SDPOfferResponse> offer = getOfferService.getOffer(GlobalApplication.getHeadersMap(), new OfferRequestBody("555")); //TODO:Randomly Generate SID.
+            Observable<SDPOfferResponse> offer = getOfferService.getOffer(GlobalApplication.getHeadersMap(), new OfferRequestBody(sidHelper.generateSid()));
             compositeDisposable.add(
                     offer.subscribeOn(Schedulers.io())
                             .observeOn(AndroidSchedulers.mainThread())
@@ -391,15 +394,20 @@ public class MyPersistentService extends Service {
      */
     public void sendAnswer(SessionDescription sessionDescription) {
         Log.d(TAG, "sendAnswer: Sending SDP Answer");
-        AnswerBodySDP bodySDP = new AnswerBodySDP();
-        bodySDP.setSdp(SDPSerializer.serializeAnswer(sessionDescription));
-        AnswerBody body = new AnswerBody("555", bodySDP.toString()); //TODO:Use randomly Generate SID from sendRequest
-        SendAnswerService service = RetroServiceGenerator.createService(SendAnswerService.class);
-        Observable<AnsResponse> response = service.sendAnswer(GlobalApplication.getHeadersMap(), body);
-        compositeDisposable.add(
-                response.subscribeOn(Schedulers.io())
-                        .observeOn(AndroidSchedulers.mainThread()).subscribe(this::answerResponseSuccess, this::answerResponseFailure)
-        );
+        try {
+            AnswerBodySDP bodySDP = new AnswerBodySDP();
+            bodySDP.setSdp(SDPSerializer.serializeAnswer(sessionDescription));
+            AnswerBody body = new AnswerBody(sidHelper.getSid(), bodySDP.toString());
+            SendAnswerService service = RetroServiceGenerator.createService(SendAnswerService.class);
+            Observable<AnsResponse> response = service.sendAnswer(GlobalApplication.getHeadersMap(), body);
+            compositeDisposable.add(
+                    response.subscribeOn(Schedulers.io())
+                            .observeOn(AndroidSchedulers.mainThread()).subscribe(this::answerResponseSuccess, this::answerResponseFailure)
+            );
+        } catch (EmptySIDException e) {
+            Log.e(TAG, "sendAnswer: getSid() is called before sid generation");
+            e.printStackTrace();
+        }
     }
 
     /**
diff --git a/app/src/main/java/org/torproject/snowflake/SIDHelper.java b/app/src/main/java/org/torproject/snowflake/SIDHelper.java
new file mode 100644
index 0000000..b2040d1
--- /dev/null
+++ b/app/src/main/java/org/torproject/snowflake/SIDHelper.java
@@ -0,0 +1,47 @@
+package org.torproject.snowflake;
+
+import org.torproject.snowflake.exceptions.EmptySIDException;
+
+import java.util.Random;
+
+/**
+ * A helper class to handle SID operations.
+ * There should only be one SID for whole connection cycle hence singleton.
+ */
+public class SIDHelper {
+    private static SIDHelper sidHelper;
+    private String sid;
+
+    private SIDHelper() {
+    }
+
+    public static SIDHelper getInstance() {
+        if (sidHelper == null) {
+            sidHelper = new SIDHelper();
+        }
+        return sidHelper;
+    }
+
+    /**
+     * generates a new sid.
+     *
+     * @return generated sid.
+     */
+    public String generateSid() {
+        sid = Integer.toString(new Random().nextInt(10000));
+        return sid;
+    }
+
+    /**
+     * Returns the generated sid.
+     *
+     * @return Existing sid that is generated in "generateSid" method.
+     * @throws EmptySIDException sid is not generated.
+     */
+    public String getSid() throws EmptySIDException {
+        if (sid == null) {
+            throw new EmptySIDException();
+        }
+        return sid;
+    }
+}
diff --git a/app/src/main/java/org/torproject/snowflake/exceptions/EmptySIDException.java b/app/src/main/java/org/torproject/snowflake/exceptions/EmptySIDException.java
new file mode 100644
index 0000000..f69a366
--- /dev/null
+++ b/app/src/main/java/org/torproject/snowflake/exceptions/EmptySIDException.java
@@ -0,0 +1,13 @@
+package org.torproject.snowflake.exceptions;
+
+import androidx.annotation.NonNull;
+
+public class EmptySIDException extends Exception {
+    private final String ERROR = "SID is not initialized or generated";
+
+    @NonNull
+    @Override
+    public String toString() {
+        return ERROR;
+    }
+}





More information about the tor-commits mailing list