client protocol