Call this v1.5.0

This commit is contained in:
root 2021-01-03 14:48:05 -08:00
parent 5775da3165
commit 68770cff9e
6 changed files with 111 additions and 84 deletions

View File

@ -60,6 +60,12 @@ Read-Write access for working directory
#### Changelog
* v1.5.0:
* Polishing up, adding some last minute fixes.
* Tweaks on irc.php
* Reconstruct socket chunk parsing, allows for more thorough IRC parsing capability
* Fix /help missing /msg command.
* v1.4.1:
* Fix usleep bug where irc.php sleeps for less than a millisecond (lol)

View File

@ -141,17 +141,17 @@ input, button, select, textarea{
overflow-x: auto;
}
#msgs tr:nth-child(even) { background-color: #454545; }
#msgs tr:nth-child(odd) { background-color: #323232; }
#msgs td:nth-child(even) { width: 80%; }
#msgs td:nth-child(odd) { width: 20%; min-width: 120px; max-width: 210px; }
#msgs td { padding: 4px; border-radius: 4px; }
#msgs tr:nth-child(even) { background-color: #333333; }
#msgs tr:nth-child(odd) { background-color: #262626; }
#msgs td:nth-child(even) { width: 100%; }
#msgs td:nth-child(odd) { min-width: 120px; }
#msgs td { padding: 0px 4px 0px 4px; border-radius: 3px; }
#logmsgs tr:nth-child(even) { background-color: #454545; }
#logmsgs tr:nth-child(odd) { background-color: #323232; }
#logmsgs td:nth-child(even) { width: 80%; }
#logmsgs td:nth-child(odd) { width: 20%; min-width: 120px; max-width: 180px; }
#logmsgs td { padding: 4px; border-radius: 4px; }
#logmsgs tr:nth-child(even) { background-color: #333333; }
#logmsgs tr:nth-child(odd) { background-color: #262626; }
#logmsgs td:nth-child(even) { width: 100%; }
#logmsgs td:nth-child(odd) { min-width: 120px; }
#logmsgs td { padding: 0px 4px 0px 4px; border-radius: 3px; }
#footer {
text-align: center;

156
irc.php
View File

@ -54,25 +54,35 @@ if(!isset($username) || $username == "") {
// Create a socket to use
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// Send first packets to client to inform connection
$socketFileContents = file_get_contents("users/$username.log"); // get current log contents
$msgline = "<tr><td class='userinfo'><span style='color:$ipcolor;'>" . $server_address . "</span> ~ </td><td>Connecting to $server_address:$server_port... please wait a few</td></tr>\n";
file_put_contents("users/$username.log", $socketFileContents . $msgline);
// Connect to IRC server via socket above
socket_connect($socket, $server_address, $server_port);
sleep(2);
// NICK and USER calls to IRC
$nickline = "NICK " . $usernickname . "\n";
$userline = "USER " . $usernickname . " 0 * :" . $username . "'s $title $version client\n";
// Pass NICK and USER back to IRC server over socket
socket_write($socket, $nickline, strlen($nickline));
// Sleep for a second before sending USER lineage
sleep(1);
// SEND IT
socket_write($socket, $userline, strlen($userline));
sleep(1);
//sleep(1);
// Continue the rest of the script here
// While script will continue as long as socket continues to be active
while($bytes = socket_recv($socket, $r_data, 3068, MSG_DONTWAIT) !== '') {
while($bytes = socket_recv($socket, $r_data, 3096, MSG_DONTWAIT) !== '') {
if($bytes !== FALSE) {
//$data = socket_read($socket, 2048, PHP_NORMAL_READ);
$data = $r_data;
$packetdata = $r_data;
}
// If client sent something, push it to the IRC server!
@ -89,7 +99,7 @@ while($bytes = socket_recv($socket, $r_data, 3068, MSG_DONTWAIT) !== '') {
if(!file_exists("users/.$username.pingfile")) { // If file is missing, quit
// Debug logging, check if IRC is exiting properly
doLog("Exiting, $username logged out...");
$quitline = "QUIT :$username toggled disconnect; webirc\n"; // IRC QUIT line
$quitline = "QUIT :$username toggled disconnect; $title $version\n"; // IRC QUIT line
socket_write($socket, $quitline, strlen($quitline)); // Push to socket
socket_close($socket); // Close the socket
exit(0); // Exit the script, nothing to do.
@ -97,76 +107,86 @@ while($bytes = socket_recv($socket, $r_data, 3068, MSG_DONTWAIT) !== '') {
// If data variable is set and buffer has data to recieve
// RECIEVE IT!
if(isset($data)) { // If data variable is set, there's data from socket
$stringMsg = explode('PRIVMSG', $data); // Strip IRC commands
// Get original contents from socket
$socketFileContents = file_get_contents("users/$username.log");
$ex = explode(' ', $data);
$data = htmlentities($data);
if(isset($packetdata)) { // If data variable is set, there's data from socket
doLog("Server received chunk: $packetdata");
// Send PONG back to the server
if ($ex[0] == "PING") {
// Log pong
doLog("PONG, $username response...");
$pongline = "PONG " . $ex[1] . "\n"; // PONG IRC CMD
// Push to IRC server via socket.
socket_write($socket, $pongline, strlen($pongline));
} else if ($ex[1] == "PART") {
$senderNick = get_string_between($data, ":", "!");
$senderIp = get_string_between($data, "@", " ");
$exitMsg = explode('PART', $data);
$msgline = "<tr><td class='userinfo'><b>$senderNick</b><br /><span style='color:$ipcolor;'>$senderIp</span></td><td> left " . stripslashes(trim($exitMsg[1])) . "</td></tr>";
file_put_contents("users/$username.log", $socketFileContents . $msgline);
} else if ($ex[1] == "JOIN") {
$senderNick = get_string_between($data, ":", "!");
$senderIp = get_string_between($data, "@", " ");
if($senderNick != $usernickname) {
$msgline = "<tr><td class='userinfo'><b>$senderNick</b><br /><span style='color:$ipcolor;'>$senderIp</span></td><td> joined the channel</td></tr>\n";
file_put_contents("users/$username.log", $socketFileContents . $msgline);
} else {
$msgline = "<tr><td class='userinfo'><span style='color:$ipcolor;'>" . $server_address . "</span> ~ </td><td> " . $data . "</td></tr>\n";
file_put_contents("users/$username.log", $socketFileContents . $msgline);
}
} else if ($ex[1] == "NICK") {
$senderNick = get_string_between($data, ":", "!");
$senderIp = get_string_between($data, "@", " ");
$nickMsg = explode('NICK', $data);
$msgline = "<tr><td class='userinfo'><b>$senderNick</b><br /><span style='color:$ipcolor;'>$senderIp</span></td><td> $senderNick is now known as" . trim($nickMsg[1]) . "</td></tr>\n";
file_put_contents("users/$username.log", $socketFileContents . $msgline);
} else if ($ex[1] == "QUIT") {
$senderNick = get_string_between($data, ":", "!");
$senderIp = get_string_between($data, "@", " ");
$quitMsg = explode('QUIT :', $data);
$msgline = "<tr><td class='userinfo'><span style='color:$ipcolor;'>$server_address</span> ~</td><td> $senderNick left: " . trim($quitMsg[1]) . "</td></tr>\n";
file_put_contents("users/$username.log", $socketFileContents . $msgline);
} else if ($ex[2] == $usernickname && $ex[1] == "PRIVMSG") {
$senderNick = get_string_between($data, ":", "!");
$senderIp = get_string_between($data, "@", " ");
$privMsg = explode($usernickname . " :", $stringMsg[1]);
file_put_contents("users/.$username.pmed", "$senderNick");
$msgline = "<tr><td class='userinfo'>PM from: <b>$senderNick</b><br /><span style='color:$ipcolor;'>$senderIp</span></td><td> " . htmlentities(stripslashes(trim($privMsg[1]))) . "</td></tr>\n";
file_put_contents("users/$username.log", $socketFileContents . $msgline);
$msg = "";
} else if ($stringMsg[1] != "") {
$senderNick = get_string_between($data, ":", "!");
$senderIp = get_string_between($data, "@", " ");
$channel = explode(" :", $stringMsg[1]);
$msg = explode($channel[0] . " :", $stringMsg[1]);
$lines = explode("\r\n", $packetdata);
$msgline = "<tr><td class='userinfo'><b>$senderNick</b>:" . $channel[0] . "<br /><span style='color:$ipcolor;'>$senderIp</span></td><td> " . htmlentities(stripslashes(trim($msg[1]))) . "</td></tr>";
if(usernameInMsg($usernickname, $msg[1])==true) {
file_put_contents("users/.$username.mentioned", "$senderNick");
}
foreach($lines as $data) {
if($data == "") { continue; }
file_put_contents("users/$username.log", $socketFileContents . $msgline);
} else if ($ex[0] != "PING") {
$msgline = "<tr><td class='userinfo'><span style='color:$ipcolor;'>" . $server_address . "</span> ~ </td><td> " . $data . "</td></tr>\n";
file_put_contents("users/$username.log", $socketFileContents . $msgline);
}
doLog("Line: $data");
$socketFileContents = file_get_contents("users/$username.log");
$stringMsg = explode('PRIVMSG', $data); // Strip IRC commands
$ex = explode(' ', $data);
$data = htmlentities($data);
// Send PONG back to the server
if ($ex[0] == "PING") {
// Log pong
doLog("PONG, $username response...");
$pongline = "PONG " . $ex[1] . "\n"; // PONG IRC CMD
// Push to IRC server via socket.
socket_write($socket, $pongline, strlen($pongline));
} else if ($ex[1] == "PART") {
$senderNick = get_string_between($data, ":", "!");
$senderIp = get_string_between($data, "@", " ");
$exitMsg = explode('PART', $data);
$msgline = "<tr><td class='userinfo'><b>$senderNick</b><br /><span style='color:$ipcolor;'>$senderIp</span></td><td> left " . stripslashes(trim($exitMsg[1])) . "</td></tr>";
file_put_contents("users/$username.log", $socketFileContents . $msgline);
} else if ($ex[1] == "JOIN") {
$senderNick = get_string_between($data, ":", "!");
$senderIp = get_string_between($data, "@", " ");
$joinChannel = explode("JOIN :", $data);
if($senderNick != $usernickname) {
$msgline = "<tr><td class='userinfo'><b>$senderNick</b><br /><span style='color:$ipcolor;'>$senderIp</span></td><td> joined " . $joinChannel[1] . "</td></tr>\n";
file_put_contents("users/$username.log", $socketFileContents . $msgline);
} else {
$msgline = "<tr><td class='userinfo'><span style='color:$ipcolor;'>" . $server_address . "</span> ~ </td><td>Joining " . $joinChannel[1] . "</td></tr>\n";
file_put_contents("users/$username.log", $socketFileContents . $msgline);
}
} else if ($ex[1] == "NICK") {
$senderNick = get_string_between($data, ":", "!");
$senderIp = get_string_between($data, "@", " ");
$nickMsg = explode('NICK', $data);
$msgline = "<tr><td class='userinfo'><b>$senderNick</b><br /><span style='color:$ipcolor;'>$senderIp</span></td><td> $senderNick is now known as" . trim($nickMsg[1]) . "</td></tr>\n";
file_put_contents("users/$username.log", $socketFileContents . $msgline);
} else if ($ex[1] == "QUIT") {
$senderNick = get_string_between($data, ":", "!");
$senderIp = get_string_between($data, "@", " ");
$quitMsg = explode('QUIT :', $data);
$msgline = "<tr><td class='userinfo'><span style='color:$ipcolor;'>$server_address</span> ~</td><td> $senderNick left: " . trim($quitMsg[1]) . "</td></tr>\n";
file_put_contents("users/$username.log", $socketFileContents . $msgline);
} else if ($ex[2] == $usernickname && $ex[1] == "PRIVMSG") {
$senderNick = get_string_between($data, ":", "!");
$senderIp = get_string_between($data, "@", " ");
$privMsg = explode($usernickname . " :", $stringMsg[1]);
file_put_contents("users/.$username.pmed", "$senderNick");
$msgline = "<tr><td class='userinfo'>PM from: <b>$senderNick</b><br /><span style='color:$ipcolor;'>$senderIp</span></td><td> " . htmlentities(stripslashes(trim($privMsg[1]))) . "</td></tr>\n";
file_put_contents("users/$username.log", $socketFileContents . $msgline);
$msg = "";
} else if ($stringMsg[1] != "") {
$senderNick = get_string_between($data, ":", "!");
$senderIp = get_string_between($data, "@", " ");
$channel = explode(" :", $stringMsg[1]);
$msg = explode($channel[0] . " :", $stringMsg[1]);
$msgline = "<tr><td class='userinfo'><b>$senderNick</b>:" . $channel[0] . "<span style='color:$ipcolor;font-size:9px;'>$senderIp</span></td><td> " . htmlentities(stripslashes(trim($msg[1]))) . "</td></tr>";
if(usernameInMsg($usernickname, $msg[1])==true) {
file_put_contents("users/.$username.mentioned", "$senderNick");
}
file_put_contents("users/$username.log", $socketFileContents . $msgline);
} else if ($ex[0] == ":$server_address") {
$msgline = "<tr><td class='userinfo'><span style='color:$ipcolor;'>" . $server_address . "</span> ~ </td><td> " . $data . "</td></tr>\n";
file_put_contents("users/$username.log", $socketFileContents . $msgline);
}
}
}
// second sleep to prevent insane CPU load
usleep(500000);
usleep(250000);
}
?>

View File

@ -142,15 +142,15 @@ input, button, select, textarea{
#msgs tr:nth-child(even) { background-color: #bbbbbb; }
#msgs tr:nth-child(odd) { background-color: #b1b1b1; }
#msgs td:nth-child(even) { width: 80%; }
#msgs td:nth-child(odd) { width: 20%; min-width: 120px; max-width: 210px; }
#msgs td { padding: 4px; border-radius: 4px; }
#msgs td:nth-child(even) { width: 100%; }
#msgs td:nth-child(odd) { min-width: 120px; }
#msgs td { padding: 0px 4px 0px 4px; border-radius: 3px; }
#logmsgs tr:nth-child(even) { background-color: #bbbbbb; }
#logmsgs tr:nth-child(odd) { background-color: #b1b1b1; }
#logmsgs td:nth-child(even) { width: 80%; }
#logmsgs td:nth-child(odd) { width: 20%; min-width: 120px; max-width: 180px; }
#logmsgs td { padding: 4px; border-radius: 4px; }
#logmsgs td:nth-child(odd) { min-width: 120px;}
#logmsgs td { padding: 0px 4px 0px 4px; border-radius: 3px; }
#footer {
text-align: center;

View File

@ -143,6 +143,7 @@ if (isset($_GET['msg']) && $_GET['msg']!="" && isset($_GET['nick']) && $_GET['ni
$logline .= "/rejoin (channel): Part, and join a channel; focused channel if none is specified<br />";
$logline .= "/nick [nickname]: Change your nickname<br />";
$logline .= "/list [channel]: List users in a channel<br />";
$logline .= "/msg [channel|user] [msg]: Message channel, or PM 'user'<br />";
$logline .= "/usermode [flag(s): Sets MODE flag(s) to user<br />";
$logfile .= "/mode [channel] [flag(s)]: Sets MODE flag(s) for [channel]<br />";
$logline .= "/channel: Prints focused channel / user (Alias: /focused)</td></tr>\n";

2
version.php Normal file → Executable file
View File

@ -5,6 +5,6 @@
// https://github.com/Pentium44/idleirc
///////
$version = "1.4.1"; // IdleIRC version
$version = "1.5.0"; // IdleIRC version
?>