Skip to content

Commit 5770800

Browse files
committed
Try not to crash with too big a files
1 parent c998d7d commit 5770800

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

src/main/java/ar/edu/itba/pdc/duta/net/Server.java

+31-4
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,18 @@ public class Server {
3838
private InetSocketAddress connectTo;
3939

4040
private int port;
41+
42+
private int sizeLimit;
4143

42-
private Server(int port, int adminPort, InetSocketAddress connectTo) {
44+
private Server(int port, int adminPort, InetSocketAddress connectTo, int sizeLimit) {
4345
super();
4446
resolver = new ConnectionPool();
4547
filters = new Filters();
4648

4749
Server.adminPort = adminPort;
4850
this.port = port;
4951
this.connectTo = connectTo;
52+
this.sizeLimit = sizeLimit;
5053
}
5154

5255
public void start() {
@@ -135,6 +138,7 @@ public static void main(String[] args) throws IOException {
135138
InetSocketAddress connectTo = null;
136139
int port = 9999;
137140
int adminPort = 1337;
141+
int sizeLimit = 100 * 1024 * 1024;
138142

139143
for (int i = 0; i < args.length; i++) {
140144
String arg = args[i];
@@ -181,6 +185,23 @@ public static void main(String[] args) throws IOException {
181185
return;
182186
}
183187

188+
} else if (arg.startsWith("--size-limit=")) {
189+
190+
String portString = arg.substring(arg.indexOf('=') + 1);
191+
192+
try {
193+
int size = Integer.parseInt(portString);
194+
if (size >= 0) {
195+
sizeLimit = size;
196+
}
197+
continue;
198+
} catch (NumberFormatException e) {
199+
}
200+
201+
System.out.println("'" + sizeLimit + "' is not a size number (must be in MBs)");
202+
usage();
203+
return;
204+
184205
}
185206

186207
}
@@ -190,8 +211,9 @@ public static void main(String[] args) throws IOException {
190211
if (connectTo != null) {
191212
System.out.println("Chaining to: " + connectTo);
192213
}
214+
System.out.println("Size limit: " + sizeLimit);
193215

194-
Server.run(port, adminPort, connectTo);
216+
Server.run(port, adminPort, connectTo, sizeLimit);
195217
System.exit(0);
196218
}
197219

@@ -200,10 +222,11 @@ private static void usage() {
200222
System.out.println("\t--chain=ip:port Chain to another proxy");
201223
System.out.println("\t--port=port Listen for requests on `port`");
202224
System.out.println("\t--admin-port=port Listen for admin requests on `port`");
225+
System.out.println("\t--size-limit=size Limit the size of messages for transformations");
203226
}
204227

205-
private static void run(int port, int adminPort, InetSocketAddress connectTo) {
206-
instance = new Server(port, adminPort, connectTo);
228+
private static void run(int port, int adminPort, InetSocketAddress connectTo, int sizeLimit) {
229+
instance = new Server(port, adminPort, connectTo, sizeLimit);
207230
instance.start();
208231
}
209232

@@ -232,5 +255,9 @@ public static Filters getFilters() {
232255
public static InetSocketAddress getChainAddress() {
233256
return instance.connectTo;
234257
}
258+
259+
public static int getSizeLimit() {
260+
return instance.sizeLimit;
261+
}
235262

236263
}

src/main/java/ar/edu/itba/pdc/duta/proxy/filter/http/ImageRotationFilter.java

+6
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616
import org.apache.log4j.Logger;
1717

1818
import ar.edu.itba.pdc.duta.admin.Stats;
19+
import ar.edu.itba.pdc.duta.http.MessageFactory;
1920
import ar.edu.itba.pdc.duta.http.model.MediaType;
2021
import ar.edu.itba.pdc.duta.http.model.Message;
2122
import ar.edu.itba.pdc.duta.http.model.MessageHeader;
23+
import ar.edu.itba.pdc.duta.net.Server;
2224
import ar.edu.itba.pdc.duta.net.buffer.DataBuffer;
2325
import ar.edu.itba.pdc.duta.proxy.filter.Filter;
2426
import ar.edu.itba.pdc.duta.proxy.filter.FilterPart;
@@ -66,6 +68,10 @@ public Interest checkInterest(MessageHeader header) {
6668

6769
@Override
6870
public Message filter(Operation op, Message msg) {
71+
72+
if (Server.getSizeLimit() <= msg.getBody().getWriteIndex()) {
73+
return MessageFactory.build(501, "Not Implemented", null);
74+
}
6975

7076
try {
7177

src/main/java/ar/edu/itba/pdc/duta/proxy/filter/http/L33tFilter.java

+5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import ar.edu.itba.pdc.duta.http.model.MediaType;
1111
import ar.edu.itba.pdc.duta.http.model.Message;
1212
import ar.edu.itba.pdc.duta.http.model.MessageHeader;
13+
import ar.edu.itba.pdc.duta.net.Server;
1314
import ar.edu.itba.pdc.duta.net.buffer.DataBuffer;
1415
import ar.edu.itba.pdc.duta.proxy.filter.Filter;
1516
import ar.edu.itba.pdc.duta.proxy.filter.FilterPart;
@@ -65,6 +66,10 @@ public Interest checkInterest(MessageHeader header) {
6566

6667
@Override
6768
public Message filter(Operation op, Message msg) {
69+
70+
if (Server.getSizeLimit() <= msg.getBody().getWriteIndex()) {
71+
return MessageFactory.build(501, "Not Implemented", null);
72+
}
6873

6974
byte[] bytes;
7075

0 commit comments

Comments
 (0)