code: func NewServer(db *DB, l2c ble.Conn) (*Server, error) {
  	mtu := l2c.RxMTU()
  	if mtu < ble.DefaultMTU || mtu > ble.MaxMTU {
  		return nil, fmt.Errorf("invalid MTU")
  	}
  	// Although the rxBuf is initialized with the capacity of rxMTU, it is
  	// not discovered, and only the default ATT_MTU (23 bytes) of it shall
  	// be used until remote central request ExchangeMTU.
  	s := &Server{
  		conn: &conn{
  			Conn: l2c,
  			cccs: make(map[uint16]uint16),
  			in:   make(map[uint16]ble.Notifier),
  			nn:   make(map[uint16]ble.Notifier),
  		},
  		db: db,
  
  		rxMTU:     mtu,
  		txBuf:     make([]byte, ble.DefaultMTU, ble.DefaultMTU),
  		chNotBuf:  make(chan []byte, 1),
  		chIndBuf:  make(chan []byte, 1),
  		chConfirm: make(chan bool),
  
  		dummyRspWriter: ble.NewResponseWriter(nil),
  	}
  	s.conn.svr = s
  	s.chNotBuf <- make([]byte, ble.DefaultMTU, ble.DefaultMTU)
  	s.chIndBuf <- make([]byte, ble.DefaultMTU, ble.DefaultMTU)
  	return s, nil
  }
docs: // NewServer returns an ATT (Attribute Protocol) server.