Loading src/java/com/android/internal/telephony/uicc/IccConstants.java +1 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ public interface IccConstants { static final int EF_CFIS = 0x6FCB; static final int EF_IMG = 0x4F20; static final int EF_PSISMSC = 0x6FE5; static final int EF_SMSS = 0x6F43; // USIM SIM file ids from TS 131.102 public static final int EF_PBR = 0x4F30; Loading src/java/com/android/internal/telephony/uicc/IccRecords.java +107 −1 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.telephony.CellIdentity; import android.telephony.SubscriptionInfo; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; import android.util.Pair; import com.android.internal.annotations.VisibleForTesting; Loading @@ -40,6 +41,7 @@ import com.android.internal.telephony.util.ArrayUtils; import com.android.telephony.Rlog; import java.io.FileDescriptor; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.lang.annotation.Retention; Loading @@ -55,8 +57,11 @@ import java.util.concurrent.atomic.AtomicInteger; * {@hide} */ public abstract class IccRecords extends Handler implements IccConstants { private static final String LOG_TAG = "IccRecords"; protected static final boolean DBG = true; protected static final boolean VDBG = false; // STOPSHIP if true private static final boolean FORCE_VERBOSE_STATE_LOGGING = false; /* stopship if true */ protected static final boolean VDBG = FORCE_VERBOSE_STATE_LOGGING || Rlog.isLoggable(LOG_TAG, Log.VERBOSE); public static final int PLMN_MIN_LENGTH = CellIdentity.MCC_LENGTH + CellIdentity.MNC_MIN_LENGTH; Loading Loading @@ -121,6 +126,10 @@ public abstract class IccRecords extends Handler implements IccConstants { protected boolean mRecordsRequested = false; // true if we've made requests for the sim records protected int mLockedRecordsReqReason = LOCKED_RECORDS_REQ_REASON_NONE; // EF_SMSS fields tpmr invalid, min and max declarations protected static final int SMSS_INVALID_TPMR = -1; private static final int TPMR_MIN = 0x00; private static final int TPMR_MAX = 0xFF; @VisibleForTesting(visibility = VisibleForTesting.Visibility.PROTECTED) public String mIccId; // Includes only decimals (no hex) Loading Loading @@ -179,6 +188,10 @@ public abstract class IccRecords extends Handler implements IccConstants { // Reference: TS 31.102 section 4.5.9 protected String mPsiSmsc; // EF_SMSS value which is combination of TPMR and Memory exceed flag // Reference: TS 31.102 section 4.2.9 protected byte[] mSmssValues; CarrierTestOverride mCarrierTestOverride; //Arbitrary offset for the Handler Loading Loading @@ -240,6 +253,10 @@ public abstract class IccRecords extends Handler implements IccConstants { // TAG value to retrieve EF_PSISMSC from parsed SimTlv object private static final int TAG_TLV_USIM_VALUE_80 = 0x80; // call back received on this upon EF_SMSS record update. public static final int EVENT_SET_SMSS_RECORD_DONE = 201; /** * There are two purposes for this class. First, each instance of AuthAsyncResponse acts as a * lock to for calling thead to wait in getIccSimChallengeResponse(). Second, pass the IMS Loading Loading @@ -962,6 +979,26 @@ public abstract class IccRecords extends Handler implements IccConstants { } break; case EVENT_SET_SMSS_RECORD_DONE: ar = (AsyncResult) msg.obj; SmssRecord smssRecord = null; if (ar.userObj != null) { smssRecord = (SmssRecord) ar.userObj; } if (ar.exception == null && smssRecord.getSmssValue() != null) { mSmssValues = smssRecord.getSmssValue().clone(); } else { loge("SIM EF_SMSS field updating error=" + ar.exception); } if (smssRecord != null && smssRecord.getMessage() != null) { Message message = smssRecord.getMessage(); AsyncResult.forMessage(message, ar.result, ar.exception); message.sendToTarget(); } else { loge("smssRecord or smssRecord.getMessage() object is null"); } break; default: super.handleMessage(msg); } Loading Loading @@ -1568,4 +1605,73 @@ public abstract class IccRecords extends Handler implements IccConstants { return "{fullName = " + fullName + ", shortName = " + shortName + "}"; } } /** * Sets the elementary (EF_SMSS) field with latest last used TP-Message reference value. * First byte of EF_SMSS represents the TPMR value as per the spec * (Section 4.2.9 of 3GPP TS 31.102) * * @param tpmr: Last used TP-Message reference parameter of type int * @param onComplete: android.os.Message to be notified upon completion */ public void setSmssTpmrValue(int tpmr, Message onComplete) { if(VDBG) log("setSmssTpmrValue()"); if (mSmssValues != null && mSmssValues.length > 0 && tpmr >= TPMR_MIN && tpmr <= TPMR_MAX) { byte[] tempSmss = mSmssValues.clone(); tempSmss[0] = (byte) (tpmr & 0xFF); SmssRecord smssRecord = createSmssRecord(onComplete, tempSmss); mFh.updateEFTransparent(IccConstants.EF_SMSS, tempSmss, obtainMessage(EVENT_SET_SMSS_RECORD_DONE, smssRecord)); } else if (onComplete != null) { loge("Failed to set EF_SMSS [TPMR] field to SIM"); if (mSmssValues == null || mSmssValues.length <= 0) { AsyncResult.forMessage((onComplete)).exception = new FileNotFoundException("EF_SMSS file not found"); } else if (tpmr < TPMR_MIN || tpmr > TPMR_MAX) { AsyncResult.forMessage((onComplete)).exception = new IllegalArgumentException("TPMR value is not in allowed range"); } onComplete.sendToTarget(); } } /** * Fetches the last used TPMR value from elementary (EF_SMSS) field. First byte of EF_SMSS * represents the TPMR value as per the spec (Section 4.2.9 of 3GPP TS 31.102) * * @return TP-Message reference parameter of type int, -1 in case if it fails to read the * EF_SMSS field from the sim. */ public int getSmssTpmrValue() { if (mSmssValues != null && mSmssValues.length > 0) { return (mSmssValues[0] & 0xFF); } loge("IccRecords - EF_SMSS is null"); return SMSS_INVALID_TPMR; } @VisibleForTesting public SmssRecord createSmssRecord(Message msg, byte[] smss) { return new SmssRecord(msg, smss); } static class SmssRecord { private Message mMsg; private byte[] mSmss; SmssRecord (Message msg, byte[] smss) { mMsg = msg; mSmss = smss; } private byte[] getSmssValue() { return mSmss; } private Message getMessage() { return mMsg; } } } src/java/com/android/internal/telephony/uicc/IsimFileHandler.java +1 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ public final class IsimFileHandler extends IccFileHandler implements IccConstant case EF_DOMAIN: case EF_IST: case EF_PCSCF: case EF_SMSS: return MF_SIM + DF_ADF; } String path = getCommonIccEFPath(efid); Loading src/java/com/android/internal/telephony/uicc/IsimUiccRecords.java +28 −4 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.os.AsyncResult; import android.os.Build; import android.os.Message; import android.telephony.SubscriptionManager; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.CommandsInterface; Loading @@ -42,7 +43,9 @@ public class IsimUiccRecords extends IccRecords implements IsimRecords { protected static final String LOG_TAG = "IsimUiccRecords"; private static final boolean DBG = true; private static final boolean VDBG = false; // STOPSHIP if true private static final boolean FORCE_VERBOSE_STATE_LOGGING = false; /* stopship if true */ private static final boolean VDBG = FORCE_VERBOSE_STATE_LOGGING || Rlog.isLoggable(LOG_TAG, Log.VERBOSE); private static final boolean DUMP_RECORDS = false; // Note: PII is logged when this is true // STOPSHIP if true public static final String INTENT_ISIM_REFRESH = "com.android.intent.isim_refresh"; Loading Loading @@ -70,8 +73,9 @@ public class IsimUiccRecords extends IccRecords implements IsimRecords { + " mIsimDomain=" + mIsimDomain + " mIsimImpu=" + mIsimImpu + " mIsimIst=" + mIsimIst + " mIsimPcscf=" + mIsimPcscf + " mPsiSmsc=" + mPsiSmsc) : ""); + " mIsimPcscf=" + Arrays.toString(mIsimPcscf) + " mPsiSmsc=" + mPsiSmsc + " mSmss TPMR=" + getSmssTpmrValue()) : ""); } public IsimUiccRecords(UiccCardApplication app, Context c, CommandsInterface ci) { Loading Loading @@ -113,7 +117,6 @@ public class IsimUiccRecords extends IccRecords implements IsimRecords { broadcastRefresh(); super.handleMessage(msg); break; default: super.handleMessage(msg); // IccRecords handles generic record load responses Loading Loading @@ -145,6 +148,9 @@ public class IsimUiccRecords extends IccRecords implements IsimRecords { mFh.loadEFLinearFixedAll(EF_PCSCF, obtainMessage( IccRecords.EVENT_GET_ICC_RECORD_DONE, new EfIsimPcscfLoaded())); mRecordsToLoad++; mFh.loadEFTransparent(EF_SMSS, obtainMessage( IccRecords.EVENT_GET_ICC_RECORD_DONE, new EfIsimSmssLoaded())); mRecordsToLoad++; mFh.loadEFLinearFixed(EF_PSISMSC, 1, obtainMessage( IccRecords.EVENT_GET_ICC_RECORD_DONE, new EfIsimPsiSmscLoaded())); Loading Loading @@ -218,6 +224,23 @@ public class IsimUiccRecords extends IccRecords implements IsimRecords { if (DUMP_RECORDS) log("EF_IST=" + mIsimIst); } } private class EfIsimSmssLoaded implements IccRecords.IccRecordLoaded { @Override public String getEfName() { return "EF_ISIM_SMSS"; } @Override public void onRecordLoaded(AsyncResult ar) { mSmssValues = (byte[]) ar.result; if (VDBG) { log("IsimUiccRecords - EF_SMSS TPMR value = " + getSmssTpmrValue()); } } } private class EfIsimPcscfLoaded implements IccRecords.IccRecordLoaded { public String getEfName() { return "EF_ISIM_PCSCF"; Loading Loading @@ -468,6 +491,7 @@ public class IsimUiccRecords extends IccRecords implements IsimRecords { pw.println(" mIsimIst" + mIsimIst); pw.println(" mIsimPcscf" + mIsimPcscf); pw.println(" mPsismsc=" + mPsiSmsc); pw.println(" mSmss TPMR=" + getSmssTpmrValue()); } pw.flush(); } Loading src/java/com/android/internal/telephony/uicc/SIMRecords.java +26 −5 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.telephony.PhoneNumberUtils; import android.telephony.SmsMessage; import android.telephony.SubscriptionInfo; import android.text.TextUtils; import android.util.Log; import android.util.Pair; import com.android.internal.telephony.CommandsInterface; Loading @@ -54,8 +55,9 @@ public class SIMRecords extends IccRecords { protected static final String LOG_TAG = "SIMRecords"; private static final boolean CRASH_RIL = false; private static final boolean VDBG = false; private static final boolean FORCE_VERBOSE_STATE_LOGGING = false; /* stopship if true */ private static final boolean VDBG = FORCE_VERBOSE_STATE_LOGGING || Rlog.isLoggable(LOG_TAG, Log.VERBOSE); // ***** Instance Variables Loading Loading @@ -109,7 +111,8 @@ public class SIMRecords extends IccRecords { + " mEfCff=" + mEfCff + " mEfCfis=" + mEfCfis + " getOperatorNumeric=" + getOperatorNumeric() + " mPsiSmsc=" + mPsiSmsc; + " mPsiSmsc=" + mPsiSmsc + " TPMR=" + getSmssTpmrValue(); } // ***** Constants Loading Loading @@ -185,7 +188,9 @@ public class SIMRecords extends IccRecords { private static final int EVENT_GET_FPLMN_DONE = 41 + SIM_RECORD_EVENT_BASE; private static final int EVENT_GET_FPLMN_SIZE_DONE = 42 + SIM_RECORD_EVENT_BASE; private static final int EVENT_SET_FPLMN_DONE = 43 + SIM_RECORD_EVENT_BASE; protected static final int EVENT_GET_SMSS_RECORD_DONE = 46 + SIM_RECORD_EVENT_BASE; protected static final int EVENT_GET_PSISMSC_DONE = 47 + SIM_RECORD_EVENT_BASE; // ***** Constructor public SIMRecords(UiccCardApplication app, Context c, CommandsInterface ci) { Loading Loading @@ -641,7 +646,6 @@ public class SIMRecords extends IccRecords { " while being destroyed. Ignoring."); return; } try { switch (msg.what) { /* IO events */ Loading Loading @@ -1297,7 +1301,7 @@ public class SIMRecords extends IccRecords { isRecordLoadResponse = true; ar = (AsyncResult) msg.obj; if (ar.exception != null) { loge("Failed to read USIM EF_SMSS field error=" + ar.exception); loge("Failed to read USIM EF_PSISMSC field error=" + ar.exception); } else { data = (byte[]) ar.result; if (data != null && data.length > 0) { Loading @@ -1309,6 +1313,19 @@ public class SIMRecords extends IccRecords { } break; case EVENT_GET_SMSS_RECORD_DONE: isRecordLoadResponse = true; ar = (AsyncResult) msg.obj; if (ar.exception != null) { loge("Failed to read USIM EF_SMSS field error=" + ar.exception); } else { mSmssValues = (byte[]) ar.result; if (VDBG) { log("SIMRecords - EF_SMSS TPMR value = " + getSmssTpmrValue()); } } break; default: super.handleMessage(msg); // IccRecords handles generic record load responses } Loading Loading @@ -1707,6 +1724,9 @@ public class SIMRecords extends IccRecords { mRecordsToLoad++; } mFh.loadEFTransparent(EF_SMSS, obtainMessage(EVENT_GET_SMSS_RECORD_DONE)); mRecordsToLoad++; if (CRASH_RIL) { String sms = "0107912160130310f20404d0110041007030208054832b0120" + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" Loading Loading @@ -2166,6 +2186,7 @@ public class SIMRecords extends IccRecords { pw.println(" mFplmns[]=" + Arrays.toString(mFplmns)); pw.println(" mEhplmns[]=" + Arrays.toString(mEhplmns)); pw.println(" mPsismsc=" + mPsiSmsc); pw.println(" TPMR=" + getSmssTpmrValue()); pw.flush(); } } Loading
src/java/com/android/internal/telephony/uicc/IccConstants.java +1 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ public interface IccConstants { static final int EF_CFIS = 0x6FCB; static final int EF_IMG = 0x4F20; static final int EF_PSISMSC = 0x6FE5; static final int EF_SMSS = 0x6F43; // USIM SIM file ids from TS 131.102 public static final int EF_PBR = 0x4F30; Loading
src/java/com/android/internal/telephony/uicc/IccRecords.java +107 −1 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.telephony.CellIdentity; import android.telephony.SubscriptionInfo; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; import android.util.Pair; import com.android.internal.annotations.VisibleForTesting; Loading @@ -40,6 +41,7 @@ import com.android.internal.telephony.util.ArrayUtils; import com.android.telephony.Rlog; import java.io.FileDescriptor; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.lang.annotation.Retention; Loading @@ -55,8 +57,11 @@ import java.util.concurrent.atomic.AtomicInteger; * {@hide} */ public abstract class IccRecords extends Handler implements IccConstants { private static final String LOG_TAG = "IccRecords"; protected static final boolean DBG = true; protected static final boolean VDBG = false; // STOPSHIP if true private static final boolean FORCE_VERBOSE_STATE_LOGGING = false; /* stopship if true */ protected static final boolean VDBG = FORCE_VERBOSE_STATE_LOGGING || Rlog.isLoggable(LOG_TAG, Log.VERBOSE); public static final int PLMN_MIN_LENGTH = CellIdentity.MCC_LENGTH + CellIdentity.MNC_MIN_LENGTH; Loading Loading @@ -121,6 +126,10 @@ public abstract class IccRecords extends Handler implements IccConstants { protected boolean mRecordsRequested = false; // true if we've made requests for the sim records protected int mLockedRecordsReqReason = LOCKED_RECORDS_REQ_REASON_NONE; // EF_SMSS fields tpmr invalid, min and max declarations protected static final int SMSS_INVALID_TPMR = -1; private static final int TPMR_MIN = 0x00; private static final int TPMR_MAX = 0xFF; @VisibleForTesting(visibility = VisibleForTesting.Visibility.PROTECTED) public String mIccId; // Includes only decimals (no hex) Loading Loading @@ -179,6 +188,10 @@ public abstract class IccRecords extends Handler implements IccConstants { // Reference: TS 31.102 section 4.5.9 protected String mPsiSmsc; // EF_SMSS value which is combination of TPMR and Memory exceed flag // Reference: TS 31.102 section 4.2.9 protected byte[] mSmssValues; CarrierTestOverride mCarrierTestOverride; //Arbitrary offset for the Handler Loading Loading @@ -240,6 +253,10 @@ public abstract class IccRecords extends Handler implements IccConstants { // TAG value to retrieve EF_PSISMSC from parsed SimTlv object private static final int TAG_TLV_USIM_VALUE_80 = 0x80; // call back received on this upon EF_SMSS record update. public static final int EVENT_SET_SMSS_RECORD_DONE = 201; /** * There are two purposes for this class. First, each instance of AuthAsyncResponse acts as a * lock to for calling thead to wait in getIccSimChallengeResponse(). Second, pass the IMS Loading Loading @@ -962,6 +979,26 @@ public abstract class IccRecords extends Handler implements IccConstants { } break; case EVENT_SET_SMSS_RECORD_DONE: ar = (AsyncResult) msg.obj; SmssRecord smssRecord = null; if (ar.userObj != null) { smssRecord = (SmssRecord) ar.userObj; } if (ar.exception == null && smssRecord.getSmssValue() != null) { mSmssValues = smssRecord.getSmssValue().clone(); } else { loge("SIM EF_SMSS field updating error=" + ar.exception); } if (smssRecord != null && smssRecord.getMessage() != null) { Message message = smssRecord.getMessage(); AsyncResult.forMessage(message, ar.result, ar.exception); message.sendToTarget(); } else { loge("smssRecord or smssRecord.getMessage() object is null"); } break; default: super.handleMessage(msg); } Loading Loading @@ -1568,4 +1605,73 @@ public abstract class IccRecords extends Handler implements IccConstants { return "{fullName = " + fullName + ", shortName = " + shortName + "}"; } } /** * Sets the elementary (EF_SMSS) field with latest last used TP-Message reference value. * First byte of EF_SMSS represents the TPMR value as per the spec * (Section 4.2.9 of 3GPP TS 31.102) * * @param tpmr: Last used TP-Message reference parameter of type int * @param onComplete: android.os.Message to be notified upon completion */ public void setSmssTpmrValue(int tpmr, Message onComplete) { if(VDBG) log("setSmssTpmrValue()"); if (mSmssValues != null && mSmssValues.length > 0 && tpmr >= TPMR_MIN && tpmr <= TPMR_MAX) { byte[] tempSmss = mSmssValues.clone(); tempSmss[0] = (byte) (tpmr & 0xFF); SmssRecord smssRecord = createSmssRecord(onComplete, tempSmss); mFh.updateEFTransparent(IccConstants.EF_SMSS, tempSmss, obtainMessage(EVENT_SET_SMSS_RECORD_DONE, smssRecord)); } else if (onComplete != null) { loge("Failed to set EF_SMSS [TPMR] field to SIM"); if (mSmssValues == null || mSmssValues.length <= 0) { AsyncResult.forMessage((onComplete)).exception = new FileNotFoundException("EF_SMSS file not found"); } else if (tpmr < TPMR_MIN || tpmr > TPMR_MAX) { AsyncResult.forMessage((onComplete)).exception = new IllegalArgumentException("TPMR value is not in allowed range"); } onComplete.sendToTarget(); } } /** * Fetches the last used TPMR value from elementary (EF_SMSS) field. First byte of EF_SMSS * represents the TPMR value as per the spec (Section 4.2.9 of 3GPP TS 31.102) * * @return TP-Message reference parameter of type int, -1 in case if it fails to read the * EF_SMSS field from the sim. */ public int getSmssTpmrValue() { if (mSmssValues != null && mSmssValues.length > 0) { return (mSmssValues[0] & 0xFF); } loge("IccRecords - EF_SMSS is null"); return SMSS_INVALID_TPMR; } @VisibleForTesting public SmssRecord createSmssRecord(Message msg, byte[] smss) { return new SmssRecord(msg, smss); } static class SmssRecord { private Message mMsg; private byte[] mSmss; SmssRecord (Message msg, byte[] smss) { mMsg = msg; mSmss = smss; } private byte[] getSmssValue() { return mSmss; } private Message getMessage() { return mMsg; } } }
src/java/com/android/internal/telephony/uicc/IsimFileHandler.java +1 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ public final class IsimFileHandler extends IccFileHandler implements IccConstant case EF_DOMAIN: case EF_IST: case EF_PCSCF: case EF_SMSS: return MF_SIM + DF_ADF; } String path = getCommonIccEFPath(efid); Loading
src/java/com/android/internal/telephony/uicc/IsimUiccRecords.java +28 −4 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.os.AsyncResult; import android.os.Build; import android.os.Message; import android.telephony.SubscriptionManager; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.CommandsInterface; Loading @@ -42,7 +43,9 @@ public class IsimUiccRecords extends IccRecords implements IsimRecords { protected static final String LOG_TAG = "IsimUiccRecords"; private static final boolean DBG = true; private static final boolean VDBG = false; // STOPSHIP if true private static final boolean FORCE_VERBOSE_STATE_LOGGING = false; /* stopship if true */ private static final boolean VDBG = FORCE_VERBOSE_STATE_LOGGING || Rlog.isLoggable(LOG_TAG, Log.VERBOSE); private static final boolean DUMP_RECORDS = false; // Note: PII is logged when this is true // STOPSHIP if true public static final String INTENT_ISIM_REFRESH = "com.android.intent.isim_refresh"; Loading Loading @@ -70,8 +73,9 @@ public class IsimUiccRecords extends IccRecords implements IsimRecords { + " mIsimDomain=" + mIsimDomain + " mIsimImpu=" + mIsimImpu + " mIsimIst=" + mIsimIst + " mIsimPcscf=" + mIsimPcscf + " mPsiSmsc=" + mPsiSmsc) : ""); + " mIsimPcscf=" + Arrays.toString(mIsimPcscf) + " mPsiSmsc=" + mPsiSmsc + " mSmss TPMR=" + getSmssTpmrValue()) : ""); } public IsimUiccRecords(UiccCardApplication app, Context c, CommandsInterface ci) { Loading Loading @@ -113,7 +117,6 @@ public class IsimUiccRecords extends IccRecords implements IsimRecords { broadcastRefresh(); super.handleMessage(msg); break; default: super.handleMessage(msg); // IccRecords handles generic record load responses Loading Loading @@ -145,6 +148,9 @@ public class IsimUiccRecords extends IccRecords implements IsimRecords { mFh.loadEFLinearFixedAll(EF_PCSCF, obtainMessage( IccRecords.EVENT_GET_ICC_RECORD_DONE, new EfIsimPcscfLoaded())); mRecordsToLoad++; mFh.loadEFTransparent(EF_SMSS, obtainMessage( IccRecords.EVENT_GET_ICC_RECORD_DONE, new EfIsimSmssLoaded())); mRecordsToLoad++; mFh.loadEFLinearFixed(EF_PSISMSC, 1, obtainMessage( IccRecords.EVENT_GET_ICC_RECORD_DONE, new EfIsimPsiSmscLoaded())); Loading Loading @@ -218,6 +224,23 @@ public class IsimUiccRecords extends IccRecords implements IsimRecords { if (DUMP_RECORDS) log("EF_IST=" + mIsimIst); } } private class EfIsimSmssLoaded implements IccRecords.IccRecordLoaded { @Override public String getEfName() { return "EF_ISIM_SMSS"; } @Override public void onRecordLoaded(AsyncResult ar) { mSmssValues = (byte[]) ar.result; if (VDBG) { log("IsimUiccRecords - EF_SMSS TPMR value = " + getSmssTpmrValue()); } } } private class EfIsimPcscfLoaded implements IccRecords.IccRecordLoaded { public String getEfName() { return "EF_ISIM_PCSCF"; Loading Loading @@ -468,6 +491,7 @@ public class IsimUiccRecords extends IccRecords implements IsimRecords { pw.println(" mIsimIst" + mIsimIst); pw.println(" mIsimPcscf" + mIsimPcscf); pw.println(" mPsismsc=" + mPsiSmsc); pw.println(" mSmss TPMR=" + getSmssTpmrValue()); } pw.flush(); } Loading
src/java/com/android/internal/telephony/uicc/SIMRecords.java +26 −5 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.telephony.PhoneNumberUtils; import android.telephony.SmsMessage; import android.telephony.SubscriptionInfo; import android.text.TextUtils; import android.util.Log; import android.util.Pair; import com.android.internal.telephony.CommandsInterface; Loading @@ -54,8 +55,9 @@ public class SIMRecords extends IccRecords { protected static final String LOG_TAG = "SIMRecords"; private static final boolean CRASH_RIL = false; private static final boolean VDBG = false; private static final boolean FORCE_VERBOSE_STATE_LOGGING = false; /* stopship if true */ private static final boolean VDBG = FORCE_VERBOSE_STATE_LOGGING || Rlog.isLoggable(LOG_TAG, Log.VERBOSE); // ***** Instance Variables Loading Loading @@ -109,7 +111,8 @@ public class SIMRecords extends IccRecords { + " mEfCff=" + mEfCff + " mEfCfis=" + mEfCfis + " getOperatorNumeric=" + getOperatorNumeric() + " mPsiSmsc=" + mPsiSmsc; + " mPsiSmsc=" + mPsiSmsc + " TPMR=" + getSmssTpmrValue(); } // ***** Constants Loading Loading @@ -185,7 +188,9 @@ public class SIMRecords extends IccRecords { private static final int EVENT_GET_FPLMN_DONE = 41 + SIM_RECORD_EVENT_BASE; private static final int EVENT_GET_FPLMN_SIZE_DONE = 42 + SIM_RECORD_EVENT_BASE; private static final int EVENT_SET_FPLMN_DONE = 43 + SIM_RECORD_EVENT_BASE; protected static final int EVENT_GET_SMSS_RECORD_DONE = 46 + SIM_RECORD_EVENT_BASE; protected static final int EVENT_GET_PSISMSC_DONE = 47 + SIM_RECORD_EVENT_BASE; // ***** Constructor public SIMRecords(UiccCardApplication app, Context c, CommandsInterface ci) { Loading Loading @@ -641,7 +646,6 @@ public class SIMRecords extends IccRecords { " while being destroyed. Ignoring."); return; } try { switch (msg.what) { /* IO events */ Loading Loading @@ -1297,7 +1301,7 @@ public class SIMRecords extends IccRecords { isRecordLoadResponse = true; ar = (AsyncResult) msg.obj; if (ar.exception != null) { loge("Failed to read USIM EF_SMSS field error=" + ar.exception); loge("Failed to read USIM EF_PSISMSC field error=" + ar.exception); } else { data = (byte[]) ar.result; if (data != null && data.length > 0) { Loading @@ -1309,6 +1313,19 @@ public class SIMRecords extends IccRecords { } break; case EVENT_GET_SMSS_RECORD_DONE: isRecordLoadResponse = true; ar = (AsyncResult) msg.obj; if (ar.exception != null) { loge("Failed to read USIM EF_SMSS field error=" + ar.exception); } else { mSmssValues = (byte[]) ar.result; if (VDBG) { log("SIMRecords - EF_SMSS TPMR value = " + getSmssTpmrValue()); } } break; default: super.handleMessage(msg); // IccRecords handles generic record load responses } Loading Loading @@ -1707,6 +1724,9 @@ public class SIMRecords extends IccRecords { mRecordsToLoad++; } mFh.loadEFTransparent(EF_SMSS, obtainMessage(EVENT_GET_SMSS_RECORD_DONE)); mRecordsToLoad++; if (CRASH_RIL) { String sms = "0107912160130310f20404d0110041007030208054832b0120" + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" Loading Loading @@ -2166,6 +2186,7 @@ public class SIMRecords extends IccRecords { pw.println(" mFplmns[]=" + Arrays.toString(mFplmns)); pw.println(" mEhplmns[]=" + Arrays.toString(mEhplmns)); pw.println(" mPsismsc=" + mPsiSmsc); pw.println(" TPMR=" + getSmssTpmrValue()); pw.flush(); } }