Remove unused WebBroadcaster class
This commit is contained in:
parent
d8a7f6c3d4
commit
b72efe9dfb
1 changed files with 0 additions and 421 deletions
|
@ -1,421 +0,0 @@
|
|||
/*
|
||||
* Helma License Notice
|
||||
*
|
||||
* The contents of this file are subject to the Helma License
|
||||
* Version 2.0 (the "License"). You may not use this file except in
|
||||
* compliance with the License. A copy of the License is available at
|
||||
* http://adele.helma.org/download/helma/license.txt
|
||||
*
|
||||
* Copyright 1998-2003 Helma Software. All Rights Reserved.
|
||||
*
|
||||
* $RCSfile$
|
||||
* $Author$
|
||||
* $Revision$
|
||||
* $Date$
|
||||
*/
|
||||
|
||||
package helma.util;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* A utility hack to do "html web broadcasts".
|
||||
*/
|
||||
public class WebBroadcaster implements Runnable {
|
||||
static String lastResult = "";
|
||||
static String reloadJS = "<html>\r\n<head><SCRIPT language=JavaScript>\r\n<!--\r\nfunction reload (url) {\r\n window.location.href=url;\r\n}\r\n//-->\r\n</SCRIPT>\r\n";
|
||||
static String scrollJS = "<SCRIPT language=JavaScript>\r\n<!--\r\nfunction scroller () {\r\n window.scroll(1, 500000);\r\n window.setTimeout(\"scroller()\", 100);\r\n}\r\nscroller();\r\n//-->\r\n</SCRIPT>\r\n</head>\r\n<body>\r\n";
|
||||
private Vector connections;
|
||||
private ServerSocket serverSocket;
|
||||
private Thread listener;
|
||||
private boolean paranoid;
|
||||
private Vector accept;
|
||||
private Vector deny;
|
||||
long time;
|
||||
int last;
|
||||
|
||||
/**
|
||||
* Creates a Web server at the specified port number.
|
||||
*/
|
||||
public WebBroadcaster(int port) throws IOException {
|
||||
super();
|
||||
connections = new Vector();
|
||||
accept = new Vector();
|
||||
deny = new Vector();
|
||||
|
||||
// make a new server socket with extra large queue size
|
||||
this.serverSocket = new ServerSocket(port, 2000);
|
||||
listener = new Thread(this);
|
||||
listener.start();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
System.out.println("Usage: java helma.util.WebBroadcaster [port]");
|
||||
|
||||
int p = 8080;
|
||||
|
||||
if (args.length > 0) {
|
||||
try {
|
||||
p = Integer.parseInt(args[0]);
|
||||
} catch (NumberFormatException nfx) {
|
||||
System.out.println("Error parsing port number: " + args[0]);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
WebBroadcaster server = new WebBroadcaster(p);
|
||||
|
||||
// webserver.setParanoid (false);
|
||||
// webserver.acceptClient ("192.168.*.*");
|
||||
System.out.println("started web broadcast server on port " + p);
|
||||
} catch (IOException x) {
|
||||
System.out.println("Error creating web broadcast server: " + x);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @param message ...
|
||||
*/
|
||||
public void broadcast(String message) {
|
||||
long start = System.currentTimeMillis();
|
||||
int l = connections.size();
|
||||
|
||||
synchronized (this) {
|
||||
if (l != last) {
|
||||
System.out.println("broadcasting to " + l + " clients in " + time +
|
||||
" millis.");
|
||||
last = l;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = l - 1; i >= 0; i--) {
|
||||
try {
|
||||
Connection c = (Connection) connections.elementAt(i);
|
||||
|
||||
c.send(message);
|
||||
} catch (Exception ignore) {
|
||||
}
|
||||
}
|
||||
|
||||
time = System.currentTimeMillis() - start;
|
||||
}
|
||||
|
||||
/**
|
||||
* Switch client filtering on/off.
|
||||
* @see acceptClient(java.lang.String)
|
||||
* @see denyClient(java.lang.String)
|
||||
*/
|
||||
public void setParanoid(boolean p) {
|
||||
paranoid = p;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an IP address to the list of accepted clients. The parameter can contain '*' as wildcard
|
||||
* character, e.g. "192.168.*.*". You must call setParanoid(true) in order for this to have any
|
||||
* effect.
|
||||
*
|
||||
* @see denyClient(java.lang.String)
|
||||
* @see setParanoid(boolean)
|
||||
*/
|
||||
public void acceptClient(String address) throws IllegalArgumentException {
|
||||
try {
|
||||
AddressMatcher m = new AddressMatcher(address);
|
||||
|
||||
accept.addElement(m);
|
||||
} catch (Exception x) {
|
||||
throw new IllegalArgumentException("\"" + address +
|
||||
"\" does not represent a valid IP address");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an IP address to the list of denied clients. The parameter can contain '*' as wildcard
|
||||
* character, e.g. "192.168.*.*". You must call setParanoid(true) in order for this to have any
|
||||
* effect.
|
||||
*
|
||||
* @see acceptClient(java.lang.String)
|
||||
* @see setParanoid(boolean)
|
||||
*/
|
||||
public void denyClient(String address) throws IllegalArgumentException {
|
||||
try {
|
||||
AddressMatcher m = new AddressMatcher(address);
|
||||
|
||||
deny.addElement(m);
|
||||
} catch (Exception x) {
|
||||
throw new IllegalArgumentException("\"" + address +
|
||||
"\" does not represent a valid IP address");
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkSocket(Socket s) {
|
||||
int l = deny.size();
|
||||
byte[] address = s.getInetAddress().getAddress();
|
||||
|
||||
for (int i = 0; i < l; i++) {
|
||||
AddressMatcher match = (AddressMatcher) deny.elementAt(i);
|
||||
|
||||
if (match.matches(address)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
l = accept.size();
|
||||
|
||||
for (int i = 0; i < l; i++) {
|
||||
AddressMatcher match = (AddressMatcher) accept.elementAt(i);
|
||||
|
||||
if (match.matches(address)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Listens for client requests until stopped.
|
||||
*/
|
||||
public void run() {
|
||||
Thread current = Thread.currentThread();
|
||||
|
||||
try {
|
||||
while (listener == current) {
|
||||
Socket socket = serverSocket.accept();
|
||||
|
||||
try {
|
||||
// if (!paranoid || checkSocket (socket))
|
||||
new Connection(socket);
|
||||
|
||||
// else
|
||||
// socket.close ();
|
||||
} catch (Exception x) {
|
||||
System.out.println("Error in listener: " + x);
|
||||
}
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
System.err.println("Error accepting Web connections (" + exception + ").");
|
||||
} finally {
|
||||
try {
|
||||
serverSocket.close();
|
||||
serverSocket = null;
|
||||
} catch (IOException ignore) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Connection implements Runnable {
|
||||
private Socket socket;
|
||||
private InputStream input;
|
||||
private BufferedWriter output;
|
||||
private Thread responder;
|
||||
|
||||
public Connection(Socket socket) throws IOException {
|
||||
super();
|
||||
this.socket = socket;
|
||||
socket.setSoTimeout(30000);
|
||||
input = new BufferedInputStream(socket.getInputStream());
|
||||
output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
|
||||
responder = new Thread(this);
|
||||
responder.start();
|
||||
}
|
||||
|
||||
/* public void run () {
|
||||
Thread current = Thread.currentThread ();
|
||||
if (current == cleaner) {
|
||||
cleanup ();
|
||||
} else if (current == responder) {
|
||||
respond ();
|
||||
}
|
||||
} */
|
||||
public void run() {
|
||||
boolean newConnection = false;
|
||||
|
||||
try {
|
||||
DataInputStream reader = new DataInputStream(input);
|
||||
boolean keepalive = false;
|
||||
int cycle = 0;
|
||||
|
||||
// implement keep-alive connections
|
||||
do {
|
||||
// if (cycle > 0) System.out.println ("Reusing connection: "+cycle);
|
||||
String line = reader.readLine();
|
||||
|
||||
if (line == null) {
|
||||
throw new IOException("connection reset");
|
||||
}
|
||||
|
||||
int contentLength = 0;
|
||||
StringTokenizer tokens = new StringTokenizer(line);
|
||||
String method = tokens.nextToken();
|
||||
String uri = tokens.nextToken();
|
||||
String httpversion = tokens.nextToken();
|
||||
|
||||
keepalive = "HTTP/1.1".equals(httpversion);
|
||||
|
||||
do {
|
||||
// System.out.println (line);
|
||||
line = reader.readLine();
|
||||
|
||||
if (line != null) {
|
||||
line = line.toLowerCase();
|
||||
|
||||
if (line.startsWith("content-length:")) {
|
||||
contentLength = Integer.parseInt(line.substring(15).trim());
|
||||
}
|
||||
|
||||
if (line.startsWith("connection:")) {
|
||||
keepalive = line.indexOf("keep-alive") > -1;
|
||||
}
|
||||
}
|
||||
} while ((line != null) && !line.equals(""));
|
||||
|
||||
// System.out.println ("");
|
||||
if ("GET".equals(method)) {
|
||||
output.write(httpversion + " 200 OK\r\n");
|
||||
output.write("Server: helma.WebBroadcast\r\n");
|
||||
output.write("Content-Type: text/html\r\n");
|
||||
newConnection = uri.startsWith("/NEW");
|
||||
|
||||
if (!newConnection) {
|
||||
output.write("Content-Length: 5\r\n");
|
||||
|
||||
if (keepalive) {
|
||||
output.write("Connection: keep-alive\r\n");
|
||||
}
|
||||
|
||||
output.write("\r\n");
|
||||
output.write("done.");
|
||||
output.flush();
|
||||
cycle += 1;
|
||||
|
||||
if (uri.startsWith("/MSG")) {
|
||||
broadcast(uri + "<br>\r\n");
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
output.write("Connection: close\r\n");
|
||||
output.write("\r\n");
|
||||
output.write(reloadJS);
|
||||
output.write(scrollJS);
|
||||
output.flush();
|
||||
|
||||
connections.addElement(this);
|
||||
} else {
|
||||
output.write("HTTP/1.0 400 Bad Request\r\n");
|
||||
output.write("Server: helma.WebBroadcast\r\n\r\n");
|
||||
output.write("Bad Request.");
|
||||
|
||||
// output.write (lastResult);
|
||||
output.flush();
|
||||
keepalive = false;
|
||||
}
|
||||
} while (keepalive && !newConnection);
|
||||
} catch (Exception x) {
|
||||
System.out.print(".");
|
||||
} finally {
|
||||
if (newConnection) { // leave connection open
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
output.close();
|
||||
} catch (IOException ignore) {
|
||||
}
|
||||
|
||||
try {
|
||||
input.close();
|
||||
} catch (IOException ignore) {
|
||||
}
|
||||
|
||||
try {
|
||||
socket.close();
|
||||
} catch (IOException ignore) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void cleanup() {
|
||||
}
|
||||
|
||||
public synchronized void send(String message) {
|
||||
try {
|
||||
output.write(message);
|
||||
output.flush();
|
||||
} catch (Exception exception) {
|
||||
try {
|
||||
connections.removeElement(this);
|
||||
} catch (Exception ignore) {
|
||||
}
|
||||
|
||||
try {
|
||||
output.close();
|
||||
} catch (IOException ignore) {
|
||||
}
|
||||
|
||||
try {
|
||||
input.close();
|
||||
} catch (IOException ignore) {
|
||||
}
|
||||
|
||||
try {
|
||||
socket.close();
|
||||
} catch (IOException ignore) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return socket.getInetAddress().getHostName();
|
||||
}
|
||||
}
|
||||
|
||||
class AddressMatcher {
|
||||
int[] pattern;
|
||||
|
||||
public AddressMatcher(String address) throws Exception {
|
||||
pattern = new int[4];
|
||||
|
||||
StringTokenizer st = new StringTokenizer(address, ".");
|
||||
|
||||
if (st.countTokens() != 4) {
|
||||
throw new Exception("\"" + address +
|
||||
"\" does not represent a valid IP address");
|
||||
}
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
String next = st.nextToken();
|
||||
|
||||
if ("*".equals(next)) {
|
||||
pattern[i] = 256;
|
||||
} else {
|
||||
pattern[i] = (byte) Integer.parseInt(next);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean matches(byte[] address) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (pattern[i] > 255) { // wildcard
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (pattern[i] != address[i]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue