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  }