process: add IPMI error return mechanism and update errors

The IPMI packet validation code must return specific IPMI errors
corresponding to what error has occurred instead of the invalid command
error.

Update all IPMI handler pieces to return more specific errors.

Change-Id: I8d21e92015d84cc0880e3b83991aed7288e19eab
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/ipmi.cpp b/ipmi.cpp
index fb5f120..e2e0fef 100644
--- a/ipmi.cpp
+++ b/ipmi.cpp
@@ -105,7 +105,7 @@
     std::string blobId = mgr->getBlobId(request.blobIdx);
     if (blobId == "")
     {
-        return IPMI_CC_INVALID;
+        return IPMI_CC_INVALID_FIELD_REQUEST;
     }
 
     /* TODO(venture): Need to do a hard-code check against the maximum
@@ -130,13 +130,13 @@
         request->blobId, (requestLen - sizeof(struct BmcBlobOpenTx)));
     if (path.empty())
     {
-        return IPMI_CC_INVALID;
+        return IPMI_CC_REQ_DATA_LEN_INVALID;
     }
 
     /* Attempt to open. */
     if (!mgr->open(request->flags, path, &session))
     {
-        return IPMI_CC_INVALID;
+        return IPMI_CC_UNSPECIFIED_ERROR;
     }
 
     struct BmcBlobOpenRx reply;
@@ -158,7 +158,7 @@
     /* Attempt to close. */
     if (!mgr->close(request.sessionId))
     {
-        return IPMI_CC_INVALID;
+        return IPMI_CC_UNSPECIFIED_ERROR;
     }
 
     (*dataLen) = 0;
@@ -175,13 +175,13 @@
         request->blobId, (requestLen - sizeof(struct BmcBlobDeleteTx)));
     if (path.empty())
     {
-        return IPMI_CC_INVALID;
+        return IPMI_CC_REQ_DATA_LEN_INVALID;
     }
 
     /* Attempt to delete. */
     if (!mgr->deleteBlob(path))
     {
-        return IPMI_CC_INVALID;
+        return IPMI_CC_UNSPECIFIED_ERROR;
     }
 
     (*dataLen) = 0;
@@ -220,14 +220,14 @@
         request->blobId, (requestLen - sizeof(struct BmcBlobStatTx)));
     if (path.empty())
     {
-        return IPMI_CC_INVALID;
+        return IPMI_CC_REQ_DATA_LEN_INVALID;
     }
 
     /* Attempt to stat. */
     struct BlobMeta meta;
     if (!mgr->stat(path, &meta))
     {
-        return IPMI_CC_INVALID;
+        return IPMI_CC_UNSPECIFIED_ERROR;
     }
 
     return returnStatBlob(&meta, replyCmdBuf, dataLen);
@@ -244,7 +244,7 @@
 
     if (!mgr->stat(request.sessionId, &meta))
     {
-        return IPMI_CC_INVALID;
+        return IPMI_CC_UNSPECIFIED_ERROR;
     }
 
     return returnStatBlob(&meta, replyCmdBuf, dataLen);
@@ -259,7 +259,7 @@
     /* Sanity check the commitDataLen */
     if (request->commitDataLen > (requestLen - sizeof(struct BmcBlobCommitTx)))
     {
-        return IPMI_CC_INVALID;
+        return IPMI_CC_REQ_DATA_LEN_INVALID;
     }
 
     std::vector<uint8_t> data(request->commitDataLen);
@@ -267,7 +267,7 @@
 
     if (!mgr->commit(request->sessionId, data))
     {
-        return IPMI_CC_INVALID;
+        return IPMI_CC_UNSPECIFIED_ERROR;
     }
 
     (*dataLen) = 0;
@@ -317,7 +317,7 @@
     /* Attempt to write the bytes. */
     if (!mgr->write(request->sessionId, request->offset, data))
     {
-        return IPMI_CC_INVALID;
+        return IPMI_CC_UNSPECIFIED_ERROR;
     }
 
     return IPMI_CC_OK;
@@ -342,7 +342,7 @@
     /* Attempt to write the bytes. */
     if (!mgr->writeMeta(request.sessionId, request.offset, data))
     {
-        return IPMI_CC_INVALID;
+        return IPMI_CC_UNSPECIFIED_ERROR;
     }
 
     return IPMI_CC_OK;