-
Notifications
You must be signed in to change notification settings - Fork 18
/
list_groups_response.go
67 lines (55 loc) · 1.5 KB
/
list_groups_response.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package healer
import (
"encoding/binary"
"fmt"
)
//ListGroups Response (Version: 0) => error_code [groups]
//error_code => INT16
//groups => group_id protocol_type
//group_id => STRING
//protocol_type => STRING
//FIELD DESCRIPTION
//error_code Response error code
//groups null
//group_id The unique group identifier
//protocol_type null
// version 0
type Group struct {
GroupID string
ProtocolType string
}
type ListGroupsResponse struct {
CorrelationID uint32
ErrorCode uint16
Groups []*Group
}
func (r ListGroupsResponse) Error() error {
return nil
}
func NewListGroupsResponse(payload []byte) (r ListGroupsResponse, err error) {
offset := 0
responseLength := int(binary.BigEndian.Uint32(payload))
if responseLength+4 != len(payload) {
return r, fmt.Errorf("ListGroups response length did not match: %d!=%d", responseLength+4, len(payload))
}
offset += 4
r.CorrelationID = uint32(binary.BigEndian.Uint32(payload[offset:]))
offset += 4
r.ErrorCode = binary.BigEndian.Uint16(payload[offset:])
offset += 2
groupCount := int(binary.BigEndian.Uint32(payload[offset:]))
offset += 4
r.Groups = make([]*Group, groupCount)
for i := 0; i < groupCount; i++ {
r.Groups[i] = &Group{}
l := int(binary.BigEndian.Uint16(payload[offset:]))
offset += 2
r.Groups[i].GroupID = string(payload[offset : offset+l])
offset += l
ll := int(binary.BigEndian.Uint16(payload[offset:]))
offset += 2
r.Groups[i].ProtocolType = string(payload[offset : offset+ll])
offset += ll
}
return r, nil
}