mirror of https://github.com/GOSTSec/sgminer
kanoi
12 years ago
4 changed files with 341 additions and 2 deletions
Binary file not shown.
@ -0,0 +1,333 @@ |
|||||||
|
/* |
||||||
|
* |
||||||
|
* Copyright (C) Andrew Smith 2013 |
||||||
|
* |
||||||
|
* Usage: java MCast [-v] code toaddr port replyport wait |
||||||
|
* |
||||||
|
* If any are missing or blank they use the defaults: |
||||||
|
* |
||||||
|
* -v means report how long the last reply took |
||||||
|
* |
||||||
|
* code = 'FTW' |
||||||
|
* toaddr = '224.0.0.75' |
||||||
|
* port = '4028' |
||||||
|
* replyport = '4027' |
||||||
|
* wait = '1000' |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
import java.net.*; |
||||||
|
import java.io.*; |
||||||
|
import java.util.*; |
||||||
|
|
||||||
|
class MCast implements Runnable |
||||||
|
{ |
||||||
|
static private final String MCAST_CODE = "FTW"; |
||||||
|
static private final String MCAST_ADDR = "224.0.0.75"; |
||||||
|
static private final int MCAST_PORT = 4028; |
||||||
|
static private final int MCAST_REPORT = 4027; |
||||||
|
static private final int MCAST_WAIT4 = 1000; |
||||||
|
|
||||||
|
static private String code = MCAST_CODE; |
||||||
|
static private String addr = MCAST_ADDR; |
||||||
|
static private int port = MCAST_PORT; |
||||||
|
static private int report = MCAST_REPORT; |
||||||
|
static private int wait4 = MCAST_WAIT4; |
||||||
|
|
||||||
|
private InetAddress mcast_addr = null; |
||||||
|
|
||||||
|
static private final Integer lock = new Integer(666); |
||||||
|
|
||||||
|
static private boolean ready = false; |
||||||
|
|
||||||
|
static private Thread listen = null; |
||||||
|
|
||||||
|
static public boolean verbose = false; |
||||||
|
|
||||||
|
static private Date start = null; |
||||||
|
static private Date last = null; |
||||||
|
static boolean got_last = false; |
||||||
|
|
||||||
|
static public void usAge() |
||||||
|
{ |
||||||
|
System.err.println("usAge: java MCast [-v] [code [toaddr [port [replyport [wait]]]]]"); |
||||||
|
System.err.println(" -v=report elapsed ms to last reply"); |
||||||
|
System.err.println(" Anything below missing or blank will use it's default"); |
||||||
|
System.err.println(" code=X in cgminer-X-Port default="+MCAST_CODE); |
||||||
|
System.err.println(" toaddr=multicast address default="+MCAST_ADDR); |
||||||
|
System.err.println(" port=multicast port default="+MCAST_PORT); |
||||||
|
System.err.println(" replyport=local post to listen for replies default="+MCAST_REPORT); |
||||||
|
System.err.println(" wait=how long to wait for replies default="+MCAST_WAIT4+"ms"); |
||||||
|
System.exit(1); |
||||||
|
} |
||||||
|
|
||||||
|
private int port(String _port, String name) |
||||||
|
{ |
||||||
|
int tmp = 0; |
||||||
|
|
||||||
|
try |
||||||
|
{ |
||||||
|
tmp = Integer.parseInt(_port); |
||||||
|
} |
||||||
|
catch (NumberFormatException nfe) |
||||||
|
{ |
||||||
|
System.err.println("Invalid " + name + " - must be a number between 1 and 65535"); |
||||||
|
usAge(); |
||||||
|
System.exit(1); |
||||||
|
} |
||||||
|
|
||||||
|
if (tmp < 1 || tmp > 65535) |
||||||
|
{ |
||||||
|
System.err.println("Invalid " + name + " - must be a number between 1 and 65535"); |
||||||
|
usAge(); |
||||||
|
System.exit(1); |
||||||
|
} |
||||||
|
|
||||||
|
return tmp; |
||||||
|
} |
||||||
|
|
||||||
|
public void set_code(String _code) |
||||||
|
{ |
||||||
|
if (_code.length() > 0) |
||||||
|
code = _code; |
||||||
|
} |
||||||
|
|
||||||
|
public void set_addr(String _addr) |
||||||
|
{ |
||||||
|
if (_addr.length() > 0) |
||||||
|
{ |
||||||
|
addr = _addr; |
||||||
|
|
||||||
|
try |
||||||
|
{ |
||||||
|
mcast_addr = InetAddress.getByName(addr); |
||||||
|
} |
||||||
|
catch (Exception e) |
||||||
|
{ |
||||||
|
System.err.println("ERR: Invalid multicast address"); |
||||||
|
usAge(); |
||||||
|
System.exit(1); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void set_port(String _port) |
||||||
|
{ |
||||||
|
if (_port.length() > 0) |
||||||
|
port = port(_port, "port"); |
||||||
|
} |
||||||
|
|
||||||
|
public void set_report(String _report) |
||||||
|
{ |
||||||
|
if (_report.length() > 0) |
||||||
|
report = port(_report, "reply port"); |
||||||
|
} |
||||||
|
|
||||||
|
public void set_wait(String _wait4) |
||||||
|
{ |
||||||
|
if (_wait4.length() > 0) |
||||||
|
{ |
||||||
|
try |
||||||
|
{ |
||||||
|
wait4 = Integer.parseInt(_wait4); |
||||||
|
} |
||||||
|
catch (NumberFormatException nfe) |
||||||
|
{ |
||||||
|
System.err.println("Invalid wait - must be a number between 0ms and 60000ms"); |
||||||
|
usAge(); |
||||||
|
System.exit(1); |
||||||
|
} |
||||||
|
|
||||||
|
if (wait4 < 0 || wait4 > 60000) |
||||||
|
{ |
||||||
|
System.err.println("Invalid wait - must be a number between 0ms and 60000ms"); |
||||||
|
usAge(); |
||||||
|
System.exit(1); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void run() // listen
|
||||||
|
{ |
||||||
|
byte[] message = new byte[1024]; |
||||||
|
DatagramSocket socket = null; |
||||||
|
DatagramPacket packet = null; |
||||||
|
|
||||||
|
try |
||||||
|
{ |
||||||
|
socket = new DatagramSocket(report); |
||||||
|
packet = new DatagramPacket(message, message.length); |
||||||
|
|
||||||
|
synchronized (lock) |
||||||
|
{ |
||||||
|
ready = true; |
||||||
|
} |
||||||
|
|
||||||
|
while (true) |
||||||
|
{ |
||||||
|
socket.receive(packet); |
||||||
|
|
||||||
|
synchronized (lock) |
||||||
|
{ |
||||||
|
last = new Date(); |
||||||
|
} |
||||||
|
|
||||||
|
int off = packet.getOffset(); |
||||||
|
int len = packet.getLength(); |
||||||
|
|
||||||
|
System.out.println("Got: '" + new String(message, off, len) + "' from" + packet.getSocketAddress()); |
||||||
|
} |
||||||
|
} |
||||||
|
catch (Exception e) |
||||||
|
{ |
||||||
|
socket.close(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void sendMCast() |
||||||
|
{ |
||||||
|
try |
||||||
|
{ |
||||||
|
String message = new String("cgminer-" + code + "-" + report); |
||||||
|
MulticastSocket socket = null; |
||||||
|
DatagramPacket packet = null; |
||||||
|
|
||||||
|
socket = new MulticastSocket(); |
||||||
|
packet = new DatagramPacket(message.getBytes(), message.length(), mcast_addr, port); |
||||||
|
|
||||||
|
System.out.println("About to send " + message + " to " + mcast_addr + ":" + port); |
||||||
|
|
||||||
|
start = new Date(); |
||||||
|
|
||||||
|
socket.send(packet); |
||||||
|
|
||||||
|
socket.close(); |
||||||
|
} |
||||||
|
catch (Exception e) |
||||||
|
{ |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void init() |
||||||
|
{ |
||||||
|
MCast lis = new MCast(); |
||||||
|
listen = new Thread(lis); |
||||||
|
listen.start(); |
||||||
|
|
||||||
|
while (true) |
||||||
|
{ |
||||||
|
synchronized (lock) |
||||||
|
{ |
||||||
|
if (ready) |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
try |
||||||
|
{ |
||||||
|
Thread.sleep(100); |
||||||
|
} |
||||||
|
catch (Exception sl1) |
||||||
|
{ |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
try |
||||||
|
{ |
||||||
|
Thread.sleep(500); |
||||||
|
} |
||||||
|
catch (Exception sl2) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
sendMCast(); |
||||||
|
|
||||||
|
try |
||||||
|
{ |
||||||
|
Thread.sleep(wait4); |
||||||
|
} |
||||||
|
catch (Exception sl3) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
listen.interrupt(); |
||||||
|
|
||||||
|
if (verbose) |
||||||
|
{ |
||||||
|
try |
||||||
|
{ |
||||||
|
Thread.sleep(100); |
||||||
|
} |
||||||
|
catch (Exception sl4) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
synchronized (lock) |
||||||
|
{ |
||||||
|
if (last == null) |
||||||
|
System.out.println("No replies received"); |
||||||
|
else |
||||||
|
{ |
||||||
|
long diff = last.getTime() - start.getTime(); |
||||||
|
System.out.println("Last reply took " + diff + "ms"); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
System.exit(0); |
||||||
|
} |
||||||
|
|
||||||
|
public MCast() |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public static void main(String[] params) throws Exception |
||||||
|
{ |
||||||
|
int p = 0; |
||||||
|
|
||||||
|
MCast mcast = new MCast(); |
||||||
|
|
||||||
|
mcast.set_addr(MCAST_ADDR); |
||||||
|
|
||||||
|
if (params.length > p) |
||||||
|
{ |
||||||
|
if (params[p].equals("-?") |
||||||
|
|| params[p].equalsIgnoreCase("-h") |
||||||
|
|| params[p].equalsIgnoreCase("-help") |
||||||
|
|| params[p].equalsIgnoreCase("--help")) |
||||||
|
MCast.usAge(); |
||||||
|
else |
||||||
|
{ |
||||||
|
if (params[p].equals("-v")) |
||||||
|
{ |
||||||
|
mcast.verbose = true; |
||||||
|
p++; |
||||||
|
} |
||||||
|
|
||||||
|
if (params.length > p) |
||||||
|
{ |
||||||
|
mcast.set_code(params[p++]); |
||||||
|
|
||||||
|
if (params.length > p) |
||||||
|
{ |
||||||
|
mcast.set_addr(params[p++]); |
||||||
|
|
||||||
|
if (params.length > p) |
||||||
|
{ |
||||||
|
mcast.set_port(params[p++]); |
||||||
|
|
||||||
|
if (params.length > p) |
||||||
|
{ |
||||||
|
mcast.set_report(params[p++]); |
||||||
|
if (params.length > p) |
||||||
|
mcast.set_wait(params[p]); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
mcast.init(); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue