should both abstract methods doSend() and doReceive() be protected rather than public?