<?php

/* InstaDisc Server - A Four Island Project */

include('includes/xmlrpc/xmlrpc.inc');
include('includes/xmlrpc/xmlrpcs.inc');
include('includes/instadisc.php');

function checkRegistration($username, $verification, $verificationID)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		return new xmlrpcresp(new xmlrpcval(0, "int"));
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

function deleteItem($username, $verification, $verificationID, $id)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		$getitem = "SELECT * FROM inbox WHERE username = \"" . mysql_real_escape_string($username) . "\" AND itemID = " . $id;
		$getitem2 = mysql_query($getitem);
		$getitem3 = mysql_fetch_array($getitem2);
		if ($getitem3['itemID'] == $id)
		{
			$delitem = "DELETE FROM inbox WHERE username = \"" . mysql_real_escape_string($username) . "\" AND itemID = " . $id;
			$delitem2 = mysql_query($delitem);

			return new xmlrpcresp(new xmlrpcval(0, "int"));
		}
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

function resendItem($username, $verification, $verificationID, $id)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		$getitem = "SELECT * FROM inbox WHERE username = \"" . mysql_real_escape_string($username) . "\" AND itemID = " . $id;
		$getitem2 = mysql_query($getitem);
		$getitem3 = mysql_fetch_array($getitem2);
		if ($getitem3['itemID'] == $id)
		{
			$getuser = "SELECT * FROM users WHERE username = \"" . mysql_real_escape_string($username) . "\"";
			$getuser2 = mysql_query($getuser);
			$getuser3 = mysql_fetch_array($getuser2);
			if ($getuser3['downloadItemMode'] == 'Push')
			{
				instaDisc_sendItem($username, $id);

				return new xmlrpcresp(new xmlrpcval(0, "int"));
			} else if ($getuser3['downloadItemMode'] == 'Pull')
			{
				return new xmlrpcresp(new xmlrpcval(instaDisc_formItem($username, $id), 'string'));
			}
		}
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

function requestRetained($username, $verification, $verificationID)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		$getuser = "SELECT * FROM users WHERE username = \"" . mysql_real_escape_string($username) . "\"";
		$getuser2 = mysql_query($getuser);
		$getuser3 = mysql_fetch_array($getuser2);
		if ($getuser3['downloadItemMode'] == 'Push')
		{
			$getitems = "SELECT * FROM inbox WHERE username = \"" . mysql_real_escape_string($username) . "\"";
			$getitems2 = mysql_query($getitems);
			$i=0;
			while ($getitems3[$i] = mysql_fetch_array($getitems2))
			{
				if (!instaDisc_sendItem($username, $getitems3[$i]['itemID']))
				{
					return new xmlrpcresp(new xmlrpcval(1, "int"));
				}
				$i++;
			}

			return new xmlrpcresp(new xmlrpcval(0, "int"));
		} else if ($getuser3['downloadItemMode'] == 'Pull')
		{
			$getitems = "SELECT * FROM inbox WHERE username = \"" . mysql_real_escape_string($username) . "\" LIMIT 0,2";
			$getitems2 = mysql_query($getitems);
			$getitems3 = mysql_fetch_array($getitems2);
			$getitems4 = mysql_fetch_array($getitems2);
			if ($getitems3['username'] == $username)
			{
				$item = instaDisc_formItem($username, $getitems3['id']);
				if ($getitems4['username'] == $username)
				{
					$item .= 'More: ' . $getitems4['id'] . "\n";
				}

				return new xmlrpcresp(new xmlrpcval($item, 'string'));
			}
		}
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

function sendItem($username, $verification, $verificationID, $id)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		$getuser = "SELECT * FROM users WHERE username = \"" . mysql_real_escape_string($username) . "\"";
		$getuser2 = mysql_query($getuser);
		$getuser3 = mysql_fetch_array($getuser2);
		if ($getuser3['downloadItemMode'] == 'Pull')
		{
			$getitems = "SELECT * FROM inbox WHERE username = \"" . mysql_real_escape_string($username) . "\" AND itemID > " . ($id-1) . " LIMIT 0,2";
			$getitems2 = mysql_query($getitems);
			$getitems3 = mysql_fetch_array($getitems2);
			$getitems4 = mysql_fetch_array($getitems2);
			if ($getitems3['username'] == $username)
			{
				$item = instaDisc_formItem($username, $getitems3['id']);
				if ($getitems4['username'] == $username)
				{
					$item .= 'More: ' . $getitems4['id'] . "\n";
				}

				return new xmlrpcresp(new xmlrpcval($item, 'string'));
			}
		}
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}


function sendFromUpdate($subscriptionURL, $title, $author, $url, $semantics, $encryptionID)
{
	$getsed = "SELECT * FROM subscriptions WHERE url = \"" . mysql_real_escape_string($subscriptionURL) . "\"";
	$getsed2 = mysql_query($getsed);
	$i=0;
	while ($getsed3[$i] = mysql_fetch_array($getsed2))
	{
		instaDisc_addItem($getsed3[$i]['username'], $subscriptionURL, $title, $author, $url, $semantics, $encryptionID);
		$i++;
	}

	return new xmlrpcresp(new xmlrpcval(0, "int"));
}

function deleteSubscription($username, $verification, $verificationID, $subscription)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		$getsub = "SELECT * FROM subscriptions WHERE url = \"" . mysql_real_escape_string($subscription) . "\" AND username = \"" . mysql_real_escape_string($username) . "\"";
		$getsub2 = mysql_query($getsub);
		$getsub3 = mysql_fetch_array($getsub2);
		if ($getsub3['url'] == $subscription)	
		{
			$delsub = "DELETE FROM subscriptions WHERE url = \"" . mysql_real_escape_string($subscription) . "\" AND username = \"" . mysql_real_escape_string($username) . "\"";
			$delsub2 = mysql_query($delsub);

			return new xmlrpcresp(new xmlrpcval(0, "int"));
		}
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

function addSubscription($username, $verification, $verificationID, $subscription, $category)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		$getsub = "SELECT * FROM subscriptions WHERE url = \"" . mysql_real_escape_string($subscription) . "\" AND username = \"" . mysql_real_escape_string($username) . "\"";
		$getsub2 = mysql_query($getsub) or die($getsub);
		$getsub3 = mysql_fetch_array($getsub2);
		if ($getsub3['url'] != $subscription)	
		{
			$inssub = "INSERT INTO subscriptions (url, username, category) VALUES (\"" . mysql_real_escape_string($subscription) . "\", \"" . mysql_real_escape_string($username) . "\", \"" . mysql_real_escape_string($category) . "\")";
			$inssub2 = mysql_query($inssub);

			return new xmlrpcresp(new xmlrpcval(0, "int"));
		}
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

function downloadItemModeTest()
{
	$fp = @fsockopen($_SERVER['REMOTE_ADDR'], 61200, $errno, $errstr);
        if ($fp)
        {
                fwrite($fp, "InstaDisc Download Item Mode Test\r\n\r\n\r\n");
                fclose($fp);
                return new xmlrpcresp(new xmlrpcval('0', 'int'));
        } else {
                return new xmlrpcresp(new xmlrpcval('1', 'int'));
        }
}

function setDownloadItemMode($username, $verification, $verificationID, $mode)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		$setuser = "UPDATE users SET downloadItemMode = \"" . mysql_real_escape_string($mode) . "\" WHERE username = \"" . mysql_real_escape_string($username) . "\"";
		$setuser2 = mysql_query($setuser);

		return new xmlrpcresp(new xmlrpcval('0', 'int'));
	}

	return new xmlrpcresp(new xmlrpcval('1', 'int'));
}

function initalizePort($username, $verification, $verificationID)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		return new xmlrpcresp(new xmlrpcval(instaDisc_initalizePort($username), 'int'));
	}

	return new xmlrpcresp(new xmlrpcval('0', 'int'));
}

function deinitalizePort($username, $verification, $verificationID)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		$setuser = "UPDATE users SET port = 0 WHERE username = \"" . mysql_real_escape_string($username) . "\"";
		$setuser2 = mysql_query($setuser);

		return new xmlrpcresp(new xmlrpcval('0', 'int'));
	}

	return new xmlrpcresp(new xmlrpcval('1', 'int'));
}

function countSubscribers($url)
{
	$cntsub = "SELECT * FROM subscriptions WHERE url = \"" . mysql_real_escape_string($url) . "\"";
	$cntsub2 = mysql_query($cntsub);
	$cntsub3 = mysql_fetch_array($cntsub2);

	return new xmlrpcresp(new xmlrpcval($cntsub3[0], 'int'));
}

$s = new xmlrpc_server(	array(	"InstaDisc.checkRegistration" => array("function" => "checkRegistration"),
				"InstaDisc.deleteItem" => array("function" => "deleteItem"),
				"InstaDisc.resendItem" => array("function" => "resendItem"),
				"InstaDisc.requestRetained" => array("function" => "requestRetained"),
				"InstaDisc.sendItem" => array("function" => "sendItem"),
				"InstaDisc.sendFromUpdate" => array("function" => "sendFromUpdate"),
				"InstaDisc.deleteSubscription" => array("function" => "deleteSubscription"),
				"InstaDisc.addSubscription" => array("function" => "addSubscription"),
				"InstaDisc.downloadItemModeTest" => array("function" => "downloadItemModeTest"),
				"InstaDisc.setDownloadItemMode" => array("function" => "setDownloadItemMode"),
				"InstaDisc.initalizePort" => array("function" => "initalizePort"),
				"InstaDisc.deinitalizePort" => array("function" => "deinitalizePort"),
				"InstaDisc.countSubscribers" => array("function" => "countSubscribers")
			),0);
$s->functions_parameters_type = 'phpvals';
$s->service();

?>