Unlike the other fields unset here would mean unknown rather than "0" so
we must distinguish between the two. In the end it isn't very
significant since our update server and none of our clients use these
self-reported active times, exclusively using when pings were received.
Despite having common names between the request and response XML
structures the actual values which may appear in them are completely
disjoint. Splitting the types up makes the protocol easier to understand
when reading the code. When applicable, required fields like status are
passed to Add* methods.
- Avoid long argument lists and only pass values that are strictly
required such as status, fill in all other fields directly instead.
- Fill OS struct in requests based on local system.
- Define event and status codes as constants.
- Misc style tweaks.
The special XMLName field is only useful in the top level structs which
need something to attach the lower case tag to. On the rest the default
behavior without XMLName works just fine so it is clutter.
The datastore tags have been dropped too since they are not needed.