proxy) { $this->proxy = $this->buildProxy(); } return $this->proxy; } public function setRequest($request) { $this->getProxy()->setRequest($request); return $this; } public function getRequest() { return $this->getProxy()->getRequest(); } public function getHeaders() { return $this->getProxy()->getHeaders(); } public function setCacheDurationInSeconds($duration) { $this->getProxy()->setCacheDurationInSeconds($duration); return $this; } public function setLastModified($epoch_timestamp) { $this->getProxy()->setLastModified($epoch_timestamp); return $this; } public function setHTTPResponseCode($code) { $this->getProxy()->setHTTPResponseCode($code); return $this; } public function getHTTPResponseCode() { return $this->getProxy()->getHTTPResponseCode(); } public function setFrameable($frameable) { $this->getProxy()->setFrameable($frameable); return $this; } public function getCacheHeaders() { return $this->getProxy()->getCacheHeaders(); } abstract protected function buildProxy(); abstract public function reduceProxyResponse(); final public function buildResponseString() { throw new Exception( "AphrontProxyResponse must implement reduceProxyResponse()."); } }