|
|
|
@ -2,6 +2,8 @@
@@ -2,6 +2,8 @@
|
|
|
|
|
session_start(); |
|
|
|
|
# |
|
|
|
|
global $title, $miner, $port, $readonly, $notify, $rigs; |
|
|
|
|
global $mcast, $mcastaddr, $mcastport, $mcastcode; |
|
|
|
|
global $mcastlistport, $mcasttimeout; |
|
|
|
|
global $rigipsecurity, $rigtotals, $forcerigtotals; |
|
|
|
|
global $socksndtimeoutsec, $sockrcvtimeoutsec; |
|
|
|
|
global $checklastshare, $poolinputs, $hidefields; |
|
|
|
@ -43,6 +45,25 @@ $poolinputs = false;
@@ -43,6 +45,25 @@ $poolinputs = false;
|
|
|
|
|
# format: 'IP:Port' or 'Host:Port' or 'Host:Port:Name' |
|
|
|
|
$rigs = array('127.0.0.1:4028'); |
|
|
|
|
# |
|
|
|
|
# Set $mcast to true to look for your rigs and ignore $rigs |
|
|
|
|
$mcast = false; |
|
|
|
|
# |
|
|
|
|
# API Multicast address all cgminers are listening on |
|
|
|
|
$mcastaddr = '224.0.0.75'; |
|
|
|
|
# |
|
|
|
|
# API Multicast UDP port all cgminers are listening on |
|
|
|
|
$mcastport = 4028; |
|
|
|
|
# |
|
|
|
|
# The code all cgminers expect in the Multicast message sent |
|
|
|
|
$mcastcode = 'FTW'; |
|
|
|
|
# |
|
|
|
|
# UDP port cgminers are to reply on (by request) |
|
|
|
|
$mcastlistport = 4027; |
|
|
|
|
# |
|
|
|
|
# Set $mcasttimeout to the number of seconds (floating point) |
|
|
|
|
# to wait for replies to the Multicast message |
|
|
|
|
$mcasttimeout = 1.5; |
|
|
|
|
# |
|
|
|
|
# Set $rigipsecurity to false to show the IP/Port of the rig |
|
|
|
|
# in the socket error messages and also show the full socket message |
|
|
|
|
$rigipsecurity = true; |
|
|
|
@ -324,6 +345,88 @@ global $haderror, $error;
@@ -324,6 +345,88 @@ global $haderror, $error;
|
|
|
|
|
$haderror = false; |
|
|
|
|
$error = null; |
|
|
|
|
# |
|
|
|
|
function getrigs() |
|
|
|
|
{ |
|
|
|
|
global $rigs, $mcastaddr, $mcastport, $mcastcode, $mcasttimeout, $error; |
|
|
|
|
|
|
|
|
|
$listname = "0.0.0.0"; |
|
|
|
|
|
|
|
|
|
$rigs = array(); |
|
|
|
|
|
|
|
|
|
$rep_soc = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); |
|
|
|
|
if ($rep_soc === false || $rep_soc == null) |
|
|
|
|
{ |
|
|
|
|
$msg = "ERR: mcast listen socket create(UDP) failed"; |
|
|
|
|
if ($rigipsecurity === false) |
|
|
|
|
{ |
|
|
|
|
$error = socket_strerror(socket_last_error()); |
|
|
|
|
$error = "$msg '$error'\n"; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
$error = "$msg\n"; |
|
|
|
|
|
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$res = socket_bind($rep_soc, $listname, $mcastlistport); |
|
|
|
|
if ($res === false) |
|
|
|
|
{ |
|
|
|
|
$msg1 = "ERR: mcast listen socket bind("; |
|
|
|
|
$msg2 = ") failed"; |
|
|
|
|
if ($rigipsecurity === false) |
|
|
|
|
{ |
|
|
|
|
$error = socket_strerror(socket_last_error()); |
|
|
|
|
$error = "$msg1$listname,$mcastlistport$msg2 '$error'\n"; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
$error = "$msg1$msg2\n"; |
|
|
|
|
|
|
|
|
|
socket_close($rep_soc); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$mcast_soc = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); |
|
|
|
|
if ($mcast_soc === false || $mcast_soc == null) |
|
|
|
|
{ |
|
|
|
|
$msg = "ERR: mcast send socket create(UDP) failed"; |
|
|
|
|
if ($rigipsecurity === false) |
|
|
|
|
{ |
|
|
|
|
$error = socket_strerror(socket_last_error()); |
|
|
|
|
$error = "$msg '$error'\n"; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
$error = "$msg\n"; |
|
|
|
|
|
|
|
|
|
socket_close($rep_soc); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$buf = "cgminer-$mcastcode-$mcastlistport"; |
|
|
|
|
socket_sendto($mcast_soc, $buf, strlen($buf), 0, $mcastaddr, $mcastport); |
|
|
|
|
socket_close($mcast_soc); |
|
|
|
|
|
|
|
|
|
$stt = microtime(true); |
|
|
|
|
while (true) |
|
|
|
|
{ |
|
|
|
|
$got = @socket_recvfrom($rep_soc, $buf, 32, MSG_DONTWAIT, $ip, $p); |
|
|
|
|
if ($got !== false && $got > 0) |
|
|
|
|
{ |
|
|
|
|
$ans = explode('-', $buf); |
|
|
|
|
if (count($ans) == 3 && $ans[0] == 'cgm' && $ans[1] == 'FTW') |
|
|
|
|
{ |
|
|
|
|
$rp = intval($ans[2]); |
|
|
|
|
$rigs[] = "$ip:$rp"; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if ((microtime(true) - $stt) >= $mcasttimeout) |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
usleep(100000); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
socket_close($rep_soc); |
|
|
|
|
} |
|
|
|
|
# |
|
|
|
|
function getsock($rig, $addr, $port) |
|
|
|
|
{ |
|
|
|
|
global $rigipsecurity; |
|
|
|
@ -2768,6 +2871,8 @@ function display()
@@ -2768,6 +2871,8 @@ function display()
|
|
|
|
|
pagebuttons(null, null); |
|
|
|
|
} |
|
|
|
|
# |
|
|
|
|
if (isset($mcast) && $mcast === true) |
|
|
|
|
getrigs(); |
|
|
|
|
display(); |
|
|
|
|
# |
|
|
|
|
?> |
|
|
|
|