Add Qos Callback to test app
* Logs messages when a bearer is attached for the socket used
in the MSRP session
Bug: 180072457
Test: n/a
Change-Id: I7d2bced879583bc374dab09ba280f300caf7d4da
Merged-In: I7d2bced879583bc374dab09ba280f300caf7d4da
diff --git a/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/msrp/ImsPdnNetworkFetcher.java b/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/msrp/ImsPdnNetworkFetcher.java
index 0011011..57bb75a 100644
--- a/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/msrp/ImsPdnNetworkFetcher.java
+++ b/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/msrp/ImsPdnNetworkFetcher.java
@@ -82,7 +82,7 @@
return result;
}
- private ConnectivityManager getConnectivityManager() {
+ ConnectivityManager getConnectivityManager() {
return context.getSystemService(ConnectivityManager.class);
}
}
diff --git a/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/msrp/MsrpManager.java b/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/msrp/MsrpManager.java
index 47326bd..5943f09 100644
--- a/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/msrp/MsrpManager.java
+++ b/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/msrp/MsrpManager.java
@@ -17,6 +17,7 @@
package com.android.libraries.rcs.simpleclient.protocol.msrp;
import android.content.Context;
+import android.net.ConnectivityManager;
import android.net.Network;
import com.google.common.util.concurrent.Futures;
@@ -34,11 +35,12 @@
imsPdnNetworkFetcher = new ImsPdnNetworkFetcher(context);
}
- private static MsrpSession createMsrpSession(
+ private static MsrpSession createMsrpSession(ConnectivityManager manager,
Network network, String host, int port, MsrpSessionListener listener)
throws IOException {
Socket socket = network.getSocketFactory().createSocket(host, port);
- MsrpSession msrpSession = new MsrpSession(socket, listener);
+ MsrpSession msrpSession = new MsrpSession(manager,
+ network, socket, listener);
Thread thread = new Thread(msrpSession::run);
thread.start();
return msrpSession;
@@ -51,7 +53,8 @@
network -> {
if (network != null) {
return Futures.immediateFuture(
- createMsrpSession(network, host, port, listener));
+ createMsrpSession(imsPdnNetworkFetcher.getConnectivityManager(),
+ network, host, port, listener));
} else {
return Futures.immediateFailedFuture(
new IllegalStateException("Network is null"));
diff --git a/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/msrp/MsrpSession.java b/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/msrp/MsrpSession.java
index 96ca19c..3f8b986 100644
--- a/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/msrp/MsrpSession.java
+++ b/testapps/TestRcsApp/aosp_test_rcsclient/src/com/android/libraries/rcs/simpleclient/protocol/msrp/MsrpSession.java
@@ -19,6 +19,16 @@
import static com.android.libraries.rcs.simpleclient.protocol.msrp.MsrpChunk.Method.SEND;
import static com.android.libraries.rcs.simpleclient.protocol.msrp.MsrpChunk.Method.UNKNOWN;
+import android.net.ConnectivityManager;
+import android.net.Network;
+import android.net.QosCallback;
+import android.net.QosCallbackException;
+import android.net.QosSession;
+import android.net.QosSessionAttributes;
+import android.net.QosSocketInfo;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
import androidx.concurrent.futures.CallbackToFutureAdapter;
import androidx.concurrent.futures.CallbackToFutureAdapter.Completer;
@@ -26,6 +36,7 @@
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
import java.io.IOException;
import java.io.InputStream;
@@ -38,6 +49,7 @@
* Provides MSRP sending and receiving messages ability.
*/
public class MsrpSession {
+ private final Network network;
private final Socket socket;
private final InputStream input;
private final OutputStream output;
@@ -45,13 +57,51 @@
private final ConcurrentHashMap<String, MsrpTransaction> transactions =
new ConcurrentHashMap<>();
private final MsrpSessionListener listener;
+ private final ConnectivityManager connectivityManager;
+ private final String LOG_TAG = MsrpSession.class.getSimpleName();
/** Creates a new MSRP session on the given listener and the provided streams. */
- MsrpSession(Socket socket, MsrpSessionListener listener) throws IOException {
+ MsrpSession(ConnectivityManager connectivityManager, Network network, Socket socket,
+ MsrpSessionListener listener) throws IOException {
+ this.connectivityManager = connectivityManager;
+ this.network = network;
this.socket = socket;
this.input = socket.getInputStream();
this.output = socket.getOutputStream();
this.listener = listener;
+
+ listenForBearer();
+ }
+
+ private final QosCallback qosCallback = new QosCallback() {
+ @Override
+ public void onError(@NonNull QosCallbackException exception) {
+ Log.e(LOG_TAG, "onError: " + exception.toString());
+ super.onError(exception);
+ }
+
+ @Override
+ public void onQosSessionAvailable(@NonNull QosSession session,
+ @NonNull QosSessionAttributes sessionAttributes) {
+ Log.d(LOG_TAG, "onQosSessionAvailable: " + session.toString() + ", "
+ + sessionAttributes.toString());
+ super.onQosSessionAvailable(session, sessionAttributes);
+ }
+
+ @Override
+ public void onQosSessionLost(@NonNull QosSession session) {
+ Log.e(LOG_TAG, "onQosSessionLost: " + session.toString());
+ super.onQosSessionLost(session);
+ }
+ };
+
+ private void listenForBearer() {
+ try {
+ connectivityManager.registerQosCallback(new QosSocketInfo(network, socket),
+ qosCallback, MoreExecutors.directExecutor());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
}
/**
@@ -110,6 +160,7 @@
if (isOpen.getAndSet(false)) {
output.flush();
}
+ connectivityManager.unregisterQosCallback(qosCallback);
socket.close();
}