public void PutAttribute(ControlAttribute attribute) { if (ControlHeader.CONTROL_HEADER_BYTES + header.payload_length + attribute.GetTotalLength() > CONTROL_MAX_PAYLOAD_LENGTH) throw new ArgumentException ("Putting attribute would exceed maximum message length"); attributes.Add (attribute); header.payload_length += attribute.GetTotalLength (); }
public void FromBinary(BinaryReader reader) { attributes.Clear (); header.FromBinary (reader); if (header.payload_length == 0) return; int remaining = header.payload_length; while (remaining > 0) { if (remaining < ControlAttribute.CONTROL_ATTRIBUTE_HEADER_BYTES) throw new ArgumentException ("Incorrect payload - not enough data for attribute header"); ControlAttribute attribute = ControlAttribute.FromBinary (reader); remaining -= attribute.GetTotalLength (); attributes.Add (attribute); } Validate(); }