So here's a patch that should solve this issue - how might I go about submitting it for inclusion?.
Simply feed in a comma-separated list of addresses like "192.168.1.1,1.2.3.4" that you want to be able to access the machine. Thought about adding MAC address filtering as well, but Java doesn't really seem to offer a way to access the client MAC address.
Tested on my PS3 with IP filters off as well as with IP filter on and both including and excluding the machine.
- Code: Select all
diff -Naur ps3mediaserver.clean/net/pms/network/HTTPServer.java ps3mediaserver.build/net/pms/network/HTTPServer.java
--- ps3mediaserver.clean/net/pms/network/HTTPServer.java 2011-09-24 04:48:22.000000000 -0600
+++ ps3mediaserver.build/net/pms/network/HTTPServer.java 2011-09-24 07:23:29.000000000 -0600
@@ -28,7 +28,7 @@
import java.net.SocketAddress;
import java.nio.channels.ClosedByInterruptException;
import java.nio.channels.ServerSocketChannel;
-import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Enumeration;
import java.util.concurrent.Executors;
@@ -47,7 +47,6 @@
public class HTTPServer implements Runnable {
private static final Logger logger = LoggerFactory.getLogger(HTTPServer.class);
- private ArrayList<String> ips;
private int port;
private String hostName;
private ServerSocketChannel serverSocketChannel;
@@ -67,7 +66,6 @@
public HTTPServer(int port) {
this.port = port;
- ips = new ArrayList<String>();
}
public boolean start() throws IOException {
@@ -197,21 +195,19 @@
Socket socket = serverSocket.accept();
String ip = socket.getInetAddress().getHostAddress();
// basic ipfilter solntcev@gmail.com
- boolean ignore = false;
- if (!ips.contains(ip)) {
- if (PMS.getConfiguration().getIpFilter().length() > 0 && !PMS.getConfiguration().getIpFilter().equals(ip)) {
- ignore = true;
- socket.close();
- logger.info("Ignoring request from: " + ip);
- } else {
- ips.add(ip);
- logger.info("Receiving a request from: " + ip);
- }
- }
- if (!ignore) {
+ // revised by Dave114
+ String[] permittedIPs = PMS.getConfiguration().getIpFilter().split(",");
+
+ if (PMS.getConfiguration().getIpFilter().length() < 1
+ || Arrays.asList(permittedIPs).contains(ip)) {
+ // May now see multiple notifications like this
+ logger.info("Receiving a request from: " + ip);
RequestHandler request = new RequestHandler(socket);
Thread thread = new Thread(request);
thread.start();
+ } else {
+ socket.close();
+ logger.info("Ignoring request from: " + ip);
}
} catch (ClosedByInterruptException e) {
stop = true;
diff -Naur ps3mediaserver.clean/net/pms/network/UPNPHelper.java ps3mediaserver.build/net/pms/network/UPNPHelper.java
--- ps3mediaserver.clean/net/pms/network/UPNPHelper.java 2011-09-24 04:48:22.000000000 -0600
+++ ps3mediaserver.build/net/pms/network/UPNPHelper.java 2011-09-24 07:23:29.000000000 -0600
@@ -26,6 +26,7 @@
import java.net.MulticastSocket;
import java.net.NetworkInterface;
import java.text.SimpleDateFormat;
+import java.util.Arrays;
import java.util.Date;
import java.util.Enumeration;
import java.util.Locale;
@@ -229,7 +230,9 @@
String remoteAddr = packet_r.getAddress().getHostAddress();
int remotePort = packet_r.getPort();
- if (!(PMS.getConfiguration().getIpFilter().length() > 0 && !PMS.getConfiguration().getIpFilter().equals(remoteAddr))) {
+ String[] allowedIPs = PMS.getConfiguration().getIpFilter().split(",");
+ if (PMS.getConfiguration().getIpFilter().length() < 1
+ || Arrays.asList(allowedIPs).contains(remoteAddr)) {
logger.trace("Receiving a M-SEARCH from [" + remoteAddr + ":" + remotePort + "]");
//logger.trace("Data: " + s);
Note that I'm currently seeing error messages relating to not being able to find "osx/convert", but I'm seeing this on both the official version of 1.40.0 and my builds.