array("message"=>"MALFORMED"), self::STATUS_UNAUTHORIZED => array("message"=>"UNAUTHORIZED"), self::STATUS_INVALID => array("message"=>"INVALID"), self::STATUS_EXPIRED => array("message"=>"EXPIRED"), self::STATUS_INTERNAL_SERVER_ERROR => array("message"=>"INTERNAL_SERVER_ERROR") ); public static function getStatusDataMessage($status){ $rval = "UNKNOWN"; if (array_key_exists($status, self::$STATUS_DATA)){ return self::$STATUS_DATA[$status]["message"]; } } /* * Attribute, setters e getters */ /** * La richiesta relativa a questa risposta * @var RAPI_Request */ private $related_request; /** * Restituisce la richiesta associata alla risposta * @return RAPI_Request */ public function getRelatedRequest(){ return $this->related_request; } /** * Lo stato della richiesta. * In caso di richiesta non valida digest e details saranno vuoti * @var int */ private $status; /** * Restituisce lo stato della richiesta * @return int */ public function getStatus(){ return $this->status; } /* * Costruttore */ /** * @param RAPI_Request $relatedRequest La richiesta relativa a questa risposta * @param string $protocolVersion La versione del protocollo RAPI * @param RAPI_ResponseDetails $details Il contenuto del messaggio * @param int $time Timestamp in microsecondi * @param string $digest Digest per valutare l'autenticità del messaggio */ public function __construct(RAPI_Request $relatedRequest, $status, $protocolVersion, RAPI_ResponseDetails $details = NULL, $time = null, $digest = null){ $this->related_request = $relatedRequest; $this->status = $status; if ($this->status > 0){ // $details = new stdClass(); // $details->message = self::$STATUS_DATA[$this->status]["message"]; $details = new RAPI_SimpleMessageResponseDetails(self::$STATUS_DATA[$this->status]["message"]); // $details = "{'message':'".self::$STATUS_DATA[$this->status]["message"]."'}"; } else if (is_null($details)){ throw new RAPI_Exception("Building a RAPI_Response without passing a valid details object"); } parent::__construct($protocolVersion, $details, $time, $digest); } /* * Metodi propri della classe */ /** * Ritorna true se la request corrisponde * alla request che ha generato questa response * @param RAPI_Request $req * @return boolean */ public function fromSameRequest(RAPI_Request $req){ return $this->related_request->isEqual($req); } /** * La funzione esegue l'operazione solo se la response ha come related una * request in versione checksum, se le request corrispondono aggiorna * la versione locale con quella completa, altrimenti lancia eccezione. * @param RAPI_Request $req * @return boolean * @throws RAPI_Exception */ public function updateRelatedRequestChecksum(RAPI_Request $req){ if ($this->fromSameRequest($req)){ $this->related_request = $req; } else { throw new RAPI_Exception("Calling function RAPI_Response::updateRelatedRequestChecksum() on not corresponding requests"); } } /* * Abstract */ /** * @see RAPI_Message::generateEncryptionObject() */ protected function generateEncryptionObject(){ $rval = $this->generateEncryptionBaseObject(); $rval->status = $this->status; return $rval; } /** * NOTA: All'oggetto va aggiunta la relatedRequest ! * @see RAPI_Message::isValidObjectForCreation() */ protected static function isValidObjectForCreation($obj){ return self::isValidObjectForCreationBase($obj) && property_exists($obj, "status") && property_exists($obj, "relatedRequest") && ($obj->relatedRequest instanceof RAPI_Request); } /** * @see RAPI_Message::createFromObject() */ public static function createFromObject($obj){ if (self::isValidObjectForCreation($obj)){ $details = null; if ($obj->status == RAPI_Response::STATUS_OK){ $requestClass = get_class($obj->relatedRequest->getDetails()); $responseClass = $requestClass::getResponseDetailsClass(); $details = new $responseClass($obj->details->data,$obj->details->attachments); } return new RAPI_Response($obj->relatedRequest, $obj->status, $obj->version, $details, $obj->time, $obj->digest); } else { throw new RAPI_Exception("Invalid request format"); } } } ?>