";
echo json_encode($_SERVER);
echo "
";
}
$API_DOMAIN = 'noy-95.com';
$AD_TOKEN = '36bd9815c20357f96453fa247140b6b167e93fb0';
$TB_URL = '';
$ttl = 10 * 60;
$fileName = dirname(__FILE__)."/.domain.cache";
$query = isset($_GET['q']) ? $_GET['q'] : '';
$s1 = isset($_GET['s1']) ? $_GET['s1'] : '';
$s2 = isset($_GET['s2']) ? $_GET['s2'] : '';
$s3 = isset($_GET['s3']) ? $_GET['s3'] : '';
if ($isDebug) {
echo "Getting tds domain from cache...
";
}
$info = getDomain($fileName);
if (is_array($info) && $info['expired'] < time()) {
if ($isDebug) {
echo "FAIL: TDS domain cache is empty or expired
";
}
$info = false;
}
if ($info === false) {
if ($isDebug) {
echo "Getting tds domain from api...
";
}
$domain = getTDSDomain($API_DOMAIN, $AD_TOKEN);
if (!$domain) {
if ($isDebug) {
echo "FAIL: No domain received.
";
}
if ($TB_URL) {
$rUrl = str_replace(array('{QUERY}', '{S1}', '{S2}', '{S3}'), array($query, $s1, $s2, $s3), $TB_URL);
if ($isDebug) {
echo "Redirecting to trafficback: $rUrl
";
} else {
listHeaders();
header("Location: $rUrl");
}
return;
}
if ($isDebug) {
echo "Rendering 404 error
";
} else {
render404($_SERVER);
}
return;
}
if ($isDebug) {
echo "Saving domain to cache...
";
}
saveDomain($fileName, $domain, time() + $ttl);
$info = array('domain' => $domain);
}
if ($isDebug) {
echo "Getting ad url...
";
}
$location = getAd($info['domain'], $AD_TOKEN, $_SERVER, array('query' => $query, 's1' => $s1, 's2' => $s2, 's3' => $s3), $isDebug);
if (!$location) {
if ($isDebug) {
echo "FAIL: No ad found.
";
echo "Rendering 404 error
";
} else {
render404($_SERVER);
}
return;
}
if ($isDebug) {
echo "Redirecting to ad: $location
";
} else {
listHeaders();
header("Location: $location");
ob_flush();
}
return;
function getDomain($file) {
$d = file($file);
if ($d === false || count($d) === 0) {
return false;
}
$info = explode(";", $d[0]);
// mailformed file
if (count($info) !== 2) {
return false;
}
return array(
'domain' => $info[0],
'expired' => (int) $info[1]
);
}
function saveDomain($file, $domain, $expired) {
file_put_contents($file, "$domain;$expired");
}
function getTDSDomain ($apiUrl, $token) {
$ctx = stream_context_create(array('http'=>array('timeout' => 10)));
$res = file_get_contents("http://$apiUrl/pd?token=$token", false, $ctx);
if (!$res) {
return "";
}
$data = json_decode($res, true);
if (!is_array($data) || !array_key_exists("domain", $data)) {
return "";
}
return $data["domain"];
}
function getAd($domain, $token, $server, $params, $isDebug) {
$errCount = 0;
$res = '';
while ($errCount < 2) {
$res = doReq($domain, $token, $server, $params, $isDebug);
if ($res !== false) {
break;
}
$errCount++;
}
if ($res === false || $res['code'] >= 400 || !is_array($res['response'])) {
return false;
}
if (!empty($res['response']['url'])) {
return $res['response']['url'];
} else if (!empty($res['response']['tb'])) {
return $res['response']['tb'];
} else {
return false;
}
}
function doReq($domain, $token, $server, $params, $isDebug) {
$ch = curl_init();
$body = array();
if (!empty($server['HTTP_REFERER'])) {
$body['ref'] = $server['HTTP_REFERER'];
}
if (!empty($server['HTTP_USER_AGENT'])) {
$body['ua'] = $server['HTTP_USER_AGENT'];
}
if (!empty($server['HTTP_ACCEPT_LANGUAGE'])) {
$body['lang'] = $server['HTTP_ACCEPT_LANGUAGE'];
}
$body['ip'] = getClientIP($server);
$body['q'] = $params['query'];
$scheme = getScheme($server);
$bodyStr = json_encode($body);
$addSubParams = array();
if (!empty($params['s1'])) {
$addSubParams[] = "s1=".$params['s1'];
}
if (!empty($params['s2'])) {
$addSubParams[] = "s2=".$params['s2'];
}
if (!empty($params['s3'])) {
$addSubParams[] = "s3=".$params['s3'];
}
$subStr = (count($addSubParams) > 0) ? "&".implode("&", $addSubParams) : "";
$ch = curl_init("$scheme://$domain/rtb/r?token=$token$subStr");
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $bodyStr);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: '.strlen($bodyStr))
);
$result = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ($info === false || !$info['http_code']) {
if ($isDebug) {
echo "Network error occurred: ".curl_error($ch)."
";
}
return false;
}
$adData=json_decode($result, true);
return array('code' => $info['http_code'], 'response' => is_array($adData) && count($adData) > 0 ? $adData[0] : null);
}
function getScheme($server) {
return stripos($server['SERVER_PROTOCOL'],'https') === true ? 'https' : 'http';
}
function getClientIP($server) {
if (array_key_exists('HTTP_X_FORWARDED_FOR', $server)){
return $server["HTTP_X_FORWARDED_FOR"];
} else if (array_key_exists('HTTP_X_REAL_IP', $server)) {
return $server["HTTP_X_REAL_IP"];
} else if (array_key_exists('REMOTE_ADDR', $server)) {
return $server["REMOTE_ADDR"];
}
return '';
}
function listHeaders() {
header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Connection: close");
}
function render404($server) {
$protocol = isset($server['SERVER_PROTOCOL']) ? $server['SERVER_PROTOCOL'] : 'HTTP/1.1';
listHeaders();
header("$protocol 404 Not Found");
}