From 1968256926a13e8d809256f652073b0532199fd1 Mon Sep 17 00:00:00 2001 From: Magnus Strandberg Date: Fri, 17 Aug 2012 11:36:55 +0200 Subject: [PATCH] Fix for updating TCP buffer size when switching network type When PDP connects in GSM network, the TCP buffer window size is set to max 8760. If the phone swicthes to UMTS, the TCP buffer size is not updated to UMTS, i.e. GPRS buffer size is still used with limited data transfer spead as a result. This fix makes sure the TCP buffer size is updated when switching network type. Change-Id: Iaa527c84f56cae108f4c7276bbed10552faaff6c --- core/java/android/net/MobileDataStateTracker.java | 13 +++++++++++-- core/java/android/net/NetworkStateTracker.java | 6 ++++++ .../com/android/server/ConnectivityService.java | 5 +++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java index 561294376335d..ff029206cf99d 100644 --- a/core/java/android/net/MobileDataStateTracker.java +++ b/core/java/android/net/MobileDataStateTracker.java @@ -184,8 +184,17 @@ public class MobileDataStateTracker implements NetworkStateTracker { if (!TextUtils.equals(apnType, mApnType)) { return; } - mNetworkInfo.setSubtype(TelephonyManager.getDefault().getNetworkType(), - TelephonyManager.getDefault().getNetworkTypeName()); + + int oldSubtype = mNetworkInfo.getSubtype(); + int newSubType = TelephonyManager.getDefault().getNetworkType(); + String subTypeName = TelephonyManager.getDefault().getNetworkTypeName(); + mNetworkInfo.setSubtype(newSubType, subTypeName); + if (newSubType != oldSubtype && mNetworkInfo.isConnected()) { + Message msg = mTarget.obtainMessage(EVENT_NETWORK_SUBTYPE_CHANGED, + oldSubtype, 0, mNetworkInfo); + msg.sendToTarget(); + } + PhoneConstants.DataState state = Enum.valueOf(PhoneConstants.DataState.class, intent.getStringExtra(PhoneConstants.STATE_KEY)); String reason = intent.getStringExtra(PhoneConstants.STATE_CHANGE_REASON_KEY); diff --git a/core/java/android/net/NetworkStateTracker.java b/core/java/android/net/NetworkStateTracker.java index 7df0193c8b1ea..0d6dcd6f34273 100644 --- a/core/java/android/net/NetworkStateTracker.java +++ b/core/java/android/net/NetworkStateTracker.java @@ -68,6 +68,12 @@ public interface NetworkStateTracker { */ public static final int EVENT_RESTORE_DEFAULT_NETWORK = 6; + /** + * msg.what = EVENT_NETWORK_SUBTYPE_CHANGED + * msg.obj = NetworkInfo object + */ + public static final int EVENT_NETWORK_SUBTYPE_CHANGED = 7; + /** * ------------------------------------------------------------- * Control Interface diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 230f07bb5baf2..86ada4049a0c0 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -2490,6 +2490,11 @@ private NetworkStateTracker makeWimaxStateTracker() { // @see bug/4455071 handleConnectivityChange(info.getType(), false); break; + case NetworkStateTracker.EVENT_NETWORK_SUBTYPE_CHANGED: + info = (NetworkInfo) msg.obj; + type = info.getType(); + updateNetworkSettings(mNetTrackers[type]); + break; case EVENT_CLEAR_NET_TRANSITION_WAKELOCK: String causedBy = null; synchronized (ConnectivityService.this) {