Hide SIP pii data from logs in SipService.
am: 226ac3ad92

* commit '226ac3ad92a383436a13da89959178d51a0cec1b':
  Hide SIP pii data from logs in SipService.

Change-Id: Ia1df99c99c7c13138aed44a11e5b907d4601b9cf
diff --git a/src/java/com/android/server/sip/SipService.java b/src/java/com/android/server/sip/SipService.java
index 97abfb7..d14a8d6 100644
--- a/src/java/com/android/server/sip/SipService.java
+++ b/src/java/com/android/server/sip/SipService.java
@@ -54,6 +54,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.Executor;
+
 import javax.sip.SipException;
 
 /**
@@ -169,7 +170,7 @@
                     + "the profile is not opened");
             return;
         }
-        if (DBG) log("open3: " + localProfile.getUriString() + ": "
+        if (DBG) log("open3: " + obfuscateSipUri(localProfile.getUriString()) + ": "
                 + incomingCallPendingIntent + ": " + listener);
         try {
             SipSessionGroupExt group = createGroup(localProfile,
@@ -528,13 +529,13 @@
             mIncomingCallPendingIntent = pIntent;
         }
 
-        public void openToReceiveCalls() throws SipException {
+        public void openToReceiveCalls() {
             mOpenedToReceiveCalls = true;
             if (mNetworkType != -1) {
                 mSipGroup.openToReceiveCalls(this);
                 mAutoRegistration.start(mSipGroup);
             }
-            if (SSGE_DBG) log("openToReceiveCalls: " + getUri() + ": "
+            if (SSGE_DBG) log("openToReceiveCalls: " + obfuscateSipUri(getUri()) + ": "
                     + mIncomingCallPendingIntent);
         }
 
@@ -542,7 +543,7 @@
                 throws SipException {
             if (SSGE_DBG) {
                 log("onConnectivityChanged: connected=" + connected + " uri="
-                    + getUri() + ": " + mIncomingCallPendingIntent);
+                    + obfuscateSipUri(getUri()) + ": " + mIncomingCallPendingIntent);
             }
             mSipGroup.onConnectivityChanged();
             if (connected) {
@@ -558,7 +559,8 @@
             mOpenedToReceiveCalls = false;
             mSipGroup.close();
             mAutoRegistration.stop();
-            if (SSGE_DBG) log("close: " + getUri() + ": " + mIncomingCallPendingIntent);
+            if (SSGE_DBG) log("close: " + obfuscateSipUri(getUri()) + ": "
+                    + mIncomingCallPendingIntent);
         }
 
         public ISipSession createSession(ISipSessionListener listener) {
@@ -826,7 +828,8 @@
                 // in registration to avoid adding duplicate entries to server
                 mMyWakeLock.acquire(mSession);
                 mSession.unregister();
-                SAR_TAG = "SipAutoReg:" + mSession.getLocalProfile().getUriString();
+                SAR_TAG = "SipAutoReg:" +
+                        obfuscateSipUri(mSession.getLocalProfile().getUriString());
                 if (SAR_DBG) log("start: group=" + group);
             }
         }
@@ -1283,4 +1286,40 @@
     private void loge(String s, Throwable e) {
         Rlog.e(TAG, s, e);
     }
+
+    public static String obfuscateSipUri(String sipUri) {
+        StringBuilder sb = new StringBuilder();
+        int start = 0;
+        sipUri = sipUri.trim();
+        if (sipUri.startsWith("sip:")) {
+            start = 4;
+            sb.append("sip:");
+        }
+
+        char prevC = '\0';
+        int len = sipUri.length();
+        for (int i = start; i < len; i++) {
+            char c = sipUri.charAt(i);
+            char nextC = (i + 1 < len) ? sipUri.charAt(i + 1) : '\0';
+            char charToAppend = '*';
+
+            // This logic allows the first and last letter before an '@' sign to show up without
+            // obfuscation as well as the first and last letter an '@' sign.
+            // e.g.: brad@comment.it => b**d@c******.*t
+            if ((i - start < 1) ||
+                    (i + 1 == len) ||
+                    isAllowedCharacter(c) ||
+                    (prevC == '@') ||
+                    (nextC == '@')) {
+                charToAppend = c;
+            }
+            sb.append(charToAppend);
+            prevC = c;
+        }
+        return sb.toString();
+    }
+
+    private static boolean isAllowedCharacter(char c) {
+        return c == '@' || c == '.';
+    }
 }
diff --git a/src/java/com/android/server/sip/SipSessionGroup.java b/src/java/com/android/server/sip/SipSessionGroup.java
index e820f35..9510b9a 100644
--- a/src/java/com/android/server/sip/SipSessionGroup.java
+++ b/src/java/com/android/server/sip/SipSessionGroup.java
@@ -237,7 +237,7 @@
     }
 
     public synchronized void close() {
-        if (DBG) log("close: " + mLocalProfile.getUriString());
+        if (DBG) log("close: " + SipService.obfuscateSipUri(mLocalProfile.getUriString()));
         onConnectivityChanged();
         mSessionMap.clear();
         closeToNotReceiveCalls();