|
@@ -0,0 +1,242 @@
|
|
|
+<?
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+require "../includes/database.php";
|
|
|
+require "../includes/ssh.php";
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+function SaveMessage($timestamp, $ident, $network, $frequency, $user_id, $nick, $source, $message) {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ $qwnu_dbconn = gOpenDB();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ $id = GetMessageID("", $network, $frequency, $nick, $source, $message);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if ($id == 0) {
|
|
|
+ $sql = "
|
|
|
+ INSERT INTO qwnu_qwnet (create_time, ident, network, frequency, user_id, nick, source, message, counter) VALUES (
|
|
|
+ '".mysql_real_escape_string($timestamp)."',
|
|
|
+ '".mysql_real_escape_string($ident)."',
|
|
|
+ '".mysql_real_escape_string($network)."',
|
|
|
+ '".mysql_real_escape_string($frequency)."',
|
|
|
+ '".mysql_real_escape_string($user_id)."',
|
|
|
+ '".mysql_real_escape_string($nick)."',
|
|
|
+ '".mysql_real_escape_string($source)."',
|
|
|
+ '".mysql_real_escape_string($message)."',
|
|
|
+ '0'
|
|
|
+ )";
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $sql = "UPDATE qwnu_qwnet SET ident = '".mysql_real_escape_string($ident)."' WHERE id = ".$id;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (!mysql_query($sql)) {
|
|
|
+ die(mysql_error());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ gCloseDB($qwnu_dbconn);
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+function GetMessageID($ident, $network, $frequency, $nick, $source, $message) {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ $sql = "
|
|
|
+ SELECT id
|
|
|
+ FROM qwnu_qwnet WHERE
|
|
|
+ ident = '".mysql_real_escape_string($ident)."' AND
|
|
|
+ network = '".mysql_real_escape_string($network)."' AND
|
|
|
+ frequency = '".mysql_real_escape_string($frequency)."' AND
|
|
|
+ nick = '".mysql_real_escape_string($nick)."' AND
|
|
|
+ source = '".mysql_real_escape_string($source)."' AND
|
|
|
+ message = '".mysql_real_escape_string($message)."'
|
|
|
+ ORDER BY id DESC
|
|
|
+ LIMIT 0, 1";
|
|
|
+
|
|
|
+ $recordset = mysql_query($sql);
|
|
|
+ $row = mysql_fetch_assoc($recordset);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return (mysql_num_rows($recordset) > 0 ? $row["id"] : 0);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+function MainLoop(&$ssh) {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ $timeout = 300;
|
|
|
+ $time_last_activity = time();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ while (true) {
|
|
|
+ $data = "";
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if ($ssh->authed) {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ while ($buf = $ssh->ReadStream()) {
|
|
|
+ $data .= $buf;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if ($data) {
|
|
|
+
|
|
|
+ $time_last_activity = time();
|
|
|
+ $data_array = explode("\r\n", $data);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ foreach ($data_array as $data) {
|
|
|
+ if ($data != "") {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ $array = explode(" ", substr($data, 27));
|
|
|
+ $timestamp = time();
|
|
|
+ $action = $array[0];
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if ($action == "BC") {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ $ident = (array_key_exists(1, $array) ? $array[1] : "");
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ $i = 0;
|
|
|
+ $array = explode(",", substr($data, strpos($data, $ident) + strlen($ident) + 1));
|
|
|
+ $network = $array[0];
|
|
|
+ $frequency = (array_key_exists(1, $array) ? $array[1] : "");
|
|
|
+ $source = (array_key_exists(2, $array) ? $array[2] : "");
|
|
|
+ $message = "";
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ $array = explode("','", substr($data, strpos($data, $source) + strlen($source) + 2));
|
|
|
+
|
|
|
+ foreach($array as $item) {
|
|
|
+ if ($i == 0) {
|
|
|
+ $nick = $item;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $message .= $item;
|
|
|
+ }
|
|
|
+
|
|
|
+ $i++;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (strlen($message) > 0) {
|
|
|
+ $message = substr($message, 0, strrpos($message, "'"));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if ($network == "QWalt" && $frequency == "-qw-") {
|
|
|
+ SaveMessage($timestamp, $ident, $network, $frequency, 0, $nick, $source, $message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (substr($data, 27) != "PING alive?") {
|
|
|
+ echo $data."\n";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if ($timeout >= 0 && time() - $time_last_activity >= $timeout) {
|
|
|
+ echo "Connection timeout. Reconnecting...\n";
|
|
|
+
|
|
|
+ $ssh->Connect(QWNET_HOST, QWNET_PORT, QWNET_FP, QWNET_USR, "", QWNET_KEY_PATH_PUB, QWNET_KEY_PATH_PRIV);
|
|
|
+
|
|
|
+ echo $ssh->Shell("vt102", 1);
|
|
|
+
|
|
|
+ $time_last_activity = time();
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ sleep(3);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+set_time_limit(0);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+define("QWNET_HOST", "b4r.org");
|
|
|
+define("QWNET_PORT", "22");
|
|
|
+define("QWNET_FP", "90C300C5853F3679C87240DAAF5F32A1");
|
|
|
+define("QWNET_USR", "stomp");
|
|
|
+define("QWNET_KEY_PATH_PUB", "");
|
|
|
+define("QWNET_KEY_PATH_PRIV", "");
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+$ssh = new SSH;
|
|
|
+
|
|
|
+try {
|
|
|
+ echo "Connecting to QWnet central...\n";
|
|
|
+
|
|
|
+ $ssh->Connect(QWNET_HOST, QWNET_PORT, QWNET_FP, QWNET_USR, "", QWNET_KEY_PATH_PUB, QWNET_KEY_PATH_PRIV);
|
|
|
+ $ssh->cmd_exit = "PART";
|
|
|
+
|
|
|
+ echo $ssh->Shell("vt102", 1);
|
|
|
+
|
|
|
+ MainLoop($ssh);
|
|
|
+}
|
|
|
+catch (Exception $e) {
|
|
|
+ die("SSH error: ".$e->getMessage());
|
|
|
+}
|