private function _rebroadcast($type)
{
phpCAS::traceBegin();
$rebroadcast_curl_options = array(CURLOPT_FAILONERROR => 1, CURLOPT_FOLLOWLOCATION => 1, CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => 1, CURLOPT_TIMEOUT => 4);
// Try to determine the IP address of the server
if (!empty($_SERVER['SERVER_ADDR'])) {
$ip = $_SERVER['SERVER_ADDR'];
} else {
if (!empty($_SERVER['LOCAL_ADDR'])) {
// IIS 7
$ip = $_SERVER['LOCAL_ADDR'];
}
}
// Try to determine the DNS name of the server
if (!empty($ip)) {
$dns = gethostbyaddr($ip);
}
$multiClassName = 'CAS_Request_CurlMultiRequest';
$multiRequest = new $multiClassName();
for ($i = 0; $i < sizeof($this->_rebroadcast_nodes); $i++) {
if ($this->_getNodeType($this->_rebroadcast_nodes[$i]) == self::HOSTNAME && !empty($dns) && stripos($this->_rebroadcast_nodes[$i], $dns) === false || $this->_getNodeType($this->_rebroadcast_nodes[$i]) == self::IP && !empty($ip) && stripos($this->_rebroadcast_nodes[$i], $ip) === false) {
phpCAS::trace('Rebroadcast target URL: ' . $this->_rebroadcast_nodes[$i] . $_SERVER['REQUEST_URI']);
$className = $this->_requestImplementation;
$request = new $className();
$url = $this->_rebroadcast_nodes[$i] . $_SERVER['REQUEST_URI'];
$request->setUrl($url);
if (count($this->_rebroadcast_headers)) {
$request->addHeaders($this->_rebroadcast_headers);
}
$request->makePost();
if ($type == self::LOGOUT) {
// Logout request
$request->setPostBody('rebroadcast=false&logoutRequest=' . $_POST['logoutRequest']);
} else {
if ($type == self::PGTIOU) {
// pgtIou/pgtId rebroadcast
$request->setPostBody('rebroadcast=false');
}
}
$request->setCurlOptions($rebroadcast_curl_options);
$multiRequest->addRequest($request);
} else {
phpCAS::trace('Rebroadcast not sent to self: ' . $this->_rebroadcast_nodes[$i] . ' == ' . (!empty($ip) ? $ip : '') . '/' . (!empty($dns) ? $dns : ''));
}
}
// We need at least 1 request
if ($multiRequest->getNumRequests() > 0) {
$multiRequest->send();
}
phpCAS::traceEnd();
}