Inconsistent channel position
Different from original Murmur server, our channel info is sent in this way (this helps with server performance):
func (client *Client) sendChannelList() {
channels := client.server.AllChannels()
for _, channel := range channels {
chanstate := &mumbleproto.ChannelState{
ChannelId: proto.Uint32(uint32(channel.ID)),
Name: proto.String(channel.Name),
}
if channel.HasDescription() {
if client.Version >= 0x10202 {
chanstate.DescriptionHash = channel.DescriptionBlobHashBytes()
} else {
buf, err := blobStore.Get(channel.DescriptionBlob)
if err == nil {
// panic("Blobstore error.")
chanstate.Description = proto.String(string(buf))
}
}
}
if channel.ParentID != -1 {
chanstate.Parent = proto.Uint32(0)
}
err := client.sendMessage(chanstate)
if err != nil {
panic(err)
}
}
for _, channel := range channels {
chanstate := &mumbleproto.ChannelState{
ChannelId: proto.Uint32(uint32(channel.ID)),
}
if channel.ParentID != -1 {
chanstate.Parent = proto.Uint32(uint32(channel.ParentID))
}
chanstate.Position = proto.Int32(int32(channel.Position))
if channel.IsTemporary() {
chanstate.Temporary = proto.Bool(true)
}
err := client.sendMessage(chanstate)
if err != nil {
panic(err)
}
}
}
The channel position finally rendered on screen is inconsistent with Mumble (Desktop) and Plumble. It's neither by Alphabet nor Position
field.