only access self.channel after negotiated