public override uint Dump(BinaryWriter writer)
{
UInt32 length = 0;
UInt32 kind_responses_length = 0;
/* Before writing the message body the message_code is sufficiant */
writer.Write(IPAddress.HostToNetworkOrder(
(short)RELOAD_MessageCode.Fetch_Answer));
/* Placeholder for length, which will be filled on return */
writer.Write(IPAddress.HostToNetworkOrder((int)length));
/* Placeholder for length of all FetchKindResponses
* FetchKindResponse kind_responses<0..2^32-1>;
*/
long posBeforeResp = writer.BaseStream.Position;
writer.Write(IPAddress.HostToNetworkOrder((int)kind_responses_length));
/* length itself */
foreach (FetchKindResponse kind_response in kind_responses)
{
writer.Write(IPAddress.HostToNetworkOrder(
(int)kind_response.kind));
writer.Write(IPAddress.HostToNetworkOrder(
(long)kind_response.generation));
/* Placeholder for write length of the values
* StoredData values<0..2^32-1>;
*/
long posBeforeSDs = writer.BaseStream.Position;
writer.Write(IPAddress.HostToNetworkOrder((int)0));
foreach (StoredData stored_data in kind_response.values)
{
long posBeforeSD = writer.BaseStream.Position;
writer.Write(IPAddress.HostToNetworkOrder(0));
writer.Write(IPAddress.HostToNetworkOrder(
(long)stored_data.StoreageTime));
writer.Write(IPAddress.HostToNetworkOrder(
(int)stored_data.LifeTime));
// Write StoredDataValue meta data
stored_data.Value.Dump(writer);
// Write Usage data
stored_data.Value.GetUsageValue.dump(writer);
// Write the Signature
stored_data.Signature.Dump(writer);
//TODO stored_data.Signature.Dump(writer);
StreamUtil.WrittenBytesExcludeLength(posBeforeSD, writer);
}
StreamUtil.WrittenBytesExcludeLength(posBeforeSDs, writer);
}
StreamUtil.WrittenBytesExcludeLength(posBeforeResp, writer);
return length;
}