summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPrashant Shrivastava <prsriv@codeaurora.org>2016-07-04 12:12:35 +0530
committerLinux Build Service Account <lnxbuild@localhost>2016-08-24 08:07:51 -0600
commitaa664a2aaad429bb773fa553ffcfcc54dc5d72cc (patch)
tree1c2b8e3ddb4011ebec9e6f10b136f1576412a085
parent62faf59da6137d7d17a01f85b0919f8b12b332c3 (diff)
downloadandroid_external_apache-http-staging/cm-14.0-caf.tar.gz
android_external_apache-http-staging/cm-14.0-caf.tar.bz2
android_external_apache-http-staging/cm-14.0-caf.zip
apache-http: Listening to the redirect URL.staging/cm-14.0-caf
Using reflection method we set the data block system property and block background data on the device on 3 redirect urls due to zero balance in the prepaid sim. CRs-Fixed: 1033837 Change-Id: I10dd1d8f81b837b02f37259dadcd15ee7e20835b
-rw-r--r--src/org/apache/http/impl/client/DefaultRequestDirector.java26
-rw-r--r--src/org/apache/http/impl/client/ZeroBalanceHelperClass.java114
2 files changed, 130 insertions, 10 deletions
diff --git a/src/org/apache/http/impl/client/DefaultRequestDirector.java b/src/org/apache/http/impl/client/DefaultRequestDirector.java
index 50c4a3f..44d90e4 100644
--- a/src/org/apache/http/impl/client/DefaultRequestDirector.java
+++ b/src/org/apache/http/impl/client/DefaultRequestDirector.java
@@ -134,19 +134,14 @@ public class DefaultRequestDirector implements RequestDirector {
/** The HTTP protocol processor. */
protected final HttpProcessor httpProcessor;
-
/** The request retry handler. */
protected final HttpRequestRetryHandler retryHandler;
-
/** The redirect handler. */
protected final RedirectHandler redirectHandler;
-
/** The target authentication handler. */
private final AuthenticationHandler targetAuthHandler;
-
/** The proxy authentication handler. */
private final AuthenticationHandler proxyAuthHandler;
-
/** The user token handler. */
private final UserTokenHandler userTokenHandler;
@@ -919,22 +914,33 @@ public class DefaultRequestDirector implements RequestDirector {
HttpResponse response,
HttpContext context)
throws HttpException, IOException {
-
HttpRoute route = roureq.getRoute();
HttpHost proxy = route.getProxyHost();
RequestWrapper request = roureq.getRequest();
-
+
HttpParams params = request.getParams();
- if (HttpClientParams.isRedirecting(params) &&
+ if (HttpClientParams.isRedirecting(params) &&
this.redirectHandler.isRedirectRequested(response, context)) {
-
if (redirectCount >= maxRedirects) {
throw new RedirectException("Maximum redirects ("
+ maxRedirects + ") exceeded");
}
redirectCount++;
-
URI uri = this.redirectHandler.getLocationURI(response, context);
+ /*
+ * When SIM reaches zero balance all http traffic gets redirected
+ * to recharge url and all traffic need to be blocked.
+ * So redirect count is maintained.
+ * If feature is disabled or data traffic is already blocked
+ * no need to check for redirection.
+ */
+ if (ZeroBalanceHelperClass.getFeatureFlagValue() &&
+ (!ZeroBalanceHelperClass.getBackgroundDataProperty())) {
+ Header locationHeader = response.getFirstHeader("location");
+ String location = locationHeader.getValue();
+ ZeroBalanceHelperClass.setHttpRedirectCount(location);
+ this.log.error("zerobalance::Apachehttp:Redirect count set " );
+ }
HttpHost newTarget = new HttpHost(
uri.getHost(),
diff --git a/src/org/apache/http/impl/client/ZeroBalanceHelperClass.java b/src/org/apache/http/impl/client/ZeroBalanceHelperClass.java
new file mode 100644
index 0000000..05fa2c7
--- /dev/null
+++ b/src/org/apache/http/impl/client/ZeroBalanceHelperClass.java
@@ -0,0 +1,114 @@
+/*
+ ** Copyright (c) 2015-16, The Linux Foundation. All rights reserved.
+
+ ** Redistribution and use in source and binary forms, with or without
+ ** modification, are permitted provided that the following conditions are
+ ** met:
+ ** * Redistributions of source code must retain the above copyright
+ ** notice, this list of conditions and the following disclaimer.
+ ** * Redistributions in binary form must reproduce the above
+ ** copyright notice, this list of conditions and the following
+ ** disclaimer in the documentation and/or other materials provided
+ ** with the distribution.
+ ** * Neither the name of The Linux Foundation nor the names of its
+ ** contributors may be used to endorse or promote products derived
+ ** from this software without specific prior written permission.
+
+ ** THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ ** WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ ** BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ ** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ ** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ ** BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ ** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ ** OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ ** IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.apache.http.impl.client;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+public final class ZeroBalanceHelperClass {
+
+ protected static boolean getFeatureFlagValue() {
+ try {
+ Class<?> ZeroBalanceHelper = Class
+ .forName("android.net.ZeroBalanceHelper");
+ Object helperObject = ZeroBalanceHelper.newInstance();
+ boolean isFeatureEnabled = false;
+ Method featureFlagValue = ZeroBalanceHelper.getMethod(
+ "getFeatureConfigValue");
+ featureFlagValue.setAccessible(true);
+ isFeatureEnabled = (Boolean)featureFlagValue.invoke(helperObject);
+ return isFeatureEnabled;
+ } catch (ClassNotFoundException ex) {
+ ex.printStackTrace();
+ } catch (LinkageError ex) {
+ ex.printStackTrace();
+ } catch (NoSuchMethodException ex) {
+ ex.printStackTrace();
+ } catch (InstantiationException ex) {
+ ex.printStackTrace();
+ } catch (IllegalAccessException ex) {
+ ex.printStackTrace();
+ } catch (InvocationTargetException ex) {
+ ex.printStackTrace();
+ }
+ return false;
+ }
+
+ protected static boolean getBackgroundDataProperty() {
+ try {
+ Class<?> ZeroBalanceHelper = Class
+ .forName("android.net.ZeroBalanceHelper");
+ Object helperObject = ZeroBalanceHelper.newInstance();
+ boolean isDisabled = false;
+ Method bgDataProperty = ZeroBalanceHelper.getMethod(
+ "getBgDataProperty");
+ bgDataProperty.setAccessible(true);
+ isDisabled = Boolean.valueOf(((String)bgDataProperty.invoke(helperObject)));
+ return isDisabled;
+ } catch (ClassNotFoundException ex) {
+ ex.printStackTrace();
+ } catch (LinkageError ex) {
+ ex.printStackTrace();
+ } catch (NoSuchMethodException ex) {
+ ex.printStackTrace();
+ } catch (InstantiationException ex) {
+ ex.printStackTrace();
+ } catch (IllegalAccessException ex) {
+ ex.printStackTrace();
+ } catch (InvocationTargetException ex) {
+ ex.printStackTrace();
+ }
+ return false;
+ }
+
+ protected static void setHttpRedirectCount(String url) {
+ try {
+ Class<?> ZeroBalanceHelper = Class
+ .forName("android.net.ZeroBalanceHelper");
+ Object helperObject = ZeroBalanceHelper.newInstance();
+ Method setHttpRedirectCount = ZeroBalanceHelper.getMethod(
+ "setHttpRedirectCount", String.class);
+ setHttpRedirectCount.setAccessible(true);
+ setHttpRedirectCount.invoke(helperObject, url);
+ } catch (ClassNotFoundException ex) {
+ ex.printStackTrace();
+ } catch (LinkageError ex) {
+ ex.printStackTrace();
+ } catch (NoSuchMethodException ex) {
+ ex.printStackTrace();
+ } catch (InstantiationException ex) {
+ ex.printStackTrace();
+ } catch (IllegalAccessException ex) {
+ ex.printStackTrace();
+ } catch (InvocationTargetException ex) {
+ ex.printStackTrace();
+ }
+ }
+}