mirror of https://github.com/zlatinb/muwire
416 if piece not downloaded
parent
d1c8328080
commit
ab5fea9216
|
@ -74,4 +74,8 @@ class Pieces {
|
||||||
synchronized int donePieces() {
|
synchronized int donePieces() {
|
||||||
done.cardinality()
|
done.cardinality()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
synchronized boolean isDownloaded(int piece) {
|
||||||
|
done.get(piece)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,19 +19,31 @@ class ContentUploader extends Uploader {
|
||||||
private final File file
|
private final File file
|
||||||
private final ContentRequest request
|
private final ContentRequest request
|
||||||
private final Mesh mesh
|
private final Mesh mesh
|
||||||
|
private final int pieceSize
|
||||||
|
|
||||||
ContentUploader(File file, ContentRequest request, Endpoint endpoint, Mesh mesh) {
|
ContentUploader(File file, ContentRequest request, Endpoint endpoint, Mesh mesh, int pieceSize) {
|
||||||
super(endpoint)
|
super(endpoint)
|
||||||
this.file = file
|
this.file = file
|
||||||
this.request = request
|
this.request = request
|
||||||
this.mesh = mesh
|
this.mesh = mesh
|
||||||
|
this.pieceSize = pieceSize
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void respond() {
|
void respond() {
|
||||||
OutputStream os = endpoint.getOutputStream()
|
OutputStream os = endpoint.getOutputStream()
|
||||||
Range range = request.getRange()
|
Range range = request.getRange()
|
||||||
if (range.start >= file.length() || range.end >= file.length()) {
|
boolean satisfiable = true
|
||||||
|
final long length = file.length()
|
||||||
|
if (range.start >= length || range.end >= length)
|
||||||
|
satisfiable = false
|
||||||
|
if (satisfiable) {
|
||||||
|
int startPiece = length / range.start
|
||||||
|
int endPiece = length / range.end
|
||||||
|
for (int i = startPiece; i < endPiece; i++)
|
||||||
|
satisfiable &= mesh.pieces.isDownloaded(i)
|
||||||
|
}
|
||||||
|
if (!satisfiable) {
|
||||||
os.write("416 Range Not Satisfiable\r\n".getBytes(StandardCharsets.US_ASCII))
|
os.write("416 Range Not Satisfiable\r\n".getBytes(StandardCharsets.US_ASCII))
|
||||||
writeMesh(request.downloader)
|
writeMesh(request.downloader)
|
||||||
os.write("\r\n".getBytes(StandardCharsets.US_ASCII))
|
os.write("\r\n".getBytes(StandardCharsets.US_ASCII))
|
||||||
|
|
Loading…
Reference in New Issue