/usr/share/php/CAS/Request/CurlMultiRequest.php is in php-cas 1.3.3-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | <?php
/**
* Licensed to Jasig under one or more contributor license
* agreements. See the NOTICE file distributed with this work for
* additional information regarding copyright ownership.
*
* Jasig licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* PHP Version 5
*
* @file CAS/Request/AbstractRequest.php
* @category Authentication
* @package PhpCAS
* @author Adam Franco <afranco@middlebury.edu>
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
* @link https://wiki.jasig.org/display/CASC/phpCAS
*/
/**
* This interface defines a class library for performing multiple web requests
* in batches. Implementations of this interface may perform requests serially
* or in parallel.
*
* @class CAS_Request_CurlMultiRequest
* @category Authentication
* @package PhpCAS
* @author Adam Franco <afranco@middlebury.edu>
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
* @link https://wiki.jasig.org/display/CASC/phpCAS
*/
class CAS_Request_CurlMultiRequest
implements CAS_Request_MultiRequestInterface
{
private $_requests = array();
private $_sent = false;
/*********************************************************
* Add Requests
*********************************************************/
/**
* Add a new Request to this batch.
* Note, implementations will likely restrict requests to their own concrete
* class hierarchy.
*
* @param CAS_Request_RequestInterface $request reqest to add
*
* @return void
* @throws CAS_OutOfSequenceException If called after the Request has been sent.
* @throws CAS_InvalidArgumentException If passed a Request of the wrong
* implmentation.
*/
public function addRequest (CAS_Request_RequestInterface $request)
{
if ($this->_sent) {
throw new CAS_OutOfSequenceException(
'Request has already been sent cannot '.__METHOD__
);
}
if (!$request instanceof CAS_Request_CurlRequest) {
throw new CAS_InvalidArgumentException(
'As a CAS_Request_CurlMultiRequest, I can only work with CAS_Request_CurlRequest objects.'
);
}
$this->_requests[] = $request;
}
/**
* Retrieve the number of requests added to this batch.
*
* @return number of request elements
*/
public function getNumRequests()
{
if ($this->_sent) {
throw new CAS_OutOfSequenceException(
'Request has already been sent cannot '.__METHOD__
);
}
return count($this->_requests);
}
/*********************************************************
* 2. Send the Request
*********************************************************/
/**
* Perform the request. After sending, all requests will have their
* responses poulated.
*
* @return bool TRUE on success, FALSE on failure.
* @throws CAS_OutOfSequenceException If called multiple times.
*/
public function send ()
{
if ($this->_sent) {
throw new CAS_OutOfSequenceException(
'Request has already been sent cannot send again.'
);
}
if (!count($this->_requests)) {
throw new CAS_OutOfSequenceException(
'At least one request must be added via addRequest() before the multi-request can be sent.'
);
}
$this->_sent = true;
// Initialize our handles and configure all requests.
$handles = array();
$multiHandle = curl_multi_init();
foreach ($this->_requests as $i => $request) {
$handle = $request->_initAndConfigure();
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
$handles[$i] = $handle;
curl_multi_add_handle($multiHandle, $handle);
}
// Execute the requests in parallel.
do {
curl_multi_exec($multiHandle, $running);
} while ($running > 0);
// Populate all of the responses or errors back into the request objects.
foreach ($this->_requests as $i => $request) {
$buf = curl_multi_getcontent($handles[$i]);
$request->_storeResponseBody($buf);
curl_multi_remove_handle($multiHandle, $handles[$i]);
curl_close($handles[$i]);
}
curl_multi_close($multiHandle);
}
}
|