Merge change 2957 into donut

* changes:
  Allow response payload on RIL_REQUEST error
This commit is contained in:
Android (Google) Code Review
2009-06-02 18:19:29 -07:00

View File

@@ -165,7 +165,7 @@ class RILRequest {
} }
void void
onError(int error) { onError(int error, Object ret) {
CommandException ex; CommandException ex;
ex = CommandException.fromRilErrno(error); ex = CommandException.fromRilErrno(error);
@@ -175,7 +175,7 @@ class RILRequest {
+ " error: " + ex); + " error: " + ex);
if (mResult != null) { if (mResult != null) {
AsyncResult.forMessage(mResult, null, ex); AsyncResult.forMessage(mResult, ret, ex);
mResult.sendToTarget(); mResult.sendToTarget();
} }
@@ -290,7 +290,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {
s = mSocket; s = mSocket;
if (s == null) { if (s == null) {
rr.onError(RADIO_NOT_AVAILABLE); rr.onError(RADIO_NOT_AVAILABLE, null);
rr.release(); rr.release();
mRequestMessagesPending--; mRequestMessagesPending--;
alreadySubtracted = true; alreadySubtracted = true;
@@ -331,7 +331,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {
// make sure this request has not already been handled, // make sure this request has not already been handled,
// eg, if RILReceiver cleared the list. // eg, if RILReceiver cleared the list.
if (req != null || !alreadySubtracted) { if (req != null || !alreadySubtracted) {
rr.onError(RADIO_NOT_AVAILABLE); rr.onError(RADIO_NOT_AVAILABLE, null);
rr.release(); rr.release();
} }
} catch (RuntimeException exc) { } catch (RuntimeException exc) {
@@ -340,7 +340,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {
// make sure this request has not already been handled, // make sure this request has not already been handled,
// eg, if RILReceiver cleared the list. // eg, if RILReceiver cleared the list.
if (req != null || !alreadySubtracted) { if (req != null || !alreadySubtracted) {
rr.onError(GENERIC_FAILURE); rr.onError(GENERIC_FAILURE, null);
rr.release(); rr.release();
} }
} }
@@ -545,7 +545,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {
synchronized (mRequestsList) { synchronized (mRequestsList) {
for (int i = 0, sz = mRequestsList.size() ; i < sz ; i++) { for (int i = 0, sz = mRequestsList.size() ; i < sz ; i++) {
RILRequest rr = mRequestsList.get(i); RILRequest rr = mRequestsList.get(i);
rr.onError(RADIO_NOT_AVAILABLE); rr.onError(RADIO_NOT_AVAILABLE, null);
rr.release(); rr.release();
} }
@@ -1986,20 +1986,16 @@ public final class RIL extends BaseCommands implements CommandsInterface {
return; return;
} }
if (error != 0) { Object ret = null;
rr.onError(error);
rr.release();
return;
}
Object ret; if (error == 0 || p.dataAvail() > 0) {
// either command succeeds or command fails but with data payload
try {switch (rr.mRequest) { try {switch (rr.mRequest) {
/* /*
cat libs/telephony/ril_commands.h \ cat libs/telephony/ril_commands.h \
| egrep "^ *{RIL_" \ | egrep "^ *{RIL_" \
| sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: ret = \2(p); break;/' | sed -re 's/\{([^,]+),[^,]+,([^}]+).+/case \1: ret = \2(p); break;/'
*/ */
case RIL_REQUEST_GET_SIM_STATUS: ret = responseIccCardStatus(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_PIN: ret = responseVoid(p); break;
case RIL_REQUEST_ENTER_SIM_PUK: 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: default:
throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest); throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest);
//break; //break;
}} catch (Throwable tr) { }} catch (Throwable tr) {
// Exceptions here usually mean invalid RIL responses // Exceptions here usually mean invalid RIL responses
Log.w(LOG_TAG, rr.serialString() + "< " Log.w(LOG_TAG, rr.serialString() + "< "
+ requestToString(rr.mRequest) + requestToString(rr.mRequest)
+ " exception, possible invalid RIL response", tr); + " exception, possible invalid RIL response", tr);
if (rr.mResult != null) { if (rr.mResult != null) {
AsyncResult.forMessage(rr.mResult, null, tr); AsyncResult.forMessage(rr.mResult, null, tr);
rr.mResult.sendToTarget(); rr.mResult.sendToTarget();
}
rr.release();
return;
} }
}
if (error != 0) {
rr.onError(error, ret);
rr.release(); rr.release();
return; return;
} }