// FromByteArray reads his handle's data from a byte array func (h *Handle) FromByteArray(ba []byte) error { if ba == nil { return fmt.Errorf("nil byte array") } nh := &Sequence{} err := nh.FromByteArray(ba[8:]) if err != nil { return fmt.Errorf("failed to deserialize head: %s", err.Error()) } h.Lock() h.head = nh h.bits = netutils.ATo32(ba[0:4]) h.unselected = netutils.ATo32(ba[4:8]) h.Unlock() return nil }
// FromByteArray construct the sequence from the byte array // TODO (aboch): manage network/host order stuff func (s *Sequence) FromByteArray(data []byte) error { l := len(data) if l%8 != 0 { return fmt.Errorf("cannot deserialize byte sequence of lenght %d (%v)", l, data) } p := s i := 0 for { p.Block = netutils.ATo32(data[i : i+4]) p.Count = netutils.ATo32(data[i+4 : i+8]) i += 8 if i == l { break } p.Next = &Sequence{} p = p.Next } return nil }