diff options
author | johnwang <johnwang@google.com> | 2009-06-02 14:58:35 -0700 |
---|---|---|
committer | johnwang <johnwang@google.com> | 2009-06-02 17:23:08 -0700 |
commit | 03228fa8f950dfee3f679d280f98d040dea397dc (patch) | |
tree | 56666df4741b76de9c8e96c52c9b11abcf4d6390 /telephony | |
parent | abf3c80c60c6584a2cc77a0971078f85a877bc6f (diff) | |
download | frameworks_base-03228fa8f950dfee3f679d280f98d040dea397dc.zip frameworks_base-03228fa8f950dfee3f679d280f98d040dea397dc.tar.gz frameworks_base-03228fa8f950dfee3f679d280f98d040dea397dc.tar.bz2 |
Allow response payload on RIL_REQUEST error
Handle response payload while RIL_REQUEST returns error.
modified: gsm/GsmServiceStateTracker.java
Diffstat (limited to 'telephony')
-rw-r--r-- | telephony/java/com/android/internal/telephony/RIL.java | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/telephony/java/com/android/internal/telephony/RIL.java b/telephony/java/com/android/internal/telephony/RIL.java index f206d90..0cdeeff 100644 --- a/telephony/java/com/android/internal/telephony/RIL.java +++ b/telephony/java/com/android/internal/telephony/RIL.java @@ -165,7 +165,7 @@ class RILRequest { } void - onError(int error) { + onError(int error, Object ret) { CommandException ex; ex = CommandException.fromRilErrno(error); @@ -175,7 +175,7 @@ class RILRequest { + " error: " + ex); if (mResult != null) { - AsyncResult.forMessage(mResult, null, ex); + AsyncResult.forMessage(mResult, ret, ex); mResult.sendToTarget(); } @@ -290,7 +290,7 @@ public final class RIL extends BaseCommands implements CommandsInterface { s = mSocket; if (s == null) { - rr.onError(RADIO_NOT_AVAILABLE); + rr.onError(RADIO_NOT_AVAILABLE, null); rr.release(); mRequestMessagesPending--; alreadySubtracted = true; @@ -331,7 +331,7 @@ public final class RIL extends BaseCommands implements CommandsInterface { // make sure this request has not already been handled, // eg, if RILReceiver cleared the list. if (req != null || !alreadySubtracted) { - rr.onError(RADIO_NOT_AVAILABLE); + rr.onError(RADIO_NOT_AVAILABLE, null); rr.release(); } } catch (RuntimeException exc) { @@ -340,7 +340,7 @@ public final class RIL extends BaseCommands implements CommandsInterface { // make sure this request has not already been handled, // eg, if RILReceiver cleared the list. if (req != null || !alreadySubtracted) { - rr.onError(GENERIC_FAILURE); + rr.onError(GENERIC_FAILURE, null); rr.release(); } } @@ -545,7 +545,7 @@ public final class RIL extends BaseCommands implements CommandsInterface { synchronized (mRequestsList) { for (int i = 0, sz = mRequestsList.size() ; i < sz ; i++) { RILRequest rr = mRequestsList.get(i); - rr.onError(RADIO_NOT_AVAILABLE); + rr.onError(RADIO_NOT_AVAILABLE, null); rr.release(); } @@ -1986,20 +1986,16 @@ public final class RIL extends BaseCommands implements CommandsInterface { return; } - if (error != 0) { - rr.onError(error); - rr.release(); - return; - } + Object ret = null; - Object ret; - - try {switch (rr.mRequest) { -/* + if (error == 0 || p.dataAvail() > 0) { + // either command succeeds or command fails but with data payload + try {switch (rr.mRequest) { + /* cat libs/telephony/ril_commands.h \ | egrep "^ *{RIL_" \ | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: ret = \2(p); break;/' -*/ + */ case RIL_REQUEST_GET_SIM_STATUS: ret = responseIccCardStatus(p); break; case RIL_REQUEST_ENTER_SIM_PIN: ret = responseVoid(p); break; case RIL_REQUEST_ENTER_SIM_PUK: ret = responseVoid(p); break; @@ -2104,17 +2100,24 @@ public final class RIL extends BaseCommands implements CommandsInterface { default: throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest); //break; - }} catch (Throwable tr) { - // Exceptions here usually mean invalid RIL responses + }} catch (Throwable tr) { + // Exceptions here usually mean invalid RIL responses - Log.w(LOG_TAG, rr.serialString() + "< " - + requestToString(rr.mRequest) - + " exception, possible invalid RIL response", tr); + Log.w(LOG_TAG, rr.serialString() + "< " + + requestToString(rr.mRequest) + + " exception, possible invalid RIL response", tr); - if (rr.mResult != null) { - AsyncResult.forMessage(rr.mResult, null, tr); - rr.mResult.sendToTarget(); + if (rr.mResult != null) { + AsyncResult.forMessage(rr.mResult, null, tr); + rr.mResult.sendToTarget(); + } + rr.release(); + return; } + } + + if (error != 0) { + rr.onError(error, ret); rr.release(); return; } |