deep
24-04-2005, 22:06
Ok, so I read through the sticky.
It helped me get the server up and running. Now I have come across another problem.
I am trying to install a TeamSpeak Module to a website I am designing for the clan I am hosting this TS Server for. All well the module is installed. However it says the following.
Data unavailable.
TCPQueryPort may not be open.
According to my server.ini the port for this is 51234 TCP. I have opened this on my router and I still get this error. As you can see in the Module code below it also claims this is the port I need open for it to work. Does anyone know if there is another port I need open for the TeamSpeak server to be read through a Module?
<?php
// **** settings - to be edited before first use ****
$serverAddress = "MY IP"; //"19.197.268.256"; // can be ip address or url
$serverQueryPort = 51234; //51234; // default 51234, must be accessible and usable. check server.ini (make sure this port is unblocked)
$serverUDPPort = 8767; //8767; // default 8767
$wincol = "orange";
// **** end of settings ****
if (!eregi("modules.php", $_SERVER['PHP_SELF'])) {
die ("You can't access this file directly...");
}
require_once("mainfile.php");
$module_name = basename(dirname(__FILE__));
global $user, $cookie, $db;
include("header.php");
global $errno, $errstr;
getusrinfo($user);
cookiedecode($user);
$username = $cookie[1];
$db->sql_query("DELETE FROM ts_user");
$db->sql_query("DELETE FROM ts_channel");
// opens a connection to the teamspeak server
function getSocket($host, $port, $errno, $errstr, $timeout) {
global $errno, $errstr;
@$socket = fsockopen($host, $port, $errno, $errstr, $timeout);
if($socket and fread($socket, 4) == "[TS]") {
fgets($socket);
return $socket;
}// end if
return false;
}// end function getSocket(...)
function getCodec($codec) {
switch ($codec) {
case 12: $codec = "Speex 25.9 Kbit"; break;
case 11: $codec = "Speex 19.5 Kbit"; break;
case 10: $codec = "Speex 16.3 Kbit"; break;
case 9: $codec = "Speex 12.3 Kbit"; break;
case 8: $codec = "Speex 9.3 Kbit"; break;
case 7: $codec = "Speex 7.2 Kbit"; break;
case 6: $codec = "Speex 5.2 Kbit"; break;
case 5: $codec = "Speex 3.4 Kbit"; break;
case 4: $codec = "CELP Windows 5.2 Kbit"; break;
case 3: $codec = "GSM 16.4 Kbit"; break;
case 2: $codec = "GSM 14.8 Kbit"; break;
case 1: $codec = "CELP 6.3 Kbit"; break;
case 0: $codec = "CELP 5.1 Kbit"; break;
}
return $codec;
}
// sends a query to the teamspeak server
function sendQuery($socket, $query) {
fputs($socket, $query."\n");
}
// answer OK?
function getOK($socket) {
$result = fread($socket, 2);
fgets($socket, 128);
return($result == "OK");
}
// closes the connection to the teamspeak server
function closeSocket($socket) {
fputs($socket, "quit");
fclose($socket);
}
// MAIN PROGRAM START
// establish connection to teamspeak server
$socket = getSocket($serverAddress, $serverQueryPort, $errno, $errstr, 3);
if($socket == false) {
echo "An error connecting to the TeamSpeak server has occured!<br>\n";
echo "Error number: ".$errno."<br>\n";
echo "Error description: ".$errstr."<br>\n";
return;
}
// select the one and only running server on port 8767
sendQuery($socket, "sel ".$serverUDPPort);
// retrieve answer "OK"
if(!getOK($socket)) {
die("Server didn't answer "OK" after last command. Aborting.");
}// end if
// retrieve server name
sendQuery($socket,"si");
$n=0;
$line = "";
while($line != "OK") {
$line = fgets($socket);
$line = substr($line,0,-2);
if ($n == 1) $servername = str_replace('+',' ',urlencode(str_replace('server_name=','',htmlspec ialchars($line))));
elseif ($n == 2) $platform = str_replace('server_platform=','',$line);
elseif ($n == 3) $wm = str_replace('+',' ',urlencode(str_replace('server_welcomemessage=',' ',htmlspecialchars($line))));
elseif ($n == 7) {
if(str_replace('server_clan_server=','',$line)=="1") $type="Freeware Clan Server";
else $type="Freeware Public Server";
}
$n++;
}
// retrieve version
sendQuery($socket,"ver");
$line = "";
while($line != "OK") {
$line = fgets($socket);
$line = substr($line,0,-2);
if ($line != "OK") {
$verarr = explode(" ",$line);
$ver = $verarr[0];
}
}
// retrieve player list
sendQuery($socket,"pl");
// read player info
$playerList = array();
while(substr($pl_id,0,-2) != "OK") {
$line = fgets($socket);
$playerlist = explode("\t",$line);
list($pl_id , $pl_channelid, $pl_pktssend , $pl_bytessend, $pl_pktsrecv, $pl_bytesrecv, $pl_pktloss, $pl_ping , $pl_logintime , $pl_idletime, $pl_channelprivileges, $pl_playerprivileges, $pl_playerflags, $pl_ipaddress, $pl_nickname, $pl_loginname) = $playerlist;
if(substr($pl_id,0,-2) != "OK" and $pl_id != "p_id") {
$pl_nickname = substr($pl_nickname,1); //remove quotes
$pl_nickname = substr($pl_nickname,0,-1);
$pl_loginname = substr($pl_loginname,1); //remove quotes
$pl_loginname = substr($pl_loginname,0,-1);
$pl_loginname = addslashes($pl_loginname); //fix SQL queries
$pl_nickname = addslashes($pl_nickname); //fix SQL queries
$db->sql_query("INSERT INTO ts_user (pl_id, pl_channelid, pl_pktssend, pl_bytessend, pl_pktsrecv, pl_bytesrecv, pl_pktloss, pl_ping, pl_logintime, pl_idletime, pl_channelprivileges, pl_playerprivileges, pl_playerflags, pl_ipaddress, pl_nickname, pl_loginname) VALUES ('$pl_id' , '$pl_channelid', '$pl_pktssend ', '$pl_bytessend', '$pl_pktsrecv', '$pl_bytesrecv', '$pl_pktloss', '$pl_ping', '$pl_logintime' , '$pl_idletime', '$pl_channelprivileges', '$pl_playerprivileges', '$pl_playerflags', '$pl_ipaddress', '$pl_nickname', ' $pl_loginname')");
}
}
// retrieve channel list
sendQuery($socket,"cl");
// read channel info
$channelList = array();
while(substr($channel_id,0,-2) != "OK") {
$line = fgets($socket);
$channellist = explode("\t",$line);
list($channel_id, $cl_codec, $cl_parent, $cl_order, $cl_maxuser, $cl_name, $cl_flags, $cl_private, $cl_topic) = $channellist;
if($channel_id != 0) {
$cl_name = substr($cl_name,1); //remove quotes
$cl_name = substr($cl_name,0,-1);
$cl_topic = substr($cl_topic,1); //remove quotes
$cl_topic = substr($cl_topic,0,-3);
$cl_name = addslashes($cl_name); //fix SQL queries
$cl_topic = addslashes($cl_topic); //fix SQL queries
$db->sql_query("INSERT INTO ts_channel (channel_id, cl_codec, cl_parent, cl_order, cl_maxuser, cl_name, cl_flags, cl_private, cl_topic) VALUES ('$channel_id', '$cl_codec', '$cl_parent', '$cl_order', '$cl_maxuser', '$cl_name', '$cl_flags', '$cl_private', '$cl_topic')");
}
}
function getcldetail(){
global $db;
$result = $db->sql_query("SELECT * FROM ts_channel WHERE cl_parent='-1' ORDER BY cl_order asc, cl_name, channel_id");
if ($db->sql_numrows($result) == 0) {
echo '<center><b>Data unavailable.<br>TCPQueryPort may not be open.</b></center>';
}
while ($cldata = $db->sql_fetchrow($result)) {
$clname = $cldata[8];
$clnamelink = str_replace('+',' ',urlencode($clname));
$topic = str_replace('+',' ',urlencode(htmlspecialchars($cldata[8])));
$codec = getCodec($cldata[4]);
$cflags = $cldata[9];
$d = 0; $s = 0; $p = 0; $m = 0; $u = 0;
if ($cflags>=16) $d = 1 and $cflags-=16;
if ($cflags>=8) $s = 1 and $cflags-=8;
if ($cflags>=4) $p = 1 and $cflags-=4;
if ($cflags>=2) $m = 1 and $cflags-=2;
if ($cflags==1) $u = 1;
$def = 0;
if ($u) $clflag = "(U";
else $clflag = "(R";
if ($m) $clflag .= "M";
if ($p) $clflag .= "P";
if ($s) $clflag .= "S";
if ($d) $clflag .= "D" and $def = 1;
$clflag .= ")";
$pnum = $db->sql_numrows($db->sql_query("SELECT pl_id FROM ts_user WHERE pl_channelid='$cldata[0]'"));
//echo '<nobr><img src="images/teamspeak/bullet_channel.gif" align="absmiddle" border="0"> '.$clname.' '.$clflag.'</nobr><br>';
echo "<nobr><div style=\"cursor:hand\" onclick=\"tsShowChanData('$clnamelink','$topic','$pnum";
if (!$def)
echo "/$cldata[4]";
echo "','$codec','$cldata[7]')\">\n<img src=\"images/teamspeak/bullet_channel.gif\" align=\"absmiddle\" border=\"0\"> $clname $clflag</div></nobr>\n";
getsubcldetail($cldata[0], $cldata[7]);
getpldetail($cldata[0], "nonsub");
}
}
function getsubcldetail($cl_parent, $clpriv) {
global $db;
$result = $db->sql_query("SELECT * FROM ts_channel WHERE cl_parent='$cl_parent' ORDER BY cl_order asc, channel_id");
while ($clsubdata = $db->sql_fetchrow($result)) {
$clsubname = stripslashes($clsubdata[8]);
$clsubnamelink = str_replace('+',' ',urlencode($clsubname));
$topic = str_replace('+',' ',urlencode(htmlspecialchars($clsubdata[11])));
$codec = getCodec($clsubdata[4]);
$pnum = $db->sql_numrows($db->sql_query("SELECT pl_id FROM ts_user WHERE pl_channelid='$clsubdata[0]'"));
//echo '<nobr><img src="images/teamspeak/bullet_subchannel.gif" align="absmiddle" border="0"> '.$clsubname.'</nobr><br>';
echo "<nobr><div style=\"cursor:hand\" onclick=\"tsShowChanData('$clsubnamelink','$topic','$pnum/$clsubdata[4]','$codec','$clpriv')\">\n<img src=\"images/teamspeak/bullet_subchannel.gif\" align=\"absmiddle\" border=\"0\"> $clsubname</div></nobr>\n";
getpldetail($clsubdata[0], "sub");
}
}
function getpldetail($pl_channelid, $sub) {
global $db;
$result = $db->sql_query("SELECT * FROM ts_user WHERE pl_channelid='$pl_channelid' ORDER BY pl_playerprivileges desc, pl_nickname asc");
while ($pldata = $db->sql_fetchrow($sql)) {
$name = str_replace('+',' ',urlencode(htmlspecialchars($pldata[17])));
switch ($pldata[14]) {
case 5: $plpriv = "R SA"; $globalflags = "Server Administrator<br>Registered"; break;
case 4: $plpriv = "R"; $globalflags = "Registered"; break;
case 3: $plpriv = "U SA"; $globalflags = "Server Administrator<br>Allowed to register with server"; break;
case 2: $plpriv = "U"; $globalflags = "Allowed to register with server"; break;
case 1: $plpriv = "U SA"; $globalflags = "Server Administrator"; break;
case 0: $plpriv = "U"; $globalflags = "None"; break;
}
//Channel Commander = 1
//Requests Voice = 2
//Blocks Whispers = 4
//Away = 8
//Mic Muted = 16
//Mute Speaker/Headphone = 32
//recording = 64
$att = $pldata[15];
$rcrd = "";
$ms = 0; $mm = 0; $a = 0; $bw = 0; $rv = 0; $cc = 0;
if ($att>=64) $rcrd = " Rec" and $att-=64;
if ($att>=32) $ms = 1 and $att-=32;
if ($att>=16) $mm = 1 and $att-=16;
if ($att>=8) $a = 1 and $att-=8;
if ($att>=4) $bw = 1 and $att-=4;
if ($att>=2) $rv = 1 and $att-=2;
if ($att==1) $cc = 1;
$att = "";
if ($rv) $att = "<br>Requests Voice";
if ($bw) $att .= "<br>Does not accept whispers";
if ($a) $att .= "<br>Player is away";
if ($mm) $att .= "<br>Microphone muted";
if ($ms) $att .= "<br>Speaker/Headphone muted";
if ($cc) $att .= "<br>Channel Commander";
if ($att != "") $att = substr($att,4);
else $att = "None";
$icon = "0";
if ($a) $icon = away;
elseif ($ms) $icon = smuted;
elseif ($mm) $icon = mmuted;
elseif ($cc) $icon = cc;
//Channel Admin = 1
//Ops = 2
//Voice = 4
//Auto-Ops = 8
//Auto-Voice = 16
$cflags = $pldata[13];
$av = 0; $ao = 0; $v = 0; $o = 0; $ca = 0;
if ($cflags>=16) $av = 1 and $cflags-=16;
if ($cflags>=8) $ao = 1 and $cflags-=8;
if ($cflags>=4) $v = 1 and $cflags-=4;
if ($cflags>=2) $o = 1 and $cflags-=2;
if ($cflags==1) $ca = 1;
$clpriv = ""; $cpriv = "";
if ($ca) $clpriv = " CA" and $cpriv = "<br>Channel Admin";
if ($ao) $clpriv .= " AO" and $cpriv .= "<br>Auto-Ops";
if ($av) $clpriv .= " AV" and $cpriv .= "<br>Auto-Voice";
if ($o) $clpriv .= " O" and $cpriv .= "<br>Ops";
if ($v) $clpriv .= " V" and $cpriv .= "<br>Voice";
if ($cpriv != "") $cpriv = substr($cpriv,4);
else $cpriv = "None";
echo '<div style="cursor:hand" onclick="tsShowPlayerData(\''.$name.'\',\''.$globalflags.'\ ',\''.$cpriv.'\',\''.$att.'\')">';
if ($sub == 'sub') {
echo '<nobr><img src="images/teamspeak/bullet_sub.gif">';
} else if ($sub == 'nonsub') {
echo '<nobr>';
}
echo '<img src="images/teamspeak/bullet_'.$icon.'.gif" align="absmiddle"> '.htmlspecialchars($pldata[17]).' ('.$plpriv.$clpriv.$rcrd.')</nobr></div>';
}
}
echo "<SCRIPT LANGUAGE=\"JavaScript\">
function tsShowChanData(name,topic,user,codec,priv){
var html = '<p><B>Channel:</B><br>'+unescape(name)+'</p>' +
'<p><B>Topic:</B><br>'+unescape(topic)+'</p>' +
'<p><B>User in channel:</B><br>'+user+'</p>' +
'<p><B>Codec:</B><br>'+codec+'</p>';
if (priv == \"0\") {
html = html + '<FORM name=\"ts\"><P>' +
'<input type=\"hidden\" id=\"chanlink\" value=\"'+name+'\">' +
'Nickname:<br><INPUT type=\"text\" id=\"nickname\" size=\"16\"><BR>' +
'Username:<br><font color=\"red\">(Only if registered)</font><br><INPUT type=\"text\" id=\"loginname\" size=\"16\"><BR>' +
'Password:<br><INPUT type=\"password\" id=\"password\" size=\"16\"><BR>' +
'<BR><INPUT type=\"button\" value=\"Join Server\" onClick=\\'location.href=\"teamspeak://$serverAddress:$serverUDPPort/channel=\" + ts.chanlink.value + \"?nickname=\" + ts.nickname.value + \"?loginname=\" + ts.loginname.value + \"?password=\" + ts.password.value;\\'></P></FORM>';
}
document.getElementById('teamspeak').innerHTML = html;
};
function tsShowPlayerData(name,flags,priv,att){
document.getElementById('teamspeak').innerHTML =
'<p><B>Player:</B><br>'+unescape(name)+'</p>' +
'<p><B>Global flags:</B><br>'+flags+'</p>' +
'<p><B>Channel Privileges:</B><br>'+priv+'</p>' +
'<p><B>Player Attributes:</B><br>'+att+'</p>';
};
function tsShowServerInfo(){
document.getElementById('teamspeak').innerHTML = '<p><B>Server:</B><br>' + unescape('$servername') + '</p>' +
'<p><B>Server IP:</B><br>$serverAddress:$serverUDPPort</p>' +
'<p><B>Version:</B><br>$ver</p>' +
'<p><B>Type:</B><br>$type</p>' +
'<p><B>Platform:</B><br>$platform</p>' +
'<p><B>Welcome Message:</B><br>' + unescape('$wm') + '</p>' +
'<FORM name=\"ts\"><P>' +
'Nickname:<br><INPUT type=\"text\" id=\"nickname\" size=\"16\"><BR>' +
'Username:<br><font color=\"red\">(Only if registered)</font><br><INPUT type=\"text\" id=\"loginname\" size=\"16\"><BR>' +
'Password:<br><INPUT type=\"password\" id=\"password\" size=\"16\"><BR>' +
'<BR><INPUT type=\"button\" value=\"Join Server\" onClick=\\'location.href=\"teamspeak://$serverAddress:$serverUDPPort/channel=?nickname=\" + ts.nickname.value + \"?loginname=\" + ts.loginname.value + \"?password=\" + ts.password.value;\\'></P></FORM>';
};
</script>";
echo '<table border="0" align="center" cellspacing="1" width="470" bgcolor="#000000">
<tr bgcolor="'.$wincol.'">
<td valign="top" rowspan=3>
<div style="cursor:hand" onclick="tsShowServerInfo();"><img src="images/teamspeak/bullet_server.gif" align="absmiddle">
<b>'.urldecode(htmlspecialchars($servername)).'</b></div>';
getcldetail();
echo '</td>
<td valign="top" height="450" width="170">
<div id="teamspeak">
<script>tsShowServerInfo();</script>
</div>
</td>
</tr>
<tr bgcolor="'.$wincol.'">
<td valign="top">
<b>Channel Flags</b><br> R = Registered<br> M = Moderated<br> P = Passworded<br> S = Sub-Channels<br> D = Default<br> U = Unregistered
</td>
</tr>
<tr bgcolor="'.$wincol.'">
<td valign="top">
<b>Player Flags</b><br> R = Registered<br> U = Unregistered<br> SA = Server Admin<br> CA = Channel Admin<br> AO = Auto-Operator<br> AV = Auto-Voice<br> O = Operator<br>  V = Voice<br> Rec = Recording
</td>
</tr>
</table><br><br>';
include("footer.php");
closeSocket($socket);
?>
It helped me get the server up and running. Now I have come across another problem.
I am trying to install a TeamSpeak Module to a website I am designing for the clan I am hosting this TS Server for. All well the module is installed. However it says the following.
Data unavailable.
TCPQueryPort may not be open.
According to my server.ini the port for this is 51234 TCP. I have opened this on my router and I still get this error. As you can see in the Module code below it also claims this is the port I need open for it to work. Does anyone know if there is another port I need open for the TeamSpeak server to be read through a Module?
<?php
// **** settings - to be edited before first use ****
$serverAddress = "MY IP"; //"19.197.268.256"; // can be ip address or url
$serverQueryPort = 51234; //51234; // default 51234, must be accessible and usable. check server.ini (make sure this port is unblocked)
$serverUDPPort = 8767; //8767; // default 8767
$wincol = "orange";
// **** end of settings ****
if (!eregi("modules.php", $_SERVER['PHP_SELF'])) {
die ("You can't access this file directly...");
}
require_once("mainfile.php");
$module_name = basename(dirname(__FILE__));
global $user, $cookie, $db;
include("header.php");
global $errno, $errstr;
getusrinfo($user);
cookiedecode($user);
$username = $cookie[1];
$db->sql_query("DELETE FROM ts_user");
$db->sql_query("DELETE FROM ts_channel");
// opens a connection to the teamspeak server
function getSocket($host, $port, $errno, $errstr, $timeout) {
global $errno, $errstr;
@$socket = fsockopen($host, $port, $errno, $errstr, $timeout);
if($socket and fread($socket, 4) == "[TS]") {
fgets($socket);
return $socket;
}// end if
return false;
}// end function getSocket(...)
function getCodec($codec) {
switch ($codec) {
case 12: $codec = "Speex 25.9 Kbit"; break;
case 11: $codec = "Speex 19.5 Kbit"; break;
case 10: $codec = "Speex 16.3 Kbit"; break;
case 9: $codec = "Speex 12.3 Kbit"; break;
case 8: $codec = "Speex 9.3 Kbit"; break;
case 7: $codec = "Speex 7.2 Kbit"; break;
case 6: $codec = "Speex 5.2 Kbit"; break;
case 5: $codec = "Speex 3.4 Kbit"; break;
case 4: $codec = "CELP Windows 5.2 Kbit"; break;
case 3: $codec = "GSM 16.4 Kbit"; break;
case 2: $codec = "GSM 14.8 Kbit"; break;
case 1: $codec = "CELP 6.3 Kbit"; break;
case 0: $codec = "CELP 5.1 Kbit"; break;
}
return $codec;
}
// sends a query to the teamspeak server
function sendQuery($socket, $query) {
fputs($socket, $query."\n");
}
// answer OK?
function getOK($socket) {
$result = fread($socket, 2);
fgets($socket, 128);
return($result == "OK");
}
// closes the connection to the teamspeak server
function closeSocket($socket) {
fputs($socket, "quit");
fclose($socket);
}
// MAIN PROGRAM START
// establish connection to teamspeak server
$socket = getSocket($serverAddress, $serverQueryPort, $errno, $errstr, 3);
if($socket == false) {
echo "An error connecting to the TeamSpeak server has occured!<br>\n";
echo "Error number: ".$errno."<br>\n";
echo "Error description: ".$errstr."<br>\n";
return;
}
// select the one and only running server on port 8767
sendQuery($socket, "sel ".$serverUDPPort);
// retrieve answer "OK"
if(!getOK($socket)) {
die("Server didn't answer "OK" after last command. Aborting.");
}// end if
// retrieve server name
sendQuery($socket,"si");
$n=0;
$line = "";
while($line != "OK") {
$line = fgets($socket);
$line = substr($line,0,-2);
if ($n == 1) $servername = str_replace('+',' ',urlencode(str_replace('server_name=','',htmlspec ialchars($line))));
elseif ($n == 2) $platform = str_replace('server_platform=','',$line);
elseif ($n == 3) $wm = str_replace('+',' ',urlencode(str_replace('server_welcomemessage=',' ',htmlspecialchars($line))));
elseif ($n == 7) {
if(str_replace('server_clan_server=','',$line)=="1") $type="Freeware Clan Server";
else $type="Freeware Public Server";
}
$n++;
}
// retrieve version
sendQuery($socket,"ver");
$line = "";
while($line != "OK") {
$line = fgets($socket);
$line = substr($line,0,-2);
if ($line != "OK") {
$verarr = explode(" ",$line);
$ver = $verarr[0];
}
}
// retrieve player list
sendQuery($socket,"pl");
// read player info
$playerList = array();
while(substr($pl_id,0,-2) != "OK") {
$line = fgets($socket);
$playerlist = explode("\t",$line);
list($pl_id , $pl_channelid, $pl_pktssend , $pl_bytessend, $pl_pktsrecv, $pl_bytesrecv, $pl_pktloss, $pl_ping , $pl_logintime , $pl_idletime, $pl_channelprivileges, $pl_playerprivileges, $pl_playerflags, $pl_ipaddress, $pl_nickname, $pl_loginname) = $playerlist;
if(substr($pl_id,0,-2) != "OK" and $pl_id != "p_id") {
$pl_nickname = substr($pl_nickname,1); //remove quotes
$pl_nickname = substr($pl_nickname,0,-1);
$pl_loginname = substr($pl_loginname,1); //remove quotes
$pl_loginname = substr($pl_loginname,0,-1);
$pl_loginname = addslashes($pl_loginname); //fix SQL queries
$pl_nickname = addslashes($pl_nickname); //fix SQL queries
$db->sql_query("INSERT INTO ts_user (pl_id, pl_channelid, pl_pktssend, pl_bytessend, pl_pktsrecv, pl_bytesrecv, pl_pktloss, pl_ping, pl_logintime, pl_idletime, pl_channelprivileges, pl_playerprivileges, pl_playerflags, pl_ipaddress, pl_nickname, pl_loginname) VALUES ('$pl_id' , '$pl_channelid', '$pl_pktssend ', '$pl_bytessend', '$pl_pktsrecv', '$pl_bytesrecv', '$pl_pktloss', '$pl_ping', '$pl_logintime' , '$pl_idletime', '$pl_channelprivileges', '$pl_playerprivileges', '$pl_playerflags', '$pl_ipaddress', '$pl_nickname', ' $pl_loginname')");
}
}
// retrieve channel list
sendQuery($socket,"cl");
// read channel info
$channelList = array();
while(substr($channel_id,0,-2) != "OK") {
$line = fgets($socket);
$channellist = explode("\t",$line);
list($channel_id, $cl_codec, $cl_parent, $cl_order, $cl_maxuser, $cl_name, $cl_flags, $cl_private, $cl_topic) = $channellist;
if($channel_id != 0) {
$cl_name = substr($cl_name,1); //remove quotes
$cl_name = substr($cl_name,0,-1);
$cl_topic = substr($cl_topic,1); //remove quotes
$cl_topic = substr($cl_topic,0,-3);
$cl_name = addslashes($cl_name); //fix SQL queries
$cl_topic = addslashes($cl_topic); //fix SQL queries
$db->sql_query("INSERT INTO ts_channel (channel_id, cl_codec, cl_parent, cl_order, cl_maxuser, cl_name, cl_flags, cl_private, cl_topic) VALUES ('$channel_id', '$cl_codec', '$cl_parent', '$cl_order', '$cl_maxuser', '$cl_name', '$cl_flags', '$cl_private', '$cl_topic')");
}
}
function getcldetail(){
global $db;
$result = $db->sql_query("SELECT * FROM ts_channel WHERE cl_parent='-1' ORDER BY cl_order asc, cl_name, channel_id");
if ($db->sql_numrows($result) == 0) {
echo '<center><b>Data unavailable.<br>TCPQueryPort may not be open.</b></center>';
}
while ($cldata = $db->sql_fetchrow($result)) {
$clname = $cldata[8];
$clnamelink = str_replace('+',' ',urlencode($clname));
$topic = str_replace('+',' ',urlencode(htmlspecialchars($cldata[8])));
$codec = getCodec($cldata[4]);
$cflags = $cldata[9];
$d = 0; $s = 0; $p = 0; $m = 0; $u = 0;
if ($cflags>=16) $d = 1 and $cflags-=16;
if ($cflags>=8) $s = 1 and $cflags-=8;
if ($cflags>=4) $p = 1 and $cflags-=4;
if ($cflags>=2) $m = 1 and $cflags-=2;
if ($cflags==1) $u = 1;
$def = 0;
if ($u) $clflag = "(U";
else $clflag = "(R";
if ($m) $clflag .= "M";
if ($p) $clflag .= "P";
if ($s) $clflag .= "S";
if ($d) $clflag .= "D" and $def = 1;
$clflag .= ")";
$pnum = $db->sql_numrows($db->sql_query("SELECT pl_id FROM ts_user WHERE pl_channelid='$cldata[0]'"));
//echo '<nobr><img src="images/teamspeak/bullet_channel.gif" align="absmiddle" border="0"> '.$clname.' '.$clflag.'</nobr><br>';
echo "<nobr><div style=\"cursor:hand\" onclick=\"tsShowChanData('$clnamelink','$topic','$pnum";
if (!$def)
echo "/$cldata[4]";
echo "','$codec','$cldata[7]')\">\n<img src=\"images/teamspeak/bullet_channel.gif\" align=\"absmiddle\" border=\"0\"> $clname $clflag</div></nobr>\n";
getsubcldetail($cldata[0], $cldata[7]);
getpldetail($cldata[0], "nonsub");
}
}
function getsubcldetail($cl_parent, $clpriv) {
global $db;
$result = $db->sql_query("SELECT * FROM ts_channel WHERE cl_parent='$cl_parent' ORDER BY cl_order asc, channel_id");
while ($clsubdata = $db->sql_fetchrow($result)) {
$clsubname = stripslashes($clsubdata[8]);
$clsubnamelink = str_replace('+',' ',urlencode($clsubname));
$topic = str_replace('+',' ',urlencode(htmlspecialchars($clsubdata[11])));
$codec = getCodec($clsubdata[4]);
$pnum = $db->sql_numrows($db->sql_query("SELECT pl_id FROM ts_user WHERE pl_channelid='$clsubdata[0]'"));
//echo '<nobr><img src="images/teamspeak/bullet_subchannel.gif" align="absmiddle" border="0"> '.$clsubname.'</nobr><br>';
echo "<nobr><div style=\"cursor:hand\" onclick=\"tsShowChanData('$clsubnamelink','$topic','$pnum/$clsubdata[4]','$codec','$clpriv')\">\n<img src=\"images/teamspeak/bullet_subchannel.gif\" align=\"absmiddle\" border=\"0\"> $clsubname</div></nobr>\n";
getpldetail($clsubdata[0], "sub");
}
}
function getpldetail($pl_channelid, $sub) {
global $db;
$result = $db->sql_query("SELECT * FROM ts_user WHERE pl_channelid='$pl_channelid' ORDER BY pl_playerprivileges desc, pl_nickname asc");
while ($pldata = $db->sql_fetchrow($sql)) {
$name = str_replace('+',' ',urlencode(htmlspecialchars($pldata[17])));
switch ($pldata[14]) {
case 5: $plpriv = "R SA"; $globalflags = "Server Administrator<br>Registered"; break;
case 4: $plpriv = "R"; $globalflags = "Registered"; break;
case 3: $plpriv = "U SA"; $globalflags = "Server Administrator<br>Allowed to register with server"; break;
case 2: $plpriv = "U"; $globalflags = "Allowed to register with server"; break;
case 1: $plpriv = "U SA"; $globalflags = "Server Administrator"; break;
case 0: $plpriv = "U"; $globalflags = "None"; break;
}
//Channel Commander = 1
//Requests Voice = 2
//Blocks Whispers = 4
//Away = 8
//Mic Muted = 16
//Mute Speaker/Headphone = 32
//recording = 64
$att = $pldata[15];
$rcrd = "";
$ms = 0; $mm = 0; $a = 0; $bw = 0; $rv = 0; $cc = 0;
if ($att>=64) $rcrd = " Rec" and $att-=64;
if ($att>=32) $ms = 1 and $att-=32;
if ($att>=16) $mm = 1 and $att-=16;
if ($att>=8) $a = 1 and $att-=8;
if ($att>=4) $bw = 1 and $att-=4;
if ($att>=2) $rv = 1 and $att-=2;
if ($att==1) $cc = 1;
$att = "";
if ($rv) $att = "<br>Requests Voice";
if ($bw) $att .= "<br>Does not accept whispers";
if ($a) $att .= "<br>Player is away";
if ($mm) $att .= "<br>Microphone muted";
if ($ms) $att .= "<br>Speaker/Headphone muted";
if ($cc) $att .= "<br>Channel Commander";
if ($att != "") $att = substr($att,4);
else $att = "None";
$icon = "0";
if ($a) $icon = away;
elseif ($ms) $icon = smuted;
elseif ($mm) $icon = mmuted;
elseif ($cc) $icon = cc;
//Channel Admin = 1
//Ops = 2
//Voice = 4
//Auto-Ops = 8
//Auto-Voice = 16
$cflags = $pldata[13];
$av = 0; $ao = 0; $v = 0; $o = 0; $ca = 0;
if ($cflags>=16) $av = 1 and $cflags-=16;
if ($cflags>=8) $ao = 1 and $cflags-=8;
if ($cflags>=4) $v = 1 and $cflags-=4;
if ($cflags>=2) $o = 1 and $cflags-=2;
if ($cflags==1) $ca = 1;
$clpriv = ""; $cpriv = "";
if ($ca) $clpriv = " CA" and $cpriv = "<br>Channel Admin";
if ($ao) $clpriv .= " AO" and $cpriv .= "<br>Auto-Ops";
if ($av) $clpriv .= " AV" and $cpriv .= "<br>Auto-Voice";
if ($o) $clpriv .= " O" and $cpriv .= "<br>Ops";
if ($v) $clpriv .= " V" and $cpriv .= "<br>Voice";
if ($cpriv != "") $cpriv = substr($cpriv,4);
else $cpriv = "None";
echo '<div style="cursor:hand" onclick="tsShowPlayerData(\''.$name.'\',\''.$globalflags.'\ ',\''.$cpriv.'\',\''.$att.'\')">';
if ($sub == 'sub') {
echo '<nobr><img src="images/teamspeak/bullet_sub.gif">';
} else if ($sub == 'nonsub') {
echo '<nobr>';
}
echo '<img src="images/teamspeak/bullet_'.$icon.'.gif" align="absmiddle"> '.htmlspecialchars($pldata[17]).' ('.$plpriv.$clpriv.$rcrd.')</nobr></div>';
}
}
echo "<SCRIPT LANGUAGE=\"JavaScript\">
function tsShowChanData(name,topic,user,codec,priv){
var html = '<p><B>Channel:</B><br>'+unescape(name)+'</p>' +
'<p><B>Topic:</B><br>'+unescape(topic)+'</p>' +
'<p><B>User in channel:</B><br>'+user+'</p>' +
'<p><B>Codec:</B><br>'+codec+'</p>';
if (priv == \"0\") {
html = html + '<FORM name=\"ts\"><P>' +
'<input type=\"hidden\" id=\"chanlink\" value=\"'+name+'\">' +
'Nickname:<br><INPUT type=\"text\" id=\"nickname\" size=\"16\"><BR>' +
'Username:<br><font color=\"red\">(Only if registered)</font><br><INPUT type=\"text\" id=\"loginname\" size=\"16\"><BR>' +
'Password:<br><INPUT type=\"password\" id=\"password\" size=\"16\"><BR>' +
'<BR><INPUT type=\"button\" value=\"Join Server\" onClick=\\'location.href=\"teamspeak://$serverAddress:$serverUDPPort/channel=\" + ts.chanlink.value + \"?nickname=\" + ts.nickname.value + \"?loginname=\" + ts.loginname.value + \"?password=\" + ts.password.value;\\'></P></FORM>';
}
document.getElementById('teamspeak').innerHTML = html;
};
function tsShowPlayerData(name,flags,priv,att){
document.getElementById('teamspeak').innerHTML =
'<p><B>Player:</B><br>'+unescape(name)+'</p>' +
'<p><B>Global flags:</B><br>'+flags+'</p>' +
'<p><B>Channel Privileges:</B><br>'+priv+'</p>' +
'<p><B>Player Attributes:</B><br>'+att+'</p>';
};
function tsShowServerInfo(){
document.getElementById('teamspeak').innerHTML = '<p><B>Server:</B><br>' + unescape('$servername') + '</p>' +
'<p><B>Server IP:</B><br>$serverAddress:$serverUDPPort</p>' +
'<p><B>Version:</B><br>$ver</p>' +
'<p><B>Type:</B><br>$type</p>' +
'<p><B>Platform:</B><br>$platform</p>' +
'<p><B>Welcome Message:</B><br>' + unescape('$wm') + '</p>' +
'<FORM name=\"ts\"><P>' +
'Nickname:<br><INPUT type=\"text\" id=\"nickname\" size=\"16\"><BR>' +
'Username:<br><font color=\"red\">(Only if registered)</font><br><INPUT type=\"text\" id=\"loginname\" size=\"16\"><BR>' +
'Password:<br><INPUT type=\"password\" id=\"password\" size=\"16\"><BR>' +
'<BR><INPUT type=\"button\" value=\"Join Server\" onClick=\\'location.href=\"teamspeak://$serverAddress:$serverUDPPort/channel=?nickname=\" + ts.nickname.value + \"?loginname=\" + ts.loginname.value + \"?password=\" + ts.password.value;\\'></P></FORM>';
};
</script>";
echo '<table border="0" align="center" cellspacing="1" width="470" bgcolor="#000000">
<tr bgcolor="'.$wincol.'">
<td valign="top" rowspan=3>
<div style="cursor:hand" onclick="tsShowServerInfo();"><img src="images/teamspeak/bullet_server.gif" align="absmiddle">
<b>'.urldecode(htmlspecialchars($servername)).'</b></div>';
getcldetail();
echo '</td>
<td valign="top" height="450" width="170">
<div id="teamspeak">
<script>tsShowServerInfo();</script>
</div>
</td>
</tr>
<tr bgcolor="'.$wincol.'">
<td valign="top">
<b>Channel Flags</b><br> R = Registered<br> M = Moderated<br> P = Passworded<br> S = Sub-Channels<br> D = Default<br> U = Unregistered
</td>
</tr>
<tr bgcolor="'.$wincol.'">
<td valign="top">
<b>Player Flags</b><br> R = Registered<br> U = Unregistered<br> SA = Server Admin<br> CA = Channel Admin<br> AO = Auto-Operator<br> AV = Auto-Voice<br> O = Operator<br>  V = Voice<br> Rec = Recording
</td>
</tr>
</table><br><br>';
include("footer.php");
closeSocket($socket);
?>