diff options
author | Prashant Shrivastava <prsriv@codeaurora.org> | 2016-07-04 12:12:35 +0530 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2016-08-24 08:07:51 -0600 |
commit | aa664a2aaad429bb773fa553ffcfcc54dc5d72cc (patch) | |
tree | 1c2b8e3ddb4011ebec9e6f10b136f1576412a085 | |
parent | 62faf59da6137d7d17a01f85b0919f8b12b332c3 (diff) | |
download | android_external_apache-http-aa664a2aaad429bb773fa553ffcfcc54dc5d72cc.tar.gz android_external_apache-http-aa664a2aaad429bb773fa553ffcfcc54dc5d72cc.tar.bz2 android_external_apache-http-aa664a2aaad429bb773fa553ffcfcc54dc5d72cc.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.java | 26 | ||||
-rw-r--r-- | src/org/apache/http/impl/client/ZeroBalanceHelperClass.java | 114 |
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(); + } + } +} |