client: implement .open