func (s *MultipartReply) UnmarshalBinary(data []byte) error { err := s.Header.UnmarshalBinary(data) n := s.Header.Len() s.Type = binary.BigEndian.Uint16(data[n:]) n += 2 s.Flags = binary.BigEndian.Uint16(data[n:]) n += 2 n += 4 // for padding var req []util.Message for n < s.Header.Length { var repl util.Message switch s.Type { case MultipartType_Aggregate: repl = new(AggregateStats) case MultipartType_Desc: repl = new(DescStats) case MultipartType_Flow: repl = new(FlowStats) case MultipartType_Port: repl = new(PortStats) case MultipartType_Table: repl = new(TableStats) case MultipartType_Queue: repl = new(QueueStats) // FIXME: Support all types case MultipartType_Experimenter: break } err = repl.UnmarshalBinary(data[n:]) if err != nil { log.Printf("Error parsing stats reply") } n += repl.Len() req = append(req, repl) } s.Body = req return err }