Add algorithm but did not implement it
This commit is contained in:
parent
0470a67f0f
commit
6e2e5451df
@ -57,7 +57,7 @@ Payload contains
|
||||
|
||||
```
|
||||
[64-127: OFFSET OF FILE CONTENT IN BYTES]
|
||||
[128-159: TOTAL FILESIZE]
|
||||
[128-191: TOTAL FILESIZE]
|
||||
[<FILENAME>\n]
|
||||
[FILE CONTENT]
|
||||
```
|
||||
|
@ -51,14 +51,14 @@ public class FileList extends Payload {
|
||||
* @return datagram with padding
|
||||
*/
|
||||
protected byte[] toDatagram() {
|
||||
byte[] datagram; // java initialize all to zero
|
||||
//TODO compute size
|
||||
int size = ;
|
||||
byte[] datagram = new byte[size]; // java initialize all to zero
|
||||
// size is keep blank (ProtocolP2PDatagram will handle it)
|
||||
// set request/response code
|
||||
datagram[RequestResponseCode.RRCODE_POSITION] = requestResponseCode.codeValue;
|
||||
// bits 16-31 are reserved for future use
|
||||
//TODO size
|
||||
int size = ;
|
||||
datagram = setPayloadSize(size, datagram);
|
||||
//TODO content
|
||||
//TODO Write content
|
||||
}
|
||||
}
|
||||
|
@ -13,8 +13,8 @@ import exception.InternalError;
|
||||
public class FilePart extends Payload {
|
||||
private static final RequestResponseCode requestResponseCode = RequestResponseCode.LOAD_RESPONSE;
|
||||
private String filename;
|
||||
private int totalSize;
|
||||
private int offset;
|
||||
private long totalSize;
|
||||
private long offset;
|
||||
private byte[] partialContent;
|
||||
|
||||
/** Constructor (typically used by server) with informations about file part to send as parameters.
|
||||
@ -22,8 +22,15 @@ public class FilePart extends Payload {
|
||||
* @param totalSize total size of the file to send
|
||||
* @param offset where in the file begins the part we are sending
|
||||
* @param partialContent content of the file we send
|
||||
* @throws InternalError
|
||||
*/
|
||||
public FilePart(String filename, int totalSize, int offset, byte[] partialContent) {
|
||||
public FilePart(String filename, long totalSize, long offset, byte[] partialContent) throws InternalError {
|
||||
/* asserts to help debugging */
|
||||
assert totalSize >= 0 : "totalSize cannot be negative";
|
||||
assert offset >= 0 : "offset cannot be negative";
|
||||
if (totalSize < 0 || offset < 0) {
|
||||
throw new InternalError();
|
||||
}
|
||||
this.filename = filename;
|
||||
this.totalSize = totalSize;
|
||||
this.offset = offset;
|
||||
@ -36,14 +43,17 @@ public class FilePart extends Payload {
|
||||
* @throws InternalError
|
||||
*/
|
||||
public FilePart(byte[] datagram) throws ProtocolError, InternalError {
|
||||
//TODO
|
||||
/* assert to help debugging */
|
||||
assert RequestResponseCode.fromCode(datagram[RequestResponseCode.RRCODE_POSITION]) == RequestResponseCode.LOAD_RESPONSE : "FilePart subclass is incompatible with this datagram, request/response code must be checked before using this constructor";
|
||||
/* InternalErrorException */
|
||||
if (RequestResponseCode.fromCode(datagram[RequestResponseCode.RRCODE_POSITION]) != RequestResponseCode.LOAD_RESPONSE) {
|
||||
throw new InternalError();
|
||||
}
|
||||
int size = getPayloadSize(datagram);
|
||||
setOffset(datagram); // this can throw ProtocolError
|
||||
setTotalFileSize(datagram); // this can throw ProtocolError
|
||||
int size = getPayloadSize(datagram); // this can throw ProtocolError
|
||||
int partialContentStart = setFilename(datagram, size) + 1; // this can throw ProtocolError
|
||||
setPartialContent(datagram, partialContentStart, size);
|
||||
}
|
||||
|
||||
/** Returns a byte[] containing datagram with padding.
|
||||
@ -52,15 +62,39 @@ public class FilePart extends Payload {
|
||||
* @return datagram with padding
|
||||
*/
|
||||
public byte[] toDatagram() {
|
||||
byte[] datagram; // java initialize all to zero
|
||||
//TODO : calculate payload size
|
||||
int size = ;
|
||||
byte[] datagram = new byte[size]; // java initialize all to zero
|
||||
// size is keep blank (ProtocolP2PDatagram will handle it)
|
||||
// set request/response code
|
||||
datagram[RequestResponseCode.RRCODE_POSITION] = requestResponseCode.codeValue;
|
||||
// bits 16-31 are reserved for future use
|
||||
//TODO size
|
||||
int size = ;
|
||||
datagram = setPayloadSize(size, datagram);
|
||||
//TODO content
|
||||
//TODO : write offset to datagram
|
||||
//TODO : write totalFileSize to datagram
|
||||
//TODO : write filename\n to datagram
|
||||
//TODO : write partialContent to datagram
|
||||
}
|
||||
|
||||
private setOffset(byte[] datagram) throws ProtocolError {
|
||||
//TODO: copy from 8 to 15 into long and write into offset.
|
||||
// throw protocolerror if offset is < 0
|
||||
}
|
||||
private setTotalFileSize(byte[] datagram) throw ProtocolError {
|
||||
// TODO: convert from byte 16 to 23 (included)
|
||||
// into long and write into totalFileSize
|
||||
// throw protocolerror if offset is < 0
|
||||
}
|
||||
private int setFilename(byte[] datagram, size) throws ProtocolError {
|
||||
// TODO: copy datagram from byte 24 to the first \n (excluded)
|
||||
// into filename unless we excess size
|
||||
// (in this case the wrong size has been
|
||||
// set by the emitter, it is a protocolerror)
|
||||
// return position of the \n
|
||||
|
||||
}
|
||||
private setPartialContent(byte[] datagram, int start, size) {
|
||||
// TODO: copy datagram from start to size into partialContent
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -69,10 +69,16 @@ public class Payload {
|
||||
* @param size integer representing payload size
|
||||
* @param datagram datagram to be completed
|
||||
* @return datagram with payload’s size set
|
||||
* @throws InternalError
|
||||
*/
|
||||
protected static byte[] setPayloadSize(int size, byte[] datagram) {
|
||||
protected static byte[] setPayloadSize(int size, byte[] datagram) throws InternalError {
|
||||
/* assert to help debugging */
|
||||
assert size >= 0: "Payload size cannont be negative";
|
||||
if (size < 0) {
|
||||
throw new InternalError();
|
||||
}
|
||||
for(int i=0;i<4;i++) {
|
||||
datagram[Payload.PAYLOAD_SIZE_POSITON + i] = (byte) (size >> (8 * (3 - i)) & 0xFF);
|
||||
datagram[Payload.PAYLOAD_SIZE_POSITON + i] = (byte) ((size >> (8 * (3 - i))) & 0xFF);
|
||||
}
|
||||
}
|
||||
return datagram;
|
||||
@ -81,12 +87,16 @@ public class Payload {
|
||||
/** Get payload’s size from a datagram.
|
||||
* @param datagram the full datagram received
|
||||
* @return integer representing payload size
|
||||
* @throws ProtocolError
|
||||
*/
|
||||
protected static int getPayloadSize(byte[] datagram) {
|
||||
protected static int getPayloadSize(byte[] datagram) throws ProtocolError {
|
||||
int size = 0;
|
||||
for(int i=0;i<4;i++) {
|
||||
size |= ((int)datagram[PAYLOAD_SIZE_POSITON + i]) << (8* i);
|
||||
}
|
||||
if (size < 0) {
|
||||
throw new ProtocolError();
|
||||
}
|
||||
return size;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user