github.com/Mrs4s/MiraiGo@v0.0.0-20240226124653-54bdd873e3fe/internal/tlv/t511.go (about) 1 package tlv 2 3 import ( 4 "github.com/Mrs4s/MiraiGo/binary" 5 ) 6 7 func T511(domains []string) []byte { 8 nonnildomains := domains 9 // 目前的所有调用均无 "" 10 /* 11 hasnil := false 12 for _, d := range domains { 13 if d == "" { 14 hasnil = true 15 break 16 } 17 } 18 if hasnil { 19 nonnildomains = nonnildomains[:0] 20 for _, d := range domains { 21 if d != "" { 22 nonnildomains = append(nonnildomains, d) 23 } 24 } 25 } 26 */ 27 return binary.NewWriterF(func(w *binary.Writer) { 28 w.WriteUInt16(0x511) 29 pos := w.FillUInt16() 30 w.WriteUInt16(uint16(len(nonnildomains))) 31 for _, d := range nonnildomains { 32 // 目前的所有调用均不会出现 () 33 // indexOf := strings.Index(d, "(") 34 // indexOf2 := strings.Index(d, ")") 35 // if indexOf != 0 || indexOf2 <= 0 { 36 w.WriteByte(0x01) 37 w.WriteStringShort(d) 38 /* } else { 39 var b byte 40 var z bool 41 i, err := strconv.Atoi(d[indexOf+1 : indexOf2]) 42 if err == nil { 43 z2 := (1048576 & i) > 0 44 if (i & 134217728) > 0 { 45 z = true 46 } else { 47 z = false 48 } 49 if z2 { 50 b = 1 51 } else { 52 b = 0 53 } 54 if z { 55 b |= 2 56 } 57 w.WriteByte(b) 58 w.WriteBytesShort([]byte(d[indexOf2+1:])) 59 } 60 }*/ 61 } 62 w.WriteUInt16At(pos, uint16(w.Len()-4)) 63 }) 64 }