summaryrefslogtreecommitdiffstats
path: root/telephony
diff options
context:
space:
mode:
authorjohnwang <johnwang@google.com>2009-06-02 14:58:35 -0700
committerjohnwang <johnwang@google.com>2009-06-02 17:23:08 -0700
commit03228fa8f950dfee3f679d280f98d040dea397dc (patch)
tree56666df4741b76de9c8e96c52c9b11abcf4d6390 /telephony
parentabf3c80c60c6584a2cc77a0971078f85a877bc6f (diff)
downloadframeworks_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.java51
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;
}