message/payload: Clean up check / trailing state

We want to be able to trivially re-use payloads for marshalling data
from a buffer into other formats. This change tries to make the meaning
of trailingOk and unpackCheck consistent, since the meanings didn't seem
clear in the previous code. Now, unpackCheck is only used to determine
if unpacking was checked, and trailingOk determines if unpackCheck is
required.

This also fixes lots of spurious warnings being printed for commands
which were checking their output correctly, or were legacy and unable to
check output.

Change-Id: Id7aa9266693b4e3f896027acf6b3e5d757fdf981
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/include/ipmid/message.hpp b/include/ipmid/message.hpp
index 7f1ad7e..b10fc42 100644
--- a/include/ipmid/message.hpp
+++ b/include/ipmid/message.hpp
@@ -103,15 +103,14 @@
     Payload(Payload&&) = default;
     Payload& operator=(Payload&&) = default;
 
-    explicit Payload(std::vector<uint8_t>&& data) :
-        raw(std::move(data)), unpackCheck(false)
+    explicit Payload(std::vector<uint8_t>&& data) : raw(std::move(data))
     {
     }
 
     ~Payload()
     {
         using namespace phosphor::logging;
-        if (trailingOk && !unpackCheck && !fullyUnpacked())
+        if (raw.size() != 0 && !trailingOk && !unpackCheck && !unpackError)
         {
             log<level::ERR>("Failed to check request for full unpack");
         }
@@ -449,8 +448,8 @@
     size_t bitCount = 0;
     std::vector<uint8_t> raw;
     size_t rawIndex = 0;
-    bool trailingOk = false;
-    bool unpackCheck = true;
+    bool trailingOk = true;
+    bool unpackCheck = false;
     bool unpackError = false;
 };
 
@@ -573,7 +572,6 @@
                     // not all bits were consumed by requested parameters
                     return ipmi::ccReqDataLenInvalid;
                 }
-                payload.unpackCheck = false;
             }
         }
         return unpackRet;