diff -r 5e7a0fedabdf -r 877f952ae2bd web/lib/Zend/Service/Amazon/Sqs.php --- a/web/lib/Zend/Service/Amazon/Sqs.php Thu Mar 21 17:31:31 2013 +0100 +++ b/web/lib/Zend/Service/Amazon/Sqs.php Thu Mar 21 19:50:53 2013 +0100 @@ -15,9 +15,9 @@ * @category Zend * @package Zend_Service * @subpackage Amazon_Sqs - * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License - * @version $Id: Sqs.php 22984 2010-09-21 02:52:48Z matthew $ + * @version $Id: Sqs.php 25024 2012-07-30 15:08:15Z rob $ */ /** @@ -36,7 +36,7 @@ * @category Zend * @package Zend_Service * @subpackage Amazon_Sqs - * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @see http://aws.amazon.com/sqs/ Amazon Simple Queue Service */ @@ -67,9 +67,17 @@ */ protected $_sqsSignatureMethod = 'HmacSHA256'; + protected $_sqsEndpoints = array('us-east-1' => 'sqs.us-east-1.amazonaws.com', + 'us-west-1' => 'sqs.us-west-1.amazonaws.com', + 'eu-west-1' => 'sqs.eu-west-1.amazonaws.com', + 'ap-southeast-1' => 'sqs.ap-southeast-1.amazonaws.com', + 'ap-northeast-1' => 'sqs.ap-northeast-1.amazonaws.com'); /** * Constructor * + * The default region is us-east-1. Use the region to set it to one of the regions that is build-in into ZF. + * To add a new AWS region use the setEndpoint() method. + * * @param string $accessKey * @param string $secretKey * @param string $region @@ -77,9 +85,78 @@ public function __construct($accessKey = null, $secretKey = null, $region = null) { parent::__construct($accessKey, $secretKey, $region); + + if (null !== $region) { + $this->_setEndpoint($region); + } } /** + * Set SQS endpoint + * + * Checks and sets endpoint if region exists in $_sqsEndpoints. If a new SQS region is added by amazon, + * please use the setEndpoint function to set it. + * + * @param string $region region + * @throws Zend_Service_Amazon_Sqs_Exception + */ + protected function _setEndpoint($region) + { + if (array_key_exists($region, $this->_sqsEndpoints)) { + $this->_sqsEndpoint = $this->_sqsEndpoints[$region]; + } else { + throw new Zend_Service_Amazon_Sqs_Exception('Invalid SQS region specified.'); + } + } + + /** + * Set SQS endpoint + * + * You can set SQS to on of the build-in regions. If the region does not exsist it will be added. + * + * @param string $region region + * @throws Zend_Service_Amazon_Sqs_Exception + */ + public function setEndpoint($region) + { + if (!empty($region)) { + if (array_key_exists($region, $this->_sqsEndpoints)) { + $this->_sqsEndpoint = $this->_sqsEndpoints[$region]; + } else { + $this->_sqsEndpoints[$region] = "sqs.$region.amazonaws.com"; + $this->_sqsEndpoint = $this->_sqsEndpoints[$region]; + } + } else { + throw new Zend_Service_Amazon_Sqs_Exception('Empty region specified.'); + } + } + + /** + * Get the SQS endpoint + * + * @return string + */ + public function getEndpoint() + { + return $this->_sqsEndpoint; + } + + /** + * Get possible SQS endpoints + * + * Since there is not an SQS webserive to get all possible endpoints, a hardcoded list is available. + * For the actual region list please check: + * http://docs.amazonwebservices.com/AWSSimpleQueueService/2009-02-01/APIReference/index.html?QueueServiceWsdlArticle.html + * + * @param string $region region + * @return array + */ + public function getEndpoints() + { + return $this->_sqsEndpoints; + } + + /** * Create a new queue * * Visibility timeout is how long a message is left in the queue "invisible" @@ -288,7 +365,7 @@ $result = $this->_makeRequest($queue_url, 'DeleteMessage', $params); - if (isset($result->Error->Code) + if (isset($result->Error->Code) && !empty($result->Error->Code) ) { return false; @@ -319,7 +396,7 @@ require_once 'Zend/Service/Amazon/Sqs/Exception.php'; throw new Zend_Service_Amazon_Sqs_Exception($result->Error->Code); } - + if(count($result->GetQueueAttributesResult->Attribute) > 1) { $attr_result = array(); foreach($result->GetQueueAttributesResult->Attribute as $attribute) {