Files
fdn2/private/lib/backup/cbsClient/rapi/messages/RAPI_Response.php
T

172 lines
4.8 KiB
PHP

<?php
/*
Author: Riccardo Di Dato
Creation Date: 25/giu/2015
*/
/**
* Response example:
* {
* version: ${protocol_version},
* time: ${timestamp_microseconds},
* status: ${response_status},
* digest: ${digest},
* details: ${request}
* }
* @author Riccardo Di Dato
*
*/
class RAPI_Response extends RAPI_Message{
/*
* Class Static
*/
const STATUS_OK = 0;
const STATUS_MALFORMED = 1;
const STATUS_UNAUTHORIZED = 2;
const STATUS_INVALID = 3;
const STATUS_EXPIRED = 4;
const STATUS_INTERNAL_SERVER_ERROR = 5;
private static $STATUS_DATA = array(
self::STATUS_MALFORMED => 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");
}
}
}
?>