From ec88fd6708c14515f75d0f9de24e505e62fc3550 Mon Sep 17 00:00:00 2001 From: Hugo Benichi Date: Tue, 7 Mar 2017 15:10:03 +0900 Subject: [PATCH] CaptivePortalLoginActivity correctly gets UserAgent Change I33cbcdab9809c712d998da6d925bdd4e3093f8ff added to the intent passed from NetworkMonitor to the CaptivePortalLoginActivity an extra argument to set the UserAgent header of probes done by the CaptivePortalLoginActivity. However that extra String argument is not correctly retrieved from the Intent and instead a null pointer is returned by getParcelableExtra(). Consequently the UserAgent header field is never set. This patch fixes this bug and replace getParcelableExtra() with getStringExtra(). It also adds logging of the request header and response header for every network probes sent by CaptivePortalLoginActivity. Bug: 35937367, 32369183 Test: manually tested Change-Id: If5c463023474ffb0401f3cda5875ccd9fc6f79f9 --- .../CaptivePortalLoginActivity.java | 13 +++++++++++-- .../android/server/connectivity/NetworkMonitor.java | 3 +++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java index 23a8655a3bb68..6394c64b74ccc 100644 --- a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java +++ b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java @@ -77,8 +77,8 @@ public class CaptivePortalLoginActivity extends Activity { mCm = ConnectivityManager.from(this); mNetwork = getIntent().getParcelableExtra(ConnectivityManager.EXTRA_NETWORK); mCaptivePortal = getIntent().getParcelableExtra(ConnectivityManager.EXTRA_CAPTIVE_PORTAL); - mUserAgent = getIntent().getParcelableExtra( - ConnectivityManager.EXTRA_CAPTIVE_PORTAL_USER_AGENT); + mUserAgent = + getIntent().getStringExtra(ConnectivityManager.EXTRA_CAPTIVE_PORTAL_USER_AGENT); mUrl = getUrl(); if (mUrl == null) { // getUrl() failed to parse the url provided in the intent: bail out in a way that @@ -274,8 +274,17 @@ public class CaptivePortalLoginActivity extends Activity { if (mUserAgent != null) { urlConnection.setRequestProperty("User-Agent", mUserAgent); } + // cannot read request header after connection + String requestHeader = urlConnection.getRequestProperties().toString(); + urlConnection.getInputStream(); httpResponseCode = urlConnection.getResponseCode(); + if (DBG) { + Log.d(TAG, "probe at " + mUrl + + " ret=" + httpResponseCode + + " request=" + requestHeader + + " headers=" + urlConnection.getHeaderFields()); + } } catch (IOException e) { } finally { if (urlConnection != null) urlConnection.disconnect(); diff --git a/services/core/java/com/android/server/connectivity/NetworkMonitor.java b/services/core/java/com/android/server/connectivity/NetworkMonitor.java index c40780e0d588e..97669d242f063 100644 --- a/services/core/java/com/android/server/connectivity/NetworkMonitor.java +++ b/services/core/java/com/android/server/connectivity/NetworkMonitor.java @@ -789,6 +789,8 @@ public class NetworkMonitor extends StateMachine { if (userAgent != null) { urlConnection.setRequestProperty("User-Agent", userAgent); } + // cannot read request header after connection + String requestHeader = urlConnection.getRequestProperties().toString(); // Time how long it takes to get a response to our request long requestTimestamp = SystemClock.elapsedRealtime(); @@ -802,6 +804,7 @@ public class NetworkMonitor extends StateMachine { validationLog(ValidationProbeEvent.getProbeName(probeType) + " " + url + " time=" + (responseTimestamp - requestTimestamp) + "ms" + " ret=" + httpResponseCode + + " request=" + requestHeader + " headers=" + urlConnection.getHeaderFields()); // NOTE: We may want to consider an "HTTP/1.0 204" response to be a captive // portal. The only example of this seen so far was a captive portal. For