File indexing completed on 2025-01-26 05:25:30
0001 <?php 0002 /** 0003 * Zend Framework 0004 * 0005 * LICENSE 0006 * 0007 * This source file is subject to the new BSD license that is bundled 0008 * with this package in the file LICENSE.txt. 0009 * It is also available through the world-wide-web at this URL: 0010 * http://framework.zend.com/license/new-bsd 0011 * If you did not receive a copy of the license and are unable to 0012 * obtain it through the world-wide-web, please send an email 0013 * to license@zend.com so we can send you a copy immediately. 0014 * 0015 * @category Zend 0016 * @package Zend_Service_WindowsAzure 0017 * @subpackage Storage 0018 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 0019 * @license http://todo name_todo 0020 * @version $Id$ 0021 */ 0022 0023 /** 0024 * see Zend_Service_WindowsAzure_Storage 0025 */ 0026 // require_once 'Zend/Service/WindowsAzure/Storage.php'; 0027 0028 /** 0029 * @see Zend_Service_WindowsAzure_Storage_QueueInstance 0030 */ 0031 // require_once 'Zend/Service/WindowsAzure/Storage/QueueInstance.php'; 0032 0033 /** 0034 * @see Zend_Service_WindowsAzure_Storage_QueueMessage 0035 */ 0036 // require_once 'Zend/Service/WindowsAzure/Storage/QueueMessage.php'; 0037 0038 /** 0039 * @category Zend 0040 * @package Zend_Service_WindowsAzure 0041 * @subpackage Storage 0042 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 0043 * @license http://framework.zend.com/license/new-bsd New BSD License 0044 */ 0045 class Zend_Service_WindowsAzure_Storage_Queue extends Zend_Service_WindowsAzure_Storage 0046 { 0047 /** 0048 * Maximal message size (in bytes) 0049 */ 0050 const MAX_MESSAGE_SIZE = 8388608; 0051 0052 /** 0053 * Maximal message ttl (in seconds) 0054 */ 0055 const MAX_MESSAGE_TTL = 604800; 0056 0057 /** 0058 * Creates a new Zend_Service_WindowsAzure_Storage_Queue instance 0059 * 0060 * @param string $host Storage host name 0061 * @param string $accountName Account name for Windows Azure 0062 * @param string $accountKey Account key for Windows Azure 0063 * @param boolean $usePathStyleUri Use path-style URI's 0064 * @param Zend_Service_WindowsAzure_RetryPolicy_RetryPolicyAbstract $retryPolicy Retry policy to use when making requests 0065 */ 0066 public function __construct($host = Zend_Service_WindowsAzure_Storage::URL_DEV_QUEUE, $accountName = Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::DEVSTORE_ACCOUNT, $accountKey = Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::DEVSTORE_KEY, $usePathStyleUri = false, Zend_Service_WindowsAzure_RetryPolicy_RetryPolicyAbstract $retryPolicy = null) 0067 { 0068 parent::__construct($host, $accountName, $accountKey, $usePathStyleUri, $retryPolicy); 0069 0070 // API version 0071 $this->_apiVersion = '2009-09-19'; 0072 } 0073 0074 /** 0075 * Check if a queue exists 0076 * 0077 * @param string $queueName Queue name 0078 * @return boolean 0079 */ 0080 public function queueExists($queueName = '') 0081 { 0082 if ($queueName === '') { 0083 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0084 throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); 0085 } 0086 if (!self::isValidQueueName($queueName)) { 0087 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0088 throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); 0089 } 0090 0091 // List queues 0092 $queues = $this->listQueues($queueName, 1); 0093 foreach ($queues as $queue) { 0094 if ($queue->Name == $queueName) { 0095 return true; 0096 } 0097 } 0098 0099 return false; 0100 } 0101 0102 /** 0103 * Create queue 0104 * 0105 * @param string $queueName Queue name 0106 * @param array $metadata Key/value pairs of meta data 0107 * @return object Queue properties 0108 * @throws Zend_Service_WindowsAzure_Exception 0109 */ 0110 public function createQueue($queueName = '', $metadata = array()) 0111 { 0112 if ($queueName === '') { 0113 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0114 throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); 0115 } 0116 if (!self::isValidQueueName($queueName)) { 0117 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0118 throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); 0119 } 0120 0121 // Create metadata headers 0122 $headers = array(); 0123 $headers = array_merge($headers, $this->_generateMetadataHeaders($metadata)); 0124 0125 // Perform request 0126 $response = $this->_performRequest($queueName, '', Zend_Http_Client::PUT, $headers); 0127 if ($response->isSuccessful()) { 0128 0129 return new Zend_Service_WindowsAzure_Storage_QueueInstance( 0130 $queueName, 0131 $metadata 0132 ); 0133 } else { 0134 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0135 throw new Zend_Service_WindowsAzure_Exception($this->_getErrorMessage($response, 'Resource could not be accessed.')); 0136 } 0137 } 0138 0139 /** 0140 * Create queue if it does not exist 0141 * 0142 * @param string $queueName Queue name 0143 * @param array $metadata Key/value pairs of meta data 0144 * @throws Zend_Service_WindowsAzure_Exception 0145 */ 0146 public function createQueueIfNotExists($queueName = '', $metadata = array()) 0147 { 0148 if (!$this->queueExists($queueName)) { 0149 $this->createQueue($queueName, $metadata); 0150 } 0151 } 0152 0153 /** 0154 * Get queue 0155 * 0156 * @param string $queueName Queue name 0157 * @return Zend_Service_WindowsAzure_Storage_QueueInstance 0158 * @throws Zend_Service_WindowsAzure_Exception 0159 */ 0160 public function getQueue($queueName = '') 0161 { 0162 if ($queueName === '') { 0163 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0164 throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); 0165 } 0166 if (!self::isValidQueueName($queueName)) { 0167 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0168 throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); 0169 } 0170 0171 // Perform request 0172 $response = $this->_performRequest($queueName, '?comp=metadata', Zend_Http_Client::GET); 0173 if ($response->isSuccessful()) { 0174 // Parse metadata 0175 $metadata = $this->_parseMetadataHeaders($response->getHeaders()); 0176 0177 // Return queue 0178 $queue = new Zend_Service_WindowsAzure_Storage_QueueInstance( 0179 $queueName, 0180 $metadata 0181 ); 0182 $queue->ApproximateMessageCount = intval($response->getHeader('x-ms-approximate-message-count')); 0183 return $queue; 0184 } else { 0185 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0186 throw new Zend_Service_WindowsAzure_Exception($this->_getErrorMessage($response, 'Resource could not be accessed.')); 0187 } 0188 } 0189 0190 /** 0191 * Get queue metadata 0192 * 0193 * @param string $queueName Queue name 0194 * @return array Key/value pairs of meta data 0195 * @throws Zend_Service_WindowsAzure_Exception 0196 */ 0197 public function getQueueMetadata($queueName = '') 0198 { 0199 if ($queueName === '') { 0200 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0201 throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); 0202 } 0203 if (!self::isValidQueueName($queueName)) { 0204 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0205 throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); 0206 } 0207 0208 return $this->getQueue($queueName)->Metadata; 0209 } 0210 0211 /** 0212 * Set queue metadata 0213 * 0214 * Calling the Set Queue Metadata operation overwrites all existing metadata that is associated with the queue. It's not possible to modify an individual name/value pair. 0215 * 0216 * @param string $queueName Queue name 0217 * @param array $metadata Key/value pairs of meta data 0218 * @throws Zend_Service_WindowsAzure_Exception 0219 */ 0220 public function setQueueMetadata($queueName = '', $metadata = array()) 0221 { 0222 if ($queueName === '') { 0223 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0224 throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); 0225 } 0226 if (!self::isValidQueueName($queueName)) { 0227 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0228 throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); 0229 } 0230 if (count($metadata) == 0) { 0231 return; 0232 } 0233 0234 // Create metadata headers 0235 $headers = array(); 0236 $headers = array_merge($headers, $this->_generateMetadataHeaders($metadata)); 0237 0238 // Perform request 0239 $response = $this->_performRequest($queueName, '?comp=metadata', Zend_Http_Client::PUT, $headers); 0240 0241 if (!$response->isSuccessful()) { 0242 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0243 throw new Zend_Service_WindowsAzure_Exception($this->_getErrorMessage($response, 'Resource could not be accessed.')); 0244 } 0245 } 0246 0247 /** 0248 * Delete queue 0249 * 0250 * @param string $queueName Queue name 0251 * @throws Zend_Service_WindowsAzure_Exception 0252 */ 0253 public function deleteQueue($queueName = '') 0254 { 0255 if ($queueName === '') { 0256 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0257 throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); 0258 } 0259 if (!self::isValidQueueName($queueName)) { 0260 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0261 throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); 0262 } 0263 0264 // Perform request 0265 $response = $this->_performRequest($queueName, '', Zend_Http_Client::DELETE); 0266 if (!$response->isSuccessful()) { 0267 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0268 throw new Zend_Service_WindowsAzure_Exception($this->_getErrorMessage($response, 'Resource could not be accessed.')); 0269 } 0270 } 0271 0272 /** 0273 * List queues 0274 * 0275 * @param string $prefix Optional. Filters the results to return only queues whose name begins with the specified prefix. 0276 * @param int $maxResults Optional. Specifies the maximum number of queues to return per call to Azure storage. This does NOT affect list size returned by this function. (maximum: 5000) 0277 * @param string $marker Optional string value that identifies the portion of the list to be returned with the next list operation. 0278 * @param string $include Optional. Include this parameter to specify that the queue's metadata be returned as part of the response body. (allowed values: '', 'metadata') 0279 * @param int $currentResultCount Current result count (internal use) 0280 * @return array 0281 * @throws Zend_Service_WindowsAzure_Exception 0282 */ 0283 public function listQueues($prefix = null, $maxResults = null, $marker = null, $include = null, $currentResultCount = 0) 0284 { 0285 // Build query string 0286 $queryString = array('comp=list'); 0287 if (!is_null($prefix)) { 0288 $queryString[] = 'prefix=' . $prefix; 0289 } 0290 if (!is_null($maxResults)) { 0291 $queryString[] = 'maxresults=' . $maxResults; 0292 } 0293 if (!is_null($marker)) { 0294 $queryString[] = 'marker=' . $marker; 0295 } 0296 if (!is_null($include)) { 0297 $queryString[] = 'include=' . $include; 0298 } 0299 $queryString = self::createQueryStringFromArray($queryString); 0300 0301 // Perform request 0302 $response = $this->_performRequest('', $queryString, Zend_Http_Client::GET); 0303 if ($response->isSuccessful()) { 0304 $xmlQueues = $this->_parseResponse($response)->Queues->Queue; 0305 $xmlMarker = (string)$this->_parseResponse($response)->NextMarker; 0306 0307 $queues = array(); 0308 if (!is_null($xmlQueues)) { 0309 0310 for ($i = 0; $i < count($xmlQueues); $i++) { 0311 $queues[] = new Zend_Service_WindowsAzure_Storage_QueueInstance( 0312 (string)$xmlQueues[$i]->Name, 0313 $this->_parseMetadataElement($xmlQueues[$i]) 0314 ); 0315 } 0316 } 0317 $currentResultCount = $currentResultCount + count($queues); 0318 if (!is_null($maxResults) && $currentResultCount < $maxResults) { 0319 if (!is_null($xmlMarker) && $xmlMarker != '') { 0320 $queues = array_merge($queues, $this->listQueues($prefix, $maxResults, $xmlMarker, $include, $currentResultCount)); 0321 } 0322 } 0323 if (!is_null($maxResults) && count($queues) > $maxResults) { 0324 $queues = array_slice($queues, 0, $maxResults); 0325 } 0326 0327 return $queues; 0328 } else { 0329 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0330 throw new Zend_Service_WindowsAzure_Exception($this->_getErrorMessage($response, 'Resource could not be accessed.')); 0331 } 0332 } 0333 0334 /** 0335 * Put message into queue 0336 * 0337 * @param string $queueName Queue name 0338 * @param string $message Message 0339 * @param int $ttl Message Time-To-Live (in seconds). Defaults to 7 days if the parameter is omitted. 0340 * @throws Zend_Service_WindowsAzure_Exception 0341 */ 0342 public function putMessage($queueName = '', $message = '', $ttl = null) 0343 { 0344 if ($queueName === '') { 0345 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0346 throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); 0347 } 0348 if (!self::isValidQueueName($queueName)) { 0349 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0350 throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); 0351 } 0352 if (strlen($message) > self::MAX_MESSAGE_SIZE) { 0353 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0354 throw new Zend_Service_WindowsAzure_Exception('Message is too big. Message content should be < 8KB.'); 0355 } 0356 if ($message == '') { 0357 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0358 throw new Zend_Service_WindowsAzure_Exception('Message is not specified.'); 0359 } 0360 if (!is_null($ttl) && ($ttl <= 0 || $ttl > self::MAX_MESSAGE_SIZE)) { 0361 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0362 throw new Zend_Service_WindowsAzure_Exception('Message TTL is invalid. Maximal TTL is 7 days (' . self::MAX_MESSAGE_SIZE . ' seconds) and should be greater than zero.'); 0363 } 0364 0365 // Build query string 0366 $queryString = array(); 0367 if (!is_null($ttl)) { 0368 $queryString[] = 'messagettl=' . $ttl; 0369 } 0370 $queryString = self::createQueryStringFromArray($queryString); 0371 0372 // Build body 0373 $rawData = ''; 0374 $rawData .= '<QueueMessage>'; 0375 $rawData .= ' <MessageText>' . base64_encode($message) . '</MessageText>'; 0376 $rawData .= '</QueueMessage>'; 0377 0378 // Perform request 0379 $response = $this->_performRequest($queueName . '/messages', $queryString, Zend_Http_Client::POST, array(), false, $rawData); 0380 0381 if (!$response->isSuccessful()) { 0382 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0383 throw new Zend_Service_WindowsAzure_Exception('Error putting message into queue.'); 0384 } 0385 } 0386 0387 /** 0388 * Get queue messages 0389 * 0390 * @param string $queueName Queue name 0391 * @param string $numOfMessages Optional. A nonzero integer value that specifies the number of messages to retrieve from the queue, up to a maximum of 32. By default, a single message is retrieved from the queue with this operation. 0392 * @param int $visibilityTimeout Optional. An integer value that specifies the message's visibility timeout in seconds. The maximum value is 2 hours. The default message visibility timeout is 30 seconds. 0393 * @param string $peek Peek only? 0394 * @return array 0395 * @throws Zend_Service_WindowsAzure_Exception 0396 */ 0397 public function getMessages($queueName = '', $numOfMessages = 1, $visibilityTimeout = null, $peek = false) 0398 { 0399 if ($queueName === '') { 0400 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0401 throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); 0402 } 0403 if (!self::isValidQueueName($queueName)) { 0404 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0405 throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); 0406 } 0407 if ($numOfMessages < 1 || $numOfMessages > 32 || intval($numOfMessages) != $numOfMessages) { 0408 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0409 throw new Zend_Service_WindowsAzure_Exception('Invalid number of messages to retrieve.'); 0410 } 0411 if (!is_null($visibilityTimeout) && ($visibilityTimeout <= 0 || $visibilityTimeout > 7200)) { 0412 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0413 throw new Zend_Service_WindowsAzure_Exception('Visibility timeout is invalid. Maximum value is 2 hours (7200 seconds) and should be greater than zero.'); 0414 } 0415 0416 // Build query string 0417 $queryString = array(); 0418 if ($peek) { 0419 $queryString[] = 'peekonly=true'; 0420 } 0421 if ($numOfMessages > 1) { 0422 $queryString[] = 'numofmessages=' . $numOfMessages; 0423 } 0424 if (!$peek && !is_null($visibilityTimeout)) { 0425 $queryString[] = 'visibilitytimeout=' . $visibilityTimeout; 0426 } 0427 $queryString = self::createQueryStringFromArray($queryString); 0428 0429 // Perform request 0430 $response = $this->_performRequest($queueName . '/messages', $queryString, Zend_Http_Client::GET); 0431 if ($response->isSuccessful()) { 0432 // Parse results 0433 $result = $this->_parseResponse($response); 0434 if (!$result) { 0435 return array(); 0436 } 0437 0438 $xmlMessages = null; 0439 if (count($result->QueueMessage) > 1) { 0440 $xmlMessages = $result->QueueMessage; 0441 } else { 0442 $xmlMessages = array($result->QueueMessage); 0443 } 0444 0445 $messages = array(); 0446 for ($i = 0; $i < count($xmlMessages); $i++) { 0447 $messages[] = new Zend_Service_WindowsAzure_Storage_QueueMessage( 0448 (string)$xmlMessages[$i]->MessageId, 0449 (string)$xmlMessages[$i]->InsertionTime, 0450 (string)$xmlMessages[$i]->ExpirationTime, 0451 ($peek ? '' : (string)$xmlMessages[$i]->PopReceipt), 0452 ($peek ? '' : (string)$xmlMessages[$i]->TimeNextVisible), 0453 (string)$xmlMessages[$i]->DequeueCount, 0454 base64_decode((string)$xmlMessages[$i]->MessageText) 0455 ); 0456 } 0457 0458 return $messages; 0459 } else { 0460 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0461 throw new Zend_Service_WindowsAzure_Exception($this->_getErrorMessage($response, 'Resource could not be accessed.')); 0462 } 0463 } 0464 0465 /** 0466 * Peek queue messages 0467 * 0468 * @param string $queueName Queue name 0469 * @param string $numOfMessages Optional. A nonzero integer value that specifies the number of messages to retrieve from the queue, up to a maximum of 32. By default, a single message is retrieved from the queue with this operation. 0470 * @return array 0471 * @throws Zend_Service_WindowsAzure_Exception 0472 */ 0473 public function peekMessages($queueName = '', $numOfMessages = 1) 0474 { 0475 return $this->getMessages($queueName, $numOfMessages, null, true); 0476 } 0477 0478 /** 0479 * Checks to see if a given queue has messages 0480 * 0481 * @param string $queueName Queue name 0482 * @return boolean 0483 * @throws Zend_Service_WindowsAzure_Exception 0484 */ 0485 public function hasMessages($queueName = '') 0486 { 0487 return count($this->peekMessages($queueName)) > 0; 0488 } 0489 0490 /** 0491 * Clear queue messages 0492 * 0493 * @param string $queueName Queue name 0494 * @throws Zend_Service_WindowsAzure_Exception 0495 */ 0496 public function clearMessages($queueName = '') 0497 { 0498 if ($queueName === '') { 0499 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0500 throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); 0501 } 0502 if (!self::isValidQueueName($queueName)) { 0503 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0504 throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); 0505 } 0506 0507 // Perform request 0508 $response = $this->_performRequest($queueName . '/messages', '', Zend_Http_Client::DELETE); 0509 if (!$response->isSuccessful()) { 0510 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0511 throw new Zend_Service_WindowsAzure_Exception('Error clearing messages from queue.'); 0512 } 0513 } 0514 0515 /** 0516 * Delete queue message 0517 * 0518 * @param string $queueName Queue name 0519 * @param Zend_Service_WindowsAzure_Storage_QueueMessage $message Message to delete from queue. A message retrieved using "peekMessages" can NOT be deleted! 0520 * @throws Zend_Service_WindowsAzure_Exception 0521 */ 0522 public function deleteMessage($queueName = '', Zend_Service_WindowsAzure_Storage_QueueMessage $message) 0523 { 0524 if ($queueName === '') { 0525 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0526 throw new Zend_Service_WindowsAzure_Exception('Queue name is not specified.'); 0527 } 0528 if (!self::isValidQueueName($queueName)) { 0529 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0530 throw new Zend_Service_WindowsAzure_Exception('Queue name does not adhere to queue naming conventions. See http://msdn.microsoft.com/en-us/library/dd179349.aspx for more information.'); 0531 } 0532 if ($message->PopReceipt == '') { 0533 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0534 throw new Zend_Service_WindowsAzure_Exception('A message retrieved using "peekMessages" can NOT be deleted! Use "getMessages" instead.'); 0535 } 0536 0537 // Perform request 0538 $response = $this->_performRequest($queueName . '/messages/' . $message->MessageId, '?popreceipt=' . urlencode($message->PopReceipt), Zend_Http_Client::DELETE); 0539 if (!$response->isSuccessful()) { 0540 // require_once 'Zend/Service/WindowsAzure/Exception.php'; 0541 throw new Zend_Service_WindowsAzure_Exception($this->_getErrorMessage($response, 'Resource could not be accessed.')); 0542 } 0543 } 0544 0545 /** 0546 * Is valid queue name? 0547 * 0548 * @param string $queueName Queue name 0549 * @return boolean 0550 */ 0551 public static function isValidQueueName($queueName = '') 0552 { 0553 if (preg_match("/^[a-z0-9][a-z0-9-]*$/", $queueName) === 0) { 0554 return false; 0555 } 0556 0557 if (strpos($queueName, '--') !== false) { 0558 return false; 0559 } 0560 0561 if (strtolower($queueName) != $queueName) { 0562 return false; 0563 } 0564 0565 if (strlen($queueName) < 3 || strlen($queueName) > 63) { 0566 return false; 0567 } 0568 0569 if (substr($queueName, -1) == '-') { 0570 return false; 0571 } 0572 0573 return true; 0574 } 0575 0576 /** 0577 * Get error message from Zend_Http_Response 0578 * 0579 * @param Zend_Http_Response $response Repsonse 0580 * @param string $alternativeError Alternative error message 0581 * @return string 0582 */ 0583 protected function _getErrorMessage(Zend_Http_Response $response, $alternativeError = 'Unknown error.') 0584 { 0585 $response = $this->_parseResponse($response); 0586 if ($response && $response->Message) { 0587 return (string)$response->Message; 0588 } else { 0589 return $alternativeError; 0590 } 0591 } 0592 }