From d14e17627266ff8cf804d1f8241a0a4bde7a0ab4 Mon Sep 17 00:00:00 2001 From: Robert Greenwalt Date: Mon, 20 Aug 2012 11:15:39 -0700 Subject: [PATCH] Update TCP buffer size when switching network type Import of non-merging change 41612 from AOSP 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: Ic44a557677ffe629e83ce1f522a9f058bee6e7b2 --- 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 00438a10b2062..d59fa6a917121 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 313c1744db29a..eae89f1cb8507 100644 --- a/core/java/android/net/NetworkStateTracker.java +++ b/core/java/android/net/NetworkStateTracker.java @@ -62,6 +62,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 375ba68d42a06..cb6ce4b3b2fb7 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -2592,6 +2592,11 @@ public class ConnectivityService extends IConnectivityManager.Stub { // @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; } } }